Личный опыт Sergey Belkin
613

Как мы подбирали платежный шлюз для сайта

Облачный провайдер 1cloud о том, как настроить удобную для клиента систему оплаты услуг в онлайне.

В закладки

Когда мы только зашли на рынок IaaS-услуг, то поставили себе задачу — создать простой и удобный сервис, которым могли бы пользоваться люди с любым уровнем понимания IT-тематики. Так, чтобы развернуть виртуальный сервер можно было также просто, как завести почтовый ящик на «Яндексе».

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

Из каких платежных систем выбирали

С 2012 года мы успели поработать с большим количеством платежных шлюзов. Одним из первых был «Деньги Online». После двух лет сотрудничества возник инцидент с доступностью к сервису, поэтому решили подключить альтернативные платежные системы на случай технических сложностей.

В качестве альтернативы выбрали PayPal — в первую очередь из-за существенного потока зарубежных клиентов, которые хотели оплачивать наши услуги с помощью этого сервиса.

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

Затем подключили «Робокассу» — более знакомый шлюз для русскоязычного сегмента Сети. В ситуации с «Робокассой» ряд запросов в API не соответствовал своему описанию, но с помощью техподдержки ситуацию удалось разрешить.

Позже начали работать с платежной системой PayMaster, которая предложила нам выгодные условия по комиссии и удобный API. Долгое время этот платежный шлюз выступал в качестве основного.

Недавно мы решили упростить процесс оплаты для пользователей и в целом улучшить внешний вид и юзабилити форм для заполнения данных банковских карт, поэтому интегрировали еще один платежный шлюз — CloudPayments. С его помощью мы хотели решить две задачи, о которых речь пойдет далее.

Оплата без перехода на страницу платежного шлюза

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

При этом возникала еще одна проблема — после того, как пользователь внес деньги на счет, он оставался на странице платежного шлюза до тех пор, пока не кликнет на специальную ссылку для возврата на 1cloud.ru.

По данным аналитики, переходили по ссылке и возвращались на наш сайт малое количество клиентов. Отчасти это было связано с тем, что клиент должен был нажать ссылку «Вернуться в интернет-магазин». Это при том, что наш сервис интернет-магазином не является.

С помощью chekout-скрипта от компании CloudPayments мы реализовали платежную форму прямо в панели управления. При этом конфиденциальность данных сохраняется в полной мере. Несмотря на то, что клиент вводит номер карты внутри нашего сервиса, данные передаются платежному шлюзу и не сохраняются на нашей стороне.

Для реализации скрипта нам пришлось пройти сканирование на безопасность по стандарту PCI DSS у одной из аккредитованных организаций — таково было требование CloudPayments. Сканирование нужно, чтобы подтвердить техническое соответствие стандарту и исключить вероятность кражи данных пользователей во время заполнения форм на сайте.

Аудит на соответствие требованиям PCI DSS проводила компания ARinteg. Мы отправили им заявку, в которой обозначили желание пройти аудит, заполнили анкету и назначили дату проверки. На стороне ARinteg подготовка к сканированию занимает где-то полдня, однако мы взяли дополнительные четыре–пять дней на подготовку своей инфраструктуры.

Сканирование длилось примерно 15 часов, хотя бывает, что проверка идет несколько суток. Специалисты ARinteg проверяли наличие SSL и защиты от запросов-инъекций и других уязвимостей на нашем сайте.

Первичный тест мы не прошли, и нам предоставили список проблем, которые нужно было устранить. Все они были незначительны, например, имелся post-метод, который использовался, когда пользователь оценивал наши пошаговые инструкции на сайте. Мы устранили все замечания, и вторая попытка аудита прошла успешно. Далее мы могли перейти к реализации chekout-скрипта.

Скрипт прописан на нашем сайте, собирает из указанной формы карточные данные и составляет из них криптограмму для оплаты через API CloudPayments. Сама форма для ввода данных банковской карты выглядит вот так:

Во время реализации скрипта и формы мы сумели сократить количество заполняемых пользователем полей до минимума. Оставили только те, которые реально необходимы для проведения операции. Например, убрали поля «Имя» и «Фамилия». Как нам объяснили представители платежного шлюза, банки не проверяют эти данные (важны лишь номер карты, дата и CVV), поэтому мы решили их опустить и упростить весь процесс.

