【发布时间】:2014-09-08 14:52:36
【问题描述】:
我刚刚从使用普通的“纯文本”PayPal 按钮切换到加密按钮(两者都是自制的,因为它们需要是动态的)。普通的工作正常,但我遇到了加密版本的问题。 Paypal 只是失败并显示通用的“抱歉,您的最后一个操作无法完成”消息,并且没有提供更多信息。
我发布的信息是……
cert_id=<certificateID>
business=<merchantID>
return=<returnURL>
cancel_return=<returnURL>
notify_url=<ipnURL>
cn=Email Address Needed
lc=GB
currency_code=GBP
button_subtype=services
no_note=0
no_shipping=1
rm=1
charset=utf-8
item_name=<productName>
item_number=<productID>
amount=<value>
出于安全原因,此时 中的所有内容都已删除,但这应该让您对加密后发布的内容有所了解。
表单很简单,通过 jQuery AJAX 调用提交(以减少加密按钮添加到页面的大量数据)...
<form id='igp-<prodID>' action='https://www.paypal.com/cgi-bin/webscr' method='post'>
<input type='hidden' name='cmd' value='_s-xclick' />
<input type='hidden' name='encrypted' value='{$paypalData}' />
</form>
PayPal 的文档在您需要在这里做什么方面相当随意地散布,但我看不到任何我遗漏的东西。
如果我替换 cert_id 中的一个字母,那么它仍然会失败并显示相同的消息(而不是告诉我它无法解密数据),这给人的印象是它甚至没有走那么远。
有什么想法吗?
编辑/更新: 看起来失败实际上是“我们无法解密证书 ID”。 (使用沙盒时显示)。发送到 OpenSSL 的代码看起来很正常(正确的 '=' 匹配值)。
我正在使用的 OpenSSL 代码是...
$opensslOutput = trim(shell_exec("export RANDFILE='system/.rnd'; (openssl smime -sign -signer {$keystoreCert} -inkey {$keystoreKey} -outform der -nodetach -binary <<_EOF_\n{$paypalData}\n_EOF_\n) | openssl smime -encrypt -des3 -outform pem -binary {$paypalCert}"));
这反过来会产生一个大的 PCK7Z 块,并且 OpenSSL 没有错误。所以这就引出了一个问题,Paypal 在这里可能会失败吗?上面的代码是否不再产生 Paypal 喜欢的签名块?
【问题讨论】:
-
FWIW 这个错误现在很普遍,不一定限于加密支付。许多论坛条目已经确定了一个可能的浏览器问题(适用于 Safari,但不适用于 Chrome?),总体印象是,这是由于 Paypal 的设计大修造成的。无论哪种方式,它都会影响付款,这对他们不利。
标签: paypal