以独立于网关的方式从响应中获取数量

Get amount from response in gateway-independent way

使用 Omnipay 时,是否可以以独立于网关的方式从响应中检索 已处理 金额?

比如在使用Stripe网关时,我会authorize支付如下(authorize为例,本题适用于所有网关方式):

$options = [
    'amount' => '10.00',
    'currency' => 'EUR',
];

$response = $gateway->authorize($options)->send();

if ($response->isSuccessful()) {
    $data = $response->getData();

    $amount = $data['amount'] / 100;
}

由于 Stripe 以美分计算,我不得不除以 100 以获得与我在请求中指定的相同单位的金额。

然而,并非所有网关都以美分工作,这意味着上面的代码不是网关独立的。此外,amount 参数在其他网关中甚至可能不会被调用。

注意:我需要检索 processed 的金额以验证它是否与请求的金额相同。如果 omnipay 保证它们是相同的,这将是不必要的,但我认为不是这样。

简而言之,OmniPay 2.x 并不关注网关返回数据的规范化。您只能靠自己查看原始数据并应用您了解其含义的知识。

OmniPay 3.x 确实有一个 AmountInterface 来标准化处理金额的方式(不再是字符串、整数或浮点数),所以有一个 Amount class 表示已处理的金额。现在对输入(请求消息)和输出(已解析的响应消息)使用 Amount class 意味着数量的含义没有歧义。