Из за чего возникает VALIDATION_ERROR «transactions.amount»?

Всем привет !
Столкнулся с очень интересным багом в момент формирования Amount, не пойму почему так происходит, использую PayPal-PHP-SDK

Случай №1
$amount = new Amount();
$amount->setTotal(1.99 );
$amount->setCurrency('GBP');


В этом случае, оплата проходит успешно и мы счастливы, но мне нужно в $amount->setTotal(1.99 ); подставлять переменную в которой будет нужная цена.

Поэтому Случай №2

$service_price = PricesServicesObject::allParams()[$serviceName]["price"]; //Получаю цену в формате 1.99 или 5.99

$amount = new Amount();
$amount->setTotal($service_price );
$amount->setCurrency('GBP');


То в этом случае, после оплаты, когда происходит редирект на сайт, я получаю вот такую ошибку:
"name":"VALIDATION_ERROR","details":[{"field":"transactions.amount","issue":"Currency amount must be non-negative number, may optionally contain exactly 2 decimal places separated by '.', optional thousands separator ',', limited to 7 digits before the decimal point and currency which is a valid ISO Currency Code"


Как ее победить, почему так происходит ?
Заранее спасибо.
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
@sagechild
программист php
Мистики в программировании не бывает. Если первый случай работает, а второй нет, то, значит, что в $service_price все же не 1.99 или 5.99 либо в currency не существующий код валюты, иначе бы не было
"Currency amount must be non-negative number, may optionally contain exactly 2 decimal places separated by '.', optional thousands separator ',', limited to 7 digits before the decimal point and currency which is a valid ISO Currency Code". Попробуйте вызвать так:
$amount->setTotal((float) $service_price );
Убедитесь, что во втором случае в "GBP" B и P - это английские буквы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы