触发点 user 方案 启动 要求 超时 淘宝 比较
ecshop 系统,本身不带自动确认收货的,网上也找了一下,很多很复杂,且需要在服务器端设置定时任务,如果是虚拟主机,基本上就歇菜了。
某宝有一些卖自动收货的插件,不太了解其机制,不过也比较贵,要 1-200 一个。没办法,就自己开发吧。以下为解决方案。
跟淘宝的类似,默认设置 7 天后还没有自动确认收货,那么就会系统强制确认收货。只不过这个强制确认收货,没有在系统里设置常驻内存的程序,也没有设置系统自动任务,为变通的方案。设定为用户在登录成功后,进入用户中心页面,就会扫描自己名下,有没有超过 7 天还未确认收货的订单,如果有,则启动确认收货程序。没有,则跳过。
1、这个强制确认收货,其实不是完整版的强制确认收货,不一定是到了 15 天系统就自动确认收货了,而是在下一次用户登录的时候检索是否有超时的订单,所以,这个自动确认收货的时间,其实不一定是准确的。只不过不需要用户再主动点一下;
2、本来有考虑到在网站首页或者其他页面嵌入一个触发点,然后启动自动确认收货程序,但是考虑到,如果系统用户比较多(或者订单比较多),这个遍历的过程可能就会比较长了,系统开销大,也可能页面超时,所以就弄的这个变通方案。
3、ECSHOP 有一个计划任务的功能,但是之前没有用过,再次优化的方案,可以写一个程序,然后开启计划任务,这样也可用满足要求。
所以,这个是不圆满版的解决方案,只是修改起来比较简单,菜鸟都会,另外因为是用户登录触发的,所以对系统资源占用不高,所以,有需要的童鞋可以拿去。
搜索 "if ($action =='default')",然后在 "$info = get_user_default($user_id);" 后面,插入以下代码即可
- $orders = get_user_orders($user_id,1000,0);
- foreach($orders as $ord){
- if($ord['order_status_flg']==5 && $ord['order_status'] == '已确认,已付款,已发货'){
- //此条件下的为未确认收货的订单,开始启动自动收货程序
- $ord['order_time'] = strtotime($ord['order_time']);
- $thistime = time();
- if($thistime>($ord['order_time']+86400*7)){//如果订单日期往后7天大于当前时间 则表示有超时未确认的订单
- affirm_received($ord['order_id'], $user_id);//强制确认收货
- }
- }
- }
程序 affirm_received 即为确认收货程序。
来源: http://www.bubuko.com/infodetail-2026954.html