Как подключить paypal к сайту

Интеграция PayPal на сайт в качестве платежной системы и проблема с https

Недавно предстояло сделать редизайн сайта с последующим перестроением всей CMS. В процессе работы обратил внимание на интеграцию PayPal в качестве платежной системы. О плюсах данной платежной системы или какой-то выгоде сказать однозначно не могу, выбор заказчика, ну а так как его основная деятельность Mail Forwarding (пересылка и доставка посылок из США), то ему удобней использовать данную платежную систему.
Как подключить paypal к сайту
Общие статистические цифры о PayPal – 143 миллионов пользователей в 203 стран мира, хотя при этом до недавнего времени у нас в России невозможно было вывести средства на свой банковский счет.

Процесс оплаты на сайте реализован следующим способом, клиент авторизуется на сайте, вводит необходимую сумму для пополнения своего личного счета.

Как подключить paypal к сайту

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

Как подключить paypal к сайту

Собственно простейшая форма:

Нам необходимо, чтобы PayPal автоматически передавал данные обо всех платежах, в реальном времени, чтобы пользователи сайта мгновенно получали доступ к своим средствам. Для этого включаем функцию IPN (Instant payment notifications) в Profile-My Selling Tools в личном кабинете вашего счета PayPal, указав при этом ссылку для приема уведомлений на вашем сайте.

Как подключить paypal к сайту

Кусок кода для приема уведомлений и внесении платежных данных в БД. Так как на сайте используется PHP5, необходимо установить библиотеку cURL.

Источник

Как подключить PayPal к сайту и какие возможности это дает интернет-магазину

Как подключить paypal к сайту

Как подключить paypal к сайту

Каждый интернет-магазин сталкивается с вопросом, как подключить систему PayPal к сайту для того, чтобы принимать оплату за покупки. Предлагаем краткую инструкцию, как это сделать самостоятельно.

Что такое PayPal

Это крупнейшая виртуальная платежная, пользователями которой являются 200 миллионов человек. Предназначена для оплаты покупок пользователями, а также приема платежей владельцами бизнеса.

Как подключить paypal к сайту

Преимущество PayPal для интернет-магазинов

Чем проще оплата и выше защищенность транзакций, тем значительнее лояльность покупателей к системе оплаты. Владельцы интернет-магазинов тщательнее подходят к выбору — рисков больше, ответственность выше. Здесь плюсы тоже перевешивают возможные минусы:

Особенности использования PayPal в России

Как подключить paypal к сайту

Условия подключения

Основное условие: открытый счет должен соответствовать целям использования системы. Открываем счет, который предназначен для ведения коммерческой деятельности.

Заходим на сайт www.paypal.ru, выбираем нужный аккаунт, кликаем:

Как подключить paypal к сайту

Далее вводим личные данные, информацию из документов о бизнесе.

Стоит использовать корпоративный e-mail для регистрации аккаунта

Как подключить paypal к сайту

Если введете неправильную информацию из налоговых документов по ИП или иной формы ведения бизнеса, система распознает это. Аккаунт заблокируют.

Комиссия за прием платежей

Помните, использование PayPal взимает комиссию за пользование сервисом. Каждая продажа облагается процентом. Обязательства по оплате лежат на плечах продавца, то есть владельца магазина. Покупатель оплачивает комиссию в случае проведения транзакции с банковской карты, а также при конвертации валют.

Комиссия не фиксированная. Зависит от оборота средств.

300 000 — 700 000 рублей — 3,7%+10 рублей за выполнение транзакции.

>1 500 000 рублей — 2,9% +10 рублей по аналогии с предыдущими.

Как подключить paypal к сайту

Бухгалтерия и расчеты

Когда регистрируете корпоративный аккаунт в PayPal, подтверждаете, что согласны с условиями работы платежного агрегатора. Такого согласия достаточно для ведения электронного документооборота. Если потребуется подтверждение доходов бизнеса, электронные бумаги для этих целей подойдут.

Что касается бухучета, то поступление денежных средств вносится той же датой, которой они пришли на электронный кошелек. Напомним, что часто дата фактического поступления денежных средств не имеет ничего общего с датой перевода на счет организации. В случае, если была удержана комиссия, то ее оплата — расходы организации.

Кстати, с 2014 года не нужно никого официально уведомлять об открытии счета на PayPal. Это также сильно экономит время.

Как подключить PayPal

Регистрация

Как подключить PayPal, чтобы оплата покупок на сайте стала возможной — регистрируйте коммерческий аккаунт.

Как подключить paypal к сайту

Далее создаете профиль. Вводите информацию об ИП.

Как подключить paypal к сайту

Служба поддержки может запросить дополнительную информацию по документам. Это нужно для подтверждения аккаунта, а также последующей привязки к нему банковских карт.

Настройка подключения

Как подключить paypal к сайту

Настройка API

Для настройки API стоит выбрать наиболее подходящий способ создания учетки:

