对于任何知道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>
返回&#34;状态详细信息:3021:购物篮格式无效。&#34;错误?
<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
由于
答案 0 :(得分:1)
我试图扩展内森的问题/评论/答案,因为我刚刚遇到同样的问题。
当尝试实施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, '.', ''));
}