დოკუმენტცია API

დოკუმენტცია API

  1. ონლაინ-მაღაზიის ანგარიშის პარამეტრი
  2. საგადახდო ფორმის ფორმირება
  3. საგადახდო ფორმის დაცვა
  4. ხელმისაწვდომი გადახდის მეთოდების არჩევა
  5. გადახდის შედეგის შესახებ მიღებული შეტყობინების დამუშავება
  6. ანგარიშების პარამეტრები
  7. გადახდების ბმულების გენერაცია

ნაბიჯი 1. ონლაინ-მაღაზიის ანგარიშის პარამეტრი

“გაერთიანებული საფულის” სერვისში ონლაინ-მაღაზიის ანგარიშის რეგისტრაციის შემდეგ, აუცილებელია ნებადართული იყოს გადახდების მიღება და მითითებული იქნებს ინფორმაცია მაღაზიის შესახებ, რომელიც კლიენტისთვის გამოჩნდება გადახდის განხორციელების დროს. ამის გაკეთება შეიძლება პირად კაბინეტში განყოფილება “მაღაზია”, ჩანართი “მაღაზიის შესახებ”:

Settings

ნაბიჯი 2. საგადახდო ფორმის ფორმირება

მას შემდეგ რაც მყიდველი აირჩევს ონლაინ-მაღაზიის საიტზე პროდუქტს და დააფორმირებს შეკვეთების კალათს, ონლაინ-მაღაზიას გადაყავს ის შეკვეთის საფასურის გადახდის გვერდზე. გადახდების გვერდი უნდა შეიცავდეს საგადახდო ფორმას, შეკვეთის პარამეტრებით.

საგადახდო ფორმა მოიცავს ონლაინ-მაღაზიის იდენთიფიკატორს (საფულის ნომერს), თანხას და შეკვეთის ვალუტას, ასევე ბმულებს ონლაინ-მაღაზიის გვერდზე, რომლებზეც გადავა მყიდველი წარმატებული ან წარუმატებელი გადახდის შემდეგ, მაგალითად:

  

საგადახდო ფორმა შესაძლოა შეიცავდეს დამატებით პარამეტრებს, რომლებიც ურთიერთქმედებს ხელმისაწვდომ გადახდის მეთდებზე, შეკვეთის მოქმედების ვადაზე, სავაჭრო ინტერფეისის ენაზე და ა.შ. საგადახდო ფორმის პარამეტრების სრული სია მოცემულია ქვემოთ:

პარამეტრის სახელიაღწერა
WMI_MERCHANT_IDონლაინ-მაღაზიის იდენთიფიკატორი (საფულის ნომერი), რომელიც მინიჭებულია რეგისტრაციის დროს.
WMI_PAYMENT_AMOUNTშეკვეთის თანხა – რიცხვი რომელიც დამრგვალებულია და “მძიმის” შემდეგ მოიცავს მაქსიმუმ 2 ციფრს, როგორც გამყოფი გამოყენებულია “წერტილი”. “მძიმის” შემდეგ 2 ციფრის არსებობა აუცილებელია.
WMI_CURRENCY_IDვალუტის იდენთიფიკატორი (ISO 4217):

  • 643 — რუსული რუბლი
  • 710 — სამხრეთ აფრიკული რანდი
  • 840 — ამერიკული დოლარი
  • 978 — ევრო
  • 980 — უკრაინული გრივნა
  • 398 — ყაზახური ტენგე
  • 974 — ბელორუსულ რუბლი
  • 972 — ტაჯიკური სომონი
  • 985 — პოლონური ზლოტი

WMI_PAYMENT_NOშეკვეთის იდენთიფიკატორი ონლაინ-მაღაზიის საანგარიშო სისტემაში. აღნიშნული პარამატრის მნიშვნელობა უნდა იყოს უნიკალური ყველა შეკვეთისთვის
WMI_DESCRIPTIONშეკვეთის აღწერა (საქონლის ჩამონათვალი და სხვა) — ნაჩვენებია შეკვეთის გადახდის გვერდზე, ასევე მყიდველის გადახდების ისტორიაში.
WMI_SUCCESS_URL
WMI_FAIL_URL
ონლაინ-მაღაზიის გვერდის მისამართები, რომლებზეც გადავა მყიდველი წარმატებული ან წარუმატებელი გადახდის შემდეგ.
WMI_EXPIRED_DATEგადახდის ამოწურვის ვადა. თარიღი ნაჩვენებია დასავლეთ ევროპის დროის სარტყლის შესაბამისად (UTC+0) და უნდა იყოს მიმდინარე დროზე მეტი (ISO 8601), მაგალითად: 2012-10-29Т 11:39:26.

