美文网首页
微信商城未支付订单的延时付款模板消息提醒

微信商城未支付订单的延时付款模板消息提醒

作者: 于春风西瓜科技 | 来源:发表于2017-06-19 11:24 被阅读0次

在商城系统中,会遇到这样的问题,用户提交订单后没有完成支付便中止了操作。

系统友好性和促进成单率考虑,做规划:在下单后10分钟内还没有付款的发送通知给用户,提醒其有未完成订单待支付。

1.考虑使用本地缓存文件,将待支付的订单信息全部缓存在文件中
2.在支付完成时将1中的响应信息进行移除
3.定时任务跑另一个逻辑,根据当前时间拿到缓存文件中超时的订单信息,进行业务逻辑处理并移除订单信息

在生成订单数据的时候执行以下操作

/*加入待支付订单集合队列,作为10分钟后通知的数据*/
//order_id——订单id;out_trade_no——订单号
$wait_pay = F('orders/wait_pay','',DATA_ROOT);//获取当前的集合
if(!$wait_pay){$wait_pay = array();}
$new_wait_pay = array('id'=>$order_id,'time'=>time());//新的待支付订单数据
$wait_pay[$out_trade_no] = $new_wait_pay;//追加到集合内
F('orders/wait_pay',$wait_pay,DATA_ROOT);//保存到本地

保存的待支付订单数据格式

array(3) {
  ["2017064571497843579"] => array(2) {
    ["id"] => string(2) "79"
    ["time"] => int(1497843579)
  }
  ["2017069941497843627"] => array(2) {
    ["id"] => string(2) "80"
    ["time"] => int(1497843627)
  }
  ["2017064981497843666"] => array(2) {
    ["id"] => string(2) "81"
    ["time"] => int(1497843666)
  }
}

订单支付成功的时候删除相关数据

/*删除待支付订单缓存信息*/
$wait_pay = F('orders/wait_pay','',DATA_ROOT);
if($wait_pay){
       //支付成功的订单号$out_trade_no
       unset($wait_pay[$out_trade_no]);//删除数组内关联数据
       F('orders/wait_pay',$wait_pay,DATA_ROOT);//保存新数据到本地
}

每隔7s执行一次一下操作【时间间隔酌情决定】

$wait_pay = F('orders/wait_pay','',DATA_ROOT);
if(!$wait_pay){$wait_pay = array();}
/*@$new_data--要发送通知的订单集合,最多时候只一次性处理20条订单信息*/
$new_data = array();
$now_time = time();
$time = $now_time - 60*10;
$i = 0;
foreach($wait_pay as $k=>$val){
    if($val['time'] <= $time){
        //把所有待通知的订单id加入到通知数组中,单次逻辑只处理最多20条
        array_push($new_data,$val['id']);
        if($i < 20 )
            $i++;
        else
            break;//new_data已有20条数据,跳出循环
    }else{
        break;//没有十分钟以上的订单信息,跳出循环
    }
}
$this->wait_pay_notice($new_data);//待通知订单消息提醒
if($i > 0){
        array_splice($wait_pay,0,$i);//将集合中发送过通知的订单数据信息移除
        if($wait_pay == null){
            F('orders/wait_pay',null,DATA_ROOT);
        }else{
            F('orders/wait_pay',$wait_pay,DATA_ROOT);
        }
}
//wait_pay数据更新成功
```
####贴出wait_pay_notice方法
```swift
$ids = implode(',', $new_data);
$orders = M() ->query(" select A.id,A.t_id,A.fee,A.order_sn,A.use_time,A.token,openid,nickname from xg_orders A join xg_user_child B on A.user_id = B.user_id and A.token = B.token where A.id in ($ids) and state = 0 order by A.id desc  ");
/*遍历所有结果,发送模板消息*/
/*给上级分销商发消息通知*/
$template = A('Pay/Template');//实例化模板控制器
$desc['top'] = '您好,您有订单待支付,请及时付款,2小时后订单自动关闭';
$url = 'http://www.xiguakeji.cc';
foreach($orders as $val){
    /*拿到产品的名称和票型*/
    $name_info = M() -> query(" select concat(B.name,'--',A.name) name from xg_product_type A join xg_product B on A.pro_id = B.id where A.id = ".$val['t_id'] );
    $desc['keyword1'] = $val['order_sn'];
    $desc['keyword2'] = $name_info[0]['name'];
    $desc['remark'] = date("Y年m月d日",$val['use_time']);
    $template -> __construct($val['token']);//传参
    $template ->order_pay_wait($val['openid'],$desc,$url);
}
```

![模板消息实现效果显示](https://img.haomeiwen.com/i6517535/4f7adccc655d4a62.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/340)
通过缓存文件的好处:
这一类的消息提醒需求必须做成24小时自动持续执行的逻辑,如果直接操作数据库,会对数据库造成不小的消耗,通过本地文件缓存下来,当确定需要通知的时候再去查询相关信息推送,减少了很多不必要的开销,也就是变相优化了逻辑,提升了性能。
>[西瓜科技——专业技术开发团队](http://www.jianshu.com)
>微信应用定制开发、APP开发、小程序开发
>郑州市金水区东风路花园路世玺中心2416室

相关文章

  • 微信商城未支付订单的延时付款模板消息提醒

    在商城系统中,会遇到这样的问题,用户提交订单后没有完成支付便中止了操作。 系统友好性和促进成单率考虑,做规划:在下...

  • 订单流程配置

    顾客在线(微信商城)下单,订单流程会经过如下状态: 待支付。顾客在微信商城下单、但尚未支付时,订单状态为“待支付”...

  • 支付通知思路

    支付通知思路 MQ延时消息投递异步通知 场景 在第三方支付中,例如支付宝、或者微信,对于订单请求,第三方支付系统采...

  • 在微信商城中使用支付宝付款

    因为众所周知的原因,微信中无法打开阿里系的链接,微信商城使用支付宝付款也不如微信支付那么顺畅。但好多客户以为微信商...

  • rabbitMQ-延时队列

    延时队列我们可以简单粗暴的理解它为延时发送消息的队列 那延时队列的应用场景有哪些呢,比如订单在一段时间内未支付则取...

  • rabbitmq延时队列

    延时队列在实际业务场景中可能会用到延时消息发送,例如支付场景,准时支付、超过未支付将执行不同的方案,其中超时未支付...

  • 【2020面试必备】聊聊高性能延时队列应用

    延时队列的应用场景: 下单后,30分钟内未付款就自动取消订单等;支付后,24小时未评论自动好评;在我们实际开发过程...

  • 商家收款发货时候确定发货出现代码

    和买家付款的时候出现情况差不多。因为商城是微信接口,需要良好支付环境。 商家也是一样,也需要支付环境,...

  • 光速云平台怎么样?这个公司如何?

    光速云平台怎么样?这个公司如何? 光速云为商家提供模板化的微信商城系统,能够使商家实现微商城的装修、商品管理、订单...

  • (3)zset实现延时队列(2)

    1、场景: 订单超时未支付,取消订单,恢复库存 创建的订单加入redis延时队列,单独线程轮循处理过期订单,如已支...

网友评论

      本文标题:微信商城未支付订单的延时付款模板消息提醒

      本文链接:https://www.haomeiwen.com/subject/qqsgqxtx.html