任何人都可以帮助我进行这种付费网关集成 我已经尝试了下面的代码,但它不起作用,我无法理解这一点 请帮帮我
<?php
$str = "merchant_id=10000100&merchant_key=46f0cd694581a&return_url=http%3A%2F%2Fwww.ioss.in%2Fpayment-gateway-integration&cancel_url=http%3A%2F%2Fwww.ioss.in¬ify_url=http%3A%2F%2Fwww.ioss.in%2Ffacebook%2Fpayfast_success.php&name_first=Bob&name_last=Smith&email_address=sbtu01%40payfast.co.za&m_payment_id=TRN123456789&amount=200.00&item_name=Widget+Model+123&item_description=Widget+Model+123";
$md5 = md5($str);
?>
<form action="https://sandbox.payfast.co.za/eng/process" method="post" name="frmPay" id="frmPay">
<!-- Receiver Details -->
<input type="hidden" name="merchant_id" value="10000100">
<input type="hidden" name="merchant_key" value="46f0cd694581a">
<input type="hidden" name="return_url" value="http://www.ioss.in/payment-gateway-integration/">
<input type="hidden" name="cancel_url" value="http://www.ioss.in">
<input type="hidden" name="notify_url" value="http://www.ioss.in/facebook/payfast_success.php">
<!-- Payer Details -->
<input type="hidden" name="name_first" value="Bob">
<input type="hidden" name="name_last" value="Smith">
<input type="hidden" name="email_address" value="sbtu01@payfast.co.za">
<!-- Transaction Details -->
<input type="hidden" name="m_payment_id" value="TRN123456789">
<input type="hidden" name="amount" value="200.00">
<input type="hidden" name="item_name" value="Widget Model 123">
<input type="hidden" name="item_description" value="Widget Model 123">
<!-- Transaction Options -->
<input type="hidden" name="email_confirmation" value="">
<!-- Security -->
<input type="hidden" name="signature" value="<?php echo $md5; ?>">
<input type="submit" name="submit" value="submit">
</form>
这是我试过的代码
提供的变量不符合规范:
签名:生成的签名与提交的签名不匹配
这是我得到的错误,它完成交易而没有询问密码
答案 0 :(得分:4)
//从数组中创建GET字符串(数组$ params下面的示例)
$pfOutput ='';
foreach( $params as $key => $val )
{
if(!empty($val))
{
$pfOutput .= $key .'='. urlencode( trim( $val ) ) .'&';
}
}
// Remove last ampersand
$getString = substr( $pfOutput, 0, -1 );
if( isset( $passPhrase ) && $paymode!='sandbox' )
{
$getString .= '&passphrase='.$passPhrase;
}
$pfSignature = md5( $getString );
$params['signature'] = $pfSignature;
// POST
$url = "https://sandbox.payfast.co.za/eng/process/?" . $getString;
redirect($url);
}
答案 1 :(得分:2)
您必须在处理输入之后计算签名,因为它是基于它们的。
更改任何值都会改变签名。
答案 2 :(得分:1)
您可以在payfast的签名生成器工具中检查您的签名。 链接:https://sandbox.payfast.co.za/
打开此链接后,点击&#34;打开工具&#34;按钮&#34; POST CHECK&#34;部分。然后会打开生成签名的对话框。 在点击之后复制完整请求网址和文本框中的过去&#34;生成签名&#34;按钮。
通过使用此功能,您将获得URL中的所有错误,同时检查两个签名。
答案 3 :(得分:0)
为什么我会收到签名不匹配错误?
如果您生成MD5散列字符串且变量的顺序错误,则很可能导致这种情况,它们必须按照上表中的顺序排列。另一个原因可能是你没有使用PHP的
trim()
函数对变量值进行URL编码并修剪掉所有空格,或者结果URLencoding
位于lower case
中(例如{{1} }}而不是必需的http%3a%2f%2f
(例如。upper case
)。
跟随错误的原因(提供的变量不符合规范:)您不必提交官方文档中提到的空白值(如何生成签名)
传输数据的安全签名,采用提交变量的MD5哈希形式。创建哈希的字符串是所有非空白变量与'&amp;'的名称值对的串联,用作分隔符,例如。 “
http%3A%2F%2F
”其中对按照它们在此页面上显示的顺序列出。 PayFast引擎将重新生成此哈希,并将值进行比较以确保数据传输的完整性。
您正在发送导致问题的name_first=John&name_last=Doe&email_address=…
个空白值。只需删除此字段,您就没有问题。(PayFast将自动确认文档中所述的电子邮件)
答案 4 :(得分:0)
总是添加您的密码短语,因为最后一个参数是您的签名...不幸的是,文档上的内容并不十分清楚。
这不是获得相同签名的MD5转换器;),只需在字符串末尾添加&passphrase = yourpassphrase。然后在MD5中进行转换
答案 5 :(得分:-2)
您的email_confirmation输入值为空,并且您在md5计算中根本不包含它。
因为你没有价值而是删除了输入。否则给它一个值并将其包含在你的md5计算中。