მიაქციეთ ყურადღება: ანგარიშის გამოტანის ვადა ვერ იქნება 30 დღეზე მეტი, მისი გამოტანის დღიდან!
WMI_PTENABLED
WMI_PTDISABLED
ამ პარამეტრების დახმარებით შესაძლებელია იხელმძღვანელოთ ხელმისაწვდომი გადახდის მეთოდებით. უფრო დაწვრილებით იხილეთ განყოფილებაში «ხელმისაწვდომი გადახდის მეთოდის არჩევა».
WMI_RECIPIENT_LOGINგადამხდელის სტანდარტული ავტორიზაცია. ამ პარამეტრის მნიშვნელობა ავტომატურად გამოჩნდება ავტორიზაციის დროს. შესაძლო ფორმატები: ელ. ფოსტა, ტელეფონის ნომერი საერთაშორისო ფორმატში.
WMI_CUSTOMER_PHONEგადამხდელის მობილურის ნომერი საერთაშორისო ფორმატში. მაგალითად, +71234567890. აღნიშნულ ველში შეყვანილი ინფორმაცია გამოყენებული იქნება შემდეგი მიზნებისთვის:

  • ავტომატურად გამოჩნდება გარკვეული გადახდის მეთოდის ფორმებში;
  • გამოიყენება გადამხდელი ქვეყნის განსაზღვრისთვის;
  • გამოიყენება მომხმარებლის ანგარიშების მოძიებისთვის საბანკო და ელექტრონული ფულის სისტემებში.
WMI_CUSTOMER_FIRSTNAME
WMI_CUSTOMER_LASTNAME
WMI_CUSTOMER_EMAIL
სახელი, გვარი და გადამხდელი ელ.ფოსტა. ამ პარამეტრების მნიშვნელობა ავტომატურად იქნება გადახდის მეთოდების ფორმაში.
WMI_CULTURE_IDინტერფეისის ენა ავტომატურად განისაზღვრება, მაგრამ შესაძლებელი მითითება:

  • ru-RU — რუსული;
  • en-US — ინგლისური.
WMI_AUTO_LOCATIONმომხმარებელს საშუალებას აძლევს ნახოს თავის ქვეყანაში არსებული გადახდის მეთოდები.

  • 0 — ასახავს მეთოდებს, მომხმარებლის ქვეყანასთან მიბმის გარეშე;
  • 1 — მომხმარებლის ქვეყანა და მეთოდების ასახვა განისაზღვრება IP-ის მიხედვით.
WMI_SIGNATURE«საგადახდო ფორმის დაცვა» ფორმირდება ონლაინ-მაღაზიის “საიდუმლო გასაღების” გამოყენების შესაბამისად. ამ პარამეტრის შემოწმების აუცილებლობა მითითებულია ონლაინ-მაღაზიის პარამეტრებში.
WMI_AUTO_ADJUST_AMOUNTიძლევა ინვოისის გადახდის საშუალებას მაშინაც კი, როდესაც გადახდის თანხა განსხვავდება ინვოისის თანხისგან.
ამ დროს ინვოისის თანხა უტოლდება ფაქტობრივ გადახდას.

  • 0 – დაელოდეთ ინვოისის სრული თანხის ჩარიცხვას;
  • 1 – ინვოისი გადახდილად ჩათვალეთ ნებისმიერი თანხის ჩარიცხვისას.

პარამეტრის გამოყენება არ შეიძლება WMI_ORDER_ITEMS-თან ერთად.

საგადახდო ფორმის ყველა დანარჩენი ველი , რომელიც არ შეიცავს პრეფიქსს – WMI, იქნება შენახული და გადაცემული ონლაინ-მაღაზიაში.

იმისათვის, რომ ავარიდოთ თავი პრობლემებს ეროვნული სიმბოლოების გამოყენებისას, WMI_DESCRIPTION პარამეტრების გადაცემის დროს, არსებობს პარამეტრის კოდირების შესაძლებლობა, ველით BASE64 (UTF-8).

გადაცემის ფორმატი: BASE64:<კოდირება BASE64 - ში და მნიშვნელობა>

მაგალითი: BASE64:0J7Qv9C70LDRgtCwINC30LDQutCw0LfQsA==

ნაბიჯი 3. საგადახდო ფორმის დაცვა

ონლაინ-მაღაზიის სეკვეთის პარამეტრი გაერთიანებულ საფულეს გადაეცემა მყიდველის ვებ-ბრაუზერით, ამიტომ, რომ თავიდან ავიცილოთ მყიდველის მხარეს პარამეტრების ცვლილება, ონლაინ-მაღაზიისთვის აუცილებელია საგადახდო ფორმის პარამეტრის ხელწერა.

ამისათვის აუცილებელია ონლაინ-მაღაზია დაემატოს საგადახდო ფორმის პარამეტრებში WMI_SIGNATURE, მოხდეს არჩეული მეთოდის გამოყენების , ЭЦП-ს და ონლაინ-მაღაზიის “საიდუმლო გასაღების” ფორმირება.

ЭЦП-ს და ონლაინ-მაღაზიის “საიდუმლო გასაღების” ფორმირების მეთოდი შესაძლებელია დაკონფიგურირდეს გაერთიანებული საფულის პირად კაბინეტში “მაღაზიის” განყოფილებაში ჩანართში “ინტერგარცია”, ნიმუში იხილეთ ნახატზე:

Settings

გთხოვთ, გაითვალისწინოთ! საიდუმლო გასაღების გენერაციის შემდეგ, აუცილებლად დააჭირეთ ღილაკს “შენახვა” გვერდის ბოლოს. ეს აუცილებელი პირობაა ელექტრონული ციფრული ხელმოწერის გამართულად მუშაობისთვის.

პარამეტრი WMI_SIGNATURE ფორმირდება სხვა დანარჩენი პარამეტრების ფორმის გაერთიანებით, მოცემულია მათი სახელების ანბანური თანმიმდევრობით, ბოლოში დამატებულია ონლაინ-მაღაზიის “საიდუმლო გასაღები”. თუ ფორმა მოიცავს რამდენიმე ველს ერთნაირი სახელწოდებით, ესეთი სახელწოდებები სორტირდება ანბანური თანმიმდევრობით მათი მნიშვნელობის შესაბამისად.

პარამეტრის გაერთიანების და “საიდუმლო გასაღების” მნიშვნელობის მიღების შემდეგ, ისინი Windows-1251 კოდირებაში ხეშირდება ЭЦП-ს ფორმირების არჩეული მეთოდის შესაბამისად და მისი ბაიტების კოდირდება Base64-ში.

      WMI_SIGNATURE = Base64(Byte(MD5(Windows1251(Sort(Params) + SecretKey))));

მაგალითი (РНР):

 $val) 
    {
        if (is_array($val))
        {
            usort($val, "strcasecmp");
            $fields[$name] = $val;
        }
    }

    // შეტყობინების ფორმირება, ფორმის ველების გაერთიანების გზით
    // ველების სახელების მიხედვით სორტირება ზრდადობის მიხედვით
    uksort($fields, "strcasecmp");
    $fieldValues = "";

    foreach($fields as $value) 
    {
        if (is_array($value))
            foreach($value as $v)
            {
                // კონვერტაცია მიმდინარე კოდირებიდან (UTF-8)
                // საჭიროა მხოლოდ იმ შემთხვევაში თუ მაღაზიის კოდირება არის განსხვავებული windows-1251 ისგან
                $v = iconv("utf-8", "windows-1251", $v);
                $fieldValues .= $v;
            }
        else
        {
            // კონვერტაცია მიმდინარე კოდირებიდან (UTF-8)
            // საჭიროა მხოლოდ იმ შემთხვევაში თუ მაღაზიის კოდირება არის განსხვავებული windows-1251 ისგან
            $value = iconv("utf-8", "windows-1251", $value);
            $fieldValues .= $value;
        }
    }

    // WMI_SIGNATURE ს ფორმირება 
    // ზემოთ გამოყვანილი შეტყობინების დაშიფვერით, 
    // Md5 ში ხოლო შემდეგ მისი წარმოდგენა Base64 ში

    $signature = base64_encode(pack("H*", md5($fieldValues . $key)));

    // WMI_SIGNATURE ის დამატება ფორმის ელემენტების სიაში

    $fields["WMI_SIGNATURE"] = $signature;

    // ფორმის HTML ში წარმოდგენა

    print "
"; foreach($fields as $key => $val) { if(is_array($val)) foreach($val as $value) { print "$key: "; } else print "$key: "; } print "
"; ?>

