Внедрение PayPal на сайт, работающий под ASP.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 под разные платформы
    • +10
    • 6,8k
    • 6
    Поделиться публикацией

    Комментарии 6

      0
      Кстати говоря, некоторые PayPal'овские штучки (например, Reference Transactions) в обычном sandbox не работают. Для того, чтобы их тестировать приходится работать с их beta-sandbox. В этом случае четвёртый параметр конструктора MerchantProfile - "beta-sandbox"
        0
        Спасибо. В будущем с PayPal буду общаться основательно, поэтому всегда рад любой полезной информации о нём.
        0
        Это мой первый пост на хабре. Как вы думаете, получилось ?
          0
          Едва нашел этот пост... Чтож так на хабре не любят асп.нет то...
          Очень полезно! Спасибо!
            0
            Привет!

            Не хочешь написать этот пост в новом блоге .NET?
            http://habrahabr.ru/blog/net/
              0
              А интернет-магазин торгует за рубежом? Просто на сколько я знаю, российским paypal аккаунтам нельзя торговать, можно только покупать.
              П.с. можно ссылку на магазин? В личку — если секрет :)

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое