Pull to refresh

Опыт работы с американскими платежными системами

Reading time 5 min
Views 38K
Всем привет! Я работаю над e-commerce стартапом в штатах и за последнее время удалось поработать с рядом сервисов электронных платежей, а именно Stripe, Braintree и Paypal. Сегодня хочу немного рассказать о том, какие особенности электронных платежей есть в Штатах, о практическом опыте использования вышеназванных сервисов и так же ряд общих мыслей на эту тему.

Итак, в начале немного теории. Начнем, пожалуй, с того, какие бывают виды платежных карт, потому что в свое время это было небольшим открытием. Итак, существуют следующие виды карт:

  • Дебетовая карта (debit card) - чаще всего мы их встречаем в виде зарплатных карт
  • Карты с разрешённым овердрафтом — практически те же дебетовые карты, но есть возможность снятия денег скажем так «в кредит», когда ваши основные средства окончены
  • Кредитная карта
  • Предоплаченные карты (prepaid card) — предварительно оплачиваемая карточка, используемая для расчётов за товары или услуги в пределах предварительно уплаченной суммы. О них чуть подробнее будет ниже.
  • Локальные карты — карта локальной (национальной) платёжной системы
  • Международные карты — Visa (Visa Electron, Visa Classic, Visa Gold, Visa Platinum), MasterCard (Cirrus, Maestro, MasterCard Standard, MasterCard Gold, MasterCard Platinum), Diners Club, American Express, JCB и China Unionpay.
  • Виртуальная карта — банковская предоплаченная карта без материального носителя


Так вот, о предоплаченных картах. В Штатах они очень популярны и купить их можно в любом Walmart, T-Mobile или другом крупном магазине. Как это используется. Допустим, у вас есть любимый племянник и вы ему решили подарить деньги на день рождения. Но так как дарить кэш не модно, а племяш покупает что-то, допустим на амазоне, то вы идете и покупаете такую карточку, например на 50 долларов. После это племянник активирует ее в интернет и готово, у него есть карточка на 50 долларов. Есть еще подвид prepaid card, которые можно пополнять. Суть в том, что эти карточки пользуются популярностью в США, потому что позволяют вам не светить свою личную карточку в интернете. Что плюс. Однако, с точки зрения компании, которая например не делает снятия всей суммы за сервис сразу (charge upfront), это большой риск, потому что вы никогда не сможете ничего предъявить по такой карте, если не получится снять деньги. Точнее сможете, и есть даже специальные процедуры для этого, но иногда это просто не стоит того. Понять, с каким типом карты вы работаете можно с помощью первых 6 цифр карты (bin number) и вот такого сервиса. Кстати, по ссылке хорошая инфографика о том, что значит номер на платежных картах.



Вторая замечательная вещь, с которой вы обязательно столкнетесь, когда начнете работать с любыми платежными системами — это сообщение об ошибках. Точнее с их описанием. Почему? Потому что большинство банков не имеет четкой спецификации, что значит тот или иной код, и когда сервис получает ошибку и не может ее распознать, то вы увидите «Payment was declined», что на самом деле плохо не для вас, а для вашего пользователя, который будет удивлен и активно продолжит жать на кнопку «Place order», ничего не будет работать, он обидится и уйдет на всегда. Хотя у него банально может не быть денег на карте. К этому надо быть готовым и выдавать более подробное описание об ошибке.

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

Общие требования:
  • Понятные policy использования, чтобы вас внезапно не отключили, как однажды с нами поступил Braintree (кому интересно — могу рассказать при личном общении);
  • Простой и понятный dashboard, чтобы им могли пользоваться не только программисты, но и customer service;
  • Максимально прозрачная документация по подключения, причем в ней явно должны быть прописаны следующие пункты:
    • Getting started
    • API Docs
    • Testing
    • Две площадки — test / production
    • Troubleshooting
    • Работа с виджетами (если они есть)

  • Адекватный саппорт.


Функциональные требования:
  • Работа с пользователями, их картами и дополнительными данными;
  • Валидация данных;
  • Проведение платежей;
  • Подписка;
  • Скидочные купоны;
  • Работа с инвойсами;
  • Аккаунтинг.

Само собой, что все это должно иметь понятный REST API, который можно брать и использовать без дополнительных телодвижений. Пример дополнительных телодвижений — есть такой сервис stamps.com, который позволяет интегрироваться со всякими USPS, FedEx и прочими службами. Чтобы получить доступ к их API, нужно отправить заявку, куда включить IP всех разработчиков, чтобы эти IP добавили в whitelist. После чего подождать 2-3 дня и будет счастье. Enterprise такой enterprise.

Собственно, наступило время сравнить те сервисы, которые я перечислил в начале. Не будем далеко ходить, побеждает Stripe, который мы активно используем. Причины:
  • самая понятная документация, которую я когда-либо читал — я ни разу ничего не гуглил дополнительно;
  • просто подключать — практически copy-paste из той же документации;
  • очень отзывчивый саппорт, да и вообще пример компании, которая дорожит клиентами (если интересно — могу рассказать в личном общении);
  • максимально простой интерфейс личного кабинета — интуитивно понятно, что где находится.

Тот же braintree проигрывает из за того, что невозможно без бутылки как его подключить, а уж про их документацию я молчу. Как пример — попробуйте найти номера карточек для тестирования в sandbox, good luck.

Про paypal. Paypal хорош, когда вы продаете электронные товары или сервис. В остальных случаях — забудьте о нем. Почему? Вот простая картинка, как с ним интегрироваться:



Кстати, Paypal купил не так давно Braintree и сейчас отдает им всякие новые вещи на разработку, потому что «они стартап и могут это сделать быстро и качественно».

Как подключать Stripe. Шаг первый — javascript:
//Инициируем библиотеку
Stripe.setPublishableKey('{stripe.publish_key}');
//Вместо отправки форму получаем от Stripe токен, который в себе содержит зашифрованную информацию
//после чего передаем ее в собственный обработчик stripeResponseHandler
Stripe.card.createToken({
number: $('#cardnumber').val(),
cvc: $('#cvc').val(),
exp_month: $('#expdate_mm').val(),
exp_year: $('#expdate_yy').val(),
name: $("#cardholdername").val(),
address_line1: $("#street1").val()),
address_line2: $("#street2").val(),
address_city: $("#city").val(),
address_state: $("#region_id").val(),
address_zip: $("#postcode").val(),
address_country: 'US'
}, stripeResponseHandler);
//Вписываем в обработчик нужную логику
var stripeResponseHandler = function (status, response) {
var $form = $('#payment-form');
if (response.error) {
//обрабатываем ошибку от Stripe, например, что введен не тот год/месяц
} else {
$.post(url, $form.serialize(), function (data) {
//отправляем форму к себе на сервер
});

Теперь остался серверный код — grails/java

 
//Регистрируемся
Stripe.apiKey = stripe.secret_key
//Создаем покупателя
Map<String, Object> customerParams = new HashMap<String, Object>()
customerParams.put("email",email)
customer = Customer.create(customerParams)
//Заводим ему карту на основании токена, который получили ранее
Map<String, Object> cardParams = new HashMap<String, Object>()
cardParams.put("card", token)
customer.createCard(cardParams)
//Проводим платеж
Map<String, Object> chargeParams = new HashMap<String, Object>()
chargeParams.put("amount", amount)
chargeParams.put("currency", "usd")
chargeParams.put("description", "Charge")
chargeParams.put("customer", customer.id)
chargeParams.put("card", card.id)
Charge.create(chargeParams)


Собственно все, вы провели платеж. Тот же код, например на Braintree, будет в 2,5 раза длиннее.

На этом, пожалуй, все. Задавайте вопросы в комментариях, тема интересная, да и граблей я в ней собрал достаточно.
Tags:
Hubs:
+3
Comments 5
Comments Comments 5

Articles