Получить сумму из ответа независимым от шлюза способом

Можно ли при использовании 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 может даже не называться так же в других шлюзах.

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


person Paulo Pinto    schedule 11.10.2016    source источник


Ответы (1)


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

В OmniPay 3.x есть AmountInterface, который стандартизирует способ обработки сумм (больше не строка, целое число или число с плавающей запятой), поэтому существует класс Amount, который представляет обработанную сумму. Использование класса Amount как для ввода (сообщения-запросы), так и для вывода (анализированные сообщения-ответы) теперь означает отсутствие двусмысленности в том, что означает сумма.

person Jason    schedule 10.01.2017
comment
Я открыл вопрос в omnipay, и с тех пор он был реализован в версии 3.0. Возможно, вы можете обновить свой ответ, чтобы сделать его более ясным, чтобы я мог пометить его как принятый ответ. - person Paulo Pinto; 11.01.2017
comment
Круто - я пропустил это :-) - person Jason; 12.01.2017