我们有一个非常旧的 ColdFusion 网站,需要针对即将到来的 PayPal SSL 证书更改进行更新。我们发现 ColdFusion 中包含的证书与新的 PayPal 证书不兼容,因此我们需要使用curl 来实际调用 PayFlowPro。我们将使用 cfexecute 标签从 ColdFusion 调用curl。
当我使用curl从Linux命令行调用PayFlowPro时,交易正确完成。例如,以下是导致成功处理事务的脚本命令。
curl https://pilot-payflowpro.paypal.com/transaction -d "PARTNER=VeriSign&PWD=xxxxxxxx&VENDOR=xxxxxxx&USER=xxxxxx&TENDER=C&ACCT=5105105105105100&TRXTYPE=S&EXPDATE=1215&AMT=2.02"
然后,我尝试使用与脚本中完全相同的名称/值对从 ColdFusion 调用curl。 ColdFusion代码如下:
<cfset targ = 'https://pilot-payflowpro.paypal.com/transaction -d "PARTNER=VeriSign&PWD=xxxxxxxx&VENDOR=xxxxxxx&USER=xxxxxx&TENDER=C&ACCT=5105105105105100&TRXTYPE=S&EXPDATE=1215&AMT=2.02"'>
<cfexecute name = "/usr/local/bin/curl"
arguments = "#targ#"
timeout = "10"
variable = "tdata" />
<cfdump var="#tdata#">
ColdFusion 返回以下内容: RESULT=4&RESPMSG=金额无效
因为两次调用中使用了相同的名称/值对,而且 2.02 是有效数量,所以我猜测它与引号或行尾传入的意外内容有关。 PayPal 技术支持无法告诉我到底传入了什么,而且我还没有找到任何有效的报价组合。
任何有关问题原因的帮助将不胜感激。
最佳答案
尝试将参数作为数组传递:
<cfset targ = arrayNew(1)>
<cfset arrayAppend(targ, "https://pilot-payflowpro.paypal.com/transaction")>
<cfset arrayAppend(targ, '-d "PARTNER=VeriSign&PWD=xxxxxxxx&VENDOR=xxxxxxx&USER=xxxxxx&TENDER=C&ACCT=5105105105105100&TRXTYPE=S&EXPDATE=1215&AMT=2.02"')>
该代码段与 ColdFusion MX 兼容。
如果这也不起作用,则参数的总长度可能是一个问题(假设您的示例已被删除)。 cfexecute 可能会默默地截断参数字符串。不过我们在 Windows 上遇到了这个问题。尝试使用较短的字符串(少于 200 个字符)测试 cfexecute 上的curl。
关于curl - PayFlowPro 与 ColdFusion 和 Curl 的集成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32467396/