来自Payfast API的ITN回调

时间:2018-03-24 18:32:32

标签: php callback

在使用payfast仪表板生成的HTML代码后,如何将通知URL集成到我的代码中?

我有随机生成的按钮和运输表格 这就是我在代码

的形式部分所拥有的

按钮:

 <script language="JavaScript" type="text/javascript">
 function click_8eb310a4f3ae8dcc6556286f70cbd30f( aform_reference ) {
        var aform = aform_reference;
        aform['amount'].value = Math.round( aform['amount'].value*Math.pow( 10,2 ) )/Math.pow( 10,2 );
                    aform['custom_quantity'].value = aform['custom_quantity'].value.replace( /^\s+|\s+$/g,"" );
                    if( !aform['custom_quantity'].value || 0 === aform['custom_quantity'].value.length || /^\s*$/.test( aform['custom_quantity'].value ) ) {
                        alert ( 'A quantity is required' );
                        return false;
                    }
        for( i=0; i<aform.elements.length; i++ )
          if( aform.elements[i].className == 'shipping' )
            aform.elements[i].value = aform.elements[i].value.replace( /^\s+|\s+$/g,"" );
        var cont = true;
        for( i=0; i<aform.elements.length; i++ ) {

            if( aform.elements[i].className != 'shipping' )
                continue;

            if( aform.elements[i].name == 'line2' )
                continue;

            if( ! cont )
                continue;

            if( aform.elements[i].name == 'country' ) {
                if( aform.elements[i].selectedIndex == 0 ) {
                    cont = false;
                    alert ( 'Select a country' );
                }
            }   else    {
                if( 0 === aform.elements[i].value.length || /^\s*$/.test( aform.elements[i].value ) ) {
                    cont = false;
                    alert ( 'Complete all the mandatory address fields' );
                }
            }
        }
        if( ! cont )
            return cont;aform['amount'].value *=  parseInt( aform['custom_quantity'].value );
        var shipping_info = '';
        for( i=0; i<aform.elements.length; i++ )
          if( aform.elements[i].className == 'shipping' )
            shipping_info+=' '+aform.elements[i].name+' ['+aform.elements[i].value+']';

        aform['item_description'].value+= ' Shipping Information '+shipping_info

}

</script>

HTML:

<form action="https://www.payfast.co.za/eng/process" name="form_8eb310a4f3ae8dcc6556286f70cbd30f" onsubmit="return click_8eb310a4f3ae8dcc6556286f70cbd30f( this );" method="post">
<input type="hidden" name="cmd" value="_paynow">
<input type="hidden" name="receiver" value="12700124">
<input type="hidden" name="item_name" value="item_name">
<input type="hidden" name="amount" value="2.00">
<input type="hidden" name="item_description" value="">
<input type="hidden" name="return_url" value="return_url">
<input type="hidden" name="cancel_url" value="cancel_url">

1 个答案:

答案 0 :(得分:0)

PayFast HTML生成按钮的ITN 未发送

按钮与自定义集成不同,它使用cmdreceiver个隐藏字段,而不是merchant_idmerchant_key隐藏字段(根据开发人员documentation)。

您还需要添加notify_url,以便PayFast知道ITN返回变量的发送位置,然后可以通过notify_url脚本中的全局$ _POST变量访问该变量。

您需要将表单更改为以下内容才能收到ITN:

<form action="https://www.payfast.co.za/eng/process" name="form_8eb310a4f3ae8dcc6556286f70cbd30f" onsubmit="return click_8eb310a4f3ae8dcc6556286f70cbd30f( this );" method="post">
  <!-- new merchant identifier fields -->
  <input type="hidden" name="merchant_id" value="10000102">
  <input type="hidden" name="merchant_key" value="46f0cd694581a">
  <!-- Existing fields from the button -->
  <input type="hidden" name="item_name" value="item_name">
  <input type="hidden" name="amount" value="2.00">
  <input type="hidden" name="item_description" value="">
  <input type="hidden" name="return_url" value="return_url">
  <input type="hidden" name="cancel_url" value="cancel_url">
  <!-- new notify_url -->
  <input type="hidden" name="notify_url" value="https://yoursite.com/notify/">
</form>

可选更改:

由于您现在将收到ITN,因此无需使用生成的JavaScript将运送字段编译为单个字符串,以便在item_description隐藏字段中使用。相反,您可以使用PayFast custom_str表单字段来捕获用户的地址。

<input type="text" name="custom_str1" placeholder="Address line 1">