Работа с PayPal

Posted: Март 3, 2011 in .NET, ASP.NET

Создание тестового аккаунта
Для начала нужно зайти на PayPal’s Sandbox Test Environment и зарегистрироваться как продавец и покупатель.
Для теста в action нужно использовать https://www.sandbox.paypal.com/cgi-bin/webscr, для реального приложения — https://www.paypal.com/cgi-bin/webscr

Простейший случай

	
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick" />
    <input type="hidden" name="business" value="ваш_email" />
	<input type="hidden" name="item_name" value="Товар" />
    <input type="hidden" name="amount" value="3.00" /> 
    <input type="submit" value="Купить" />
</form>

Чтобы добавить доставку, необходимо вставить

	
	<input type="hidden" name="shipping" value="1.00">

Все переменные можно посмотреть в HTML Variables по адресу https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables
Примечание: все суммы должны быть с двумя знаками после точки.

Пожертвования
Чтобы принимать пожертвования, нужно поменять значение cmd на _donations.

Корзина
Если вы не хотите реализовывать у себя на сайте механизм корзины, то у PayPal на этот случай есть готовое решение

		
Товар 1:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="add" value="1">
    <input type="hidden" name="business" value="ваш_email">
    <input type="hidden" name="item_name" value="Товар 1">
    <input type="hidden" name="amount" value="10.00">
    <input type="hidden" name="shopping_url" value="http://ваша_страница_с_товарами">
    <input type="hidden" name="return" value="http://ваша_страница_в_случае_удачного_добавления">
    <input type="hidden" name="cancel_return" value="http://ваша_страница_в_случае_отмены">
    <input type="hidden" name="bn" value="PP-ShopCartBF:x-click-but22.gif:NonHosted">
    <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but22.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
    <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

Товар 2:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="add" value="1">
    <input type="hidden" name="business" value="ваш_email">
    <input type="hidden" name="item_name" value="Товар 2">
    <input type="hidden" name="amount" value="5.00">
    <input type="hidden" name="shipping" value="1.00">
    <input type="hidden" name="shopping_url" value="http://ваша_страница_с_товарами">
    <input type="hidden" name="return" value="http://ваша_страница_в_случае_удачного_добавления">
    <input type="hidden" name="cancel_return" value="http://ваша_страница_в_случае_отмены">
    <input type="hidden" name="bn" value="PP-ShopCartBF:x-click-but22.gif:NonHosted">
    <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but22.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
    <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

Просмотреть корзину:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="paypal">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="display" value="1">
    <input type="hidden" name="business" value="ваш_email">
    <input type="hidden" name="shopping_url" value="http://ваша_страница_с_товарами">
    <input type="image" src="https://www.paypal.com/en_US/i/btn/view_cart_02.gif" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
</form>

Подписка
Предположим, что вы продаете не продукт, а подписку. Вы хотите позволить 3 дня пользования бесплатно, а затем брать по 10 долларов за каждый месяц использования сервиса. Следующий код решает эту задачу

	
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick-subscriptions"/> 
    <input type="hidden" name="business" value="ваш_email"/> 
    <input type="hidden" name="item_name" value="Какой-то сервис"/> 
    <input type="submit" value="Подписаться" /> 

    <input type="hidden" name="a1" value="0"/> 
    <input type="hidden" name="p1" value="3"/> 
    <input type="hidden" name="t1" value="D"/> 
    <input type="hidden" name="a3" value="10.00"/> 
    <input type="hidden" name="p3" value="1"/> 
    <input type="hidden" name="t3" value="M"/> 
    <input type="hidden" name="src" value="1"/> 
    <input type="hidden" name="srt" value="0"/> 
    <input type="hidden" name="sra" value="1"/> 
</form>

PostPayment обработка
Хотелось бы узнать, когда покупатель оплатил товар, чтобы как можно скорее начать обрабатывать его заказ. Для этого у PayPal есть несколько возможностей.

AutoReturn
Простейшим способом является AutoReturn. Для этого вам нужно установить Return URL в вашем профайле. Вам выдадут значение для return переменной в html form. Тогда пользователь будет попадать на эту страницу в случае удачной оплаты. Вам также будут переданы переменные

  • tx — Transaction ID
  • st — Payment status
  • amt — Payment amount
  • cc — Currency code

Payment Data Transfer (PDT)
В этом случае вам нужно установить AutoReturn и Payment Data Transfer поставить в On. Вам будет сгенерирован PDT Identity Token. Вот как это будет выглядеть

  • Пользователь платит и возвращается на страницу: http://www.yourdomain.com/Thanks.aspx?tx=%5BTransactionID%5D.
  • Из code-behind Thanks.aspx, вы выбираете значение tx и отправляете HTTP POST по адресу https://www.paypal.com/cgi-bin/webscr со следующими параметрами: cmd=_notify-synch&tx=[TransactionID]&at=[PDTIdentityToken] (или https://www.sandbox.paypal.com/cgi-bin/webscr для песочницы)
  • PayPal на ваш запрос в следующем формате:

    SUCCESS
    first_name=Firstname
    last_name=Lastname
    payment_status=Completed
    payer_email=firstname@lastname.com
    payment_gross=50.00
    mc_currency=USD

  • и т.д.

Instant Payment Notification (IPN)
Недостатком PDT является то, что это user-driven процесс. То есть вы ничего не узнаете, если пользователь закрыл браузер и не перешел на вашу страницу. Поэтому для более серьезной интеграции с PayPal рекумендуется использовать back-end технологию IPN. IPN это механизм, который отправляет вам HTTP POST запросы, информируя о важных событиях. Нужно также разрешить эту опцию в вашем профайле, указав ваш IPN handler. При наступлении какого-нибудь события произойдет следующее

Ссылки
http://www.codeproject.com/KB/aspnet/paypal_c_aspnet.aspx

Реклама

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s