В таком случае выбираем его, жмем «Запросить учетные записи API».

Как подключить paypal к сайту

Как подключить paypal к сайту

Настройка подключения на сайте

Как подключить PayPal к сайту:

Сквозная аналитика

Как подключить paypal к сайту

Создание кнопки

Создание кнопки доступно из личного кабинета. Настройки, которые требуется ввести, на скриншоте ниже: название продукта, его описание, стоимость.

Как подключить paypal к сайту

После того, как настройки завершены, генерируйте html-код. Вставляйте его в соответствующий раздел сайта.

Ошибки в платежной системе PayPal

Невозможно войти в личный кабинет

Как подключить paypal к сайту

Такая ошибка может возникать при попытке перевода денег. Чаще всего это связано с отсутствием подтверждения банковского счета. Если счет все-таки подтвержден, но ошибка не исчезает, попробуйте сначала удалить все привязанные счета. Потом заново их прикрепить.

Не получается привязать банковскую карту

Может появиться сообщение о том, что добавить карту на данный момент невозможно. Тогда стоит подождать. Затем повторить попытку. Если « симптом » не проходит, проверьте, подходит ли карта под требования, которые предъявляет к ним PayPal.

Эффективный маркетинг с Calltouch

Как подключить paypal к сайту

Заключение

Настройка системы оплаты для магазина — задача не из простых. Особенно для тех, чья работа не связана с программированием. Если возможности проконсультироваться с опытными специалистами нет, пробуйте настроить самостоятельно, воспользовавшись нашей краткой инструкцией.

Источник

Как интегрировать оплату через PayPal на сайт

Как подключить 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.

Как подключить paypal к сайту

При необходимости можно добавлять новые аккаунты, просто копируя уже существующие. Для них также можно указывать количество средств на счету.

Как подключить paypal к сайту

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.

Как подключить paypal к сайту

Настройка 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 на обычный – транзакция будет отклонена без объяснения причин и отправки уведомлений.

Как подключить paypal к сайту

Кроме этого, еще на старте желательно ознакомиться с требованиям системы к доступным валютам, выбор которых ограничен.

Например, для японской йены разрешены только целые числа в размере транзакций. Если будет десятичное число, то транзакция не будет обработана. Также при приеме иностранных платежей на территории Российской Федерации валютой платежа должен быть рубль (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).

Как подключить paypal к сайту

Нажимаем на profile, в появившемся модальном окне кликаем change password, затем сохраняем пароль.
Устанавливаем пароли для обоих аккаунтов. После этого можно перейти на сайт Paypal Sandbox и попробовать залогиниться.

Настройка Paypal

Теперь нам нужно настроить Paypal Facilitator аккаунт, на который мы будем получать средства. Переходим на сайт Sandbox, логинимся с помощью facilitator аккаунта и переходим в настройки профиля. Открываем меню profile, выбираем пункт my selling tools.

Как подключить paypal к сайту

В разделе Selling online выбираем пункт Website preferences, нажимаем Update. Здесь можно включить перенаправление пользователя. После завершения платежа пользователь по умолчанию будет перенаправлен на указанный url. Но также есть возможность перенаправить пользователя на другой url (см. ниже).

Как подключить paypal к сайту

Также необходимо активировать Paypal Instant Payment Notifications. Для этого в разделе Getting paid and managing my risk выбираем пункт Instant payment notifications и также нажимаем Update.

Как подключить paypal к сайту

В настройках IPN указываем URL, на котором будет работать наш IPN Listener. Этот URL обязательно должен быть доступен глобально т.к. на него будут приходить уведомления о проведении операций.

Как подключить paypal к сайту

Включаем Message delivery и сохраняемся. На этом настройка аккаунта завершена. Можно приступить к настройке непосредственно платежей.

Разовые Платежи

Для начала реализуем разовые платежи. Это, вероятно, наиболее распространенный вариант использования. Пользователь просто хочет купить какой-нибудь товар или разовую услугу. Ну и хочется, чтобы нам ничего больше не нужно было менять в настройках paypal. Список товаров и цены хранились бы в базе нашего приложения, мы могли бы их менять как нам хочется. Для разовых платежей будем использовать Payment Buttons (PayPal Payments Standard).

Структура данных

Список товаров храниться в базе данных нашего приложения. Мы можем добавлять удалять и редактировать товары в любой момент. Здесь представлена наиболее простая структура, вся информация храниться в одной таблице.

Но можно и усложнить задачу. Например, менять цену в зависимости от количества заказанных товаров, или менять стоимость в зависимости от дня недели и времени.

Или включить в заказ много различных товаров.

products — здесь будем хранить товары:

users — здесь будем хранить пользователей:

idfirstnamelastnameemailpassword
315AlanSmithalansmith@example.com$1$2z4.hu5.$E3A3H6csEPDBoH8VYK3AB0
316JoeDoejoedoe@example.com$1$Kd4.Lf0.$pGc1h7vwmy9N6EJxac953/

