Обработка кредитной карты с использованием PIN-платежей - pin.net.au - с использованием шлюза omnipay, метод card_token (pin.js)

Я пытаюсь интегрировать обработку CC Pin.net.au на свой сайт. Я использую библиотеку Omnipay для совершения звонков.

Чтобы не хранить детали CC на моем сервере, я использую метод токена Pin.js.

На странице отправки формы (после того, как пользователь заполнит личные данные и данные CC) javascript выполняет «предотвращение по умолчанию» и отправляет данные из форм (браузера) прямо на серверы pin.net.au. Сервер отправляет в ответ card_token и повторно отправляет форму на мой сервер.

Этот токен успешно получен, и я могу вывести его в своих тестах.

У меня возникают проблемы, когда я беру этот токен и отправляю запрос на покупку на pin.net.au. Согласно документам API, мне не нужно отправлять данные пользователя и карты при отправке токена (на самом деле весь смысл токена). Я отправляю этот токен вместе с другими обязательными битами, такими как электронная почта, сумма, описание и т. д.

Это работает, когда я использую cURL на своем терминале и получаю успешную оплату.

Однако, отправляя этот запрос на покупку/оплату с использованием библиотеки Omnipay, я каждый раз получаю 422 (недопустимый ресурс), который запрашивает данные пользователя и информацию CC. Он должен был заполнить этот материал из токена, который я отправил.

Я изучил документацию по API как Omnipay, так и Pin.net.au. Кажется, я не делаю ничего плохого. Что мне не хватает?

Вот мой запрос на оплату:

$gateway = GatewayFactory::create('Pin');
$gateway->setSecretKey('MY_SECRET_KEY');
$response = $gateway->purchase([
  'email'       => '[email protected]',
  'description' => 'Package',
  'amount'      => '99',
  'currency'    => 'AUD',
  'card_token'  => Input::get('card_token'),
  'ip_address'  => Input::get('ip_address')
 ])->send();

Наконец, это не должно иметь большого значения, но если вы хотите знать, я использую Laravel 4.


person Prashant    schedule 20.09.2013    source источник


Ответы (2)


В вашем примере запроса указана сумма 99, минимальная сумма для платежа PIN-кодом составляет 1 доллар США (сумма = 100).

Я не думаю, что это проблема, о которой вы говорите, похоже, что Omnipay не поддерживает использование механизма card_token. Если вы посмотрите сюда - https://github.com/adrianmacneil/omnipay/blob/master/src/Omnipay/Pin/Message/PurchaseRequest.php#L34 — вы можете видеть, что Omnipay не отправляет поле card_token вместе с запросом, он только пытается отправить реквизиты карты, которых в вашем примере явно нет!

Возможно, вы могли бы связаться с разработчиками Omnipay или написать запрос на вытягивание самостоятельно!

person Justin Jones    schedule 20.09.2013
comment
› вы правы насчет суммы (я использовал более высокую сумму в моем фактическом коде - я думаю, что просто изменил сумму, когда вставлял сюда). Ваше предложение имеет смысл! Хорошие люди из pin.net.au также ответили и изучают это. Но вы правы, это может быть проблема Omnipay, а не pin.net.au, что интересно, потому что pin.net.au ДЕЙСТВИТЕЛЬНО рекомендует omnipay в своих документах. И пример кода там показан с использованием токена! https://pin.net.au/language-support/php - person Prashant; 20.09.2013
comment
@Prashant Я на самом деле разработчик в Pin Payments, этот пример явно был сделан по ошибке! Мы это исправим. Тем временем я сам попытался добавить поддержку карточных токенов в Omnipay, что вы можете найти здесь: github.com/adrianmacneil/omnipay/pull/128 Вы можете использовать мой форк git тем временем, пока ждете принятия запроса на включение (я проверял!) - person Justin Jones; 20.09.2013
comment
ура за помощь товарищ. я тоже получил твоё твиттер-сообщение - спасибо за запрос на включение. да, пожалуйста, обновите документы ... то, что это было в официальных документах, заставляет вас думать, что, вероятно, это ваша собственная ошибка! из git похоже, что автор omnipay тоже на нем. должны быть приняты в ближайшее время, я надеюсь. - person Prashant; 20.09.2013
comment
Спасибо за PR @JustinJones - я объединил его и выпустил версию 1.0.4, в которой есть ваши изменения. Также обратите внимание, что в Omnipay сумма передается в виде десятичной строки, поэтому использование OP корректно. - person Adrian Macneil; 21.09.2013
comment
@JustinJones, чтобы избежать подобных несоответствий (десятичная строка в библиотеках, таких как Omnipay, по сравнению с центовым значением в Pin), возможно, стоит потратить время на выпуск чистого небольшого официального пакета для Composer специально для клиентов Pin, что также может иметь смысл для всех будущих изменений. . Просто идея... - person Prashant; 21.09.2013

Это исправлено в Omnipay v1.0.4 — вы должны иметь возможность использовать токен следующим образом:

$gateway = GatewayFactory::create('Pin');
$gateway->setSecretKey('MY_SECRET_KEY');
$response = $gateway->purchase([
  'description' => 'Package',
  'amount'      => '99.00',
  'currency'    => 'AUD',
  'token'       => Input::get('token'),
  'ip_address'  => Input::get('ip_address'),
  'card'        => ['email' => '[email protected]'],
 ])->send();
person Adrian Macneil    schedule 21.09.2013