ecshop系统,本身不带自动确认收货的,网上也找了一下,很多很复杂,且需要在服务器端设置定时任务,如果是虚拟主机,基本上就歇菜了。
某宝有一些卖自动收货的插件,不太了解其机制,不过也比较贵,要1-200一个。没办法,就自己开发吧。以下为解决方案。
解决思路:
跟淘宝的类似,默认设置7天后还没有自动确认收货,那么就会系统强制确认收货。只不过这个强制确认收货,没有在系统里设置常驻内存的程序,也没有设置系统自动任务,为变通的方案。设定为用户在登录成功后,进入用户中心页面,就会扫描自己名下,有没有超过7天还未确认收货的订单,如果有,则启动确认收货程序。没有,则跳过。
方案说明:
1、这个强制确认收货,其实不是完整版的强制确认收货,不一定是到了15天系统就自动确认收货了,而是在下一次用户登录的时候检索是否有超时的订单,所以,这个自动确认收货的时间,其实不一定是准确的。只不过不需要用户再主动点一下;
2、本来有考虑到在网站首页或者其他页面嵌入一个触发点,然后启动自动确认收货程序,但是考虑到,如果系统用户比较多(或者订单比较多),这个遍历的过程可能就会比较长了,系统开销大,也可能页面超时,所以就弄的这个变通方案。
3、ECSHOP有一个计划任务的功能,但是之前没有用过,再次优化的方案,可以写一个程序,然后开启计划任务,这样也可用满足要求。
所以,这个是不圆满版的解决方案,只是修改起来比较简单,菜鸟都会,另外因为是用户登录触发的,所以对系统资源占用不高,所以,有需要的童鞋可以拿去。
搜索“if ($action == 'default')”,然后在“$info = get_user_default($user_id);”后面,插入以下代码即可
1
2
3
4
5
6
7
8
9
10
11
|
$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即为确认收货程序。