使用协议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的任何人都能看到这个,否则另一个使用他们代码的开发人员可能会指出我哪里出错了。
答案 0 :(得分:0)
简而言之 - 不要使用此套件。根据Sagepay的说法,它并不打算生产,因此,我们无意捕捉这些问题。