使用密码支付(pin.net.au)使用OmniPay网关card_token方法(PIN.js)进行信用卡处理


Credit Card processing using Pin Payments - pin.net.au - using omnipay gateway, card_token method (pin.js)

我正在尝试将 Pin.net.au CC 处理集成到我的网站中。我正在使用Omnipay图书馆拨打电话。

为了不在我的服务器中存储 CC 详细信息,我使用的是 Pin.js 令牌方法。

表单提交页面上(在用户填写个人和 CC 详细信息后),javascript 执行"阻止默认值"并将数据从表单(浏览器)直接发送到 pin.net.au 服务器。服务器发送card_token作为响应,并将表单重新提交到我的服务器。

已成功接收此令牌,我可以在测试中输出它。

当我拿走那个令牌并向 pin.net.au 发送购买请求时,我遇到了麻烦。根据 API 文档,我在发送令牌时不需要发送用户和卡详细信息(实际上是令牌的全部要点)。我将此令牌与其他强制性位一起发送,例如电子邮件,金额,描述等。

当我在我的终端上 cURL 并且我获得充电成功时,这有效。

但是,每次我收到询问用户详细信息和抄送信息的 422(无效资源)时,使用 Omnipay 库发送此购买/收费请求。它应该从我发送的令牌中填充这些东西。

我已经搜索了Omnipay和 Pin.net.au 的API文档。我似乎没有做错任何事。我错过了什么?

这是我的收费请求:

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

最后,这并不重要,但如果你想知道,我正在使用Laravel 4。

您的示例请求金额为 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开发人员取得联系或自己编写拉取请求!

这在 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' => 'user@email.com'],
 ])->send();