Каталог Java скриптов!Онлайн сервисов!Всё для Веб-мастера!

Уроки HTML

Добавить в избранное Уроки HTML

Вход
Логин:
Пароль:
На сайте
Всего: 1
Гостей: 1
Пользователей: 0
Главная » 2009 » Ноябрь » 1 » Прием платежей на сайте
Прием платежей на сайте
11:35:05 AM


WebMoney

Ссылка

<a href="wmk:payto?Purse=R201674955734&Amount=100&Desc=Оплата%20заказа&BringToFront=Y">Оплата</a>



Тут всё понятно:
  • вместо R201674955734 пишем свой кошелек (не обязательно рублевый),
  • вместо 100 вашу сумму.
  • вместо пробелов %20.
На ссылку открывается WebMoney Keeper и происходит оплата.


Выглядит вот так:

Оплата


Яндекс.Деньги

Форма для ввода суммы

<form name=p action="https://money.yandex.ru/charity.xml" method="post">
<input type="hidden" name="to" value="4100137204859"/>
<input type="hidden" name="CompanyName" value="Веб-студия "/>
<input type="hidden" name="CompanyLink" value="http://scriptozna.ucoz.ru/"/>
<input type="text" id="CompanySum" name="CompanySum" value="Введите сумму" style="margin-right: 5px;"/> рублей
<input type=submit value="Оплатить"> </form>



Ставим форму на сайт и посетитель вводит сумму, можно ему помочь, вместо Введите сумму ввести первоначальную, например 10.
Не забудьте вместо 4100137204859 ввести номер своего кошелька, хотя если забудете, я не обижусь.
Также меняем http://scriptozna.ucoz.ru/ на адрес вашег сайта.
Меняем Веб-студия  на ваше описание платежа.

Выглядит вот так:

рублей

Кнопка с фиксированной суммой

<form name=p action="https://money.yandex.ru/charity.xml" method="post">
<input type="hidden" name="to" value="4100137204859"/>
<input type="hidden" name="CompanyName" value="Веб-студия "/>
<input type="hidden" name="CompanyLink" value="http://scriptozna.ucoz.ru/"/>
<input type="hidden" id="CompanySum" name="CompanySum" value="10" style="margin-right: 5px;"/> рублей
<input type=submit value="Оплатить"> </form>



Ставим кнопку на сайт, вместо 10 ввести вашу сумму.
Не забудьте вместо 4100137204859 ввести номер своего кошелька, хотя если забудете, я не обижусь.
Также меняем http://scriptozna.ucoz.ru/ на адрес вашег сайта.
Меняем Веб-студия  на ваше описание платежа.

Выглядит вот так:



Источник http://www.phpclub.ru/detail/article/paypal

PayPal

Платежные системы. PayPal

Введение

При создании коммерческих сайтов встает вопрос: как принимать платежи? Одной из наиболее популярных в мире платежных систем является PayPal . Выбор этой системы часто определяется высокой надежностью, простотой открытия аккаунта и использования. Для открытия аккаунта достаточно наличия кредитной карты и/или счета в американском банке. Одним из основных недостатков часто называют очень жесткую политику безопасности. Но практика показывает, что при строгом соблюдении правил использования системы проблемы возникают редко. Я не собираюсь описывать все "за" и "против". Цель этой статьи - показать, как организовать обработку платежей для обеспечения надежности и безопасности.

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

Организация собственно оплаты не представляет тудностей. В этой статье я буду уделять больше внимания процессу автоматической проверки платежа с использованием IPN (Instant Payment Notification). Статья основана на собственном опыте, официальной документации PayPal и материалах независимого форума разработчиков PayPal.

Виды платежей

PayPal поддерживает несколько видов платежей:

  • оплата товаров в корзине, предоставляемой PayPal. В этом случае все операции по поддержке корзины берет на себя PayPal
  • покупка товара "в один клик", без добавления товара в корзину. Этот метод также применяется для оплаты товаров в корзине, сформированной без использования PayPal
  • периодические платежи, или подписка (recurring billing, subscription)

В статье будут рассмотрены два последних метода. Также я не рассматриваю метод, при котором корзина формируется на нашем сайте, а затем все содержимое корзины передается PayPal.

Процесс оплаты