მაგალითი (Perl):

  #!/usr/bin/perl

            use Digest::MD5 qw(md5_base64);
            use MIME::Base64;

            # ინტერნეტ-მაღაზიის საიდუმლო გასაღები

            $key = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";

            my %fields; # ფორმის ელემენტების დამატება მასივში

            $fields{"WMI_MERCHANT_ID"}    = "123456789012";
            $fields{"WMI_PAYMENT_AMOUNT"} = "100.00";
            $fields{"WMI_CURRENCY_ID"}    = "840";
            $fields{"WMI_PAYMENT_NO"}     = "12345-001";
            $fields{"WMI_DESCRIPTION"}    =  encode_base64("Payment for order #12345-001 in MYSHOP.com", "");
            $fields{"WMI_EXPIRED_DATE"}   = "2019-12-31T23:59:59";
            $fields{"WMI_SUCCESS_URL"}    = "https://myshop.com/w1/success.php";
            $fields{"WMI_FAIL_URL"}       = "https://myshop.com/w1/fail.php";
            $fields{"MyShopParam1"}       = "Value1"; # ინტერნეტ-მაღაზიის დამატებითი პარამეტრები
            $fields{"MyShopParam2"}       = "Value2"; # ასევე მონაწილეობენ
            $fields{"MyShopParam3"}       = "Value3"; # ხელმოწერის ფორმირებაში!

            # შეტყობინების ფორმირება, ფორმის ველების გაერთიანების გზით,
            # ველების სახელების მიხედვით სორტირება ზრდადობის მიხედვით.

            my $fieldValues = "";

            for my $key (sort { lc($a) cmp lc($b) } keys %fields)
            {
              $fieldValues .= $fields{$key};
            }

            # WMI_SIGNATURE ს ფორმირება 
            # ზემოთ გამოყვანილი შეტყობინების დაშიფვერით 
            # Md5 ში ხოლო შემდეგ მისი წარმოდგენა Base64 ში

            my $signature = md5_base64($fieldValues, $key) . '==';

            # WMI_SIGNATURE ის დამატება ფორმის ელემენტების სიაში

            $fields{"WMI_SIGNATURE"} = $signature;

            # ფორმის HTML ში წარმოდგენა

            print "Content-type: text/html; charset=UTF-8nn";

            print "
"; for my $key (sort { lc($a) cmp lc($b) } keys %fields) { print "$key: "; } print "
n";

