Это быстрый способ для тех, кто знает sagepay или может определить, что я не могу.
У меня есть две корзины, которые отправляются в sagepay:
Это работает:
<basket>
<agentId>vendor1</agentId>
<item>
<description>Selling premier package</description>
<quantity>1</quantity>
<unitNetAmount>595</unitNetAmount>
<unitTaxAmount>119.00</unitTaxAmount>
<unitGrossAmount>714.00</unitGrossAmount>
<totalGrossAmount>714.00</totalGrossAmount>
</item>
</basket>
Возвращается сообщение «Состояние: 3021: неверный формат корзины». ошибка?
<basket>
<agentId>vendor1</agentId>
<item>
<description>Selling premier package</description>
<quantity>1</quantity>
<unitNetAmount>894</unitNetAmount>
<unitTaxAmount>178.80</unitTaxAmount>
<unitGrossAmount>1,072.80</unitGrossAmount>
<totalGrossAmount>1,072.80</totalGrossAmount>
</item>
</basket>
Кто-нибудь может определить, почему? : S
Спасибо
Я попытаюсь остановиться на вопросе / комментарии / ответе Натана, поскольку я только что страдал от той же самой проблемы.
При попытке реализовать метод интеграции сервера SagePay я решил, что лучше всего начать с демонстрационного исходного кода PHP, как я подозреваю, что Натан сделал. В нем содержится несколько классов для создания корзины и связи с SagePay через их API. К сожалению, похоже, что в экспорте BastketXML есть фундаментальный недостаток, в результате чего Натан описывает выше.
В /lib/classes/item.php вы найдете в строке 615:
if (is_float($value))
{
$node = $basket->createElement($name, number_format($value, 2));
}
Это зависит от локальных переменных среды для правильного форматирования числа, тогда как SagePay требует:
if (is_float($value))
{
$node = $basket->createElement($name, number_format($value, 2, '.', ''));
}
Других решений пока нет …