我们有一个非常旧的ColdFusion网站,我们需要更新即将到来的PayPal SSL证书的变化。我们发现ColdFusion包含的证书与新的PayPal证书不兼容,因此我们需要使用curl来实际调用PayFlowPro。我们将使用cfexecute标记从ColdFusion调用curl。
当我从Linux命令行使用curl调用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=Invalid amount
因为在两个调用中使用了相同的名称/值对,并且2.02是一个有效的值,所以我猜测这与引号或在行尾传递的一些意想不到的东西有关。PayPal技术支持无法告诉我传入的确切内容是什么,我也没有找到任何有效的引用组合。
任何有关问题原因的帮助都将不胜感激。
发布于 2015-09-09 06:36:46
尝试将参数作为数组传递:
<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。
发布于 2015-09-10 00:24:59
您没有提到您使用的是哪个版本的Adobe ColdFusion。ColdFusion 8和9有一些错误,无法连接到较新的证书,也不打算修复它。
如果您使用Windows并且能够安装它,我建议您使用CFX_HTTP5。我们最近遇到了很多SSL证书的问题,用这个C++标签替换内置的functionailty是非常有益的(特别是因为ColdFusion 8、9和10似乎没有及时更新来修复这个问题)。它使用Windows中安装的证书,但也可以使用客户端证书。
我们最近遇到了第三方API的SSL证书过期的问题。CFX_HTTP5能够忽略该错误并继续工作,而CFHTTP无法连接。
http://adiabata.com/cfx_http5.cfm
https://stackoverflow.com/questions/32467396
复制相似问题