【问题标题】:PayFast Payment Integration in PHP - signature errorPHP 中的 PayFast 支付集成 - 签名错误
【发布时间】:2015-12-07 12:26:31
【问题描述】:

任何人都可以在此 PayFast 支付网关集成中帮助我吗? 我试过下面的代码,但签名没有正确生成我不明白为什么。

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

这是我尝试过的代码。

提供的变量不符合规范:

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

这是我遇到的错误。

【问题讨论】:

  • “不工作”作为您问题的唯一描述是不够的。人们不能那样帮助你。 “汽车修理工?我的车坏了。请帮忙。我该怎么办?”
  • “寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。因此,我将其标记为已关闭..
  • 您不必对他苛刻,几乎所有要求都是正确的,唯一的问题是密码短语,始终添加密码短语,因为最后一个参数是您的签名......不幸的是文档是不是很清楚。

标签: php payment-gateway


【解决方案1】:

// 从你的数组创建 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;

// 发布

    $url = "https://sandbox.payfast.co.za/eng/process/?" . $getString;
    redirect($url);
}

【讨论】:

    【解决方案2】:

    您必须在处理输入之后计算签名,因为它是基于它们的。

    更改任何值都会改变签名。

    【讨论】:

      【解决方案3】:

      您可以在 payfast 的签名生成器工具中检查您的签名。 链接:https://sandbox.payfast.co.za/

      打开此链接后,点击“POST CHECK”部分的“打开工具”按钮。

      然后它将打开生成签名的对话框。 在点击“生成签名”按钮后复制完整的请求 url 并在文本框中过去。

      使用这个你会得到所有错误,如果在 URL 中,还要检查两个签名。

      【讨论】:

        【解决方案4】:

        official documentation中所述

        为什么会出现签名不匹配错误?

        如果您生成的 MD5 散列字符串中的变量顺序错误,很可能会导致这种情况,它们需要按照上表中显示的顺序排列。另一个原因可能是您没有使用 PHP 的 trim() 函数对变量值进行 URL 编码并修剪所有空格,或者结果 URLencodinglower case 中(例如 http%3a%2f%2f)而不是所需的 @ 987654326@(例如http%3A%2F%2F)。

        出现以下错误的原因(提供的变量不符合规范:)是您不必提交官方文档中提到的空白值(如何生成签名)

        采用提交变量的 MD5 散列形式的传输数据的安全签名。创建哈希的字符串是所有非空白变量的名称值对的连接,其中“&”用作分隔符,例如。 “name_first=John&amp;name_last=Doe&amp;email_address=…”,其中对按它们在此页面上出现的顺序列出。此哈希将由 PayFast 引擎重新生成,并比较这些值以确保数据传输的完整性。

        您正在发送导致问题的 &lt;input type="hidden" name="email_confirmation" value=""&gt;blank 值。只需删除此字段,您就不会遇到任何问题。(PayFast 将按照文档中的说明自动确认电子邮件)

        【讨论】:

          【解决方案5】:

          始终添加您的密码,因为最后一个参数是您的签名......不幸的是,文档不是很清楚。

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

          【讨论】:

            【解决方案6】:

            您的 email_confirmation 输入值为空,并且您根本没有将其包含在 md5 计算中。

            由于您没有价值,因此请删除输入。否则给它一个值并将其包含在您的 md5 计算中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-04-26
              • 2017-03-25
              • 2017-05-11
              • 2019-06-27
              • 1970-01-01
              • 2015-12-21
              • 2017-04-30
              • 2015-12-19
              相关资源
              最近更新 更多