Sәnәdlәr (API)

Sәnәdlәr (API)

  1. İnternet mağazanın hesabının ayarlanması
  2. Ödәniş formasının formalaşması
  3. Ödәniş formasının qorunması
  4. Mövcud ödәmә üsullarının seçilmәsi
  5. Ödәnişin nәticәsi barәdә bildirişin işlәnmәsi
  6. Hesabatların ayarları
  7. Ödәmә üçün linkin generasiya

Mәrhәlә 1. İnternet mağazanın hesabının ayarlanması

Hesabın qeydiyyatından sonra ödәmә üçün müştәrilәrә tәqdim olunacaq mağaza haqqında mәlumat daxil olmalıdır. Bu edilә bilәr Şәxsi kabinetdә “Ayarlar” bölümündә “Mağaza haqqında” bәndindә:

Cüzdanın ayarları

Mәrhәlә 2. Ödәniş formasının formalaşması

Alıcı internet mağazanın saytında mәhsulları seçdikdәn vә alış-veriş sebeti formalaşdıqdan sonra, internet mağaza ona sifarişin ödәniş sәhifәsini göndәrir. Ödәniş sәhifәsindә sifarişin parametrlәri ilә ödәniş forması olmalıdır.

Ödәniş formasında internet mağazanın identifikatoru (cüzdan nömrәsi), mәblәğ vә sifarişin valyutası, hәmçinin internet mağazanın sәhifәsinә linklәr olmalıdır. Uğurlu vә ya uğursuz ödәnişlәrdәn sonra mәlumat alıcıya göndәrilәcәk, mәsәlәn:

  
Qeyd edәk!
Yeni ödәniş sәhifәlәri beta test mәrhәlәsindәdir. Köhnә versiyanı istifadә etmәk üçün bu ünvana müraciәt edin:https://www.walletone.com/checkout/default.aspx
  
              
              
              
              
              
              
              
            

Ödәniş formasında mövcud ödәniş variantlarına tәsir göstәrә bilәcәk әlavә imkanlar ola bilәr, sifarişin etibarlılıq müddәti, ticarәt interfeysinin dili, vә s. Ödәniş formalarının parametrlәrinin tam siyahısı aşağıda göstәrilib:

Parametrin adıTәsvir
WMI_MERCHANT_IDQeydiyyat zamanı İnternet mağazanın identifikatoru (cüzdanın nömrәsi).
WMI_PAYMENT_AMOUNTSifariş mәblәği – rәgәm “vergüldәn” sonra 2 rәgәmә kimi azaldılıb, ayrıc kimi “nöqtә” istifadә olunur. “vergüldәn” sonra 2 rәgәmin olması mәcburidi.
WMI_CURRENCY_IDValyuta identifikatoru (ISO 4217):

  • 643 – Rusiya rublu
  • 710 – Cәnubi Afrika randı
  • 840 – ABŞ dolları
  • 978 – Avro
  • 980 – Ukrayna qrivnası
  • 398 – Qazaxıstan tengәsi
  • 974 – Belarus rublu
  • 972 – TJS
  • 985 — Polşa zlotı

WMI_PAYMENT_NOUçot sistemindә internet mağazanın sifariş identifikatoru. Bu dәyәr hәr bir sifariş üçün unikal olmalıdır.
WMI_DESCRIPTIONSifarişin tәsviri (malların siyahısı, vә s.) – sifariş sәhifәsindә vә alıcının ödәniş tarixçәsindә göstәrilir. Maksimum uzunluğu 255 simvol.
WMI_SUCCESS_URL
WMI_FAIL_URL
Uğurlu vә ya uğursuz ödәnişlәrdәn sonra alıcıya göndәrilәcәk internet mağazanın sәhifәnin ünvanı (URL).
WMI_EXPIRED_DATEÖdәnişin istifadә müddәti. Tarix Qәrbi Avropa vaxt zonasında göstәrilәn (UTC + 0) vә cari (ISO 8601) daha çox olmalıdır, misal üçün: 2013-10-29T11:39:26
WMI_PTENABLED
WMI_PTDISABLED
Bu parametrlәrlә mövcud ödәniş üsullarına nәzarәt edә bilәrsiniz. Bu bölmәdә әtraflı «Mövcud ödәmә üsullarından seçim».
WMI_RECIPIENT_LOGINÖdәyicinin Logini dәyişmәz olacaq. Bu parametrin göstәricilәri login sahәsindә avtomatik olaraq avtorizasiya zamanı tәqdim olacaq. Mümkün formatlar: e-mail, beynәlxalq formatda telefon nömrәsi.
WMI_CUSTOMER_FIRSTNAME
WMI_CUSTOMER_LASTNAME
WMI_CUSTOMER_EMAIL
Adı, soyadı vә ödәyicinin e-mail-i. Bu parametrlәrin eıementlәri avtomatik olaraq müәyyәn ödәmә üsullarının formasında verilir.
WMI_CULTURE_IDİnterfeysin dili avtomatik tәyin edilir, lakin siz özunüz dili tәyin edә bilәrsiniz:

  • ru-RU — rus dilindә;
  • en-US — ingilis dilindә.
WMI_SIGNATUREÖdәniş formasının imzası, internet mağazanın “gizli açar”-nı istifadә edәrәk formalaşır . Bu parametrin yoxlanılmsı lazım olarsa internet mağaza ayarlarında tәyin edilir. Bu bölmәdә әtraflı «Ödәniş formasının qorunması».
WMI_AUTO_ADJUST_AMOUNTÖdәmә miqdarı faktura mәblәğindәn fәrqlәnsә belә bir fakturanı ödәmәyә imkan verir. Fakturanın mәblәği daha sonra faktiki ödәnişә bәrabәrdir.

  • 0 — fakturanın tam mәblәğini gözlәyin
  • 1 — hәr hansı bir mәblәğ alındıqda ödәnilәn fakturanı nәzәrdәn keçirin.

Parametr WMI_ORDER_ITEMS ilә birlikdә istifadә edilә bilmәz

«WMI_» prefiks olmadan bütün ödәniş sahәlәri saxlanılır vә internet mağazaya verilәcәk.
Hәr hansı bir parametrindә milli simvol stifadә edәrkәn problemlәrin qarşısını almaq üçün, WMI_DESCRIPTION parametrinin ötürüldüyü zaman parametri BASE64 (UTF-8) sәtri ilә kodlaşdırmaq mümkündür.

Ötürmә formatı: BASE64:< BASE64 kodlaşdırılmış dәyәr>

Mәsәlәn: BASE64:0J7Qv9C70LDRgtCwINC30LDQutCw0LfQsA==

Mәrhәlә 3. Ödәniş formasının qorunması

İnternet mağazanın sifariş ayarları alıcının web-browseri vasitәsilә Vahid xәzinәyә göndәrilir, bu sәbәbdәn, alıcının tәrәfindә parametrlәrin dәyişmәsinin qarşısını almaq üçün, internet mağaza ödәniş formanın ayarlarını imzalamalıdır.

Bunun üçün internet mağaza ödәniş formasında WMI_SIGNATURE parametrini әlavә etmәlidir, İnternet mağazanın ERİ vә “gizli açar” istifadәsi ilә formalaşır.

İnternet mağazanın ERİ vә “Gizli açar” formalaşma üsülunu burda ayarlamaq olar şәxsi kabinetdә Vahid xәzinәdә “Ayarlar” bölümündә “İnteqrasiya” bәndindә, şәkildә göstәrildiyi kimi:

Cüzdanın ayarları

Diqqәt! Gizli açar generasiya edildikdәn sonra mütlәq sәhifәnin aşağısındakı “Yadda saxlamaq” düymәsini basın. Bu ERİ-nin (elektron rәqәmsal imzanın) düzgün işlәmәsi üçün mütlәq şәrtdir.

WMI_SIGNATURE parametri digәr parametrlәrin göstәricilәri ilә birlәşәrәk adların әlifba sırası ilә formalaşır (reyestrı nәzәrә almadan) vә sonunda İnternet mağazanın “Gizli açar” әlavә olunur. Formanın eyni adlı çox sahәlәri varsa, belә sahәlәr onların göstәricilәrinin әlifba sırası ilә sıralanır.

“Gizli açar” әmsalı vә parametirlәr birlәşәndәn sonra, Windows-1251 kodlaşması, ERİ üsülunun formalaşması vә bayt istifadәsi Base64 ilә kodlaşır.

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

Misal (PHP):

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

    // Formanın göstәricilәrindәn istifadә edәrәk mәlumatın formalaşması, 
    // Artma ardıcıllığı ilә seçilmiş açar adları.
    uksort($fields, "strcasecmp");
    $fieldValues = "";

    foreach($fields as $value) 
    {
        if(is_array($value))
            foreach($value as $v)
            {
                //Cari kodlaşmadan konvertasiya (UTF-8)
                //Yalnız dükanın kodu Windows-1251 kodundan seçildiyi halda 
                $v = iconv("utf-8", "windows-1251", $v);
                $fieldValues .= $v;
            }
        else
        {
            //Cari kodlaşmadan konvertasiya (UTF-8)
            //Yalnız dükanın kodu Windows-1251 kodundan seçildiyi halda
            $value = iconv("utf-8", "windows-1251", $value);
            $fieldValues .= $value;
        }
    }

    // WMI_SIGNATURE gözticisinin parametrinin formalaşması, yolu ilә 
    // yuxarıda formalaşmış mәlumat әsasında hesablanmış, 
    // MD5 alqoritminә әsasәn vә Base64 dә göstәrilmәsi 

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

    //WMI_SIGNATURE parametrinin forma parametrlәrinin lüğәtinә daxil edilmәsi 

    $fields["WMI_SIGNATURE"] = $signature;

    // HTML kod sәhivәsinin formalaşması -ödәmә forması ilә

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

Misal (Perl):

  #!/usr/bin/perl

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

            # İnternet-dkanın gizli açarı

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

            my %fields; # Formanın sahlәrinin assosiativ massivә әlavә edilmәsi

            $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"; # Әlavә parametrlәr
            $fields{"MyShopParam2"}       = "Value2"; # İnternet-dükan hәmçinin iştirak edir
            $fields{"MyShopParam3"}       = "Value3"; # imzanın formalaşması zamanı!

            # Formanın mәlumatlarının birlәşmәsi nәticәsindә mәlumatın formalaşması, 
            # artma ardıcıllığı ilә seçilmiş açar adları.

            my $fieldValues = "";

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

            # WMI_SIGNATURE gözticisinin parametrinin formalaşması,
            # MD5 alqoritminә әsasәn vә Base64 dә göstәrilmәklә 
            # yuxarıda olan mәlumat әsasında hesablanmışdır

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

            # WMI_SIGNATURE parametrinin forma parametrlәrinin lüğәtinә daxil edilmәsi.

            $fields{"WMI_SIGNATURE"} = $signature;

            # HTML kod sәhivәsinin formalaşması -ödәmә forması ilә.

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

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

Misal (С#):

  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) 
              {
                // İnternet-dükanın gizli açarı

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

                // Seçilmiş açar adlarına uyğun formanın sahәlәrinin lüğәtә daxil edilmәsi.

                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"); // İmzanın formalaşması zamanı
                formField.Add("MyShopParam2", "Value2"); // hәmçinin dükanın әlavә parametrlәri dә
                formField.Add("MyShopParam3", "Value3"); // iştirak edir!

                // Mәlumatın formalaşması formanın mәlumatlarının birlәşmәsi, 
                // artma ardıcıllığı әsasında seçilmiş açar adları vә 
                // internet-dükanın "gizli açar"ın әlavә edilmәsi nәticәsindә formalaşır

                StringBuilder signatureData = new StringBuilder();

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

                // WMI_SIGNATURE gözticisinin parametrinin formalaşması,
                // MD5 alqoritminә әsasәn vә Base64 dә göstәrilmәklә 
                // yuxarıda olan mәlumat әsasında hesablanmışdır. 
                

                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 parametrlәrinin forma parametrlәrinin lüğıtinә daxil edilmәsi

                formField.Add("WMI_SIGNATURE", signature);

                // Ödәmә formasının formalaşması

                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()); } }

Misal 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]

Misal 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 + '
');
Әmin olun ki, WMI_SIGNATURE istisna olmaqla, ödәmә formasında olan bütün parametrlәr imzanın formalaşmasında iştirak edir. Mәsәlәn, әgәr «submit» düymәsinә «name» atributu verilmişdirsә, bu zaman hәmçinin ödәmә formasında bu düymәnin «value» atributu mövcud olacaq.
Әmin olun ki, sizin MDS funksiyası massiv baytı geri qaytarır, onun HEX formasını deyil. Әgәr işlәr düzgün edilibsә WMI_SIGNATURE parametrinin uzunluğu 24 simvol olmalıdır.

Әgәr WMI_DESCRIPTION parametrindә kiril hәriflәri mövcuddursa, әmin olun ki, serverә göndәrilәn forma UTF-8 kodlamasındadır. Bunun üçün forma accept-charset=”UTF-8″ atributuna malik olmalıdır.

Adıım 4. Mümkün ödәmә üsullarının seçilmәsi.

Ödәmә forması Vahid kassaya ötürüldükdәn sonra, alıcı ona rahat olan ödәniş üsulunu seçә bilәr. İnternet-dükan mümkün olan ödәmә üsullarını mәhdudlaşdıra bilәr, vә hәtta onlardan birini seçә bilәr.