products_users — кому мы и что отгрузили:

iduser_idproduct_iditems_countcreated_date
1315132015-09-03 08:23:05

Также будем хранить в нашей базе историю транзакций в таблице transactions:

txn_idtxn_typemc_grossmc_currencyquantitypayment_datepayment_statusbusinessreceiver_emailpayer_idpayer_emailrelation_idrelation_typecreated_date

Форма оплаты

Для начала создадим форму заказа. Генерируем форму в нашем приложении, где указываем основные параметры заказа(название товара, цена, количество).

Здесь мы можем указать любую цену, название, количество и т.д. Поле custom полезно тем, что в нем можно передавать любые данные. Здесь мы будем передавать id товара, id пользователя и, возможно, другую информацию. Эти данные понадобятся нам для дальнейшей обработки платежа.
Если нужно передать несколько параметров, можно использовать json или сериализацию. Либо можно использовать дополнительные поля вида on0, on1, os0 and os1. Лично я это не проверял, информацию нашел здесь.

Ниже приведен пример формы:

На самом деле, параметров может быть гораздо больше, подробную информацию можно найти в документации. После отправки формы пользователь попадает на страницу оплаты paypal, где он снова видит детали заказа.

Как подключить 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 — для хранения тарифных планов:

idservice_providerservice_namepriceprice_typeperiod
1Servicepro5.00usermonth
2Serviceenterprise10.00usermonth
3Servicefree0.00usermonth

subscriptions — для хранения подписок:

iduser_idplan_idsubscription_idcreated_dateupdated_datepayment_dateitems_countstatus

Форма оформления подписки

Форма оформления подписки очень похожа на форму создания разового платежа.

Стоимость подписки задается параметром a3. Период подписки задается с помощью параметров p3 и t3(в данном примере платежи происходят каждый месяц).

Подробное описание этих и других параметров можно посмотреть в документации.

С IPN принципиально все то же самое, что и с разовыми платежами. Правда, мы будем получать больше запросов т.к. нужно обрабатывать больше событий: создание подписки, платеж по подписке, отмена подписки и т.д. Как и раньше, нужно проверять достоверность для каждого запроса и только после этого обрабатывать.

Валидация подписки

Здесь все немного сложнее, чем с разовыми платежами. Нам нужно валидировать не только платеж, но и создание подписки, отмену подписки, возможно, изменение подписки. Возможно, что-то еще, в зависимости от логики работы приложения. Например, мы хотим, чтобы на тарифном плане Pro можно было создать не более 100 пользователей. Или еще что-нибудь в этом роде. Опять же все это можно попытаться учесть на этапе создания формы.

Что точно необходимо проверять в данном случае:

Обработка платежа

Отмена подписки

Реализуем отмену подписки, на случай если пользователю надоест пользоваться нашим приложением. В таком случае воспользуемся Paypal Classic Api для отмены подписки.

Для работы с API нам понадобятся Username, Password и Signature. Их можно найти в настройках профиля.

Как подключить paypal к сайту

Отмена подписки осуществляется с помощью метода ManageRecurringPaymentsProfileStatus

Есть некоторая проблема с этим методом, т.к. мы не можем отменить подписку, если она уже отменена. Но и проверить статус подписки мы тоже не можем. Потому приходится отменять подписку вселпую (в нормальной ситуации нам не придется отменять подписку дважды). Данная проблема описана в этом посте.

Возврат средств(полный/частичный)

Возможно, кроме отмены подписки пользователь хотел бы вернуть деньги за неиспользованный период(прим: оформил подписку на месяц, через неделю отменил — нужно вернуть 75% стоимости).

Для этого также можно использовать Paypal Classic Api, метод RefundTransaction.

Для расчета суммы возврата можно использовать следующий код. Код предназначен для расчета возврата ежемесячной подписки.

Изменение подписки

Теперь добавим возможность изменения условий подписки. Это понадобится в случае, если пользователь захочет изменить тарифный план, или количество пользователей. К сожалению, paypal накладывает определенные ограничения на изменение подписки.

Эта проблема обсуждается здесь

На себе проверять эту информацию не хочется. В то же время, возможна ситуация, когда пользователь захочет поменять тарифный план, и стоимость подписки сильно изменится. В таком случае можно сначала отменить текущую подписку и провести частичный возврат средств. Затем создать новую подписку с другими параметрами.

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

Заключение

В результате получаем возможность работать с разовыми платежами и подписками Paypal. Логика работы с разовыми платежами подписками находится в нашем веб-приложении.

Со временем мы можем добавлять новые тарифные планы и менять старые (нужно делать это осторожно, проверять валидацию и т.д.).

На этом заканчиваю повествование. Всем спасибо за внимание. Надеюсь статья оказалась полезной. Буду рад ответить на вопросы в комментариях.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *