MIGS VPC 集成 E5000:无法使用两个商家的秘密之一根据商家的请求形成匹配的安全哈希
Posted
技术标签:
【中文标题】MIGS VPC 集成 E5000:无法使用两个商家的秘密之一根据商家的请求形成匹配的安全哈希【英文标题】:MIGS VPC Integration E5000: Cannot form a matching secure hash based on the merchant's request using either of the two merchant's secrets 【发布时间】:2014-09-01 15:02:04 【问题描述】:我正在使用 Migs 虚拟支付客户端集成并使用 2-Party(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 =付费&vpc_MerchTxnRef = TC_2014712466141&vpc_Merchant = TESTMXXXXXXXX&vpc_OrderInfo = TC_2014712466141&vpc_Version = 1” P>
2) 演示 SecureHashSecret = "CD14026NOT5E91GG5D1MOM4972440CDE" 3) 由Request和SecureHashSecret “CCD0D0113315403E375791E99AFA3F8906EE47C0ED6818464368420048DC541E” 4) 测试网址:“https://migs.mastercard.com.au/vpcdps” 5) 在上述 URL 上发送的最终请求 “vpc_AccessCode = XXXXXXXX&vpc_Amount = 100&vpc_CardExp = 1310&vpc_CardNum = 5313581000123430&vpc_Command =付费&vpc_MerchTxnRef = TC_2014712466141&vpc_Merchant = TESTMXXXXXXXX&vpc_OrderInfo = TC_2014712466141&vpc_Version = 1&vpc_SecureHash = CCD0D0113315403E375791E99AFA3F8906EE47C0ED6818464368420048DC541E&vpc_SecureHashType = SHA256” P>
6)我正在使用以下代码发送请求并获取响应。 System.Net.WebClient webClient = new System.Net.WebClient(); 7) 函数用于生成SecureHash 公共静态字符串 ToHMACSHA256(字符串输入,字符串键) 私有静态字符串 ByteToString(byte[] buff) 请尽快给我上述错误的解决方案。提前致谢 感谢和问候 阳光明媚的帕泰 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);
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);
string sbinary = "";
for (int i = 0; i < buff.Length; i++)
sbinary += buff[i].ToString("X2"); // hex format
return (sbinary);
【问题讨论】:
您好,您的问题解决了吗? 不还是有问题 拒绝[取消选中]帐户中的“强制安全哈希”设置以绕过哈希。并使用最新的测试卡。旧的测试卡不工作 我遇到了同样的问题,你解决了吗?我正在尝试使用 python 并且没有任何文档可用于将 md5 更改为 sha256 【参考方案1】:我在 php
中遇到了同样的问题,但我已成功纠正它。
该错误似乎是由于在对我的数据进行哈希处理时发生错误而发生的。
=> 见capturing error messages from migs payment
为了纠正这个问题,我使用了这些类 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');
【讨论】:
【参考方案2】:拒绝[取消选中]帐户中的“强制安全哈希”设置以绕过哈希。并使用最新的测试卡。旧的测试卡无法使用
【讨论】:
这可能存在安全风险,因为检查安全哈希的目的是验证“数字签名”。以上是关于MIGS VPC 集成 E5000:无法使用两个商家的秘密之一根据商家的请求形成匹配的安全哈希的主要内容,如果未能解决你的问题,请参考以下文章
Omnipay MiGS:如何处理用户在交易成功后关闭浏览器?
如何使用 CloudFormation 为 API 网关 v2 websocket 连接设置 VPC
VPC 中的 Elastic Beanstalk 应用程序无法公开访问