我们有一个非常古老的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返回以下内容: 结果= 4&amp; RESPMSG =无效金额
因为在两个调用中使用了相同的名称/值对,以及2.02是有效数量的事实,我猜测它与引号或在行尾传递的意外事件有关。 PayPal技术支持无法告诉我究竟是什么传递,我还没有发现任何有效的报价组合。
对于问题原因的任何帮助将不胜感激。
答案 0 :(得分:1)
尝试将参数作为数组传递:
<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。
答案 1 :(得分:1)
您没有提到您使用的是哪种版本的Adobe ColdFusion。 ColdFusion 8&amp; 9有一些错误,无法连接到新的证书,Adobe也无法修复它。
如果您使用Windows并且能够安装它,我建议使用 CFX_HTTP5 。我们最近遇到了许多SSL证书的问题,用这个C ++标签取代内置功能非常有用(特别是因为ColdFusion 8,9&amp; 10似乎没有得到更新以及时解决这个问题。)它使用Windows中安装的证书,但也可以使用客户端证书。
我们最近遇到了第三方API的SSL证书已过期的问题。 CFX_HTTP5能够忽略错误并继续工作,而CFHTTP无法连接。