Pull to refresh

Разработка платежной системы для сайта с помощью CyberSource Secure Acceptance

Reading time 6 min
Views 10K
Довольно часто перед веб разработчиками стоит задача интегрировать систему платежей в уже готовый проект. Как быстро и качественно справиться с такой задачей? Конечно, на сегодняшний день существует большое количество платежных систем, которые предоставляют инструменты для организации обработки транзакций по кредитным картам. И именно об одной из таких систем я хочу рассказать. Знакомьтесь — CyberSource.

Как это работает


CyberSource — это компания, которая предоставляет услуги по управлению платежами. Компания была основана в 1994 году. В 2010 корпорация CyberSource была приобретена компанией Visa Inc. и сейчас является ее дочерней компанией. Для интеграции системы предлагаются несколько решений:

  • Использование API (Simple Order API, SOAP Toolkit API)
  • Secure Acceptance (Web/Mobile, Silent Order POST)

Какой из вариантов интеграции вы бы не выбрали, общий принцип работы одинаков. Для того, чтобы пользователь смог осуществлять платежные операции на вашем сайте, ему прежде всего необходимо «привязать» свою кредитную карточку, то есть зарегистрировать ее в системе CyberSource. После успешной регистрации пользователь получает уникальный идентификатор payment_token, наличие которого является обязательным во всех последующих транзакциях (операциях с карточкой). И сегодня я хочу рассказать о технологии Secure Acceptance. Этот метод интеграции позволяет быстро создавать формы для совершения покупок на вашем сайте. Кроме того, он требует написания минимум кода, что делает процесс интеграции легким и понятным даже для тех, кто только делает первые шаги в программировании.

Работа с CyberSource Secure Acceptance


Для работы с системой CyberSource прежде всего необходимо зарегистрироваться и создать тестовый аккаунт. Тестовый аккаунт будет использоваться только на этапе разработки и тестирования, и в дальнейшем его следует заменить на полноценный рабочий. После регистрации мы попадаем в тестовый бизнес-центр. Это и будет в основном нашим рабочим инструментом. Здесь пользователь может создавать профили для Secure Acceptance, проверять результаты транзакций, писать письма в службу поддержки. Сразу хочу отметить наличие русского языка для интерфейса кабинета. Переключиться на него можно в меню “My User Settings”. Вообще работать с Secure Acceptance достаточно просто, и сложности у меня возникли только на стадии создания профилей и их настройки. Но тут на помощь всегда приходила служба поддержки.

Ответы на все мои вопросы приходили довольно быстро. Правда организована эта служба довольно специфически — через eTickets. Для того, чтобы задать вопрос, переходим в раздел “Support Center”. Откроется страница службы поддержки. В разделе My eTickets будут отображаться ваши обращения в службу. Чтобы задать вопрос просто создаем новый eTicket. Ниже размещена таблица с вопросами, которые пользователи задают чаще всего. Поэтому сначала проверьте, возможно ответ на ваш уже содержится в ней. Если нет — то смело создавайте свой eTicket, и специалисты CyberSource с радостью предоставят вам всю необходимую информацию. Свой ответ они разместят в том же eTicket.

Чтобы иметь возможность использовать Cybersource Secure Acceptance у себя на сайте, необходимо создать соответствующий профиль. Это можно сделать, выбрав «Tools & Settings» и зайдя в раздел «Secure Acceptance», меню «Profiles». По умолчанию Secure Acceptance отключена, поэтому сразу после регистрации в меню вашего бизнес-центра этого пункта не будет. Для его активации необходимо обратиться в службу поддержки. Сразу советую попросить активировать сервис Payment Tokenization, чтобы в будущем не возникало ошибки «Recurring Billing or Secure Storage service is not enabled for the merchant».
Ждем, пока в меню настроек появится раздел «Secure Acceptance» и приступаем к созданию профиля.

Профили Secure Acceptance Web / Mobile и Secure Acceptance Silent Order POST


Cybersource Secure Acceptance предлагает два метода для интеграции на сайт:

  1. Secure Acceptance Web/Mobile
  2. Secure Acceptance Silent Order POST

Разницы между этими двумя методами практически нет. Secure Acceptance Web/Mobile предлагает готовые формы для сбора и отображения информации, тогда как в Secure Acceptance Silent Order POST разработчик все формы создает самостоятельно. Например, для привязки кредитной карты в Web/Mobile достаточно на сайте разместить кнопку, нажав которую, пользователь попадает на форму для ввода регистрационных данных, разработанную компанией CyberSource. Изменить эту форму невозможно (правда можно в настройках профиля немного изменить стиль). Если транзакция прошла успешно — то выводится форма квитанции (так же от CyberSource). В Silent Order POST разработчик сам создает все необходимые ему формы. Вот и все отличия. А дальше принципы работы обеих методов одинаковы. После обработки запроса сервером пользователь автоматически перенаправляется на страницу, которая указана в настройках профилей. Кроме того, если в настройках указан адрес электронной почты или страницы, то куда будет выслано квитанцию ​​с результатами транзакции.

