【发布时间】: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 请求未经授权有什么问题,我是否以正确的方式处理这个问题?
【问题讨论】: