与 Sagepay 官方 PHP 集成套件的总交易金额
Total transaction amount with Sagepay official PHP Integration Kit
使用协议 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 : The line item amount details do not add up
correctly
使这项工作可行的唯一选择是修改他们的库,这似乎是错误的,但我看不到其他选择。我已经在这里发布,因为他们将 SO 列为他们的 "support forum" 所以希望来自 Sagepay 的人会看到这个,或者其他使用过他们代码的开发人员可能会指出我哪里出错了。
简而言之 - 不要使用此工具包。根据 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 : The line item amount details do not add up correctly
使这项工作可行的唯一选择是修改他们的库,这似乎是错误的,但我看不到其他选择。我已经在这里发布,因为他们将 SO 列为他们的 "support forum" 所以希望来自 Sagepay 的人会看到这个,或者其他使用过他们代码的开发人员可能会指出我哪里出错了。
简而言之 - 不要使用此工具包。根据 Sagepay 的说法,它不是为生产而设计的,因此,我们无意发现此类问题。