使用Sagepay官方PHP集成套件的总交易金额

时间:2015-04-24 16:05:16

标签: php sagepay

使用协议3.0的official Sagepay PHP integration工具包似乎没有办法实际设置总交易金额。根据使用SagepayBasket->addItem(SagepayItem $item)方法添加的篮子中的项目计算交易的总价值。

基本设置将是这样的:

$config = SagepaySettings::getInstance($configs,true);
$api = SagepayApiFactory::create('SERVER', $config);
$basket = new SagepayBasket();

您可以添加项目:

$item = new SagepayItem();
$item->setDescription($oproduct['oc_item_title']);
$item->setUnitTaxAmount($oproduct['oc_item_vat']);
$item->setQuantity($oproduct['oc_qty']);
$item->setUnitNetAmount(($oproduct['oc_net_item_price']));
$basket->addItem($item);

您还可以添加送货信息:

$basket->setDeliveryNetAmount($order['shipping_cost_net']);
$basket->setDeliveryTaxAmount($order['shipping_cost_vat']);

但是,一篮子总额也取决于折扣。您可以使用以下方式为购物篮添加折扣:

$discounts = [
    'discount' => [
        'fixed'         =>  $order['voucher_discount'],
        'description'   =>  'Voucher Discount'
    ]
];
$basket->setDiscounts($discounts);

但是,在总计算中忽略此数据。这意味着传递给Sagepay的金额不正确。

可以看到basket.php没有调用$basket->getDiscounts方法:

public function getAmount()
{
    $amount = $this->getDeliveryGrossAmount();
    foreach ($this->_items as $item)
    {
        $amount += $item->getTotalGrossAmount();
    }
    return $amount;
}

当您使用此数据拨打Sagepay时,他们会通过发送此回复正确识别行总计未正确添加到发送的金额:

  

StatusDetail = 3195:订单项金额详细信息不会相加   正确地

这里唯一的选择就是修改他们的库,这似乎是错误的,但我没有其他选择。我已经在这里发布,因为他们将SO列为他们的“支持论坛”,所以希望Sagepay的任何人都能看到这个,否则另一个使用他们代码的开发人员可能会指出我哪里出错了。

1 个答案:

答案 0 :(得分:0)

简而言之 - 不要使用此套件。根据Sagepay的说法,它并不打算生产,因此,我们无意捕捉这些问题。