2014-09-22 62 views
2

对于那些了解sagepay或能够发现我不能的人来说,这是一个快速的选择。SagePay XML购物篮

我有送送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 2014-09-22 06:59:34

回答

1

我会尝试,因为我刚刚从同样的问题遭受Nathan的问题/评论/回答扩大。

当试图实施SagePay的服务器集成方法时,我认为最好的开始是使用他们的PHP演示源代码,因为我怀疑Nathan做了什么。其中包含一些用于构建购物篮并通过API与SagePay联系的类。不幸的是,看起来BastketXML的输出方式存在根本缺陷,导致了Nathan在上面描述的内容。

在/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, '.', '')); 
}