SagePay XML篮子

时间:2014-09-22 06:49:21

标签: php sagepay

对于任何知道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

由于

1 个答案:

答案 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, '.', ''));
}