Процесс оплаты очень прост: создается POST-форма с набором hidden полей, содержащих информацию о товаре (идентификатор, наименование, цена), и кнопку отправки формы. Следует отметить, что все цены должны передаваться с двумя знаками после точки. Если стоимость товара $10, то цена должна передаваться как "10.00". После отправки формы покупатель переходит на сайт paypal.com, где он завершает процесс оплаты. Данные формы должны отправляться на https://www.paypal.com/cgi-bin/webscr.

Покупка "в один клик"

Код простейшей формы:


<form method="post" action= "https://www.paypal.com/cgi-bin/webscr">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="my@email.com">
<input type="hidden" name="item_name" value="Item name">
<input type="hidden" name="item_number" value="1234">
<input type="hidden" name="amount" value="19.95">
<input type="hidden" name="no_shipping" value="1">
<input type="submit" value="Buy Now">
</form>

Описание основных параметров

ПараметрОписание
cmdОбязательный параметр. Должен иметь значение "_xclick"
businessОбязательный параметр - e-mail продавца
item_number Идентификатор товара. Это значение не будет показано пользователю, однако будет передано вашему скрипту при подтверждении транзакции. Если вы используете PayPal для оплаты товаров из корзины, в этом поле можно передавать идентификатор корзины
item_nameНаименование товара, которое будет показано покупателю
no_shippingНе запрашивать адрес для доставки. "1" - не запрашивать адрес, "0" - запрашивать
returnURL, куда покупатель будет перенаправлен после успешной оплаты. Если этот параметр не передать, покупатель останется на сайте PayPal
rmЭтот параметр определяет, как будет передаваться информация об успешно завершенной транзакции скрипту, указанному в параметре return. "1" - никакие параметры передаваться не будут."2" - будет использоваться метод POST. "0" - будет использоваться метод GET. По умолчанию "0".
cancel_returnURL, куда покупатель будет перенаправлен при отмене им оплаты . Если этот параметр не передать, покупатель останется на сайте PayPal
notify_urlURL, на который PayPal будет предавать информацию о транзакции (IPN). Если не передавать этот параметр, будет использоваться значение, указанное в настройках аккаунта. Если в настройках аккаунта это также не определено, IPN использоваться не будет
customЗначение этого поля не участвует в процессе покупки, оно просто будет передано вашему скрипту при подверждении транзакции
invoiceИспользуется для передачи номера счета. Параметр необязательный, но если вы передаете его, он должен быть уникальным для каждой транзакции
amountСумма к оплате. Если этот параметр не передать, покупателю будет предоставлена возможность ввести сумму самостоятельно(используется для donations)
currency_codeКод валюты. Возможные значения: "USD","EUR","GBP","YEN","CAD". По умолчанию "USD"

В таблице приведены лишь наиболее часто используемые параметры. Полный список смотрите в документации (ссылки в конце статьи).

Подписка

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

Пример формы:


<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<input type="hidden" name="business" value= "my@email.com">
<input type="hidden" name="item_name" value="Baseball Hat Monthly">
<input type="hidden" name="item_number" value="123">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="a1" value=0>
<input type="hidden" name="p1" value="1">
<input type="hidden" name="t1" value="W">
<input type="hidden" name="a2" value="5.00">
<input type="hidden" name="p2" value=2>
<input type="hidden" name="t2" value="M">
<input type="hidden" name="a3" value="50.00">
<input type="hidden" name="p3" value="1">
<input type="hidden" name="t3" value="Y">
<input type="hidden" name="src" value="1">
<input type="hidden" name="sra" value="1">
<input type="hidden" name="srt" value="5">
<input type="submit" value="Subscribe">
</form>

Описание основных параметров

