PHP中的PayFast付款集成

时间:2015-12-07 12:26:32

标签: php payment-gateway

任何人都可以帮助我进行这种付费网关集成 我已经尝试了下面的代码,但它不起作用,我无法理解这一点 请帮帮我

<?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&notify_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>

这是我试过的代码

提供的变量不符合规范:

签名:生成的签名与提交的签名不匹配

这是我得到的错误,它完成交易而没有询问密码

6 个答案:

答案 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)

正如official documentation

中所述
  

为什么我会收到签名不匹配错误?

     

如果您生成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)

总是添加您的密码短语,因为最后一个参数是您的签名...不幸的是,文档上的内容并不十分清楚。

here is a gen from the sandbox

这不是获得相同签名的MD5转换器;),只需在字符串末尾添加&passphrase = yourpassphrase。然后在MD5中进行转换

enter image description here

答案 5 :(得分:-2)

您的email_confirmation输入值为空,并且您在md5计算中根本不包含它。

因为你没有价值而是删除了输入。否则给它一个值并将其包含在你的md5计算中。