მაგალითი (C#):

  using System;
            using System.Web;
            using System.Text;
            using System.Security.Cryptography;
            using System.Collections.Generic;

            public class PaymentForm : IHttpHandler 
            {
              public void ProcessRequest(HttpContext context) 
              {
                // ინტერნეტ-მაღაზიის საიდუმლო გასაღები

                string merchantKey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"

                // ფორმის ელემენტების დამატება მასივში, სორტირებული ველების სახელების მიხედვით

                SortedDictionary formField 
                  = new SortedDictionary();

                formField.Add("WMI_MERCHANT_ID",    "123456789012");
                formField.Add("WMI_PAYMENT_AMOUNT", "100.00");
                formField.Add("WMI_CURRENCY_ID",    "643");
                formField.Add("WMI_PAYMENT_NO",     "12345-001");
                formField.Add("WMI_DESCRIPTION",    "BASE64:" + Convert.ToBase64String(Encoding.UTF8.GetBytes("Payment for order #12345-001 in MYSHOP.com")));
                formField.Add("WMI_EXPIRED_DATE",   "2019-12-31T23:59:59");
                formField.Add("WMI_SUCCESS_URL",    "https://myshop.com/w1/success.php");
                formField.Add("WMI_FAIL_URL",       "https://myshop.com/w1/fail.php");
                formField.Add("MyShopParam1", "Value1"); // ინტერნეტ-მაღაზიის დამატებითი პარამეტრები
                formField.Add("MyShopParam2", "Value2"); // ასევე მონაწილეობენ
                formField.Add("MyShopParam3", "Value3"); // ხელმოწერის ფორმირებაში

                // შეტყობინების ფორმირება, ფორმის ველების გაერთიანების გზით
                // ველების სახელების მიხედვით სორტირება ზრდადობის მიხედვით
                // დამატებული ინტერნეტ მაღაზიის საიდუმლოგასაღებით ბოლოში

                StringBuilder signatureData = new StringBuilder();

                foreach (string key in formField.Keys)
                {
                    signatureData.Append(formField[key]);
                }

                // WMI_SIGNATURE ს ფორმირება
                // ზემოთ გამოყვანილი შეტყობინების დაშიფვერით
                // Md5 ში ხოლო შემდეგ მისი წარმოდგენა Base64 ში

                string message = signatureData.ToString() + merchantKey;
                Byte[] bytes = Encoding.GetEncoding(1251).GetBytes(message);
                Byte[] hash = new MD5CryptoServiceProvider().ComputeHash(bytes);
                string signature = Convert.ToBase64String(hash);

                // WMI_SIGNATURE ის დამატება ფორმის ელემენტების სიაში

                formField.Add("WMI_SIGNATURE", signature);

                // გადახდის ფორმის ფორმირება

                StringBuilder output = new StringBuilder();

                output.AppendLine("
"); foreach (string key in formField.Keys) { output.AppendLine(String.Format("{0}: ", key, formField[key])); } output.AppendLine("
"); context.Response.ContentType = "text/html; charset=UTF-8"; context.Response.Write(output.ToString()); } }

მაგალითი Python:

  from collections import defaultdict
            import binascii
            from hashlib import md5

            def get_signature(params, secret_key):
                """
                Base64(Byte(MD5(Windows1251(Sort(Params) + SecretKey))))
                params - list of tuples [('WMI_CURRENCY_ID', 643), ('WMI_PAYMENT_AMOUNT', 10)]
                """
                icase_key = lambda s: unicode(s).lower()

                lists_by_keys = defaultdict(list)
                for key, value in params:
                    lists_by_keys[key].append(value)

                str_buff = ''
                for key in sorted(lists_by_keys, key=icase_key):
                    for value in sorted(lists_by_keys[key], key=icase_key):
                        str_buff += unicode(value).encode('1251')
                str_buff += secret_key
                md5_string = md5(str_buff).digest()
                return binascii.b2a_base64(md5_string)[:-1]

Example (NodeJS):


  var iconv = require('iconv-lite');
  var crypto = require('crypto');

  var key = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';

  var fields = {
    WMI_MERCHANT_ID: '123456789012',
    WMI_PAYMENT_AMOUNT: '100.00',
    WMI_CURRENCY_ID: '643',
    WMI_PAYMENT_NO: '12345-001',
    WMI_DESCRIPTION: 'BASE64:' + new Buffer('Payment for order #12345-001 in MYSHOP.com').toString('base64'),
    WMI_EXPIRED_DATE: '2019-12-31T23:59:59',
    WMI_SUCCESS_URL: 'https://myshop.com/w1/success.php',
    WMI_FAIL_URL: 'https://myshop.com/w1/fail.php',

    MyShopParam1: 'Value1',
    MyShopParam2: 'Value2',
    MyShopParam3: 'Value3'
  };

  var comparator = function(a, b){
    var a = a.toLowerCase();
    var b = b.toLowerCase();
    return a > b ? 1 : a < b ? -1 : 0;
  };

  var createInput = function(name, value){
    return '';
  };

  var inputs = '';
  var values = '';

  Object.keys(fields).sort(comparator).forEach(function(name){
    var value = fields[name];
    if (Array.isArray(value)) {
      values += value.sort(comparator).join('');
      inputs += value.map(function(val){ return createInput(name, val); }).join('');
    }
    else {
      values += value;
      inputs += createInput(name, value);
    }
  });


  inputs += createInput('WMI_SIGNATURE', crypto.createHash('md5').update(iconv.encode(values + key, 'win1251')).digest('base64'));

  console.log('
' + inputs + '
');

დარწმუნდით, რომ ყველა პარამეტრი, რომელიც მონაწილეობს გადახდების ფორმაში, WMI_SIGNATURE გარდა, მონაწილეობს ხელწერის ფორმირებაში. მაგალითად, თუ ღილაკს “submit” აქვს ატრიბუტი “name”, საგადახდო ფორმა ასევე უნდა შეიცავდეს ამ ჭილაკის ატრიბუტს “value”.

დარწმუნდით, რომ თქვენი ფუნქცია MD5 აბრუნებს ბაიტის მასივს და არა HEX-ს. თუ ყველაფერი სწორად არის გაკეთებული, WMI_SIGNATURE პარამეტრის სიგრძე სედგება ზუსტად 24 სიმბოლოსგან.

თუ WMI_DESCRIPTION პარამეტრი შეიცავს კირილიცას, დარწმუნდით, რომ ფორმა იგზავნება სერვერზე UTF-8 კოდირებაზე. ამისათვის ფორმას უნდა ქონდეს ატრიბუტი accept-charset=»UTF-8″.

ნაბიჯი 4. ხელმისაწვდომი გადახდის მეთოდების არჩევა

გაერთიანებულ საფულეში საგადახდო ფორმის გადაცემის შემდეგ მყიდველს შეუძლია აირჩიოს მისთვის მოსახერხებელი გადახდის მეთოდი. ონლაინ-მაღაზიას შეუძლია შეზღუდოს ხელმისაწვდომი გადახდის მეთოდების სია ან მკაფიოდ განსაზღვროდ ერთ-ერთი მათგანი.

გადახდის ხელმისაწვდომი საშუალებების კონტროლისთვის გამოიყენება საგადახდო ფორმის WMI_PTENABLED და WMI_PTDISABLED პარამეტრები. ამათგან თითოეულს შეუძლია მონაწილეობა მიიღოს საგადახდო ფორმაში რამდენიმეჯერ და უნდა შეიცავდეს ერთ-ერთ გადახდის მეთოდს.

მაგალითად, ეს შეკვეთა შესაძლებელია გადაიხადოთ მხოლოდ CreditCard-თ:

  

შემდეგი მაგალითი აჩვენებს, როგორ უნდა აიკრძალოს შეკვეთის გადახდა აღნიშნული მეთოდებით:

  

Payment systems

Payment methodID
Wallet OneWalletOne
W1 RUBWalletOneRUB
W1 UAHWalletOneUAH
W1 USDWalletOneUSD
W1 EURWalletOneEUR
W1 ZARWalletOneZAR
W1 BYRWalletOneBYR
W1 GELWalletOneGEL
W1 KZTWalletOneKZT
W1 PLNWalletOnePLN
W1 TJSWalletOneTJS
Viber Wallet
Viber WalletViberRUB
Yandex.Money
Yandex.MoneyYandexMoneyRUB
QIWI Wallet
QIWI WalletQiwiWalletRUB
B-pay
B-PayBPayMDL
CashU
CashUCashUUSD
EasyPay
EasyPayEasyPayBYR
LiqPay MoneyLiqPayMoney
LiqPayMoneyUAHLiqPayMoneyUAH
Google WalletGoogleWalletUSD
OKPAY
OKPAYOkpayUSD
OKPAYOkpayRUB
Kviku microloanKvikuRUB

Mobile Commerce

Payment methodID
Beeline (Russia)BeelineRUB
MTS (Russia)MtsRUB
Megafon (Russia)MegafonRUB
Tele2 (Russia)Tele2RUB
Yota(Russia)YotaRUB
Mobile money from Kyivstar (Ukraine)KievStarUAH

Cash

Payment methodID
Cash terminalsCashTerminal
Cash terminals in Georgia BelarusCashTerminalBYR
Cash terminals in GeorgiaCashTerminalGEL
Cash terminals in KazakhstanCashTerminalKZT
Cash terminals in MoldovaCashTerminalMDL
Cash terminals in RussiaCashTerminalRUB
Cash terminals in UkraineCashTerminalUAH
Cash terminals in TajikistanCashTerminalTJS
Cash terminals in South AfricaCashTerminalZAR
ATMATM
Receiving cash (UAH)AtmUAH
Automated Teller MachineAtmZAR
Mobile RetailsMobileRetails
EurosetEurosetRUB
SvyaznoySvyaznoyRUB
CifrogradCifrogradRUB
Cellular WorldCellularWorldRUB
Bank OfficesBankOffice
Sberbank (Russia) officesSberbankRUB
Sberbank (Kazakhstan) officesSberbankKZT
Privatbank (Ukraine) officesPrivatbankUAH
Pravex Bank (Ukraine) officesPravexBankUAH
UkrsibBank (Ukraine) officesUkrsibBankUAH
Kazkommertsbank (Kazakhstan) officesKazkomBankKZT
Liberty Bank (Georgia) officesLibertyBankGEL
Bank Branch DepositBranchZAR
Russian PostRussianPostRUB
Money TransferMoneyTransfer
LIDER money transfersLiderRUB
Unistream money transfers (RUB)UnistreamRUB
Unistream money transfers (USD)UnistreamUSD

Cashless

Payment methodID
Internet-bankingOnlineBank
Alfaclick (Alfabank)AlfaclickRUB
TinkoffTinkoffRUB
Privat24Privat24UAH
PSB-Retail («Promsvyazbank»)PsbRetailRUB
Sberbank OnlineSberOnlineRUB
Faktura.ruFakturaruRUB
Internet-banking of «Russian Standard»RsbRUB
ERIP (Belarus)EripBYR
Electronic funds transferEftZAR
Bank transferBankTransfer
Bank/Wire transfer in Chinese YuanBankTransferCNY
Bank/Wire transfer in euroBankTransferEUR
Bank/Wire transfer in Georgian LariBankTransferGEL
Bank/Wire transfer in tengeBankTransferKZT
Bank/Wire transferBankTransferMDL
Bank/Wire transfer in Polish zlotyBankTransferPLN
Bank/Wire transfer in roublesBankTransferRUB
Bank/Wire transfer in hryvniaBankTransferUAH
Bank/Wire transfer in dollarsBankTransferUSD
Bank cards
Smartivi cardsSmartiviGEL
VISAVISA
VISA BYRCreditCardBYR
VISA RUBCreditCardRUB
VISA UAHCreditCardUAH
VISA USDCreditCardUSD
VISA EURCreditCardEUR
MasterCardMasterCard
MasterCard BYRCreditCardBYR
MasterCard RUBCreditCardRUB
MasterCard UAHCreditCardUAH
MasterCard USDCreditCardUSD
MasterCard EURCreditCardEUR
MaestroMaestro
Maestro RUBCreditCardRUB
MIR
MIRCreditCardRUB

ნაბიჯი 5. გადახდის შედეგის შესახებ მიღებული შეტყობინების დამუშავება

მას შემდეგ რაც მყიდველი შეასრულებს შეკვეთის საფასურის გადახდას, გაერთიანებული საფულე შეასრულებს POST-ძებნას “შეტყობინებების მისამართზე”, რომელიც მითითებულია ონლაინ-მაღაზიის პარამეტრებში:

პარამეტრის სახელიაღწერა
WMI_MERCHANT_IDონლაინ – მაღაზიის იდენთიფიკატორი (საფულის ნომერი).
WMI_PAYMENT_AMOUNTშეკვეთის თანხა
WMI_COMMISSION_AMOUNTСумма удержанной комиссии
WMI_CURRENCY_IDშეკვეთის ვალუტის იდენთიფიკატორი (ISO 4217).
WMI_TO_USER_IDგადამხდელის საფულის თორმეტნიშნა ნომერი.
WMI_PAYMENT_NOონლაინ-მაღაზიის სიტემაში შეკვეთის იდენთიფიკატორი.
WMI_ORDER_IDგაერთიანებული საფულის სისტემაში შეკვეთის იდენთიფიკატორი.
WMI_DESCRIPTIONშეკვეთის აღწერა.
WMI_SUCCESS_URL
WMI_FAIL_URL
ონლაინ-მაღაზიის გვერდის მისამართები, რომლებზეც გადავა მყიდველი წარმატებული ან წარუმატებელი გადახდის შემდეგ.
WMI_EXPIRED_DATEგადახდის ამოწურვის ვადა ნაჩვენებია დასავლეთ ევროპის დროის სარტყლის შესაბამისად (UTC+0).
WMI_CREATE_DATE
WMI_UPDATE_DATE
შეკვეთის შექმნის და შეცვლის თარიღი დასავლეთ ევროპის დროის სარტყლის შესაბამისად (UTC+0).
WMI_ORDER_STATEშეკვეთილი გადახდის მდგომარეობა:

  •  Accepted  — შეკვეთა გადახდილია;
WMI_SIGNATUREხელმოწერა გადახდის შეტყობინების შესახებ, ფორმირებულია ონლაინ-მაღაზიის “საიდუმლო გასაღების” გამოყენებით. საგადახდო ფორმის სხვა დანარჩენი პარამეტრები არ შეიცავს პრეფიქსს.
WMI_TEST_MODE_INVOICEParameter transfered as part of the notifications received when paying by test methods. The default value is 1.
WMI_TEST_MODE_INVOICEტესტის მეთოდების გადახდაზე მიღებული შეტყობინებების ნაწილში გადაცემული პარამეტრი. ნაგულისხმევი მნიშვნელობა არის 1.
საგადახდო ფორმის სხვა დანარჩენი პარამეტრები არ შეიცავს პრეფიქსს «WMI_».

ონლაინ-მაღაზიამ უნდა დაამუშაოს შეტყობინებების მოთხოვნა გადახდის შედეგის შესახებ და დააბრუნოს პასუხი. ონლაინ-მაღაზიისთვის შეტყობინებების მოთხოვნა ისევე მიმდინარეობს, როგორც თითქოს მან მიიღო POST-მოთხოვნა ჩვეულებრივი HTML ფორმით, მხოლოდ გვერდის ადგილას მან უნდა დააბრუნოს შემდეგი:

WMI_RESULT=OK

ან

WMI_RESULT=RETRY&WMI_DESCRIPTION=სერვერი დროებით მიუწვდომელია

პარამეტრი WMI_RESULT ონლაინ-მაღაზიის საპასუხოდ უნდა შეიცავდეს მოთხოვნის დამუსავების შედეგს და შეეძლოს შემდეგი მნიშვნელობების მირება:

  •  OK   — ყველაფერი კარგადაა, ონლაინ-მაღაზია დაამუშავა მოთხოვნა და მიიღო შეკვეთა.
  •  RETRY   — ონლაინ-მაღაზიას არ შეუძლია ამ მომენტისთვის მოთხოვნის დამუშავება. გაერთიანებული საფულე მოთხოვნას მოგვიანებით გაიმეორებს.

პარამეტრი WMI_DESCRIPTION ონლაინ-მაღაზიის საპასუხოდ შესაძლოა სეიცავდეს კომენტარებს, რომელიც შეინახება გაერთიანებული საფულის ლოგებში. რეკომენდირებულია მათი დაბრუნება შეცდომის შემთხვევაში. აღნიშნული პარამეტრის მნიშვნელობა უნდა იყოს UrlEncode კოდში.

#!/usr/bin/php
          
სხვადასხვა მიზეზის გამო ერთიანმა საფულემ შესაძლოა არ მიიღოს პასუხი ონლაი-მაღაზიისგან და გააგზავნოს განმეორებითი მოთხოვნა, ონლაინ-მაღაზიამ უნდა უპასუხო განმეორებით მოთხოვნას ისევე, როგორც პირველ შემთხვევაში.

მონაცემების წყაროს შემოწმება

იმისათვის, რომ დარწმუნდეთ მოთხოვნა მოვიდა გაერთიანებული საფულიდან და მოსული ინფორმაცია სანდოა, აუცილებელია ონლაინ-მაღაზიამ გამოთვალოს მოთხოვნის ციფრული ხელმოწერა თავისი ” საიდუმლო გასაღების” გამოყენებისთვის და შეადაროს ის WMI_SIGNATURE პარამეტრებს, რომელიც მიღებულია მოთხოვნაში.

ამის გაკეთება შეიძლება ალგორითმით, რომელიც აღწერილია განყოფილებაში «საგადახდო ფორმის დაცვა», ყველა მოთხოვნის პარამეტრების მნიშვნელობის გაერთიანებით (WMI_SIGNATURE-ს გარდა) ანბანში მათი სახელების თანმიმდევრობა ონლაინ-მაღაზიის “საიდუმლო გასაღებ”-თან ერთად და ამ მნიშვნელობის ხეშ-ანაბეჭდის გამოთვლით ЭЦП ფორმირების არჩეული მეთოდით.

მაგალითი (PHP):

#!/usr/bin/php
           $value)
          {
            if ($name !== "WMI_SIGNATURE") $params[$name] = $value;
          }

          // მასივის სორტირება ველების სახელებით ზრდადობის მიხედვით
          // და შეტყობინების ფორმირება ფორმის ელემენტების გაერთიანების გზით

          uksort($params, "strcasecmp"); $values = "";

          foreach($params as $name => $value)
          {
            // კონვერტაცია მიმდინარე კოდირებიდან (UTF-8)
            // საჭიროა მხოლოდ იმ შემთხვევაში თუ მაღაზიის კოდირება არის განსხვავებული windows-1251 ისგან
            $value = iconv("utf-8", "windows-1251", $value);
            $values .= $value;
          }

          // ხელმოწერის გენერირება და მისი შედარება WMI_SIGNATURE ს თან

          $signature = base64_encode(pack("H*", md5($values . $skey)));

          // გენერირებული ხელმოწერის შედარება W1  ის ხელმოწერასთან

          if ($signature == $_POST["WMI_SIGNATURE"])
          {
            if (strtoupper($_POST["WMI_ORDER_STATE"]) == "ACCEPTED")
            {
              // TODO: ინტერნეტ მაღაზიაში გადახდის მონიშვნა როგორც “გადახდილი”

              print_answer("Ok", "შეკვეთა #" . $_POST["WMI_PAYMENT_NO"] . "გადახდილია!");
            }
            else
            {
              // მოხდა გაურკვეველი შეცდომა, შეკვეთის გაურკვეველი სტატუსი

              print_answer("Retry", "არასწორი მდგომარეობა". $_POST["WMI_ORDER_STATE"]);
            }
          }
          else
          {
            // ხელმოწერა არ ემთხვევა შესაძლოა თქვენ შეცვალეთ კონფიგურაცია ინტერნეტ-მაღაზიის კაბინეტში

            print_answer("Retry", "არასწორი ხელმოწერა" . $_POST["WMI_SIGNATURE"]);
          }

          ?>

ნაბიჯი 6. ანგარიშების პარამეტრები

შეერთების განხორციელებისთვის უზრუნველყოფილია გადახდების რეესტრის გამგზავნი მექანიზმი.

გადახდების რეესტრის სიახლეების გამოწერა შეიძლება პირად კაბინეტში განყოფილებაში “მაღაზია”, ველში “ინტეგრაცია”, როგორც ნაჩვენებია ნახატზე:

Settings

ასევე შესაძლოა დროის ინტერვალის (ყოველდღიურად, ყოველკვირეულად ან ყოველთვიურად) და მათ ფორმატის ( არჩევა (xml ან csv).

რეესტრის ფორმატი:

პარამეტრის სახელიაღწერა
Id
ExternalIdშეკვეთის იდენთიფიკატორი ონლაინ-მაღაზიის საანგარიშო სისტემაში
Directionმიმართულება
UserIdგადამხდელის საფულის თორმეტნიშნა ნომერი
CurrencyIdშეკვეთის ვალუტის იდენთიფიკატორი (ISO 4217).
Amountშეკვეთის თანხა
Stateშეკვეთის გადახდის მდგომარეობა
PaymentDateგადახდის თარიღი
PaymentTypeIdგადახდის მეთოდი
Descriptionაღწერა
CommissionAmountსაკომისიო გამოკლებული თანხა
ApprovalCodeბანკის ავტორიზაციის კოდი( გადასახადები მხოლოდ საბანკო ბარათების მეშვეობით)
CardNumberდაფარული საბანკო ბარათის ნომერი

გადახდების რეესტრის მაგალითები:

იმ შემთხვევაში თუ კომფიგურაციაში გამორთულია ელექტრონული ხელმოწერა, წერილში მითითებული იქნება მეორე ფაილი იგივე სახელით და გაფართოვებული “key” მონაცემებით რომელშიც მოცემულია ელექტრონული ხელმოწერა.

ბმულის გენერირება გადახდისთვის

ბმულის გენერირება შეკვეთის გადახდისთვის შეიძლება საიტის სპეციალურ განყოფილებაში.