使用 curl php 捕获 Paypal 付款

Capture Paypal payment using curl php

curl 'https://api.paypal.com/v1/payments/authorization/4TD55050SV609544L/capture' \
-H "Content-Type: application/json" \
-H "Paypal-Application-Correlation-Id: c2edbd6e97b14ff2b19ddb8eec9d264c" \
-H "Authorization: Bearer WfXdnxmyJtdF4q59ofxuQuAAk6eEV-Njm6puht3Nk3w" \
-d '{
   "amount":{
      "currency":"USD",
      "total":"1.50"
   },
   "is_final_capture":true
}'

我需要使用 curl 功能来实现此功能,但我在 PHP 上没有收到任何回复。

我就是这样做的。但我没有得到回应。我不想使用 sdk 必须使用 curl 来做到这一点。

     $data = array(
    "amount" => array(
        "currency" => "USD",
        "total" => $amount
    ),
    "is_final_capture" => "true"
);

$data_string = json_encode($data);
$ch = curl_init( "https://api.paypal.com/v1/payments/authorization/$auth_id/capture" );        

curl_setopt_array( $ch, array(
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($data_string),
            'Authorization: Bearer ' . $access_token 

//
), CURLOPT_POSTFIELDS => $data_string, CURLOPT_RETURNTRANSFER => 真 ) );

$result = curl_exec( $ch );  
var_dump($result); die;   

首先,不要对 POST 使用 CURLOPT_CUSTOMREQEST,使用 CURLOPT_POST。 第二,在你的 curl 命令行中,你发送了一个 JSON 到 paypal,但是在 php 中,你发送了一个无效的字符串到 CURLOPT_POSTFIELDS 并且......可能会出现未定义的行为(使用 http_build_query 作为 POSTFIELDS,而不是 json_encode)。要在 PHP 的 curl 中发送 json 请求正文,请使用 CURLOPT_INFILE,如下所示:

<?php 
$postdata='{
   "amount":{
      "currency":"USD",
      "total":"1.50"
   },
   "is_final_capture":true
}';
$postdatafileh=tmpfile();
fwrite($postdatafileh,$postdata);
rewind($postdatafileh);
$ch=curl_init();
curl_setopt_array($ch,array(
CURLOPT_URL=>'https://api.paypal.com/v1/payments/authorization/$auth_id/capture',
CURLOPT_HTTPHEADER=>array(
'Content-Type: application/json',
'Paypal-Application-Correlation-Id: foo',
'Authorization: Bearer barbaz',
'Content-Length: '.strlen($postdata)
),
CURLOPT_INFILE=>$postdatafileh,
CURLOPT_INFILESIZE=>strlen($postdata),
CURLOPT_VERBOSE=>true,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_ENCODING=>'',
CURLOPT_POST=>true
));

$ret=curl_exec($ch);
fclose($postdatafileh);
var_dump($ret,curl_errno($ch),curl_error($ch));