【问题标题】:PHP call to PayPal RESTFUL API using Curl returns 'unauthorized'使用 Curl 对 PayPal RESTFUL API 的 PHP 调用返回“未授权”
【发布时间】:2014-03-09 14:06:49
【问题描述】:

我正在使用 PayPal RESTful API,并且能够使用 curl 从命令行创建交易,但无法使用 PHP 使其工作,并且有一些关于 API 的一般性问题我没有找到答案在文档中。我希望将用户引导到 PayPal 登录并处理付款,然后根据我的网站输入的表单将交易金额发送到该网站。从命令行使用 curl,我可以使用以下方法成功获取 PayPal 会话令牌:


    curl -v @987654321@   -H "Accept: application/json"   -H "Accept-Language: en_US"   -u "[client id]:[secret]"   -d "grant_type=client_credentials"

这会按预期返回带有访问令牌的响应。在 PHP 中,我发出相同的 curl 请求并获得相同的结果,所以这一步没有问题。

获得令牌后,我可以使用它在命令行上通过 curl 使用以下代码进行购买:


    curl -v @987654322@ -H 'Content-Type: application/json' -H 'Authorization: Bearer [token]' -d '{
    "redirect_urls":{
    "return_url":"@987654323@",
    "cancel_url":"@987654324@"
    },
    "payer":{
    "payment_method":"paypal"
    },
    "transactions":[
    {
    "amount":{
    "total":"10.00",
    "currency":"USD"
    }
    }
    ]
    }'

这在 curl 命令行中运行良好,因为我收到指示付款成功的响应,然后我可以登录到我的 PayPal 开发人员仪表板并查看记录的记录。但是,我对此感到困惑,因为我没有提供任何应从该帐户付款的帐户——我没有提供 PayPal 用户名或任何其他信息,那么 PayPal 怎么知道从哪里获取这些资金?

在 PHP 中,我进行了相同的 curl 调用,但得到了“401 未授权”响应。这是 curl 的代码:(stackoverflow 上的代码格式在这里为我搞砸了,不允许我用代码包装器提交问题,所以没有代码包装器适合你)。

$headers = array( # BUILD HEADERS FOR CURL
sprintf('Authorization: Bearer %s', $_POST['token']),
'Content-Type: application/json'
);
$data = array( # BUILD DATA FOR CURL
'intent' => 'sale',
"redirect_urls" => array(
"return_url" => "http://ruxed.com/thank-you/",
"cancel_url" => "http://ruxed.com/make-a-payment/"
),
"payer" => array( "payment_method" => "paypal" ),
"transactions" => array(
array(
"amount" => array(
"total" => $_POST['actual_payment'],
"currency" => "USD"
)
)
)
);
$curl = curl_init( "https://api.sandbox.paypal.com/v1/payments/payment" ); // INIT CURL
curl_setopt( $curl, CURLOPT_POST, true ); 
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $curl, CURLOPT_HEADER, $headers ); // SET HEADERS
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ); 
curl_setopt( $curl, CURLOPT_POSTFIELDS, json_encode( $data ) ); // SET POST DATA
$result = curl_exec( $curl ); # ROCK THE CURL
if( empty( $result ) ) die( curl_error( $curl ) ); # IF RESPONSE IS EMPTY, THERE WAS AN ERROR
curl_close( $curl ); # CLOSE THE CURL

我希望上面的代码将用户引导到 PayPal 以使用他们的帐户登录并处理正在传递的金额的付款,因为我没有在我的网站上请求他们的 PayPal 登录凭据。我的 PHP curl 请求未经授权有什么问题,我是否以正确的方式处理这个问题?

【问题讨论】:

    标签: php api rest paypal


    【解决方案1】:

    @user2252436

    http://php.net/manual/en/function.curl-setopt.php

    我认为 CURLOPT_HEADER 需要一个 int 或 bool,1 或 TRUE 来发送标头。

    我确实相信 CURLOP_HTTPHEADER 是您想要的,您可以直接将数组传递给它,而无需编码为查询字符串。

    例如

    curl_setopt($curlHandle, CURLOPT_HEADER, 1);
    curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $curlHeaders);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 2016-01-25
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多