Подписки PayPal: как получить информацию о подписке после оплаты?

Я использую кнопку PayPal, чтобы установить план регулярных платежей, но я хотел бы получать информацию о подписке, такую ​​как адрес электронной почты и имена пользователей, когда пользователь заканчивает платить. Я попытался использовать приведенный ниже код для получения сведений из PayPal, но в итоге получил эту ошибку, как показано после

var_dump => "object(stdClass)#1 (5) { ["name"]=> string(16) "VALIDATION_ERROR" ["debug_id"]=> string(12) "f1579954da9c" ["message"]=> string (29) "Неверный запрос. См. подробности." ["information_link"]=> string(67) "https://developer.paypal.com/docs/api/payments.billing-plans#errors" ["details"]=> array(1) { [0]=> object(stdClass)#2 (2) { ["field"]=> string(22) "id шаблона недействителен" ["issue"]=> string(18) "Incorrect Plan Id." } } }"

КОД: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api-m.sandbox.paypal.com/v1/payments/billing-plans/'.$plan_id); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer '.rawurlencode($token);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
$response=json_decode($result);
var_dump($response);
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
16
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновлено: на самом деле основная проблема здесь заключалась в использовании API устарело v1/payments/billing-plans. Вместо этого используйте API v1/billing/plans для управления текущими планами подписки, хотя этот вопрос больше касается самих подписок, а не планов.


Судя по ошибке, вы указываете недопустимый plan_id; Идентификатор плана должен начинаться с «P-». Поскольку ваша постановка задачи состоит в том, чтобы получить статус фактического подписка пользователя (а не плана), не используйте ни plan_id, ни этот вызов API.

Идентификатор подписки начинается с «I-» и возвращается в данных onApprove кнопки «Подписка», если вы используете такую ​​кнопку JS. Затем вы можете использовать идентификатор подписки на получить статус с вызовом API.

Самый надежный способ (поскольку он не зависит от какого-либо кода на стороне клиента) для заполнения идентификаторов подписки в вашем бэкэнде — создать прослушиватель событий веб-перехватчика, который будет уведомлен всякий раз, когда новые события подписки имеет место для этого REST app/client_id . Самое полезное такое событие для прослушивания — это PAYMENT_SALE_COMPLETED, так как оно происходит каждый раз, когда подписка оплачивается, и может использоваться, чтобы пометить ее как действительную в течение 1 месяца (обычная логика/деловая потребность), но есть также BILLING.SUBSCRIPTION.ACTIVATED, когда она начинается.

Для согласования вы можете включить произвольный custom_id при создании подписки (внутри createSubscription при использовании кнопки или при создании API при ее использовании). Этот custom_id будет возвращаться во всех веб-перехватчиках, связанных с этой подпиской, поэтому вы можете определить, для какого пользователя/профиля он предназначен.

Спасибо @Preston PHX за сотрудничество, вот идентификатор плана, который я использовал при тестировании P-18E22255LU413640YMJITNOY.

Deogratius Mabima 09.04.2022 10:10

Правильно, это используется при создании новой подписки (в плане есть информация billing_cycles), но не используется после подписки пользователя.

Preston PHX 09.04.2022 10:12

О, и вы вызываете старый API «планов выставления счетов», который устарел и не используется для текущих подписок. Текущий API — developer.paypal.com/docs/api/subscriptions/v1/#plans_get.

Preston PHX 09.04.2022 10:13

Мужчины! Спасибо. Я прошел через этот API и нашел простой API для вызова, который возвращает все детали подписки, которые я хотел. Спасибо за сотрудничество. Вот ссылка developer.paypal.com/docs/api/subscriptions/v1/…

Deogratius Mabima 09.04.2022 10:26

Другие вопросы по теме