Mümkün ödәmә üsullarının idarә edilmәsi üçün ödәmә formasının WMI_PTENABLED vә WMI_PTDISABLED parametrlәrindәn istifadә edilir. Bu sahәlәrin hәr biri ödәmә formasında bir neçә dәfә tәkrarlana bilәr vә әn azı ödәmә üsullarının birini әks etdirmәlidir.

Mәsәlәn, bu sifariş yalnız CreditCard vasitәsilә ödәnilә bilәr:

  

Növbәti misal sifarişin ödәnilmәsinә qadağa qoyulmasını nümayiş etdirir:

  

Elektron pul

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

Addım 5. Ödәnişin nәticәsi barәdә mәlumatın hazırlanması

Alıcı sifarişin ödәnişini bitirdikdәn sonra, Vahid kassa internet-dükanın ayarlarında göstәrilәn «Bildirişlәr üçün ünvan»na POST-müraciәt hazırlayır. Ödәmә formasının parametrlәri müraciәtdә öz әksini tapir, ödәmә formasının parametrlәri, ödәmәnin nәticәsi barәdә mәlumat vә digәr әlavә parametrlәr:

Parametrin adıAçıqlama
WMI_MERCHANT_IDİnternet-dükanın identifikatoru (cüzdanın nömrәsi).
WMI_PAYMENT_AMOUNTSifarişin mәblәği
WMI_COMMISSION_AMOUNTTutulmuş komissiyanın mәblәği
WMI_CURRENCY_IDSifarişin valyutasının identifikatoru (ISO 4217)
WMI_TO_USER_IDÖdәyicinin cüzdanının on iki rәqәmli nömrәsi.
WMI_PAYMENT_NOİnternet-dükanın uçot sistemindә sifarişin identifikatoru.
WMI_ORDER_IDVahid xәzinәnin uçot sistemindә sifarişin identifikatoru.
WMI_DESCRIPTIONSifarişin tәsviri.
WMI_SUCCESS_URL
WMI_FAIL_URL
Ödәmәnin nәticәsindәn asılı olmayaraq әmәliyyat sonrası müştәrinin göndәrilәcәk internet-dükan ünvanları (URL).
WMI_EXPIRED_DATEQәrbi-Avropa saat qurşağında ödәmә müddәti (UTC+0).
WMI_CREATE_DATE
WMI_UPDATE_DATE
Qәrbi-Avropa saat qurşağında sifarişin hazırlanması vә düzәlişlәrin edilmәsi vaxtı (UTC+0).
WMI_ORDER_STATESifarişin ödәmә vәziyyәti:

  •  Accepted  — sifariş ödәnilib;
WMI_SIGNATUREİnternet-dükanın «gizli açarı» vasitәsilә formalaşmış köçürmә haqqında bildirişin tәsdiqi.
WMI_TEST_MODE_INVOICEParameter transfered as part of the notifications received when paying by test methods. The default value is 1.
WMI_TEST_MODE_INVOICEBildirişlәrlә göndәrilәn, test üsulları ilә ödәniş aparılan zamanı daxil olan parametrdır. Parametrlәrin avtomatik göstәrilәn nişanı 1-dir.
Ödәmә formasının «WMI_» prefiksi olmayan digәr parametrlәri.

İnternet-dükan ödәnişin nәticәsi barәdә mәlumatı emal etmәli vә cavab bildiriş forması hazırlamalıdır. İnternet-dükan üçün mәlumatın emalı HTML formasından POST müraciәtin alınması kimi bir prosesdir, lakin sәhifә әvәzinә aşağıdakı mәzmunlu sәtir gәtirmәlidir:

WMI_RESULT=OK

vә ya

WMI_RESULT=RETRY&WMI_DESCRIPTION=Server müvәqqәti olaraq işlәmir

WMI_RESULT parametrindә internet-dükanın müraciәtinin nәticәsi әks olunmalıdır vә aşağıdakı parametrlәrdәn biri ola bilәr:

  •  OK   — internet-dükan bildirişi emal etdi vә sifarişi qәbul etdi.
  •  RETRY   — internet-dükan hal-hazırda bildirişi emal edә bilmir. Müәyyәn müddәtdәn sonra Vahid kassa yenidәn müraciәti göndәrәcәk.

İnternet-dükanın cavabında WMI_DESCRIPTION parametri özündә bәzi şәrhlәri saxlaya bilәr. Bu mәlumatlar Vahid kassanın loqlarında saxlanılacaq. Sәhv olduqda geri qaytarmaq mәslәhәt olunur. Bu parametrin tәyinatı UrlEncode kodunda olmalıdır:

#!/usr/bin/php
          
Müxtәlif sәbәblәrdәn Vahid kassa internet-dükandan cavab almaya bilәr, bu halda yenidәn tәkrar müraciәt göndәrә bilәr. İnternet-dükan birinci müraciәtdә olduğu kimi, tәkrar müraciәtә dә cavab vermәlidir.