ПараметрОписание
cmdОбязательный параметр. Должен иметь значение "_xclick-subscriptions"
businessОбязательный параметр - e-mail продавца
item_number Идентификатор товара. Это значение не будет показано пользователю, однако будет передано вашему скрипту при подтверждении транзакции.
item_nameНаименование товара, которое будет показано покупателю
no_shippingНе запрашивать адрес для доставки. "1" - не запрашивать адрес, "0" - запрашивать
returnURL, куда покупатель будет перенаправлен после успешной оплаты. Если этот параметр не передать, покупатель останется на сайте PayPal
rmЭтот параметр определяет, как будет передаваться информация об успешно завершенной транзакции скрипту, указанному в параметре return. "1" - никакие параметры передаваться не будут."2" - будет использоваться метод POST. "0" - будет использоваться метод GET. По умолчанию "0".
cancel_returnURL, куда покупатель будет перенаправлен при отмене им оплаты . Если этот параметр не передать, покупатель останется на сайте PayPal
notify_urlURL, на который PayPal будет предавать информацию о транзакции (IPN). Если не передавать этот параметр, будет использоваться значение, указанное в настройках аккаунта. Если в настройках аккаунта это также не определено, IPN использоваться не будет
customЗначение этого поля не участвует в процессе покупки, оно просто будет передано вашему скрипту при подверждении транзакции
invoiceИспользуется для передачи номера счета. Параметр необязательный, но если вы передаете его, он должен быть уникальным для каждой транзакции
a1Стоимость первого пробного периода. Может быть "0", в этом случае пробный период бесплатен. Если вы не предоставляете пробный период, не передавайте этот параметр
p1Длительность первого пробного периода. Если вы не предоставляете пробный период, не передавайте этот параметр
t1Единица измерения длительности первого пробного периода. Возможные значения: "D"-дни, "W"-недели, "M"-месяцы, "Y"-годы. Если вы не предоставляете пробный период, не передавайте этот параметр
a2Стоимость второго пробного периода. Если вы не предоставляете пробный период, не передавайте этот параметр
p2Длительность второго пробного периода. Если вы не предоставляете пробный период, не передавайте этот параметр
t2Единица измерения длительности второго пробного периода. Возможные значения: "D"-дни, "W"-недели, "M"-месяцы, "Y"-годы. Если вы не предоставляете пробный период, не передавайте этот параметр
a3Стоимость основного цикла подписки. Обязательный параметр
p3Длительность основного цикла подписки. Обязательный параметр
t3Единица измерения длительности основного цикла подписки. Обязательный параметр. Возможные значения: "D"-дни, "W"-недели, "M"-месяцы, "Y"-годы.
srcПериодические платежи. "1" - платежи будут повторяться периодически. Если параметр не передать, платеж будет произведен однократно.
sraЕсли в этом параметре передать "1", и попытка перевода денег завершается неудачей (например при недостатке средств на счете покупателя), то будет сделано еще до 2 попыток. После 3 неудачных попыток, подписка будет автоматически отменена. Если не передать этот параметр, подписка будет автоматически отменена после первой же неудачной попытки.
srtКоличество циклов подписки. Если этот параметр передан, подписка будет отменена после указанного количества циклов. Если не передать этот параметр, подписка будет действовать до тех пор, пока не будет отменена покупателем (либо автоматически при ошибке транзакции)
modifyВозможность модификации. Возможные значения:
"0" - форма предназначена только для создания новой подписки
"1" - форма предназначена только для изменения параметров существующей подписки
"2" - форма предназначена как для создания новой подписки, так и для изменения параметров существующей
По умолчанию "0"
usr_manageАвтоматическая генерация имени пользователя и пароля. Передайте "1", чтобы PayPal автоматически сгенерировал имя пользователя и пароль.
currency_codeКод валюты. Возможные значения: "USD","EUR","GBP","YEN","CAD". По умолчанию "USD"

IPN

IPN (Instant Payment Notification) - это технология PayPal, позволяющая автоматизировать процесс обработки платежей. Суть ее заключается в том, что на сервере продавца создается специаальный скрипт, и при возникновении событий, имеющих отношение аккаунту продавца (таких, как платеж, отмена платежа, создание или отмена подписки, и т.д.) сервер PayPal отправляет этому скрипту IPN - POST-запрос с информацией о транзакции. Скрипт в свою очередь посылает запрос серверу PayPal для проверки транзакции.

Итак, покупатель завершил оплату. С небольшой задержкой (до нескольких секунд) сервер PayPal отправляет IPN скрипту, указанному в настройках аккаунта или переданному в параметре notify_url. Грамотно написанный IPN-скрипт является ключом к обеспечению безопасности платежей. Если вы слышали о случаях обмана продавцов, использующих PayPal, можете быть уверены: либо они вообще не использовали IPN, либо у них "дырявый" IPN-скрипт

