2014-09-22 3 views
2

Это быстрый для любого, кто знает sagepay или может определить, что я не могу.SagePay XML basket

У меня есть две корзины, которые получают посланные 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

Благодаря

+1

Исправлено, извините, что это была запятая, мне нужно ее форматировать следующим образом: 'number_format ($ number, 2, '.', '');'. Благодарю. – Kal

ответ

1

Я попытаюсь расширить Натан вопрос/комментарий/ответ, как я только страдал от тех же проблем.

При попытке реализовать метод интеграции сервера 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, '.', '')); 
}