我一直在为x-cart中的客户开发自定义循环订单脚本,我面临的问题是,当循环订单(cron)触发并循环预定的订单时,订单似乎没有重置为什么,它试图使用以前订单的id。我以为我解决了这个问题,但现在它使用第一个订单的详细信息作为日常流程中所有订单的客户详细信息。
$orderids = func_place_order(stripslashes($payment_method), 'I', $order_details, @$customer_notes, array(), array(), @$delivery_notes, TRUE);
最后一个参数是自定义的,下面是使用它的地方的代码片段($bol_ignore
) -在func.order.php
$check_order = func_query_first("SELECT orderid FROM $sql_tbl[orders] WHERE userid='" . addslashes(@$userinfo['id']) . "' AND '" . XC_TIME . "'-date < '$mintime'");
if ($bol_ignore == FALSE) // @custom ***** code, may prevent the order from being broken?
if ($check_order) {
func_unlock('place_order');
return FALSE;
}
检查支付是否成功后,我们分别调用func_change_order_status()
来改变状态。
我想我一定是错过了一些东西,100%清除订单,购物车和任何会话控制,xcart可能在它移动到处理下一个之前使用。为了以防万一,我甚至在循环中使用了x_session_reset()
,并在循环开始时重置了所有的变量。
经过几个小时的浪费和大量的调试后,我错过了一个需要的全局变量。由于客户没有登录,我们需要手动设置这些全局变量。
我正在从数据库中提取客户信息,但它被保存在一个不同的变量名中。
$userinfo = func_userinfo($row['customerid'], 'C');
为了防止将来有人想尝试这样做,您必须为每个循环设置这些,因为它们是订单/购物车发生所必需的
# Change the "session" types
$login_type = 'C';
$current_area = 'C';
$cart = NULL; // Clear the Cart
我知道这个问题很模糊,但我们认为这归结为xcart的内置函数接管。
喝完一杯新鲜的咖啡后你会发现……