Stripe - Как вы отправляете десятичные суммы в API для оплаты? - PullRequest
0 голосов
/ 15 апреля 2020

Я перевожу платформу электронной коммерции с использования SagePay на Stripe.

В документах показано использование amount цифры 1099 и валюты gbp (https://stripe.com/docs/payments/accept-a-payment#web -create-payment-intent ).

Насколько я могу судить, это означает £ 10,99 (не £ 1099). Но это крайне неясно в их документах - я предполагаю, что это так.

Если я попытаюсь отправить amount => 10.99 через их API, я получу сообщение об ошибке в ответе:

  "error": {
    "code": "parameter_invalid_integer",
    "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer",
    "message": "Invalid integer: 10.99",
    "param": "amount",
    "type": "invalid_request_error"
  }

С SagePay вы фактически отправите 10.99 в качестве суммы.

Итак, с Stripe вам нужно конвертировать все суммы в одну базовую единицу валюты (пенсов в случае GBP), например, если сумма была £ 10.99, которую вы бы сделали (10.99 * 100) затем отправьте 1099?

Документы на самом деле не дают понять это. Если вы читаете десятичные суммы (https://stripe.com/docs/billing/subscriptions/decimal-amounts) в их документах, это говорит о том, что вы можете использовать параметр с именем amount_decimal, но это также выдаст ошибку при отправке через их API:

$intent = \Stripe\PaymentIntent::create([
    'amount_decimal' => 10.99,
    'currency' => 'gbp',
    // Verify your integration in this guide by including this parameter
    'metadata' => ['integration_check' => 'accept_a_payment'],
]);

В результате возникает ошибка, сообщающая, что параметр amount_decimal неизвестен (даже если он находится в их документах?):

"error": {
    "code": "parameter_unknown",
    "doc_url": "https://stripe.com/docs/error-codes/parameter-unknown",
    "message": "Received unknown parameter: amount_decimal",
    "param": "amount_decimal",
    "type": "invalid_request_error"
  }

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

Итак, мой вопрос: вы просто отправляете сумму в наименьшем единица валюты (например, 10.99 * 100 для £ 10,99), или есть какой-то другой метод, где он может быть передан в виде десятичной дроби (например, 10.99)?

1 Ответ

0 голосов
/ 15 апреля 2020

Документировано здесь :

Все запросы API ожидают, что суммы будут предоставлены в наименьшей единице валюты. Например, для взимания 10 долларов США укажите сумму в размере 1000 (то есть 1000 центов). Для валют с нулевым десятичным числом по-прежнему указывайте суммы в виде целого числа, но без умножения на 100. Например, для начисления 500 йен укажите значение суммы 500.

Вы никогда не пропустите десятичную точку для amount в любом месте Stripe API. Большинство конечных точек API не поддерживают amount_decimal, если это явно не указано в справочнике API .

...