e-commerce - 如何制作 SagePay BuyNow 按钮?

标签 e-commerce payment payment-processing opayo

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

最佳答案

就类似于 PayPal 的 BuyNow 按钮 + PDT 流程而言,所需的系统称为 SagePay Form。首先,您需要像这样创建一个 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 BuyNow 按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540321/

相关文章:

Paypal 无送货变量不起作用

php - 如何实现 Paypal Mobile Express Checkout..?

java - Braintree 未更新用户首选/默认付款方式

java - 如何将支付处理与基于 GWT/GAE 的应用程序集成?

node.js - Stripe 抛出无效整数错误

javascript - Adyen Web SDK 初始化问题。令人困惑的错误

e-commerce - 下订单后 Magento 自动发送电子邮件给用户

paypal - Broadleaf Commerce 无法与 Paypal Express 模块集成

javascript - 如何在reactjs中更改移动设备上的完整布局

ios - 使用超链接集成 UPI 后如何获得响应