Mәlumat mәnbәyinin yoxlanılması

Daxil olan müraciәtin Vahid kassadan olmasına vә etibarlılığına әmin olmaq üçün internet-dükan özünün “gizli açarı” vasitәsilә müraciәtin rәqәmsal imzasını hesablamalı, daxil olan müraciәtin WMI_SIGNATURE parametri ilә müqayisә edib üzlәşdirmәlidir.

Bunu «Ödәmә formasının müdafiәsi» bölümündә göstәrilәn alqoritm әsasında etmәk mümkündür. Bunun üçün internet-dükanın “gizli açarı” ilә müraciәtin bütün parametrlәrinin (WMI_SIGNATURE -dәn başqa) tәyinatlarını adlarına görә alfavit qaydasında birlәşdirәrәk, ЭЦП üzrә seçilmiş metodla bu tәyinatın xeş-nişanını hesablamaq lazımdır.

Misal (PHP):

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

          // Açar adlarının artma ardıcıllığı ilә massivin sortlaşdırılması
          // vә formanın tәyinatlarının birlәşdirilmәsi yolu ilә mәlumatın formalaşdırılması

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

          foreach($params as $name => $value)
          {
            //Cari kodlamadan konvertasiya (UTF-8)
            //dükanın kodu Windows-1251 dәn fәrqli olduğu halda lazımdır
            $value = iconv("utf-8", "windows-1251", $value);
            $values .= $value;
          }

          // WMI_SIGNATURE parametri ilә müqayisә etmәk üçün imzanın formalaşdırılmasi

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

          //Alınmış imzanın W1 imzası ilә müqayisәsi

          if ($signature == $_POST["WMI_SIGNATURE"])
          {
            if (strtoupper($_POST["WMI_ORDER_STATE"]) == "ACCEPTED")
            {
              // TODO: Dükanın uçot sistemindә sifarişin "Ödәnilmiş" kimi qeyd edilmәsi

              print_answer("Ok", "Sifariş #" . $_POST["WMI_PAYMENT_NO"] . " ödәnilib!");
            }
            else
            {
              // Hәr-hansı sәbәbdәn sifariş qeyri-müәyyәn vәziyyәtdә gәldi

              print_answer("Retry", "Düzgün olmayan vәziyyәt ". $_POST["WMI_ORDER_STATE"]);
            }
          }
          else
          {
            // İmza uyğun gәlmir, ola bilsin ki, siz internet-dükanın ayarlarında dәyişiklik etmisiniz

            print_answer("Retry", "İmza düzgün deyil " . $_POST["WMI_SIGNATURE"]);
          }

          ?>

Addım 6. Hesabatların ayarlanması

Üzlәşmә üçün ödәnişlәrin reyestrinin göndәrilәmәsi mexanizmi nәzәrdә tutulub.

Ödәnişlәrin reyestrinә göstәrilәn qaydada abunә olmaq olar, şәxsi kabinetdә «Dükan» sәhifәsindә, «İnteqrasiya» bölümündә, şәkildә göstәrildiyi kimi:

Cüzdanın ayarları

Hәmçinin üzlәşmәnin alınması tezliyini (gündәlik, hәftәlik vә ya aylıq) vә formatını (xml vә ya csv) seçmәk olar.

Reyestrlәrin formatı:

Parametrin adıAçıqlaması
IdHesabın nömrәsi
ExternalIdİnternet-dükanın uçot sistemindә sifarişin identifikatoru.
Directionİstiqamәt
UserIdÖdәyicinin on iki simvollu cüzdan nömrәsi.
CurrencyIdSifarişin valüta identifikatoru (ISO 4217).
AmountSifarişin mәblәği
StateHesabın vәziyyәti
PaymentDateÖdәmә tarixi
PaymentTypeIdÖdәmә üsulu
DescriptionAçıqlama
CommissionAmountKomissiya mәblәği
ApprovalCodeBankın avtorizasiya kodu (Yalnız bank kartları ilә olan ödәmәlәrә aiddir)
CardNumberBank kartın nömrәsi

Ödәmә reyestrlәrinin nümunәlәri:

Ayarlarda ЭЦП formalaşmasının metodu aktivlәşdirilmişdirsә, mәktuba eyni adlı, “.key” tәyinatlı vә ЭЦП olan ikinci fayl әlavә edilcәk.

Ödәmә üçün linkin formalaşması

Ödәmә üçün linkin formalaşdırımasını saytın xüsusi bölümündә bölüm etmәk olar.