如何解决使用 ColdFusion 调用 Sage Pay API 时出错
使用 ColdFusion,我们尝试通过向 Sage Pay 提交详细信息来处理客户付款。
无论提交什么,我们都会收到错误 500 和 5080。
我们提交的 crypt 与收到的版本有一种奇怪的不同: 前 1450 个字符是相同的。 然后去掉末端的一小部分,换上一个新的更长的夹头。
我们查看了之前建议的 Base64 选项,因为接收的是 12 个字节而不是 16 个字节,但这似乎并没有解决问题。
以前有人见过这个吗?谁能建议我们可以尝试完成购买的东西?
请! 煤气
来自 Kraig Johnson 的更新
链接到规范 PDF:https://www.opayo.ie/file/21086/download-document/FORM_Integration_and_Protocol_Guidelines_130515.pdf?token=FF7jKOvWemRFvw6UhEGOH1ULUpJBiXYIZKHSkhkl2II
Sage 在指南中特别说明,
" 要求是使用提供的密码作为密钥和初始化向量,在 CBC 模式下使用 PKCS#5 填充将字符串加密为 AES(块大小 128 位),并将结果编码为十六进制。”
如果我们不先用 base64 编码,我们会得到一个无效的位长错误 - 12 字节。
stuff
是我们要编码的字符串,EncryptionPassword
是我们的密钥。
keyIVBytes = charsetDecode(EncryptionPassword,"utf-8");
base64Key = binaryEncode(keyIVBytes,"base64");
crypt=encrypt(stuff,base64Key,"AES/CBC/PKCS5Padding","hex",keyIVBytes);
解决方法
我是从事 SagePay 表单集成的开发人员。 Sage 在指南中特别指出,“要求是在 CBC 模式下使用 PKCS#5 填充将字符串加密为 AES(块大小 128 位),使用提供的密码作为密钥和初始化向量,并将结果编码为十六进制。 "
如果我们不先用 base64 编码,我们会得到一个无效的位长错误 - 12 字节。
“stuff”是我们要编码的字符串,EncryptionPassword 是我们的密钥。
keyIVBytes = charsetDecode(EncryptionPassword,"utf-8");
base64Key = binaryEncode(keyIVBytes,"base64");
crypt=encrypt(stuff,base64Key,"AES/CBC/PKCS5Padding","hex",keyIVBytes);
,
这是我的加密页面中的整个代码块。我做错了什么?
<cfscript>
myDT = int(timeformat(now(),'hhmmss'));
seed = int(Randomize(myDT)*10000000);
VendorTxCode = dateformat(now(),"yyddmm-") & seed;
EncryptionPassword="EFwm44ahkyxGGU2o";
stuff = "VendorTxCode=" & VendorTXCode & "&";
stuff = stuff & "Amount=" & numberformat(form.ordergt,'0.00') & "&";
stuff = stuff & "Currency=" & "GBP" & "&";
stuff = stuff & "Description=" & "GPO Retro Order [PROMO:" & ucase(form.promocode) & "] " & form.model & "[" & form.colour & "] QTY [" & form.qty & "]" & "&";
stuff = stuff & "SuccessURL=https://gporetro.com/order/order-success.cfm" & "&";
stuff = stuff & "FailureURL=https://gporetro.com/order/order-failure.cfm" & "&";
stuff = stuff & "CustomerName=" & form.firstname & ' ' & form.surname;
stuff = stuff & "CustomerEMail=" & form.email & "&";
stuff = stuff & "VendorEMail=sales@gporetro.com" & "&"
stuff = stuff & "SendEMail=1" & "&";
stuff = stuff & "EmailMessage=Thanks for your order." & "&";
stuff = stuff & "BillingSurname=" & form.surname & "&";
stuff = stuff & "BillingFirstnames=" & form.firstname & "&";
stuff = stuff & "BillingAddress1=" & trim(form.address1b) & "&";
stuff = stuff & "BillingAddress2=" & trim(form.address2b) & "&";
stuff = stuff & "BillingCity=" & form.citytownb & "&";
stuff = stuff & "BillingPostCode=" & form.postcodeb & "&";
stuff = stuff & "BillingCountry=GB" & "&";
stuff = stuff & "BillingPhone=" & form.tel & "&";
stuff = stuff & "DeliverySurname=" & form.surname & "&";
stuff = stuff & "DeliveryFirstnames=" & form.firstname & "&";
stuff = stuff & "DeliveryAddress1=" & trim(form.address1) & "&";
stuff = stuff & "DeliveryAddress2=" & trim(form.address2) & "&";
stuff = stuff & "DeliveryCity=" & form.citytown & "&";
stuff = stuff & "DeliveryPostCode=" & form.postcode & "&";
stuff = stuff & "DeliveryCountry=GB" & "&";
stuff = stuff & "DeliveryPhone=" & form.tel;
keyIVBytes = charsetDecode(EncryptionPassword,"base64");
crypt = encrypt(stuff,keyIVBytes);
</cfscript>
<form action="<cfoutput>#vspsite#</cfoutput>" enctype="multipart/form-data" name="SagePayForm" id="SagePayForm" method="post">
<input name="VPSProtocol" type="hidden" id="VPSProtocol" value="3.00">
<input name="Vendor" type="hidden" id="Vendor" value="Protelxltd">
<input name="TxType" type="hidden" id="TxType" value="PAYMENT">
<input name="crypt" type="hidden" id="crypt" value="@<cfoutput>#crypt#</cfoutput>">
</form>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。