Как подключить paypal к сайту
Интеграция PayPal на сайт в качестве платежной системы и проблема с https
Недавно предстояло сделать редизайн сайта с последующим перестроением всей CMS. В процессе работы обратил внимание на интеграцию PayPal в качестве платежной системы. О плюсах данной платежной системы или какой-то выгоде сказать однозначно не могу, выбор заказчика, ну а так как его основная деятельность Mail Forwarding (пересылка и доставка посылок из США), то ему удобней использовать данную платежную систему. 
Общие статистические цифры о PayPal – 143 миллионов пользователей в 203 стран мира, хотя при этом до недавнего времени у нас в России невозможно было вывести средства на свой банковский счет.
Процесс оплаты на сайте реализован следующим способом, клиент авторизуется на сайте, вводит необходимую сумму для пополнения своего личного счета.
Следом форма сайта перенаправляет пользователя на страницу авторизации и оплаты PayPal, ну и после успешной оплаты выдает соответствующее сообщение, перенаправив клиента в личный кабинет начального сайта.
Собственно простейшая форма:
Нам необходимо, чтобы PayPal автоматически передавал данные обо всех платежах, в реальном времени, чтобы пользователи сайта мгновенно получали доступ к своим средствам. Для этого включаем функцию IPN (Instant payment notifications) в Profile-My Selling Tools в личном кабинете вашего счета PayPal, указав при этом ссылку для приема уведомлений на вашем сайте.
Кусок кода для приема уведомлений и внесении платежных данных в БД. Так как на сайте используется PHP5, необходимо установить библиотеку cURL.
Как подключить PayPal к сайту и какие возможности это дает интернет-магазину
Каждый интернет-магазин сталкивается с вопросом, как подключить систему PayPal к сайту для того, чтобы принимать оплату за покупки. Предлагаем краткую инструкцию, как это сделать самостоятельно.
Что такое PayPal
Это крупнейшая виртуальная платежная, пользователями которой являются 200 миллионов человек. Предназначена для оплаты покупок пользователями, а также приема платежей владельцами бизнеса.
Преимущество PayPal для интернет-магазинов
Чем проще оплата и выше защищенность транзакций, тем значительнее лояльность покупателей к системе оплаты. Владельцы интернет-магазинов тщательнее подходят к выбору — рисков больше, ответственность выше. Здесь плюсы тоже перевешивают возможные минусы:
Особенности использования PayPal в России
Условия подключения
Основное условие: открытый счет должен соответствовать целям использования системы. Открываем счет, который предназначен для ведения коммерческой деятельности.
Заходим на сайт www.paypal.ru, выбираем нужный аккаунт, кликаем:
Далее вводим личные данные, информацию из документов о бизнесе.
Стоит использовать корпоративный e-mail для регистрации аккаунта
Если введете неправильную информацию из налоговых документов по ИП или иной формы ведения бизнеса, система распознает это. Аккаунт заблокируют.
Комиссия за прием платежей
Помните, использование PayPal взимает комиссию за пользование сервисом. Каждая продажа облагается процентом. Обязательства по оплате лежат на плечах продавца, то есть владельца магазина. Покупатель оплачивает комиссию в случае проведения транзакции с банковской карты, а также при конвертации валют.
Комиссия не фиксированная. Зависит от оборота средств.
300 000 — 700 000 рублей — 3,7%+10 рублей за выполнение транзакции.
>1 500 000 рублей — 2,9% +10 рублей по аналогии с предыдущими.
Бухгалтерия и расчеты
Когда регистрируете корпоративный аккаунт в PayPal, подтверждаете, что согласны с условиями работы платежного агрегатора. Такого согласия достаточно для ведения электронного документооборота. Если потребуется подтверждение доходов бизнеса, электронные бумаги для этих целей подойдут.
Что касается бухучета, то поступление денежных средств вносится той же датой, которой они пришли на электронный кошелек. Напомним, что часто дата фактического поступления денежных средств не имеет ничего общего с датой перевода на счет организации. В случае, если была удержана комиссия, то ее оплата — расходы организации.
Кстати, с 2014 года не нужно никого официально уведомлять об открытии счета на PayPal. Это также сильно экономит время.
Как подключить PayPal
Регистрация
Как подключить PayPal, чтобы оплата покупок на сайте стала возможной — регистрируйте коммерческий аккаунт.
Далее создаете профиль. Вводите информацию об ИП.
Служба поддержки может запросить дополнительную информацию по документам. Это нужно для подтверждения аккаунта, а также последующей привязки к нему банковских карт.
Настройка подключения
Настройка API
Для настройки API стоит выбрать наиболее подходящий способ создания учетки:
В таком случае выбираем его, жмем «Запросить учетные записи API».
Настройка подключения на сайте
Как подключить PayPal к сайту:
Сквозная аналитика
Создание кнопки
Создание кнопки доступно из личного кабинета. Настройки, которые требуется ввести, на скриншоте ниже: название продукта, его описание, стоимость.
После того, как настройки завершены, генерируйте html-код. Вставляйте его в соответствующий раздел сайта.
Ошибки в платежной системе PayPal
Невозможно войти в личный кабинет
Такая ошибка может возникать при попытке перевода денег. Чаще всего это связано с отсутствием подтверждения банковского счета. Если счет все-таки подтвержден, но ошибка не исчезает, попробуйте сначала удалить все привязанные счета. Потом заново их прикрепить.
Не получается привязать банковскую карту
Может появиться сообщение о том, что добавить карту на данный момент невозможно. Тогда стоит подождать. Затем повторить попытку. Если « симптом » не проходит, проверьте, подходит ли карта под требования, которые предъявляет к ним PayPal.
Эффективный маркетинг с Calltouch
Заключение
Настройка системы оплаты для магазина — задача не из простых. Особенно для тех, чья работа не связана с программированием. Если возможности проконсультироваться с опытными специалистами нет, пробуйте настроить самостоятельно, воспользовавшись нашей краткой инструкцией.
Как интегрировать оплату через PayPal на сайт
Время чтения: 11 минут
Отправим вам статью на:
Довольно часто при проектировании сайтов веб-разработчикам приходится решать задачу интеграции сайта с системой платежей. Одной из наиболее известных электронных систем оплаты является PayPal, позволяющая осуществлять платежи по всему миру. Неудивительно, что это решение является весьма востребованным в разработке веб-проектов. Тем не менее, в процессе интеграции PayPal на сайт многие разработчики порой упускают из виду отдельные моменты.
Сегодня мы поделимся своим опытом интеграции веб-сайта с системой PayPal и расскажем, как настроить и отслеживать прием платежей от любого пользователя на свой PayPal-аккаунт и как наладить отправку зачисленных средств пользователям системы.
Интеграция оплаты товаров и услуг через Paypal
Для интеграции оплаты через PayPal можно поставить стандартную сгенерированную в аккаунте Paypal кнопку. При нажатии на неё пользователь сразу же перебрасывается на сайт PayPal для проведения оплаты. В большинстве случаев этого достаточно. Однако данный вариант не гарантирует, что пользователь действительно что-либо сделает, а результат можно отследить только внутри аккаунта PayPal, что абсолютно неудобно.
Достойной альтернативой PayPal кнопке является HTML-форма, которая может содержать в себе всю необходимую информацию для проведения платежа:
Итак, создаем простую HTML-форму со множеством полей. Все поля могут быть типа hidden со строго указанными значениями. При этом обратите внимание на их точные наименования:
Обязательные поля:
Необязательные поля (но рекомендуются к заполнению):
С более подробной информацией о том, какие поля HTML-формы требуются для заполнения в системе Paypal, можно ознакомиться на официальном сайте разработчиков системы. Важно помнить, что на все платежные операции PayPal добавляет свою комиссию, которую оплачивает получатель.
Для решения задачи по отслеживанию входящих платежей на свой PayPal-аккаунт от любого пользователя необходимо настроить функции пополнения счёта и получения IPN уведомлений.
Пополнение счета
Функцию пополнения счёта настроить несложно. Форма оплаты с вашего веб-сайта должна отправлять данные в виде POST-массива на строго фиксированный адрес:
IPN уведомления
Представим, что пользователь вашего сайта совершил оплату. С небольшой задержкой, буквально в несколько секунд, сервер PayPal отправит скрипту IPN уведомление с результатом выполненной операции, если используется поле notify_url. Т.е. на указанный URL поступят данные о проведенной оплате в виде ассоциативного POST-массива. Если сообщение не доставлено (ответ сервера не равен 200), то сообщение будет отправляться повторно до получения ответа 200. После каждой неудачной отправки уведомления время между повторными попытками увеличится вдвое. Максимальное количество попыток – 15.
При выполнении перевода обязательным полем является код валюты currency_code. Cчёт, на который производится перевод, может использовать другую валюту. В таком случае получатель обязан выбрать, что делать с данным платежом:
1. Принять с конвертацией в валюту текущего аккаунта по текущему курсу.
2. Принять с созданием дополнительного аккаунта с валютой платежа.
3. Отклонить платеж.
Из-за данной особенности IPN уведомление получит статус Pending, а не Completed, а сама транзакция так и будет “висеть”, пока получатель платежа не выберет один из вариантов в собственном PayPal аккаунте. При выборе второго варианта все аналогичные транзакции пройдут без проблем, включая ранее выполненные.
Есть нюанс – в случае выполнения этого действия PayPal не отправляет IPN уведомление о завершении операции. Обойти это можно, если хранить на стороне сайта ID всех транзакций PayPal и при необходимости проверять их текущий статус через API.
Завершив настройку IPN уведомлений, следующим шагом переходим к отправке зачисленных средств пользователям системы. Это можно реализовать различными способами.
Отправка денежных средств пользователям системы
Payout
Один из вариантов перевода средств пользователям системы – сервис Payout. По сути, это массовый перевод средств с аккаунта системы на другие счета. В основном, он используется для перевода средств сразу на несколько счетов (до 500 за одну операцию).
При выводе средств взимается комиссия, размер которой зависит от страны владельца аккаунта. Причём комиссия снимается со счета отправителя.
Несмотря на описание сервиса на официальном сайте, данный функционал полноценно работает только на территории США, и только для аккаунтов США. Функционал есть в REST API, но работать будет, опять же, только в пределах Соединённых Штатов.
REST API
Официально PayPal предлагает веб-разработчикам использовать Paypal REST API. Такой вариант вполне функционален, однако по большей части работает только для клиентов из США. Ознакомиться с его официальной реализацией на PHP можно здесь: https://github.com/paypal/PayPal-PHP-SDK. Для использования необходимо наличие валидного SSL-сертификата. Самостоятельно подписанные сертификаты не принимаются.
NVP/SOAP API
В качестве достойной замены PayPal REST API для стран, в которых его функционал не доступен, подойдет Paypal Classic API. В нём есть метод Adaptive Payment, который можно использовать для перевода средств с аккаунта системы на любой другой и при этом указывать, кто будет оплачивать комиссию за перевод.
Реализацию API на PHP можно посмотреть здесь: https://github.com/paypal/adaptivepayments-sdk-php. Фактически для всех стран, за исключением США, этот способ выполнения платежей с аккаунта системы является единственным. По аналогии с REST API в этом случае также необходим SSL-сертификат.
Разобравшись с настройками пополнения счёта и отправки денежных средств пользователям системы PayPal, остановимся отдельно на Sandbox и Live режимах.
Особенности работы в Sandbox и Live режимах
Sandbox и Live режимы
Для владельца аккаунта PayPal есть возможность использовать тестовый режим Sandbox, который полностью повторяет весь функционал системы переводов за исключением дизайна. Он доступен по адресу sandbox.paypal.com. Для его использования необходим реальный аккаунт Paypal.
Аккаунты продавца и покупателя для Sandbox создаются автоматически. Под ними можно авторизоваться на сайте Sandbox. После авторизации необходимо перейти на developer.paypal.com в раздел Dashboard.
При необходимости можно добавлять новые аккаунты, просто копируя уже существующие. Для них также можно указывать количество средств на счету.
Live режим – это рабочий режим системы PayPal. Операции в Sandbox никогда не пересекаются с Live режимом. Аккаунты Live режима не применимы в Sandbox и наоборот.
Для использования обоих режимов вам потребуется настроить API.
Настройка REST API
В разделе My Apps & Credentials в блоке REST API Apps необходимо создать приложение. Необходимо добавить путь, на который будут отправляться IPN нотификации (notify_url) и выбрать, какие именно нотификации будут туда отправляться.
client_id и secret необходимы для авторизации. Для каждого из режимов настройки задаются отдельно. Так, например, для режима Sandbox можно задать один URL для получения IPN, а для режима Live – другой URL.
Настройка NVP/SOAP
В Sandbox режиме можно буквально сразу использовать NVP/SOAP API. Для авторизации используются username, password, signature и appId. Посмотреть данные username, password и signature можно в профиле продавца.
appID в Sandbox режиме всегда один и должен иметь значение APP-80W284485P519543T. Если в Sandbox режиме будете использоваться любой другой appId, то Paypal вернет вам ошибку авторизации.
В Live режиме можно получить реквизиты, создав приложение в разделе My Apps & Credentials в блоке NVP/SOAP API Apps. Здесь находятся настройки, которые показывают, какие сервисы может использовать приложение (Adaptive Payment обязательно), какие варианты оплаты доступны (карта, счет Paypal), а также краткое описание системы.
Работа в Live режиме невозможна без подтверждения приложения со стороны Paypal.
Тестирование интеграции
Перед началом работы рекомендуем тщательно продумать описание проекта. Если Paypal не устроит какой-либо пункт, то приложение может быть отклонено.
Тестировать работу платежной системы в режиме Live можно при условии отмены транзакций. Тем не менее, это может повлечь за собой негативные последствия. PayPal отрицательно относится к тестированию работы сервиса в Live режиме. Если PayPal решит, что приложение используется в целях тестирования, то возможен отзыв подтверждения.
Протестировать, насколько полноценно удалась интеграция PayPal с сайтом и как работает API можно в режиме Sandbox. Однако даже при условии успешного выполнения и обработки всех платежей и уведомлений, стабильная работа в режиме Live не гарантирована. Это объясняется тем, что за работу системы в разных странах мира отвечают локальные отделения Paypal, в которых действуют свои правила и ограничения. Например, в некоторых странах нельзя перевести средства с аккаунта со статусом Business на обычный – транзакция будет отклонена без объяснения причин и отправки уведомлений.
Кроме этого, еще на старте желательно ознакомиться с требованиям системы к доступным валютам, выбор которых ограничен.
Например, для японской йены разрешены только целые числа в размере транзакций. Если будет десятичное число, то транзакция не будет обработана. Также при приеме иностранных платежей на территории Российской Федерации валютой платежа должен быть рубль (RUB). Все остальное будет выдавать ошибку.
Еще одна возможность проверить интеграцию с PayPal — режим симуляции IPN. Он позволяет отправить тестовое IPN, чтобы проверить как отреагирует ваша система на различные уведомления PayPal. С его помощью можно сгенерировать стандартное IPN уведомление любого типа (пополнение счета, отмена транзакции, ожидание подтверждения и т.д.) и отправить на сервер. Этот режим доступен по адресу: https://developer.paypal.com/developer/ipnSimulator/.
Итак, чтобы интеграция сайта с системой PayPal прошла успешно, вы можете:
Всё это позволит вам настроить систему платежей непосредственно на проектируемом веб-сайте и осуществлять контроль за транзакциями каждый раз, когда пользователи обращаются за переводом средств.
Подпишитесь
Оставьте адрес, и каждый месяц мы будем высылать свежую статью
о новых трендах в разработке програмного обеспечения.
Интегрируем оплату через Paypal в web-приложение
В данной статье рассмотрена интеграция разовых платежей, а также оплаты по подписке с помощью Paypal в веб-приложение. Примеры реализованы на PHP, но, в принципе, без особых проблем то же самое можно сделать с помощью других технологий. Данный метод выбран как компромисс между простотой и гибкостью. Это попытка написать руководство, которое поможет быстро разобраться в теме и интегрировать оплату через Paypal в свой проект.
Статья ориентирована в основном на тех, кто раньше с этой системой не работал. Знатоки Paypal вряд ли найдут здесь для себя что-то новое. Но, возможно, они укажут на недостатки данного метода или посоветуют, как можно было бы по-другому это реализовать.
Создание аккаунта
Для реализации данной схемы нам потребуется business аккаунт. PayPal Payments Standard должно быть достаточно.
Переходим по ссылке и создаем аккаунт.
Создание sandbox аккаунта
Для тестирования нашего приложения будем использовать Paypal Sandbox. Нам потребуется 2 sandbox аккаунта. Аккаунт покупателя(buyer) и аккаунт продавца(facilitator). Прежде всего нужно задать пароль для обоих sandbox аккаунтов. Для этого переходим на сайт paypal в раздел для разработчиков. Логинимся, затем переходим в dashboard. В меню слева находим раздел Sandbox, вкладку accounts. Здесь мы можем увидеть 2 sandbox аккаунта(Buyer и Facilitator).
Нажимаем на profile, в появившемся модальном окне кликаем change password, затем сохраняем пароль.
Устанавливаем пароли для обоих аккаунтов. После этого можно перейти на сайт Paypal Sandbox и попробовать залогиниться.
Настройка Paypal
Теперь нам нужно настроить Paypal Facilitator аккаунт, на который мы будем получать средства. Переходим на сайт Sandbox, логинимся с помощью facilitator аккаунта и переходим в настройки профиля. Открываем меню profile, выбираем пункт my selling tools.
В разделе Selling online выбираем пункт Website preferences, нажимаем Update. Здесь можно включить перенаправление пользователя. После завершения платежа пользователь по умолчанию будет перенаправлен на указанный url. Но также есть возможность перенаправить пользователя на другой url (см. ниже).
Также необходимо активировать Paypal Instant Payment Notifications. Для этого в разделе Getting paid and managing my risk выбираем пункт Instant payment notifications и также нажимаем Update.
В настройках IPN указываем URL, на котором будет работать наш IPN Listener. Этот URL обязательно должен быть доступен глобально т.к. на него будут приходить уведомления о проведении операций.
Включаем Message delivery и сохраняемся. На этом настройка аккаунта завершена. Можно приступить к настройке непосредственно платежей.
Разовые Платежи
Для начала реализуем разовые платежи. Это, вероятно, наиболее распространенный вариант использования. Пользователь просто хочет купить какой-нибудь товар или разовую услугу. Ну и хочется, чтобы нам ничего больше не нужно было менять в настройках paypal. Список товаров и цены хранились бы в базе нашего приложения, мы могли бы их менять как нам хочется. Для разовых платежей будем использовать Payment Buttons (PayPal Payments Standard).
Структура данных
Список товаров храниться в базе данных нашего приложения. Мы можем добавлять удалять и редактировать товары в любой момент. Здесь представлена наиболее простая структура, вся информация храниться в одной таблице.
Но можно и усложнить задачу. Например, менять цену в зависимости от количества заказанных товаров, или менять стоимость в зависимости от дня недели и времени.
Или включить в заказ много различных товаров.
products — здесь будем хранить товары:
users — здесь будем хранить пользователей:
| id | firstname | lastname | password | |
| 315 | Alan | Smith | alansmith@example.com | $1$2z4.hu5.$E3A3H6csEPDBoH8VYK3AB0 |
| 316 | Joe | Doe | joedoe@example.com | $1$Kd4.Lf0.$pGc1h7vwmy9N6EJxac953/ |
products_users — кому мы и что отгрузили:
| id | user_id | product_id | items_count | created_date |
| 1 | 315 | 1 | 3 | 2015-09-03 08:23:05 |
Также будем хранить в нашей базе историю транзакций в таблице transactions:
| txn_id | txn_type | mc_gross | mc_currency | quantity | payment_date | payment_status | business | receiver_email | payer_id | payer_email | relation_id | relation_type | created_date |
Форма оплаты
Для начала создадим форму заказа. Генерируем форму в нашем приложении, где указываем основные параметры заказа(название товара, цена, количество).
Здесь мы можем указать любую цену, название, количество и т.д. Поле custom полезно тем, что в нем можно передавать любые данные. Здесь мы будем передавать id товара, id пользователя и, возможно, другую информацию. Эти данные понадобятся нам для дальнейшей обработки платежа.
Если нужно передать несколько параметров, можно использовать json или сериализацию. Либо можно использовать дополнительные поля вида on0, on1, os0 and os1. Лично я это не проверял, информацию нашел здесь.
Ниже приведен пример формы:
На самом деле, параметров может быть гораздо больше, подробную информацию можно найти в документации. После отправки формы пользователь попадает на страницу оплаты paypal, где он снова видит детали заказа.
Здесь пользователь может оплатить заказ с помощью paypal аккаунта либо с помощью банковской карты. Далее пользователь переадресовывается обратно на наш сайт(параметр return), где мы можем ему сообщить, что его платеж находится в обработке.
Instant Payment Notification(IPN)
После того, как пользователь совершил платеж, Paypal обрабатывает его и отправляет подтверждение в наше приложение. Для этого используется сервис Instant Payment Notification(IPN).
В начале статьи мы настраивали наш Paypal аккаунт и устанавливали IPN Notification URL. Сейчас самое время создать IPN listener, который будет обрабатывать IPN запросы. Paypal предоставляет пример реализации IPN listener. Подробное объяснение работы сервиса можно найти здесь. В двух словах, как это работает: Paypal обрабатывает платеж пользователя, видит что все хорошо и платеж успешно завершен. После этого IPN отправляет на наш Notification URL такого вида Post запрос:
Наш IPN Listener должен этот запрос обработать. В частности:
После этого, если Paypal подтвердил подлинность запроса, можем приступить к его дальнейшей обработке.
Обработка платежа
В первую очередь нам потребуется получить значение поля custom, где мы передавали id заказа, id пользователя или еще что-то(зависит от логики нашего приложения). Соответственно мы сможем получить из нашей базы данных информацию о пользователе/заказе. Также нужно получить id транзакции.
Paypal может несколько раз присылать подтверждение одной и той же транзакции. Поэтому нужно проверить и, если транзакция не обрабатывалась, обрабатываем ее. Если транзакция уже обрабатывалась, тогда ничего не делаем.
Проводим валидацию платежа. Если все нормально, тогда можно сохранить информацию о платеже в базу и выполнить дальнейшие действия (присвоить пользователю статус «premium», заказу статус «оплачен» и т.д.). Если платеж не прошел валидацию, необходимо установить причину и связаться с пользователем. Дальнейшие операции, в частности, отмена платежа, проводятся вручную.
Валидация платежа
Валидация платежа сильно зависит от бизнес-логики вашего приложения. Могут быть добавлены специфические условия. Например пользователь оплатил 15 единиц товара, а в наличии есть всего 10. Нельзя пропустить такой заказ.
Впрочем, такие вещи имеет смысл проверять еще на этапе генерации формы. Валидация платежа нужна скорее для предотвращения мошенничества(например пользователь в форме оплаты вручную увеличил количество товара, а цену оставил прежней).
Ну и, конечно, добавляйте свои проверки.
В итоге у вас должны работать разовые платежи. На этапе создания формы платежа мы можем указывать любые параметры. Например, можно гибко управлять ценой товара(2 по цене 3, каждому 101 покупателю скидка 30% и т.д.). Нам для этого не нужно ничего менять в Paypal.
Подписки
Теперь рассмотрим реализацию подписок. Принцип тот же, что и с разовыми платежами. Только платежи повторяющиеся. Поэтому их реализация несколько сложнее.
Доступно несколько тарифных планов, например Free — бесплатно, Pro — 5$ за пользователя в месяц, Premium — 10$ за пользователя в месяц.
Пользователь может отменить подписку с возвратом денег за неиспользованный период. Также пользователь может менять условия подписки, например, перейти на другой тарифный план, либо изменить количество пользователей.
Понятно, что для Free подписки paypal вообще не нужен. Возможно, этот тарифный план должен активироваться автоматически, сразу при регистрации пользователя в нашем приложении. Данная схема хороша тем, что показывает типичное использование для какой-нибудь SaaS системы. И с ходу не очень понятно, как реализовать это с использованием Paypal.
Для работы с подписками понадобятся дополнительные таблицы:
subscription_plans — для хранения тарифных планов:
| id | service_provider | service_name | price | price_type | period |
| 1 | Service | pro | 5.00 | user | month |
| 2 | Service | enterprise | 10.00 | user | month |
| 3 | Service | free | 0.00 | user | month |
subscriptions — для хранения подписок:
| id | user_id | plan_id | subscription_id | created_date | updated_date | payment_date | items_count | status |
Форма оформления подписки
Форма оформления подписки очень похожа на форму создания разового платежа.
Стоимость подписки задается параметром a3. Период подписки задается с помощью параметров p3 и t3(в данном примере платежи происходят каждый месяц).
Подробное описание этих и других параметров можно посмотреть в документации.
С IPN принципиально все то же самое, что и с разовыми платежами. Правда, мы будем получать больше запросов т.к. нужно обрабатывать больше событий: создание подписки, платеж по подписке, отмена подписки и т.д. Как и раньше, нужно проверять достоверность для каждого запроса и только после этого обрабатывать.
Валидация подписки
Здесь все немного сложнее, чем с разовыми платежами. Нам нужно валидировать не только платеж, но и создание подписки, отмену подписки, возможно, изменение подписки. Возможно, что-то еще, в зависимости от логики работы приложения. Например, мы хотим, чтобы на тарифном плане Pro можно было создать не более 100 пользователей. Или еще что-нибудь в этом роде. Опять же все это можно попытаться учесть на этапе создания формы.
Что точно необходимо проверять в данном случае:
Обработка платежа
Отмена подписки
Реализуем отмену подписки, на случай если пользователю надоест пользоваться нашим приложением. В таком случае воспользуемся Paypal Classic Api для отмены подписки.
Для работы с API нам понадобятся Username, Password и Signature. Их можно найти в настройках профиля.
Отмена подписки осуществляется с помощью метода ManageRecurringPaymentsProfileStatus
Есть некоторая проблема с этим методом, т.к. мы не можем отменить подписку, если она уже отменена. Но и проверить статус подписки мы тоже не можем. Потому приходится отменять подписку вселпую (в нормальной ситуации нам не придется отменять подписку дважды). Данная проблема описана в этом посте.
Возврат средств(полный/частичный)
Возможно, кроме отмены подписки пользователь хотел бы вернуть деньги за неиспользованный период(прим: оформил подписку на месяц, через неделю отменил — нужно вернуть 75% стоимости).
Для этого также можно использовать Paypal Classic Api, метод RefundTransaction.
Для расчета суммы возврата можно использовать следующий код. Код предназначен для расчета возврата ежемесячной подписки.
Изменение подписки
Теперь добавим возможность изменения условий подписки. Это понадобится в случае, если пользователь захочет изменить тарифный план, или количество пользователей. К сожалению, paypal накладывает определенные ограничения на изменение подписки.
Эта проблема обсуждается здесь
На себе проверять эту информацию не хочется. В то же время, возможна ситуация, когда пользователь захочет поменять тарифный план, и стоимость подписки сильно изменится. В таком случае можно сначала отменить текущую подписку и провести частичный возврат средств. Затем создать новую подписку с другими параметрами.
Возможно, не очень красиво, но работает без нареканий. В итоге остановился на этом варианте. хотя, в принципе, по ссылке выше есть информация, как сделать изменение подписки более правильно.
Заключение
В результате получаем возможность работать с разовыми платежами и подписками Paypal. Логика работы с разовыми платежами подписками находится в нашем веб-приложении.
Со временем мы можем добавлять новые тарифные планы и менять старые (нужно делать это осторожно, проверять валидацию и т.д.).
На этом заканчиваю повествование. Всем спасибо за внимание. Надеюсь статья оказалась полезной. Буду рад ответить на вопросы в комментариях.



























