ColdFusion和Curl的PayFlowPro集成问题

时间:2015-09-08 21:17:51

标签: curl paypal coldfusion

我们有一个非常古老的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技术支持无法告诉我究竟是什么传递,我还没有发现任何有效的报价组合。

对于问题原因的任何帮助将不胜感激。

2 个答案:

答案 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无法连接。

http://adiabata.com/cfx_http5.cfm