PayPal NVP API - TransactionSearch错误10001超时处理请求

时间:2017-02-10 20:26:42

标签: php curl paypal paypal-nvp

我正在尝试使用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>";
}

非常感谢您对此问题的任何帮助!

1 个答案:

答案 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);