簡體   English   中英

試圖弄清楚如何與 PayGate API 接口

[英]Trying to figure out how to interface with the PayGate API

我可以看到這些是我調用支付網關 API 時所需的參數,但我不知道如何在 Javascript(特別是 React)中實現它。 有沒有翻譯可以幫忙的?

這是 PHP 中的示例代碼:

$encryptionKey = 'secret';

$DateTime = new DateTime();

$data = array(
    'PAYGATE_ID'        => 10011072130,
    'REFERENCE'         => 'pgtest_123456789',
    'AMOUNT'            => 3299,
    'CURRENCY'          => 'ZAR',
    'RETURN_URL'        => 'https://my.return.url/page',
    'TRANSACTION_DATE'  => $DateTime->format('Y-m-d H:i:s'),
    'LOCALE'            => 'en-za',
    'COUNTRY'           => 'ZAF',
    'EMAIL'             => 'customer@paygate.co.za',
);

$checksum = md5(implode('', $data) . $encryptionKey);

$data['CHECKSUM'] = $checksum;

$fieldsString = http_build_query($data);

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, 'https://secure.paygate.co.za/payweb3/initiate.trans');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_HOST']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldsString);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

我一直在嘗試使用 axios 提出請求,但任何方法都可以。 我試圖創建一個 axios 實例,如下所示:


export default axios.create({
    baseURL: 'https://secure.paygate.co.za/payweb3/initiate.trans',
    headers:{
      //I guess this is where PAYGATE_ID etc would go, but I'm not sure how to format it
    }
})```

對於 React,處理這個問題的方法是在發送之前生成一個 MD5 校驗和和 append 到有效負載,可能使用 CryptoJS 或其他東西。 我創建了這個 function 來生成 MD5:

const generateMD5 = (obj, secret = 'paygateSecret') => {
    let str = ''
    for (let val in obj){
        str += obj[val]
    }
    
    str += secret

    return CryptoJS.MD5(str).toString()
}

我有一個包含我的數據的 object:

var data = {
      PAYGATE_ID: 10011072130,
      REFERENCE: ref,
      AMOUNT: amount,
      CURRENCY: 'ZAR',
      RETURN_URL: window.location.href,
      TRANSACTION_DATE: new Date().toISOString(),
      LOCALE: 'en-za',
      COUNTRY: 'ZAF',
      EMAIL: email,
}

請注意順序。 這非常重要。 然后,我使用以下方法生成校驗和:

const CHECKSUM = generateMD5(data)

然后進行 axios 調用:

axios.post('https://secure.paygate.co.za/payweb3/initiate.trans', { ...data, CHECKSUM }).then(...).catch(...)

我認為這應該工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM