PayPal API 使用 PHP 和 cURL 获取付款详细信息

问题描述 投票:0回答:1

使用以下代码,我可以获取

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 />';
php curl paypal
1个回答
0
投票

您收到错误响应,因为 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

© www.soinside.com 2019 - 2024. All rights reserved.