Дополнительно мы сделали более наглядной информацию о нашей дисконтной программе. Ранее она выглядела так:

Автоплатеж по остатку на счете, а не по расписанию

Еще одним приятным изменением стала возможность настроить автоплатеж с пополнением счета не в заданную дату, как это происходит в большинстве платежных систем — а в любой момент, когда у клиента заканчиваются средства на счете. Это удобно, поскольку оплата за услуги нашего сервиса исчисляется 10-минутными интервалами.

Для реализации автоплатежа мы использовали метод оплаты с «запомненной» карты (по временному токену). Работает это следующим образом: после первого успешного платежа, совершенного пользователем, шлюз генерирует для пары «сервис — карта» свой токен и отправляет его в postback-ответе. Этот токен сохраняется, и при повторной оплате уже передается он, а не данные карты. Получается, что мы направляем шлюзу запрос, в котором указываем наш API-ключ (идентификатор того, что запрос поступил от 1cloud), токен и сумму. Шлюз проверяет, создавался ли такой токен, и если все в порядке, то обрабатывает платеж на указанную сумму.

Дату, когда необходимо произвести автоплатеж, мы рассчитываем динамически исходя из текущего потребления услуг пользователем и остатка средств на счете. Допустим, у клиента тысяча рублей на балансе, а потребил он за последний десятиминутный интервал два рубля. Понятно, что приблизительная дата обнуления наступит через пятьсот десятиминутных интервалов — это примерно 34 дня. Таким образом, мы можем провести автоплатеж за несколько дней до окончания средств. Размер автоплатежа клиент выбирает самостоятельно.

Что дальше

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

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Sergey Belkin", "author_type": "self", "tags": [], "comments": 3, "likes": 15, "favorites": 30, "is_advertisement": false, "subsite_label": "life", "id": 54600, "is_wide": false, "is_ugc": true, "date": "Wed, 09 Jan 2019 15:54:40 +0300" }
{ "promo": {"title":"\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435","order_id":0,"state":80,"description":"\u0418 \u043b\u0443\u0447\u0448\u0435","email":"kontsarenko@gmail.com","button_text_id":7,"link":null,"app_store_link":"https:\/\/itunes.apple.com\/ru\/app\/vc-ru-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-%D0%B1%D0%B8%D0%B7%D0%BD%D0%B5%D1%81%D0%B0\/id920638420?mt=8","google_play_link":"https:\/\/play.google.com\/store\/apps\/details?id=ru.artrobot.siliconrus&hl=ru","color_id":0,"rejection_reason_text":null,"image":"{\"type\":\"image\",\"data\":{\"uuid\":\"72f66d15-b1b6-eb4c-972f-0ae77f029d5c\",\"width\":1024,\"height\":1024,\"size\":156164,\"type\":\"png\",\"color\":\"fbebeb\",\"external_service\":[]}}","total":10500,"with_payment":false,"dates":"[{\"year\":\"2019\",\"month\":\"01\",\"day\":\"20\",\"available\":\"true\",\"price\":\"10500\",\"discount\":\"4500\",\"format\":\"backend\"}]","hits_count":8843,"scrolls_count":0,"clicks_count":33,"hits_limit":0,"scrolls_limit":0,"clicks_limit":0}, "link": "https://vc.ru/redirect?hash=7b861072b331176a1caefcc52f59d3bf39e9b5e0b7458bae843c21f2819642c4&component=booster&id=110&type=daily&target=entry&url=", "buttonText": "Скачать", "location": "entry", "id": "110" }
{ "id": 54600, "author_id": 237214, "diff_limit": 1000, "urls": {"diff":"\/comments\/54600\/get","add":"\/comments\/54600\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/54600"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199123, "possessions": [] }

3 комментария 3 комм.

Популярные

По порядку

0

"А еще, я слышал, что учёные разрабатывают новое устройство, которое сможет поджаривать два куска хлеба одновременно!" 🤫
Из фильма

Ответить
0

Усе. Все вопросы теперь - к МТС

Ответить
0

Отлично, стали понятны некоторые аспекты.

Ответить
0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Приложение-плацебо скачали
больше миллиона раз
Подписаться на push-уведомления
{ "page_type": "default" }