Вобщем поставили передо мной на работе задачу организовать прием платежей в наш проект через Paypal. От меня требовалось дать все необходимые данные для настройки аккаунта (сам аккаунт настраивался другим человеком), ну и, собственно, написать скрипт, который и будет принимать данные от paypal-а и начислять деньги юзерам.
Виды платежей Paypal позволяет принимать несколько видов платежей. Вот некоторые из них: 1. Buy now buttons – единоразовый платеж, для оплаты одного или нескольких товаров (услуг). Позволяет задавать сумму платежа, описание товаров (услуг), количество товаров, адрес, доставки, вес покупки и т.д. Сумму платежа можно и не задавать, в этом случае Paypal даст юзеру возможность самостоятельно указать сумму, которую хочет заплатить. 2. Donate buttons – впринципе, по функционалу аналогична «Buy now», тоже единоразовый платеж, сумму можно задать как принудительно, так и оставить на усмотрение юзера. Отоичие в том, что не позволяет указать адрес доставки и все, что с ней (доставкой) связано. 3. Add to cart buttons – позволяет создавать корзину из ваших товаров, на стороне Paypal`а. На вашем сайте юзер может только добавлять товары в корзину. Чтобы просмотреть содержимое корзины или удалить оттуда какие-либо позиции, придется залогиниться на Paypal. 4. Subscribe buttons – позволяет организовать прием периодических платежей, например, оплата аккаунта, услуг. 5. Еслть еще подарочные сертификаты, но с ними даже не пытался разобраться. В моем случае идеальным решением было использование платежей “Buy now”, о них и пойдет дальше речь. Заюзать “Buy now” на своем сайте можно двумя способами: 1. создать кнопку c помощью инструментов Paypal’а. 2. создать свою собственную форму. Лично я воспользовался вторым вариантом, хотя бы потому, что это позволяет использовать свой собственный дизайн. Хотя есть и еще пара плюшек, о них позже.
Создание формы платежа Рaypal, что естественно, жестко регламентирует названия полей формы. Полный список этих полей можно найти на https://cms.paypal.com/us/cgi-bin/?&cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables. То что использовано у нас: — cmd = _xclick – указываем тип платежа “Buy now”; — business – тут указываем email, аккаунта, куда будут приниматься платежи. Сам адрес должен быть подтвержденным (подтверждается где-то в настройках аккаунта); — item_name – тут задаем описание товара/услуги. Будет отображаться в Paypal при проведении платежа; — custom – здесь служебная инфа, понадобится потом нам же для идентификации юзера; — amount – сумма платежа; — currency – валюта платежа. Возможные варианты Здесь. — no_shipping =1 – указываем, что доствка не осуществляется. Настройка аккаунта Далее, для приема платежей на свой аккаунт, этот самый аккаунт надо соответствующим образом настроить. Paypal поддерживает два метода передачи данных о транзакции нашему скрипту: PDT (Payment Data Transfer) и IPN (Instant Payment Notification). Насколько я понял, разница в том, что при использовании PDT от Paypal’а приходит одно единственное сообщение уже после совершения юзером платежа (т.е. когда деньги от юзера уже находятся на пути к вашему аккаунту). При использовании IPN Paypal генерирует несколько сообщений, оповещая нас о каждой отдельной стадии совершения платежа. Для решения моей задачи вполне хватало PDT, который я и заюзал. Процесс включения PDT описан Здесь. Там внизу есть раздел Activating PDT. Суть PDT — при завершении платежа, Paypalпосылает указанному скрипту GET- зарпос, в котором передает номер транзакции, её статус, сумму и т.д. У самого Paypal’a существует механизм проверки подлинности транзакции — мы отправляем POST-запрос определенного вида на их адрес с полученным номером транзакции. В ответ приходит либо код ошибки, либо описание транзакции — статус, сумма и еще куча всяких служебных данных. Алгоритм работы скрипта Собственно, что требуется от скрипта: 1. получить эти данные. 2. проверить тип транакции — если используется обычная оплата (buy now). то тип транзакции должен быть web_accept; 3. проверяем емайл получателя платежа и id аккаунта получателя. (поля bussiness, receiver_email, receiver_id); 4. в поле custom содержится служебная инфа полученная от нас, например ид юзера — проверяем его. 5. в поле txn_id содежится номер транакции в системе paypal. проверяем чтобы не было повторных платежей. 6. после этого, если поле payment_status = Complete, т.е. платеж нормально завершен, то проводим платеж уже у себя, при любом другом статусе — какие-то траблы. Сумма и валюта будут в полях mc_gross и mc_currency. Полный список все параметров передаваемых Paypal'ом при использовании PDT (да и при IPN тоже) Здесь. Теперь о тех плюшках, которые обещал раньше. Относятся они к полю custom, которое мы сами и отправляем Paypal’y. Можно, конечно, просто записать туда id юзера и не париться, но мы ведь легких путей не ищем. В это поле вполне можно записать id записи с описанием платежа в нашей системе, а уже там сохраняться юзера, запоминать тип услуги, к которую приобрел юзер, сумму и т.д. Это позволит, например, отслеживать покупки, которые так и не были оплачены, а также, при получении данных от Paypal’a, можно сверять с сохраненными у нас, что дает небольшой + к секьюрности.
|
|