所以很显然,贝宝API代码不是很容易阅读或理解,也没有提供的文档。 This guy agrees with me.如何通过PayPal API凭证安全地使用PHP(以及为什么这不被认为是安全的)
如果你不是PayPal的文档在几分钟内花了,你就会知道它更容易手动解密有1024位的RSA私钥比理解PayPal的数字商品与快速结账API。
所以,我终于想通了如何让PHP通过此示例代码使用PayPal的API进行通信:
https://ppmts.custhelp.com/app/answers/detail/a_id/945/kw/php
但是贝宝完全距离自己从他们提供的样品,他们必须有一个对开发人员花费数小时的时间来计算系统的兴趣,而不是只给他们易于实现并开始获得报酬的代码。我不知道他们是如何得到如此成功......
作为事实上的示例代码甚至说,这是不安全的,不应该用于生产:
// Set API creds and version greater than 65.1, also set endpoint and redirect url
//**************************************************//
// This is where you would set your API Credentials //
// Please note this is not considered "SECURE" this //
// is an example only. It is NOT Recommended to use //
// this method in production........................//
//**************************************************//
$APIUSERNAME = "xxxx";
$APIPASSWORD = "xxxx";
$APISIGNATURE = "xxxx";
$ENDPOINT = "https://api-3t.sandbox.paypal.com/nvp";
本质上发生的事情是这些变量用于创建一个字符串,其中包含有关购买的所有信息以及API凭证。该字符串由每个索引和值对组成,并用连字符$req_str = "USER=xxxx&PWD=xxxx";
等连接。该字符串被传递给函数PPHttpPost($ENDPOINT, $req_str);
。此功能使用curl_init();
和相关函数以某种方式与PayPal服务器进行通信,并返回一个唯一的密钥来标识事务及其值。
我不太确定这个功能是如何工作的,但是它列在我上面在“functions.php”下面提供的链接上。
两个问题:
1)这是为什么不认为是安全的?
2)如果它不保证通过写他们到变量,来告诉你的API证书的应用,又是什么?
“URL编码和HTML编码处理不当”像什么和在哪里? – olli
注入'$ req_str'的变量都不是URL编码的,因此任何这些变量中的任何URL特殊字符(例如'&')都会将其分解。 'return.php'在一个字符串中构建一个HTML页面,其中包含不带'htmlspecialchars()'的响应中的值,从而允许响应的供应商将脚本内容注入到页面中。好的,供应商是贝宝,所以你希望他们不会试图利用你,但它仍然是错误的行为和蹩脚的代码症状。 – bobince
我会推荐使用PHP SDK从这里:http://paypal.github.io/#merchant – Praveen