如何制作SagePay BuyNow按钮?

问题描述:

使用PayPal,我可以非常容易地创建一个BuyNow按钮,包含我的商家信息,价格,税金,运费等。这在SagePay中可能吗?如何制作SagePay BuyNow按钮?

只要与PayPal的BuyNow按钮+ PDT过程相似,所需的系统就称为SagePay Form。首先,你需要创建一个表单,像这样:

<form action="https://live.sagepay.com/gateway/service/vspform-register.vsp" method="POST" id="SagePayForm" name="SagePayForm"> 
    <input type="hidden" name="VPSProtocol" value="2.23" /> 
    <input type="hidden" name="TxType" value="PAYMENT" /> 
    <input type="hidden" name="Vendor" value="<?= $YOUR_VENDOR_LOGIN_NAME ?>" /> 
    <input type="hidden" name="Crypt" value="<?= $PAYMENT_CRYPT ?>">  
    <input type="image" src="images/buynow-sagepay.png" /> 
</form> 

(一个可以与测试一个在这里交换直播网址:https://test.sagepay.com/gateway/service/vspform-register.vsp

至于$ PAYMENT_CRYPT,你必须首先创建一个字符串像这样:

VendorTxCode=406227821909 
&Amount=32.00 
&Currency=USD 
&Description=1 ACME Widget 
&SuccessURL=http://example.com/success.php 
&FailureURL=http://example.com/fail.php 
&BillingSurname=Smith 
&BillingFirstnames=John 
&BillingAddress1=123 Main Street 
&BillingCity=Anywhere 
&BillingPostCode=29555 
&BillingCountry=USA 
&DeliverySurname=Smith 
&DeliveryFirstnames=John 
&DeliverAddress1=123 Main Street 
&DeliveryCity=Anywhere 
&DeliveryPostCode=29555 
&DeliveryCountry=USA 

这是愚蠢的为什么他们需要一些这方面的信息时,贝宝没有,但哦。如果文件没有像真正的邮政编码那样验证该城市和国家的合法价值,并且还用于问题争议仲裁,则该文件明确表示该错误将被错误地排除。

请注意,在我的示例中,PP没有税或运费突破,因此您需要在显示此BuyNow按钮之前根据需要显示,或者在您的确认页面或确认电子邮件中发送。他们确实有一个“&篮子=”参数,可以指定税额,但它对于您自己可以在表单页上显示的内容是多余的,而不是必需的。因此,&金额必须是总值,而不是净值。也没有数量值(可以使用Basket参数来指定)。您很可能会发现&购物篮参数仅仅是您在结帐过程中已经显示在自己表单上的内容。所以,这就是我的例子没有包含它的原因。

至于VendorTxCode,这是您创建的内容,以便您可以将订单追溯回适当的客户。

这个$ PAYMENT_CRYPT然后使用XOR + Base64编码,使用SagePay提供的加密密码进行加密。他们有一个AES + Binhex加密选项,但它是矫枉过正,你的服务器必须启用mcrypt库。一些共享托管计划仍然尚未启用!

他们提供了XOR示例,但它是您在计算机科学课程中无数次看到的典型示例,您可以反复循环访问密码的每个ASCII代码和数据的每个ASCII代码,并获取其他的补码位异或过程)。完成后,通过Base64编码进行安全POST传输。 Base64编码使用PHP的内置函数。

由此产生的回应更像PayPal的PDT过程,而不是PayPal的IPN过程。他们通过GET指导success.php和fail.php以及加密的URL响应,您可以解密和解析(base64 decode + XOR),但是难度在于客户可以在等待页面前关闭表单重定向。在这种情况下,人们会在SagePay的控制面板中看到此信息,并且必须为客户手动完成交易。

关于success.php和fail.php,这取决于你想要做什么。一旦查询字符串& crypt参数未加密,您可以通过查看Status参数为“OK”来解析事务是否完成。

请注意,您不必直接进入success.php。您可以使它像success.php?custom = value来传递关于您可以解析的事务的额外信息。他们的代码会自动计算出来,并在最后加上& crypt =参数。 fail.php也是一样。

他们确实有办法让SagePay向客户和供应商发送电子邮件,但这确实是过火,因为您可以在执行订单时使用mail()语句在您自己的PHP代码中执行相同的操作。

参考:请注意,以下doc URL可能会在将来更改。要获取最新版本的文档,请访问网站,注册为开发人员(1分钟的过程),并搜索“表单协议”。

http://www.sagepay.com/sites/default/files/downloads/sagepayformprotocolandintegrationguidelines_0.pdf

编辑:新干线(2017年10月25日) - https://www.sagepay.co.uk/file/25041/download-document/FORM_Integration_and_Protocol_Guidelines_270815.pdf

+0

末链接死。我收到错误 - 5080:表单事务注册失败。使用上面的例子。有没有一种方法可以调试?有工作的例子吗?字符串可以直接添加到表单中还是更多? – Jon 2017-02-28 15:20:21