使用以下代码,我可以获取
accessToken
变量,但无法获取 paymentDetails
,它只是返回一个空值。换句话说,API 部分代码不起作用。基于 paymentDetails
获取 paymentId
的 PayPal API 不起作用。是否缺少 cURL 选项?
当然,我已经删除了下面代码中的
clientId
、clientSecret
和 paymentId
值:
<?php
// replace with your actual live PayPal credentials
$clientId = '';
$clientSecret = '';
// get accessTokenUrl
$accessTokenUrl = 'https://api.paypal.com/v1/oauth2/token';
// replace with the payment ID retrieved from webhook or API response
$paymentId = '';
// get curl
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $accessTokenUrl,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_USERPWD => $clientId . ':' . $clientSecret,
CURLOPT_POSTFIELDS => 'grant_type=client_credentials',
CURLOPT_HTTPHEADER => array(
'Accept: application/json',
'Accept-Language: en_US'
),
));
// get accessToken
$result = curl_exec($curl);
$array = json_decode($result, true);
$accessToken = $array['access_token'];
// get paymentDetailsUrl
$paymentDetailsUrl = 'https://api.paypal.com/v1/payments/' . $paymentId;
// get curl
$curl = curl_init($paymentDetailsUrl);
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $accessToken,
'Content-Type: application/json'
)
));
// get paymentDetailsResponse
$paymentDetailsResponse = curl_exec($curl);
$curlError = curl_error($curl);
curl_close($curl);
// check condition
if ($curlError) {
echo 'Error retrieving payment details: ' . $curlError;
exit;
}
// get paymentDetails
$paymentDetails = json_decode($paymentDetailsResponse, true);
// check condition
if (isset($paymentDetails['error'])) {
echo 'Error retrieving payment details: ' . $paymentDetails['error_description'];
exit;
}
// get variables
$payerId = $paymentDetails['payer']['payer_info']['payer_id'];
$amount = $paymentDetails['transactions'][0]['amount']['value'];
$currency = $paymentDetails['transactions'][0]['amount']['currency'];
$state = $paymentDetails['state']; // e.g., "approved"
// echo output
echo 'Payer ID: ' . $payerId . '<br />';
echo 'Payment Amount: ' . $amount . ' ' . $currency . '<br />';
echo 'Payment State: ' . $state . '<br />';
您收到错误响应,因为 4AW79167HR517335 不是有效的付款 ID,并且您使用了错误的 API 调用,这就是为什么在开发过程中记录整个响应非常重要。
假设您想继续使用已弃用的 v1/ payment API,请改用 get sale id 方法:https://developer.paypal.com/docs/api/ payments/v1/#sale_get .
当前集成使用 v2/checkout/orders 进行结帐,使用 v2/ payment 进行结帐后操作,其中相应的调用是 https://developer.paypal.com/docs/api/ payments/v2/#captures_get