EXPECTED_INTEGER — Проблемы с платежным порталом Square

У меня проблемы с приемом платежей через мой сайт электронной коммерции. Кажется, это происходит случайно, раньше я принимал оплату без проблем, но время от времени это происходит. У Square API не было описания с кодом ошибки.

Array
(
[0] => stdClass Object
(
[category] => INVALID_REQUEST_ERROR
[code] => EXPECTED_INTEGER
[detail] => Expected an integer value.
[field] => amount_money.amount
)
)
Order status changed from Pending payment to Failed.

person kelli kay    schedule 06.09.2017    source источник


Ответы (2)


Эта ошибка возникает всякий раз, когда вы пытаетесь списать сумму, которая не является целым числом, например десятичным числом или числом с плавающей запятой. Одна вещь, которую вы можете сделать, чтобы предотвратить это, — проверить и убедиться, что тип суммы, которую вы взимаете, является целым числом.

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

person Kaled    schedule 06.09.2017
comment
Итак, что мы делаем, когда налог рассчитывается, а не является целым числом? - person ott; 28.09.2017
comment
Если вы добавите налог к ​​продаже, сумма все равно будет целым числом. Например, товар стоимостью 1 доллар с добавочным налогом в размере 10% будет стоить покупателю 110 центов, что является целым числом. - person Kaled; 06.10.2017
comment
У меня такая же проблема. Я подтвердил, что передаю целое число 100, но все равно получаю ту же ошибку. - person Cesar Bielich; 13.10.2017

У меня была похожая проблема. Числа, которые передавались моим полем ввода, читались как строки, а не целые числа. Несмотря на то, что вывод в консоли переднего плана читается как целое число, я заметил, что в бэкенде числа, возвращаемые из req.body, заключены в кавычки. Исправление заключалось в использовании parseInt для удаления кавычек. Мой код основан на Node/Express на сервере и Handlebars на интерфейсе. Я надеюсь, что этот пример поможет:

//the name chargeAmount is passed to the server holding contain the value of the input

<input name="chargeAmount">

// on the backend req.body is set to a variable and then that variable
// is passed to another variable and parsed where the foo object contains
// the amount I want to charge.  The parseInt() method insures that the " "
// are removed from the string and allows the integer to be passed into the 
// object.  When you're running your tests, make sure that the integer does
// not have quotes around it.  If it does, then the back end reads that data
// as a string and not an integer

var foo = req.body;
var bar = parseInt(foo.chargeAmount) 
var request_body = {
        card_nonce: foo.nonce,
        amount_money: {
            amount: bar, 
            currency: 'USD'
        },
person Rod_R    schedule 21.11.2018