Внедрение PayPal на сайт, работающий под ASP.NET

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

Постановка задачи


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

Решение


Шаг 1. Регистрация в PayPal Sandbox


Чтобы иметь возможность тестирования необходимо зарегистрироваться в тестовой среде, которая называется Sandbox. Делается это следующим образом:
1. Заходим на developer.paypal.com там регистрируем новый аккаунт.
2. Логинимся на developer.paypal.com, заходим в закладку Test Accounts и создаем там новый тестовый аккаунт продавца. Во время создания выбираем опцию seller. В поле password будет стоять пароль, необходимый для того чтобы потом залогиниться в SandBox. После создания появится аккаунт с Email'ом типа blabla_1234567890_biz[at]email.com и паролем, который был в поле password. Используя их
3. Логинимся на www.sandbox.paypal.com. После залогинивания необходимо принять Billing Agreement.

Шаг 2. Интеграция в сайт


Гиморный вариант
1. На странице PayPal API: SOAP Interface скачиваем SDK для платформы .NET
2. Устанавливаем инстальник, идем в директорию установки и забираем оттуда из директории bin библиотеки log4net.dll и paypal_base.dll. По идее, в них лежит все необходимое для того чтобы заставить систему оплаты работать. Примеры работы с этими библиотека лежат в сэмпловом сайте, который поставляется вместе с SDK.
Негиморный, но урезаный вариант
Урезанность заключается в том, что данным способом возможно делать только DirectPayment, но нам больше и не надо. Так что, считаю этот вариант оптимальным.
1. Скачать обертку для PayPal SDK, которая умеет делать DirectPayment. Обертка представляет собой библиотеки log4net.dll и paypal_base.dll, а так же собственно обертку SiteMechanics.PayPalDirect.dll. В ней содержатся интерфейсы, IMerchantProfile и IBuyerProfile, а так же дефолтные наследники от них. Эти интерфейсы используются классом PayPalHelper, который собственно и выполняет оплату через PayPal. Таким образом, чтобы воспользоваться оберткой необходимо отнаследовать два интерфейса, заполнить у наследников все поля и передать в метод DoDirectPayment объекты наследники. Возвращаемый объект содержит поле Ack, если он равен Success, то оплата прошла успешно, если же нет, то в поле Errors содержатся все возникшие ошибки. Если наследовать интерфейсы впадлу, то можно заюзать уже готовые наследники MerchantProfile и BuyerProfile. Пример кода смотри ниже:
MerchantProfile merchant = new MerchantProfile(
"blabla_1234567890_biz[at]email.com",
"1234567890",
"odifhp9p83948rlwkcmnwli430948f3ojldkjflskdjlsdkjsf0o98209",
"sandbox");
BuyerProfile buyer = new BuyerProfile(
"John","Doe",
"1 Main St","", "San Jose","CA","95131",
"Visa", "4197058882575379","926",
10,2010
);
PayPalResponse PayPalResponse = PayPalHelper.DoDirectPayment("13.45", merchant, buyer);

Подводные камни


1. Тестовая кредитка покупателя:
CreditCardType: Visa
CreditCardNumber: 4197058882575379
VerificationCode: 926
ExpirationDate 2010-10
2. Среда выполнения у нас тестовая, поэтому в качестве параметра Environment используем «sandbox», чтоб включить «реальный» PayPal, надо указать «live», но это надо уточнить в официальной доке.
3. Инфу для MerchantProfile брать в разделе API Credentials на developer.paypal.com
4. Данная обертка использует способ передачи между PayPal сервером и сайтом, которая называется 3-token, есть еще возможность это делать на основе сертификатов, но это мне показалось гиморным, поэтому я не разбирался с этим. RTFM.
5. Если вы получаете ошибку «Security header is not valid », значит неверно указаны параметры для MerchantProfile
6. Если вы получаете ошибку «This transaction cannot be processed due to an invalid merchant configuration», значит не было принято Billing Agreement. Смотри третий пункт раздела «Регистрация в PayPal Sandbox»

Предупреждаю сразу, что обертка не проходила усиленное тестирование и вы как всегда все юзаете на свой страх и риск. Но вроде бы там все должно работать. Если что, пишите сюда paradoxs.mail@gmail.com

Ссылочки
Центр Интеграции, Что такое Sandbox, Качнуть SDK под разные платформы
Tags:howtopaypalsandboxASP.NETSDK
Hubs: .NET
+10
7.5k 26
Comments 6

Popular right now

Разработчик C#/ASP.NET
to 180,000 ₽ENJOY PROСанкт-ПетербургRemote job
ASP.NET Core Developer
to 350,000 ₽SimpleFinance GroupМосква
.NET developer
to 200,000 ₽SibedgeМоскваRemote job
.NET разработчик
from 80,000 to 160,000 ₽EFSOLRemote job
Senior .Net Developer
from 250,000 ₽e-POSRemote job

Top of the last 24 hours