无法处理参考代码为 [xxx] 的订单,签名无效 PayU
The order with reference code [xxx] could not be processed, the sign is not valid PayU
我正在尝试在我的网络应用程序中实施 Pay U 支付网关。
我使用示例表格 post PayU 表格中的付款值。
请看下面我的代码。
<form method="post" action="https://gateway.payulatam.com/ppp-web-gateway/">
<input name="merchantId" type="hidden" value="XXXXXX">
<input name="accountId" type="hidden" value="XXXXXX">
<input name="description" type="hidden" value="Test PAYU">
<input name="referenceCode" type="hidden" value="payment_test_00000001">
<input name="amount" type="hidden" value="3">
<input name="tax" type="hidden" value="0">
<input name="taxReturnBase" type="hidden" value="0">
<input name="currency" type="hidden" value="USD">
<input name="signature" type="hidden" value="be2f083cb3391c84fdf5fd6176801278">
<input name="test" type="hidden" value="1">
<input name="buyerEmail" type="hidden" value="ragesh.pr@XXX.com">
<input name="responseUrl" type="hidden" value="http://www.test.com/response">
<input name="confirmationUrl" type="hidden" value="http://www.test.com/confirmation">
<input name="Submit" type="submit" value="Enviar">
但我收到此错误:
这是我的错误。因为签名不是 MD5 字符串。
<input name="signature" type="hidden" value="be2f083cb3391c84fdf5fd6176801278">
需要编写一个新函数来创建MD5字符串。
public static string CalculateMD5Hash(string input)
{
// step 1, calculate MD5 hash from input
MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
// step 2, convert byte array to hex string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("x2"));
}
return sb.ToString();
}
然后像下面这样调用这个函数。
string Signature = CommonHelper.CalculateMD5Hash(ApiKey + "~" + MerchantId + "~" + ReferenceCode + "~" + Amount + "~" + Currency);
(请保持上述函数中的参数顺序。)
现在签名已创建。
在表单中传递此签名。
工作正常。
:)
y
在您的 C# 控制器方法中包含对 System.Web.Security 的引用。
要构建您的签名,您需要一个字符串,例如表示您所在国家/地区的 Payu。在我的例子中,字符串看起来像:
apiKey~merchantId~referenceCode~totalAmount~currency
//build the string for signature in md5 encription
var signatureSource = string.Format("{0}~{1}~{2}~{3}~{4}", apiKey, merchantId, referenceCode, totalAmount, currency);
//get the md5 signature
var signature = FormsAuthentication.HashPasswordForStoringInConfigFile(signatureSource,"md5");
将计算值输入您的表格。
你们好。
在我的例子中,我忘记了 algorithmSignature 参数,因为我使用 SHA256 进行签名,默认算法是 MD5
我正在尝试在我的网络应用程序中实施 Pay U 支付网关。
我使用示例表格 post PayU 表格中的付款值。
请看下面我的代码。
<form method="post" action="https://gateway.payulatam.com/ppp-web-gateway/">
<input name="merchantId" type="hidden" value="XXXXXX">
<input name="accountId" type="hidden" value="XXXXXX">
<input name="description" type="hidden" value="Test PAYU">
<input name="referenceCode" type="hidden" value="payment_test_00000001">
<input name="amount" type="hidden" value="3">
<input name="tax" type="hidden" value="0">
<input name="taxReturnBase" type="hidden" value="0">
<input name="currency" type="hidden" value="USD">
<input name="signature" type="hidden" value="be2f083cb3391c84fdf5fd6176801278">
<input name="test" type="hidden" value="1">
<input name="buyerEmail" type="hidden" value="ragesh.pr@XXX.com">
<input name="responseUrl" type="hidden" value="http://www.test.com/response">
<input name="confirmationUrl" type="hidden" value="http://www.test.com/confirmation">
<input name="Submit" type="submit" value="Enviar">
但我收到此错误:
这是我的错误。因为签名不是 MD5 字符串。
<input name="signature" type="hidden" value="be2f083cb3391c84fdf5fd6176801278">
需要编写一个新函数来创建MD5字符串。
public static string CalculateMD5Hash(string input)
{
// step 1, calculate MD5 hash from input
MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
// step 2, convert byte array to hex string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("x2"));
}
return sb.ToString();
}
然后像下面这样调用这个函数。
string Signature = CommonHelper.CalculateMD5Hash(ApiKey + "~" + MerchantId + "~" + ReferenceCode + "~" + Amount + "~" + Currency);
(请保持上述函数中的参数顺序。)
现在签名已创建。
在表单中传递此签名。
工作正常。
:)
y
在您的 C# 控制器方法中包含对 System.Web.Security 的引用。
要构建您的签名,您需要一个字符串,例如表示您所在国家/地区的 Payu。在我的例子中,字符串看起来像:
apiKey~merchantId~referenceCode~totalAmount~currency
//build the string for signature in md5 encription
var signatureSource = string.Format("{0}~{1}~{2}~{3}~{4}", apiKey, merchantId, referenceCode, totalAmount, currency);
//get the md5 signature
var signature = FormsAuthentication.HashPasswordForStoringInConfigFile(signatureSource,"md5");
将计算值输入您的表格。
你们好。
在我的例子中,我忘记了 algorithmSignature 参数,因为我使用 SHA256 进行签名,默认算法是 MD5