Я пытаюсь обернуть голову вокруг потока подписок Paypals.
У нас есть поток:
1.) Создать тарифный план
2.) Активировать тарифный план
3.) Создайте соглашение о выставлении счета (используя активированный план, отправьте клиента на адрес PayPal)
4.) Клиент подтверждает, возвращает обратно на наш URL, выполняет с предоставленным токеном
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу сослаться ни на один идентификатор, возвращенный на шаге 4, на что-либо, предоставленное в первых трех шагах.
Должно быть, я что-то упустил, но я совершенно в тупике. Я не могу найти способ связать выполненное соглашение с предыдущими шагами.
Как упомянуто PayPal_Orcun, проблема все еще находится на рассмотрении и решается внутренне в PayPal, однако, в то же время, есть кое-что, что вы могли бы сделать здесь.
На шаге 3 после создания соглашения вы получаете ссылку для утверждения, которая выглядит следующим образом:
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&маркер = EC-8DL20958WD398123E
Здесь скопируйте токен и сохраните его в базе данных. Думайте об этом как уникальный идентификатор.
Выполните платеж. Когда он возвращается, PayPal будет перенаправлять обратно с URL-адресом, как это:
Как видите, вы могли бы сделать $_GET['token']
чтобы получить токен здесь и сравнить с созданным. Вы можете использовать ID
возвращается при успешном выполнении и замените поле токена новым полем идентификатора.
Я согласен, это не то, что вы ожидаете, но это определенно позволит вам подключить соглашение после create
а также execute
звонки.
Надеюсь, это помогло.
Вот как работают планы выставления счетов REST API и соглашения о выставлении счетов (включая примеры вызовов curl):
Прежде всего, пожалуйста, убедитесь, что ваше REST-приложение переключено на подписку (вы можете проверить настройки REST-приложения в https://developer.paypal.com/webapps/developer/applications/myapps )
1-) Создать тарифный план
curl -k -v -H «Тип контента: application / json» -H «Авторизация: Носитель ACCESS_TOKEN» -d ‘{«name»: «План тестирования клуба REST», «description»: «Создание шаблона.», » type «:» fixed «,» payment_definitions «: [{» name «:» Regular Payments «,» type «:» REGULAR «, «quency»: «MONTH», «interval_interval»: «2», «amount»: { «значение»: «100», «валюта»: «USD»}, «циклы»: «12», «charge_models»: [{ «типа»: «ШИППИНГ», «количество»: { «значение»:» 10″ , «валюта»: «USD»}}, { «типа»: «налог», «количество»: { «значение»: «12», «валюта»: «USD»}}]}], «merchant_preferences «: {» setup_fee «: {» значение «:» 1″ , «валюта»: «USD»}, «RETURN_URL»: «HTTP: // ReturnUrl», «cancel_url»: «HTTP: // cancelurl»,» auto_bill_amount «:» ДА», «initial_fail_amount_action»: «ПРОДОЛЖИТЬ», «max_fail_attempts»: «0»}}» https://api.sandbox.paypal.com/v1/payments/billing-plans
PayPal вернет идентификатор тарифного плана, начинающийся с «P-»
2-) Активировать тарифный план
curl -k -v -H «Content-Type: application / json» -H «Авторизация: Носитель ACCESS_TOKEN» -d ‘[{«path»: «/», «value»: {«state»: «ACTIVE»} , «ор»: «заменить»}] https://api.sandbox.paypal.com/v1/payments/billing-plans/
3-) Создать соглашение о выставлении счетов
curl -k -v -H «Тип контента: application / json» -H «Авторизация: Носитель ACCESS_TOKEN» -d ‘{«name»: «План тестирования клуба REST», «description»: «Создание шаблона.», » start_date «:» 2015-03-20T07: 49: 27-07: 00″ , «план»: { «ID»: «PLAN_ID_HERE»}, «плательщик»: { «PAYMENT_METHOD»: «PayPal»}, «shipping_address» : {«line1»: «111 First Street», «city»: «Saratoga», «state»: «CA», «postal_code»: «95070», «country_code»: «US»}} ‘ https://api.sandbox.paypal.com/v1/payments/billing-agreements
PayPal вернет URL для переадресации Express Checkout с токеном EC. Например. https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&маркер = EC-xxxxxxxxxxxxxxxxx
Вам нужно перенаправить своего клиента в PayPal через этот URL. Как только соглашение о выставлении счетов будет авторизовано, клиент возвращается на ваш сайт (return_url на шаге 1).
4-) оформить биллинговое соглашение
curl -k -v -H «Тип контента: application / json» -H «Авторизация: Носитель ACCESS_TOKEN» -d ‘{}’ https://api.sandbox.paypal.com/v1/payments/billing-agreements/EC-TOKEN_HERE/agreement-execute
Решение, которое я использовал для этой же проблемы, было установить override_merchant_preferences
в договоре о выставлении счета, с return_url
содержащий идентификатор пользователя в запросе, например www.domain.com/api/handler.php?uid=42&action=return
,