Невозможно вернуть заказ через API Paypal - PullRequest
1 голос
/ 10 апреля 2020

Я интегрирую 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, поскольку он возвращается к ошибке «Ошибка проверки подлинности субъекта», если я умышленно предоставляю неправильное значение.

1 Ответ

0 голосов
/ 10 апреля 2020
{
  "error": "invalid_request",
  "error_description": "No permissions to set target_client_id"
}

PayPal сказал вам интегрировать API-интерфейс Commerce Platform с помощью этой учетной записи в Sandbox? У вас нет разрешения делать то, что вы делаете. Свяжитесь с PayPal, если вам нужно интегрировать это; он недоступен без правильных настроек разрешений для вас.

Обычные вещи, которые не требуют специальных разрешений, - это использование субъектной аутентификации, когда эта учетная запись предоставила вам разрешения третьих сторон, или использовать ее. клиентская учетная запись: секретный.

...