我正在尝试使用PayPal NVP API构建自定义会计报告,该API将获取特定日期范围内的所有交易。
我的代码:
respond_to do |format|
format.html { redirect_to '/' }
end
以下是打印的内容:
$headers = array(
'USER' => $production_user,
'PWD' => $production_pass,
'SIGNATURE' => $production_sig
);
$nvp = array(
'METHOD' => 'TransactionSearch',
'TRANSACTIONCLASS' => 'RECEIVED',
'STARTDATE' => '2016-12-01T00:00:00Z',
'ENDDATE' => '2016-12-31T00:00:00Z'
);
$request_url = "https://api-3t.paypal.com/nvp?".http_build_query($nvp);
$curl = curl_init($request_url);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, $headers);
curl_setopt($curl, CURLOPT_POST, 1);
$result = curl_exec($curl);
$result = explode("&", $result);
foreach($result as $f=>$v){
$t = explode("=", $v);
echo $t[0]." => ".urldecode($t[1]);
echo "<br>";
}
非常感谢您对此问题的任何帮助!
答案 0 :(得分:0)
您正在使用发布请求但尚未发布数据。
我不知道PayPal想要看到什么,但我猜测它并不是你发送的东西。
要尝试的一些事项:
如果您需要在请求标头中传递USER,PWD和SIGNATURE,请执行以下操作:
$request = array();
$request[] = "USER: $production_user";
$request[] = "PWD: $production_pass";
$request[] = "SIGNATURE: $production_sig";
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);
如果$ nvp参数需要发布数据,请尝试:
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvp);
$ nvp也可以作为帖子数据中的查询字符串传递。
$query = http_build_query($nvp);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
区别在于内容类型。
第一种方法:
Content-Type: application/x-www-form-urlencoded
第二种方法:
Content-Type: multipart/form-data
为了帮助解决问题,最好同时查看请求和响应标题。
使用这些选项获取标题:
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
请求标题将位于&#39; curl_getinfo()&#39;
curl_setopt($ch, CURLOPT_HEADER, true);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
var_export($info);
以上提供了许多其他请求的详细信息。如果您只想查看标题:
$request = curl_getinfo($ch, CURLINFO_HEADER_OUT);
获取响应标题:
$result = curl_exec($ch);
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$response = substr($result ,0,$skip);
$result = substr($result ,$skip);