E commerce 如何制作SagePay BuyNow按钮?

E commerce 如何制作SagePay BuyNow按钮?,e-commerce,payment,payment-processing,opayo,E Commerce,Payment,Payment Processing,Opayo,使用PayPal,我可以非常轻松地创建一个BuyNow按钮,其中包含我的商户信息、价格、税收、运输等。这在SagePay中是否可行?所需的系统称为SagePay表单,因为它与PayPal的BuyNow按钮+PDT流程相似。首先,您需要创建如下表单: <form action="https://live.sagepay.com/gateway/service/vspform-register.vsp" method="POST" id="SagePayForm" name="SagePayF

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

所需的系统称为SagePay表单,因为它与PayPal的BuyNow按钮+PDT流程相似。首先,您需要创建如下表单:

<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>
当PayPal不需要这些信息时,他们为什么需要这些信息,这有点愚蠢,但哦,好吧。这些文件明确表示,如果他们没有收到合法的价值,比如一个真实的邮政编码来验证该城市和国家,并且还用于问题争议仲裁,那么事情就会出错

请注意,在我的示例中,没有像PP那样的税务或运输突破,因此,在显示此BuyNow buton之前,或者在您的确认页面或发送的确认电子邮件上,您需要根据需要显示这些信息。他们确实有一个“&Basket=”参数,可以在其中指定税款,但它对于您自己可以在表单页面上显示的内容是多余的,而不是必需的。因此,&金额值必须是总值,而不是净值。也没有数量值(可以使用&Basket参数指定)。您很可能会发现&Basket参数与您在签出过程中已经可以在自己的表单上显示的参数相比是多余的。所以,这就是为什么我的例子没有包括它

至于VendorTxCode,这是您创建的,这样您就可以将订单跟踪回相应的客户

然后,使用SagePay提供的加密密码,使用XOR+Base64编码对$PAYMENT\加密。他们有一个AES+Binhex加密选项,但这是一个过度杀伤力,您的服务器必须启用mcrypt库。一些共享托管计划仍然没有启用此功能

它们提供了一个XOR示例,但这是在计算机科学课程中无数次看到的典型示例,您反复循环使用密码的每个ASCII码和数据的每个ASCII码,并取另一个的补码位(XOR过程)。完成后,通过Base64编码对其进行反馈,以实现安全的后期传输。Base64编码使用PHP中的内置函数

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

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

请注意,您不必直接转到success.php。您可以将其设置为success.php?custom=value,以传递有关可以解析的事务的额外信息。他们的代码将自动解决这个问题,并在末尾添加&crypt=参数。fail.php也是如此

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

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


编辑:新链接(2017年10月25日)-

底部链接已关闭。我得到错误-5080:表单事务注册失败。使用上面的例子。有没有调试的方法?有有效的例子吗?字符串是否可以直接添加到表单中,或者是否需要执行更多操作?
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