0

我目前正在开发与 PayPal 的 Payflow Pro Gateway 的集成。我正在向 PayPal 发送请求以获取他们的“安全令牌”,以便我可以使用它来进行真正的交易。我在 SO 上找到的一个示例通过 cURL 工作,但我运行的原始 HTML 表单 POST 和 RunScope 测试不起作用

这是 cURL 命令:

curl https://pilot-payflowpro.paypal.com -kd "PARTNER=PayPal&VENDOR=*****&USER=*****&PWD=*****&TRXTYPE=A&AMT=40&CREATESECURETOKEN=Y&SECURETOKENID=*******&SILENTTRAN=TRUE"

根据cURL 文档

-k 选项是:

"(SSL) 此选项明确允许 curl 执行“不安全”的 SSL 连接和传输。所有 SSL 连接都试图通过使用默认安装的 CA 证书包来确保安全。这使得所有被认为“不安全”的连接都失败,除非 -k , --insecure 被使用。”

-d 选项是:

"(HTTP) 在 POST 请求中将指定的数据发送到 HTTP 服务器,就像浏览器在用户填写 HTML 表单并按下提交按钮时所做的那样。这将导致 curl 将数据传递给使用内容类型应用程序/x-www-form-urlencoded 的服务器。与 -F、--form 比较。

-d, --data 与 --data-ascii 相同。要发布纯二进制数据,您应该改用 --data-binary 选项。要对表单字段的值进行 URL 编码,您可以使用 --data-urlencode。

如果在同一命令行上多次使用这些选项中的任何一个,则指定的数据片段将使用分隔符号 &-symbol 合并在一起。因此,使用'-d name=daniel -d Skill=lousy'会生成一个看起来像'name=daniel&skill=lousy'的帖子块。

如果您以字母 @ 开始数据,则其余部分应该是从中读取数据的文件名,或者 - 如果您希望 curl 从标准输入中读取数据。文件的内容必须已经是 URL 编码的。也可以指定多个文件。因此,将使用 --data @foobar 从名为“foobar”的文件发布数据。当 --data 被告知从这样的文件中读取时,将删除回车符和换行符。

这很好用并返回此响应:

RESULT=0&SECURETOKEN=*****&SECURETOKENID=*****&RESPMSG=Approved

HTML 表单 POST

但是,我认为相同的请求在以下 HTML 表单 POST 中失败:

<input type="hidden" name="TRXTYPE" value="A" />
<input type="hidden" name="SILENTTRAN" value="TRUE" />

<input type="hidden" name="AMT" value="40" />

<input type="hidden" name="CREATESECURETOKEN" value="Y" />
<input type="hidden" name="SECURETOKENID" value="*****" />

<input type="submit" value="Get Secure Token" />

这给了我在 FireFox 中的“连接已重置”。

我还尝试使用 jQuery 使用 $.ajax() 发布数据,但我收到了 200 响应,其中没有数据。

运行范围

当我将上述参数输入RunScope时,我得到:

RESULT=1&SECURETOKENID=*****&RESPMSG=User authentication failed

这没有任何意义!

我在想 PayPal 要么是在检查用户代理,要么是在请求标头,但我没有任何真正的想法。任何人都可以阐明这种行为吗?

4

0 回答 0