NewsWorksController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace App\Http\Controllers\Wechat\Staff;
  3. use App\Http\Models\OfficialAccount;
  4. use App\Http\Requests;
  5. use App\Http\Controllers\WechatController;
  6. use App\Http\Controllers\Wechat\Staff\StaffsController;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Http\Response;
  9. use EasyWeChat\Foundation\Application;
  10. use App\Http\Models\WechatUser;
  11. use App\Http\Models\WechatTemplateSendInfo;
  12. use App\Http\Models\WechatTemplateTask;
  13. use App\Http\Models\WechatTemplateOfficialInfo;
  14. use Redis;
  15. /**
  16. * 图文模板消息定时发送类
  17. * @author zhoulingjie
  18. * cat /var/log/supervisord-logs/send_news_list* | grep '{"send_time":"2018-04-08 18' | wc -l
  19. * cat /var/log/supervisord-logs/send* | grep '"receive_time":"2018-02-01 09' | wc -l
  20. * cat /var/log/supervisord-logs/send* | grep '"receive_time":"2018-02-01 09:01' | wc -l
  21. *
  22. */
  23. class NewsWorksController extends WechatController
  24. {
  25. public function __construct($template_info)
  26. {
  27. $this->template_info = $template_info;
  28. // v('$template_info');v($this->template_info);
  29. $this->gzh_app_id = isset($this->template_info['appid'])?$this->template_info['appid']:'';
  30. if(!empty($this->gzh_app_id)){
  31. parent::__construct($this->gzh_app_id);
  32. $this->Staff = new StaffsController($this->param);
  33. }else{
  34. v('template_work_appid is null');
  35. }
  36. $this->error_msg = '';
  37. }
  38. /**
  39. * 执行模板消息
  40. */
  41. public function do_work()
  42. {
  43. if(empty($this->gzh_app_id)) return false;
  44. // 检查表数据
  45. $openid = $this->template_info['openid'];
  46. v('do_work_start_news:'.$openid);
  47. $appid = $this->template_info['appid'];
  48. $task_id = $this->template_info['task_id'];
  49. $type = $this->template_info['type'];
  50. $news_content = $this->template_info['news_content'];
  51. if(empty($openid) || empty($task_id) || empty($news_content)){
  52. v('invalid_null_task_id:'.$task_id.' openid:'.$openid);
  53. return false;
  54. }
  55. $template_task = $this->WechatApi->get_template_task($task_id);
  56. $status = isset($template_task['status']) ? $template_task['status']:'';
  57. if($status == 4){
  58. v('task_id_close:'.$task_id);
  59. return false;
  60. }
  61. $this->send_one_template($openid,$news_content,$task_id);
  62. if($type == 'last_task' && $status != 3){
  63. //v('update_news_task_status:'.$task_id);
  64. $status = 3;
  65. $this->WechatApi->update_template_task_status($task_id, $status, $this->error_msg);
  66. }
  67. }
  68. function send_one_template($openid,$datas,$task_id=''){
  69. try{
  70. $datas = objectToArray(json_decode($datas));
  71. $send_data = array();
  72. foreach($datas as $no=> $data){
  73. foreach($data as $_data){
  74. foreach($_data as $key=>$one_data){
  75. $send_data[$no][$key] = $one_data;
  76. }
  77. }
  78. }
  79. $to_send_data = array();
  80. $to_send_data['text'] = $send_data;
  81. $result = '';
  82. $result = $this->Staff->batch_send_wechat_content($openid, $to_send_data);
  83. if($task_id && is_object($result) && isset($result->errmsg) && $result->errmsg == 'ok')
  84. {
  85. Redis::sadd('cus_ok:'.$task_id,$openid);//记录真正发送成功数
  86. }
  87. }
  88. // 加上\ 全局抓取
  89. catch(\Exception $e){
  90. v('send_openid_ept:oKtP5w5SeNDNPmN6qN-4llpVUPbw'.$openid.' info:'.$e->getMessage());
  91. $this->error_msg = $e->getMessage();
  92. }
  93. }
  94. }