В первую очередь скрипт должен убедиться в том, что он действительно был вызван сервером PayPal. Для этого он должен сформировать POST-запрос к https://www.paypal.com/cgi-bin/webscr, передав все полученные переменные без изменения с добавлением параметра cmd со значением _notify-validate. В ответ будет возвращено либо VERIFIED в случае успешной верификациии транзакции, либо INVALID в случае ошибки. В случае ответа INVALID скрипт должен завершить работу.

Затем следует проверить получателя платежа, так как потенциальный злоумышленник может изменить форму, чтобы платеж был зачислен на его счет. Получатель платежа определяется по переменным business и receiver_email. Необходимость двух переменных объясняется тем, что PayPal позволяет зарегистрировать для одного аккаунта несколько адресов e-mail. E-mail, указанный при создании аккаунта, является первичным (primary email). Значением receiver_email всегда является primary email. Если платеж был отправлен на дополнительный email, то он передается через business. Если business и/или receiver_email не содержит ожидаемого значения, скрипт немедленно завершает работу.

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

IPN для одной и той же транзакции может отправляться более одного раза. Например, если платеж по какой-либо причине был задержан, первый IPN будет передан сразу после платежа. После того, как платеж будет завершен или отменен, будет отправлен второй IPN. Если ваш IPN-скрипт не вернул HTTP статус 200, PayPal повторит отправку IPN через некоторое время. Первый повтор будет через 10 секунд, затем при необходимости через 20, потом через 40, 80 и т.д.(до 24 часов). Если в течение 4 суток ожидаемый ответ от вашего скрипта не будет получен, попытки будут прекращены. Это можно использовать для того, чтобы не потерять даные о транзакции в случае возникновения ошибки в вашем IPN скрипте. Например, если скрипту не удалось подключиться к базе данных, в которой он сохраняет данные о транзакциях, он может вернуть HTTP статус 500, и IPN будет повторен позднее. Повторный IPN будет отправлен также, если IPN-скрипт не обращается к серверу PayPal для проверки транзакции.

Как видно из описания параметров return, rm и notify_url, IPN может передваться двум скриптам, указанным в параметрах return и notify_url. Между ними 2 различия:

  1. IPN для return будет отправлен только однократно, непосредственно после оплаты. notify_url может вызываться несколько раз (см. предыдущий параграф).
  2. Вывод скрипта return будет показан пользователю. Заметьте, что если в выводе содержатся ссылки, то они должны быть абсолютными. Вывод скрипта notify_url в браузер пользователя не выводится.

В полученых POST переменных содержится информация о транзакции. Наиболее часто используемые переменные:

ПараметрОписание
txn_idУникальный номер транзакции
payment_dateДата платежа в формате "18:30:30 Jan 1, 2000 PST"
payer_emaile-mail покупателя
businesse-mail продавца
payer_idуникальный идентификатор покупателя. Участники расчетов в PayPal идентифицируются по адресу e-mail, однако, учитывая, что имется возможность изменить e-mail, лучше для идентификации покупателя использовать payer_id
item_numberИдентификатор товара
item_nameНаименование товара
txn_typeТип транзакции. Возможные значения:
"web_accept" - оплата была сделана с использованием кнопки "Buy Now"
"cart" - оплата была сделана с использованием встроенной корзины PayPal
"send_money" - оплата была сделана с использованием функции "Send money"
"reversal" - деньги были возвращены покупателю по его инициативе
payment_statusСостояние платежа. Возможные значения:
"Completed" - транзакция завершена успешно, деньги переведены на счет продавца. В случае txn_type="reversal" означает, что деньги были возвращены на счет покупателя
"Pending" - платеж задержан. Причина задержки - в переменной pending_reason. После того, как платеж будет завершен или отменен, PayPal отправит еще одно уведомление.
"Failed" - платеж не прошел. Это состояние возможно только если платеж осуществялся с банковского счета
"Denied" - платеж был отменен продавцом. Это состояние возникает при отмене продавцом платежа, состояние которого было Pending
"Refunded" - деньги были возвращены покупателю. Это состояние возникает при отмене продавцом платежа, состояние которого было Completed
pending_reasonПричина задержки платежа. Возможные значения:
"echeck" - оплата была сделана электронным чеком
"multi_currency" - платеж был проведен в валюте, которая не указана в настройках аккаунта продавца. Платеж будет завершен после подтверждения транзакции продавцом
"intl" - продавец не является жителем США. Платеж будет завершен после подтверждения транзакции продавцом
"verify" - акккаунт продавца находится в состоянии "unverified". Платеж будет завершен после подтверждения личности продавца.
"address" - в настройках аккаунта продавца указано, что покупатель должен указать адрес для доставки, но покупатель не указал адрес. Платеж будет завершен после подтверждения транзакции продавцом
"upgrade" - платеж был сделан с кредитной карты, при этом аккаунт продавца имеет статус "Personal". Для завершения платежа продавец должен обновить аккаунт до "Business" или "Premier"
"unilateral" - e-mail продавца не зарегистрирован в системе.
"other" - другая причина. Продавцу следует связаться со службой поддержки для выяснения причины.
payment_typeТип платежа. Возможные значения:
"echeck" - оплата была сделана электронным чеком
"instant" - оплата была сделана с кредитной карты, банковского счета или используя средства на PayPal аккаунте покупателя
mc_grossСумма платежа.
mc_feeСумма коммиссионных. Сумма, зачисленная на счет продавца, определяется как mc_gross–mc_fee
mc_currencyВалюта платежа
first_nameИмя покупателя.
last_nameФамилия покупателя.
address_streetУлица
address_cityГород
address_stateШтат/Регион
address_zipПочтовый индекс
address_countryСтрана
verify_signЦифровая подпись. Используется PayPal при проверке транзакции

