繁体   English   中英

使用Curl的PayPal RESTFUL API的PHP调用返回“未授权”

[英]PHP call to PayPal RESTFUL API using Curl returns 'unauthorized'

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


    curl -v https://api.sandbox.paypal.com/v1/oauth2/token   -H "Accept: application/json"   -H "Accept-Language: en_US"   -u "[client id]:[secret]"   -d "grant_type=client_credentials"

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

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


    curl -v https://api.sandbox.paypal.com/v1/payments/payment -H 'Content-Type: application/json' -H 'Authorization: Bearer [token]' -d '{
    "redirect_urls":{
    "return_url":"http://ruxed.com/thank-you/",
    "cancel_url":"http://ruxed.com/make-a-payment/"
    },
    "payer":{
    "payment_method":"paypal"
    },
    "transactions":[
    {
    "amount":{
    "total":"10.00",
    "currency":"USD"
    }
    }
    ]
    }'

通过卷曲命令行可以很好地进行此操作,因为我得到一个指示付款成功的响应,然后可以登录到我的PayPal Developer仪表板并查看记录。 但是,我对此感到困惑,因为我没有提供该笔付款应来自的任何帐户-我没有提供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请求有什么问题,我是否正在以正确的方式进行处理?

@ user2252436

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

我认为CURLOPT_HEADER需要一个int或bool(无论是1还是TRUE)来发送标头。

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

例如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM