#php #omnipay
#php #omnipay
Вопрос:
При использовании 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 гарантировал, что они одинаковы, но я не думаю, что это так.
Ответ №1:
Короче говоря, OmniPay 2.x не фокусируется на нормализации данных, возвращаемых шлюзами. Вы в значительной степени предоставлены сами себе, чтобы посмотреть на необработанные данные и применить свои знания о том, что это значит.
OmniPay 3.x имеет интерфейс AmountInterface, который стандартизирует способ обработки сумм (больше не является строкой, целым числом или плавающей точкой), поэтому существует Amount
класс, который представляет обработанную сумму. Использование Amount
класса как для ввода (сообщения запроса), так и для вывода (проанализированные ответные сообщения) теперь означает, что нет никакой двусмысленности в том, что означает сумма.
Комментарии:
1. Я открыл проблему в omnipay, и с тех пор это было реализовано для версии 3.0. Возможно, вы можете обновить свой ответ, чтобы сделать его более понятным, чтобы я мог пометить его как принятый ответ.
2. Круто — я пропустил это
![]()