使用 PayPal,我可以非常轻松地创建一个 BuyNow 按钮,其中包含我的商家信息、价格、税金、运费等。这在 SagePay 中是否可行?
最佳答案
就与 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>
(可以在此处将实时 URL 与测试 URL 交换: 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 按钮之前根据需要显示它,或者可能在您的确认页面或您发送的确认电子邮件上。他们确实有一个“&Basket=”参数,可以在其中指定税收,但它对于您自己可以在表单页面上显示的内容来说是多余的,并且没有必要。因此,&Amount 值必须是总值,而不是净值。也没有数量值(可以使用 &Basket 参数来指定)。您很可能会发现 &Basket 参数对于结帐过程中您可以在自己的表单上显示的内容来说是多余的。所以,这就是为什么我的例子没有包含它。
至于 VendorTxCode,这是您创建的内容,以便您可以将订单跟踪回适当的客户。
然后使用 SagePay 提供的加密密码,使用 XOR + Base64 编码对 $PAYMENT_CRYPT 进行加密。他们有一个 AES + Binhex 加密选项,但它太过分了,你的服务器必须启用 mcrypt 库。一些共享主机计划仍然没有启用!
他们提供了一个 XOR 示例,但这是您在计算机科学类(class)中无数次看到的典型示例,您在其中反复循环密码的每个 ASCII 代码和数据的每个 ASCII 代码,并取另一个的补码位(XOR 过程) .完成后,通过 Base64 编码为其提供安全的 POST 传输。 Base64 编码使用 PHP 的内置函数。
来自此的响应更像是 PayPal 的 PDT 流程,而不是 PayPal 的 IPN 流程。他们确实将某人引导到 success.php 和 fail.php 以及通过 GET 加密的 URL 响应,您可以对它进行解密和解析(base64 解码 + XOR),但困难在于客户可以在等待页面之前关闭表单重定向。在这种情况下,人们将在 SagePay 的控制面板中看到这一点,并且必须为客户手动完成交易。
在success.php 和fail.php 上,您想做什么取决于您。一旦查询字符串 &crypt 参数未加密,您将能够通过查看 Status 参数是否为“OK”来解析交易是否完成。
请注意,您不必直接访问success.php。您可以像 success.php?custom=value 一样传递有关您可以解析的事务的额外信息。他们的代码会自动解决这个问题,并在最后加上 &crypt= 参数。 fail.php 也是如此。
他们确实有办法让 SagePay 向客户和供应商发送电子邮件,但这确实有点矫枉过正,因为您可以在自己的 PHP 代码中使用 mail() 语句在下订单时做同样的事情。
引用:请注意,以下文档 URL 将来可能会更改。要获取最新版本的文档,请访问该网站,注册为开发人员(1 分钟过程),然后搜索“表单协议(protocol)”。
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
关于e-commerce - 如何制作 SagePay 立即购买按钮?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9540321/