4

我正在使用 Migs 虚拟支付客户端集成和使用 2 方(API 方法)。

错误:E5000:无法根据商家的请求使用两个商家的秘密中的任何一个形成匹配的安全哈希

在参考指南中,声明使用 HMac Sha256 生成在请求中发送的 SecureHash 参数,并且 MIGS 将相应地对该请求进行解码。

问题 :

a)我想知道我创建的请求是否正确(即所有传递的参数都按正确的顺序排列)。

b)另外让我知道,如果我在创建 SecureHash 的请求和最终请求中缺少一些要发送的参数。

c)还要检查用于生成SecureHash的函数是否正确。

如果我犯了一些错误,请告诉我。

以下是相关详情。

1)请求生成SecureHash :"vpc_AccessCode=XXXXXXXX&vpc_Amount=100&vpc_CardExp=1810&vpc_CardNum=5313581000123430&vpc_Command=pay&vpc_MerchTxnRef=TC_2014712466141&vpc_Merchant=TESTMXXXXXXXX&vpc_OrderInfo=TC_241&vpc_Merchant=TESTMXXXXXXXX&471024=TC_2

2) 演示SecureHashSecret = "CD14026NOT5E91GG5D1MOM4972440CDE"

3)由上述请求SecureHashSecret生成的 SECURE Hash

“CCD0D0113315403E375791E99AFA3F8906EE47C0ED6818464368420048DC541E”

4) 测试网址:“ https://migs.mastercard.com.au/vpcdps

5) 在上述 URL 上发送的最终请求

"vpc_AccessCode=XXXXXXXX&vpc_Amount=100&vpc_CardExp=1310&vpc_CardNum=5313581000123430&vpc_Command=pay&vpc_MerchTxnRef=TC_2014712466141&vpc_Merchant=TESTMXXXXXXXX&vpc_OrderInfo=TC_2014712466141&vpc_Version=1&vpc_SecureHash=CCD0D0113315403E375791E99AFA3F8906EE47C0ED6818464368420048DC541E&vpc_SecureHashType=SHA256"

6)我正在使用以下代码发送请求并获得响应。

System.Net.WebClient webClient = new System.Net.WebClient();

        webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

        byte[] response = webClient.UploadData(hfVirtualPaymentClientURL.Value.Trim(), "POST", Encoding.ASCII.GetBytes(strRequest));



        string responseData = System.Text.Encoding.ASCII.GetString(response, 0, response.Length);

7) 用于生成SecureHash的函数

公共静态字符串 ToHMACSHA256(字符串输入,字符串键)

{

    ASCIIEncoding encoding = new ASCIIEncoding();

    byte[] keyByte = encoding.GetBytes(key);

    byte[] inputBytes = encoding.GetBytes(input);

    HMACSHA256 hmacsha256 = new HMACSHA256(keyByte);

    byte[] hashmessage;

    hashmessage = hmacsha256.ComputeHash(inputBytes); 

    return ByteToString(hashmessage);

}

私有静态字符串 ByteToString(byte[] buff)

{

    string sbinary = "";

    for (int i = 0; i < buff.Length; i++)
      { 
          sbinary += buff[i].ToString("X2"); // hex format
      }

    return (sbinary);

}

请尽快给我上述错误的解决方案。提前致谢

感谢和问候

阳光明媚的帕泰

4

2 回答 2

2

我遇到了同样的问题PHP,但我成功地纠正了它。

该错误似乎是由于在散列我的数据时出错而发生的。
=> 查看从 migs 付款中捕获错误消息

为了纠正这个问题,我使用这些类 https://github.com/Tmeister/banamexgateway/blob/master/VPCPaymentConnection.php
(你也必须将这个类导入到你的库中https://github.com/Tmeister /banamexgateway/blob/master/PaymentCodesHelper.php )

$conn = new VPCPaymentConnection();
$secureSecret = '';
// Set the Secure Hash Secret used by the VPC connection object
$conn->setSecureSecret($secureSecret);
// Instanciate your VPC post data
$paymentdata = array(
    "vpc_AccessCode" => '',
    "vpc_Amount" => '',
    "vpc_Command" => '',
    "vpc_Locale" => '',
    "vpc_MerchTxnRef" => '',
    "vpc_Merchant" => '',
    "vpc_OrderInfo" =>'',
    "vpc_ReturnURL" => '',
    "vpc_Version" => ''
);
// Add VPC post data to the Digital Order
foreach ($paymentdata as $key => $value) {
    $conn->addDigitalOrderField($key, $value);
}
// Obtain a one-way hash of the Digital Order data and add this to the Digital Order
$secureHash = $conn->hashAllFields();
$conn->addDigitalOrderField("vpc_SecureHash", $secureHash);
$conn->addDigitalOrderField("vpc_SecureHashType", "SHA256");
// Obtain the redirection URL and redirect the web browser
$link_to_mastercard = $conn->getDigitalOrder('https://migs.mastercard.com.au/vpcpay');
于 2016-11-24T13:09:21.390 回答
0

拒绝[取消选中]帐户中的“强制安全哈希”设置以绕过哈希。并使用最新的测试卡。旧的测试卡不工作

于 2015-01-31T06:42:28.757 回答