Я интегрирую PayPal, используя PHP и cURL, и мне удалось создать заказы и захватить платежи через конечные точки https://api.sandbox.paypal.com/v2/checkout/orders
и https://api.sandbox.paypal.com/v2/checkout/orders/<order_id>/capture
Заказы, которые я пытаюсь вернуть, были успешно Захваченный и просматривающий детали показывает, что их статус «ЗАВЕРШЕН», а поле final_capture имеет значение true, поэтому заказ был размещен, и я вижу, что транзакция успешно завершилась в торговом счете
Теперь я пытаюсь для проверки возвратов с использованием идентификатора захвата, который я получаю из вызова захвата, но он всегда завершается ошибкой со следующим телом ответа
{
"error":"invalid_subject",
"error_description":"Subject Authentication failed"
}
Я обнаружил проблему, вызванную ошибкой субъектной аутентификации, которая была неправильной Paypal- Заголовок Auth-Assertion, который я уже напечатал и дважды проверил несколько раз, и кажется, что это правильно Вот код, который я использую для звонка
// Codeigniter function to read from $_POST
$capture_id = $this->input->post('paypal_capture_id');
$auth_1 = base64_encode("{\"alg\":\"none\"}");
$auth_2 = base64_encode("{\"payer_id\":<payer_id>,\"iss\":<client_id>}");
$auth_assertion_header = $auth_1 . "." . $auth_2 . ".";
$curlSES=curl_init();
curl_setopt($curlSES,CURLOPT_URL,"https://api.sandbox.paypal.com/v2/payments/captures/$capture_id/refund");
curl_setopt($curlSES, CURLOPT_POST, true);
curl_setopt($curlSES, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer '. $access_token,
'PayPal-Auth-Assertion:' . $auth_assertion_header
));
curl_setopt($curlSES, CURLOPT_POSTFIELDS, '{}'); // empty payload means full refund
curl_setopt($curlSES, CURLOPT_RETURNTRANSFER, true);
$result=curl_exec($curlSES);
Где payer_id и client_id заполняются с использованием учетной записи продавца, используемой для среды песочницы, а client_id является секретным идентификатором для приложения, предоставляемого Paypal, $ access_token ранее был сгенерирован из функции, которую я использую в других частях приложения, и она отлично работает.
Кроме того, если я попытаюсь сделать тот же вызов с помощью Postman (и PayPal API explorer также) он выдает другую ошибку, то есть
{
"error": "invalid_request",
"error_description": "No permissions to set target_client_id"
}
Результаты поиска по этой ошибке не очень полезны, поэтому я заблудился в том, что я делаю там неправильно, хотя это не кажется связан с Paypal-Auth-Assertion, поскольку он возвращается к ошибке «Ошибка проверки подлинности субъекта», если я умышленно предоставляю неправильное значение.