【问题标题】:Trying to figure out how to interface with the PayGate API试图弄清楚如何与 PayGate API 交互
【发布时间】:2020-04-26 18:47:20
【问题描述】:

我可以看到这些是调用支付网关 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
    }
})```

【问题讨论】:

    标签: reactjs api axios


    【解决方案1】:

    对于 React,处理这个问题的方法是生成一个 MD5 校验和,并在发送之前将其附加到有效负载,可能使用 CryptoJS 或其他东西。我创建了这个函数来生成 MD5:

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

    我有一个包含我的数据的对象:

    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(...)
    

    我认为这应该可行!

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      相关资源
      最近更新 更多