如何制作SagePay立即购买按钮?

时间:2012-03-02 21:01:52

标签: e-commerce payment payment-processing sagepay

使用PayPal,我可以非常轻松地创建BuyNow按钮,包含我的商家信息,价格,税金,运费等。这是否可以在SagePay中使用?

1 个答案:

答案 0 :(得分:7)

所需系统称为SagePay表格,与PayPal的BuyNow按钮+ PDT流程相似。首先,您需要创建一个这样的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

当PayPal没有这些信息时,为什么他们需要这些信息,这有点愚蠢,但是哦。文档清楚地表明,如果他们没有收到合法的价值观,例如真实的邮政编码验证该城市和国家,并且还用于问题争议仲裁,那么这件事就会出错。

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

对于VendorTxCode,这是您创建的内容,以便您可以将订单跟踪回适当的客户。

然后使用SagePay提供的加密密码,使用XOR + Base64编码对此$ PAYMENT_CRYPT进行加密。它们具有AES + Binhex加密选项,但它太过分了,您的服务器必须启用mcrypt库。某些共享主机方案 STILL 尚未启用!

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

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

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

请注意,您不必直接进入success.php。您可以将其设置为success.php?custom = value以传递有关您可以解析的事务的额外信息。他们的代码会自动解决这个问题并在最后添加&amp; 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