Можно создавать любое количество профилей различных типов (Web/Mobile или Silent Order POST). Но активным может быть только один из них. Будьте внимательны. Если активировать профиль Web/Mobile, а запросы отсылать на Silent Order POST, то это вызовет ошибку на стадии авторизации запроса в системе. Ведь каждый профиль имеет уникальный идентификатор и ключи, на основе которых и проходит авторизация.

Вот перечень основных групп настроек:

Общие
  • General Settings — название профилей, тип, идентификатор профилей
  • Payment Settings — настройки типов кредитных карт, валюты
  • Security — создание ключей для авторизации
  • Notifications — выбираем, куда будет направляться квитанция с результатам транзакции
  • Customer Response Pages — настройки страниц для различных ответов сервера

Только для Web/Mobile
  • Appearance and Branding — добавление собственного бренда на форму
  • Localization — список поддерживаемых языков
  • Payment Form — настройка полей формы

После заполнения всех необходимых полей, активируем профиль. При необходимости внести изменения — сначала делаем деактивацию. Список всех доступных профилей можно увидеть, нажав кнопку "<All Profiles" в верху страницы.

Практическая реализация


В официальной документации есть очень хорошие примеры работы с Secure Acceptance, написаны на различных языках программирования. Реализация на PHP довольно проста, и позволяет с легкостью интегрировать систему на сайт. Но мне не понравилось то, что на форме в скрытых полях содержится информация для авторизации транзакций (идентификатор профиля, ключи, идентификатор и дата транзакции). Поэтому я решил усложнить себе жизнь и сделать так, чтобы все эти поля заполнялись непосредственно перед отправкой на сервер. Кроме того, без обращения к серверу не обойтись. И вот почему. Перед отправкой данных серверу CyberSource надо сгенерировать сигнатуру. Сигнатура генерируется на основе обязательных полей формы (имена этих полей находятся в поле signed_field_names) и записывается в поле signature. Такая же сигнатура генерируется на сервере и служит для проверки целостности полученных данных.

Поэтому все скрипты из моего примера можно разделить на 3 группы:

Скрипт get_default.php возвращает набор данных для заполнения полей формы (в зависимости от типа транзакции и типа системы). Этот скрипт использует три класса, которые я создал для работы с Cybersource Secure Acceptance

  • Базовый класс Cybersource — содержит поля и методы общие для Web/Mobile и Silent Order POST
  • Класс SecureAcceptanceWM — для работы с Web/Mobile
  • Класс SecureAcceptanceSOP — для работы с Silent Order POST

Данные возвращаются в формате JSON и записываются в соответствующих полях формы, после чего делается ее отправка (submit).

Скрипт get_response — сюда направляется ответ сервера с квитанцией о результатах транзакции. Адрес этого скрипта нужно прописать в настройках “Notifications” профиля. Ответ приходит в виде массива, который находиться в $ _POST. Результат выполнения транзакции находиться в поле reason_code. Транзакция является успешной, если reason_code равен 100. Полный перечень полей ответа, а также коды ошибок можно найти в документации. Задача этого скрипта — записывать в базу данных поле payment_token если транзакция прошла успешно.

Скрипт get_users — используется для получения списка пользователей или создания нового. Этот скрипт использует класс User.

Кроме того во всех скриптах используется класс DbAdapter. Этот класс предназначен для работы с базой данных mySQL.

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

И еще один вопрос, который может возникнуть — можно ли использовать Secure Acceptance без веб форм? Скажем у вас есть огромное количество пользователей, и каждый месяц они должны оплатить определенную сумму. Не будем же мы заставлять их постоянно заходить на сайт, открывать и заполнять форму платежа. Нужно как-то автоматизировать этот процесс. Я попытался сделать это, используя CURL и Silent Order POST. В службе поддержки написали, что не гарантируют корректную работу такой связки. Но результат оказался положительным и запросы отсылаются нормально. Только нужно не забывать проверять результат выполнения функции curl_exec (), на предмет прохождения авторизации транзакции, чтобы выдать сообщение в случае неудачи. Однако я бы не советовал использовать CURL для таких целей. Хоть он и работает, но не является таким же удобным как CyberSorce API.

Мой пример, который вы можете скачать здесь, работает с тестовой версией аккаунта. При переходе на production необходимо:

  1. Зарегистрироваться в системе (создать уже не тестовый, а рабочий аккаунт)
  2. В классах прописать новые параметры профиля
  3. Изменить адреса для отсылки форм (изменить ендпоинты)

Список обязательных полей формы, ендпоинты а также всю дополнительную информацию вы сможете найти в официальной документации Secure Acceptance Web/Mobile и Secure Acceptance Silent Order POST
Tags:
Hubs:
0
Comments 0
Comments Leave a comment

Articles