Дополнительные переменные, используемые с подпиской

ПараметрОписание
txn_typeТип транзакции. Возможные значения:
"subscr_signup" - попдиска
"subscr_cancel" - отмена подписки
"subscr_failed" - попытка платежа завершилась неудачно
"subscr_payment" - попытка платежа завершилась удачно
"subscr_eot" - окончание цикла подписки
"subscr_modify" - изменение параметров подписки
subscr_dateДата подписки или отмены подписки
subscr_effectiveДата вступления в силу изменений параметров подписки. Передается только в случае txn_type=subscr_modify
period1Длительность первого пробного периода. "4 D" - 4 дня, "2 W" - 2 недели, "1 M" - 1 месяц, и т.п.
period2Длительность второго пробного периода.
period3Длительность основного цикла подписки.
mc_amount1Стоимость первого пробного периода.
mc_amount2Стоимость второго пробного периода.
mc_amount3Стоимость основного цикла подписки.
mc_currencyВалюта
recurringИндикатор повторяющихся платежей. Отражает значение параметра src переданного через форму подписки
reattemptОтражает значение параметра sra переданного через форму подписки
recur_timesОтражает значение параметра srt переданного через форму подписки
retry_atВ случае неудачной попытки платежа (txn_type=subscr_failed), содержит дату следующей попытки.
usernameАвтосгенерированное имя пользователя
passwordАвтосгенерированный пароль
subscr_idУникальный идентификатор подписчика

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

 Тип транзакции
ПеременнаяПодпискаОтмена подпискиИзменение подпискиОплатаНеудачная оплатаОкончание подписки
businessXXXXXX
receiver_emailXXXXXX
item_nameXXXXXX
item_numberXXXXXX
invoiceXXXXXX
customXXXXXX
payment_status   X  
pending_reason   X  
payment_date   X  
txn_id   X  
txn_typesubscr_signupsubscr_cancelsubscr_modifysubscr_paymentsubscr_failedsubscr_eot
mc_gross   X  
mc_fee   X  
mc_currencyXXXXXX
first_nameXXXXXX
last_nameXXXXXX
address_streetXXXX  
address_cityXXXX  
address_stateXXXX  
address_zipXXXX  
address_countryXXXX  
payer_emailXXXXXX
payer_idXXXXXX
payment_type   X  
subscr_dateXXX   
subscr_effective  X   
period1XXX   
period2XXX   
period3XXX   
mc_amount1XXX   
mc_amount2XXX   
mc_amount3XXX   
recurringXXX   
reattemptXXX   
recur_timesXXX   
retry_at    X 
usernameXXXXXX
passwordXXXXXX
subscr_idXXXXXX

Категория: Уроки HTML | Просмотров: 2268 | Добавил: scriptozna | Рейтинг: 5.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Топ статьи


  Рекомендуем
АнтеБаннер
Сервисы для веб-мастера
Windows DI
Заработок для вебмастера
Все для веб-мастера
Фотообои
Шокирующие фото

Рейтинг@Mail.ru Rambler's Top100
Хостинг от uCoz