如何解决ecshop订单修改价格后无法再次付款问题
更新时间:2016-07-30 点击量:2942
Tag关键词: 价格 ecshop模板 ecshop4.0模板 二次开发 ecshop3.6模板 ecshop小程序
ecshop网店系统客户请求客服在后台修正了订单金额,客户再次付款时就是报错了,提示如下
解决ecshop订单修改价格后无法再次付款问题
这样的情况会让用户十分反感,从而影响用户体验。
优易软件为大家整理,碰上这样的问题该怎样去解决。方法如下:
该疑问的解决办法是找到admin/order.php中的以下代码
/** * 更新订单对应的 pay_log * 假如未付出,修正付出金额;不然,生成新的付出log * @param int $order_id 订单id */ function update_pay_log($order_id) { $order_id = intval($order_id); if ($order_id > 0) { $sql = "SELECT order_amount FROM " . $GLOBALS['ecs']->table('order_info') . " WHERE order_id = '$order_id'"; $order_amount = $GLOBALS['db']->getOne($sql); if (!is_null($order_amount)) { $sql = "SELECT log_id FROM " . $GLOBALS['ecs']->table('pay_log') . " WHERE order_id = '$order_id'" . " AND order_type = '" . PAY_ORDER . "'" . " AND is_paid = 0"; $log_id = intval($GLOBALS['db']->getOne($sql)); if ($log_id > 0) { /* 未付款,更新付出金额 */ $sql = "UPDATE " . $GLOBALS['ecs']->table('pay_log') . " SET order_amount = '$order_amount' " . "WHERE log_id = '$log_id' LIMIT 1"; } else { /* 已付款,生成新的pay_log */ $sql = "INSERT INTO " . $GLOBALS['ecs']->table('pay_log') . " (order_id, order_amount, order_type, is_paid)" . "VALUES('$order_id', '$order_amount', '" . PAY_ORDER . "', 0)"; } $GLOBALS['db']->query($sql); } } }
用以下代码将其覆盖
/** * 更新订单对应的 pay_log * 假如未付出,修正付出金额;不然,生成新的付出log * @param int $order_id 订单id */ function update_pay_log($order_id) { $order_id = intval($order_id); if ($order_id > 0) { $sql = "SELECT order_amount FROM " . $GLOBALS['ecs']->table('order_info') . " WHERE order_id = '$order_id'"; $order_amount = $GLOBALS['db']->getOne($sql); if (!is_null($order_amount)) { $sql = "SELECT log_id, order_amount FROM " . $GLOBALS['ecs']->table('pay_log') . " WHERE order_id = '$order_id'" . " AND order_type = '" . PAY_ORDER . "'" . " AND is_paid = 0"; $log_info =$GLOBALS['db']->GetRow($sql); if ($log_info && $log_info['order_amount'] == $order_amount) { $log_id = intval($log_info['log_id']); /* 未付款,更新付出金额 */ $sql = "UPDATE " . $GLOBALS['ecs']->table('pay_log') . " SET order_amount = '$order_amount' " . "WHERE log_id = '$log_id' LIMIT 1"; } else { /* 已付款,生成新的pay_log */ $sql = "INSERT INTO " . $GLOBALS['ecs']->table('pay_log') . " (order_id, order_amount, order_type, is_paid)" . "VALUES('$order_id', '$order_amount', '" . PAY_ORDER . "', 0)"; } $GLOBALS['db']->query($sql); } } }
找到includes/lib_clips.php的get_paylog_id函数,修正成
/** * 获得前次未付出的pay_lig_id * * @access public * @param array $surplus_id 余额记录的ID * @param array $pay_type 付出的类型:预付款/订单付出 * * @return int */ function get_paylog_id($surplus_id, $pay_type = PAY_SURPLUS) { $sql = 'SELECT log_id FROM' .$GLOBALS['ecs']->table('pay_log'). " WHERE order_id = '$surplus_id' AND order_type = '$pay_type' AND is_paid = 0 order by log_id desc "; return $GLOBALS['db']->getOne($sql); }
今后客户在后台怎么调整都可以付款了,
一起测了要是是普通的付出宝付款不会呈现上述情况,后台客服怎么修正订单金额都不会报错
如果文章对您有帮助,就打赏一个吧
«上一篇:recieve.php判断不严谨导致邮件自动确认收货问题修正 下一篇:ecshop后台帐号密码忘记了如何找回»