首页 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践全文在线阅读

《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》25.6.2 群发通知实现

关灯直达底部

本项目中群发通知时,先获取48小时内有交互用户的数量,并获取上次已经保存的群发消息,其相应代码如下。


 1 public function index 2 { 3     // 48小时内有交互的用户 4     $condition['heartbeat']  = array('gt',(time - 172800)); 5     $list = Db::name('user')->where($condition)->select; 6  7     // 获取用户数 8     $this->assign('total', count($list)); 9 10     // 获取已有消息11     $message = MessageModel::get(1);12     $this->assign('message', $message->toArray);13 14     // 渲染模板输出15     return $this->fetch;16 }  

模板页面的代码如下。


 1 <form action="{:Url('message/send')}" method="post"> 2     <table cellpadding=0 cellspacing=0 > 3         <tr> 4             <td>覆盖人数</td> 5             <td><font color="blue">{$total}</font></td> 6         </tr> 7         <tr> 8             <td>消息类型</td> 9             <td><input type="text"  name="type"  size="50"></td>10         </tr>11         <tr>12             <td>图文标题</td>13             <td><input type="text"  name="title"  size="50"></td>14         </tr>15         <tr>16             <td>图文详情</td>17             <td><textarea name="description" rows="3" cols="60" size=               "50">{$message.description}</textarea></td>18         </tr>19         <tr>20             <td>图片地址</td>21             <td><input type="text"  name="picurl"  size="50"></td>22         </tr>23         <tr>24             <td>跳转地址</td>25             <td><input type="text"  name="url"  size="100"></td>26         </tr>27         <tr>28             <td><font color="red"><strong>*注意:</strong></font></td>29             <td><font color="red">务必确认信息正确一致,点击发送后将马上启动发送程序并且               无法撤销。</font></td>30         </tr>31     </table>32     <p>33         <input type="hidden" name="id"  />34         <INPUT TYPE="submit"   >35     </p>36 </form>  

群发配置页面效果如图25-8所示。

图25-8 群发配置界面

当点击“发送”按钮后,send函数将接收到通过POST传输过来的参数。将这些参数拼装成一个图文消息,然后获取48小时内有互动的用户列表,接着使用客服接口对用户列表进行遍历发送,就实现了群发图文通知的功能。其相应代码如下。


 1 public function send 2 { 3     // 更新并存储当前消息 4     $message = new MessageModel; 5     $message->save(['title' => $_POST['title'], 6                     'description' => $_POST['description'], 7                     'picurl' => $_POST['picurl'], 8                     'url' => $_POST['url'], 9                     'date' => date("Ymd",time)10                   ],['id' => $_POST['id']]);11     12     // 获取48小时内有互动的用户列表13     $condition['heartbeat']  = array('gt',(time - 172800));14     $userlist = Db::name('user')->where($condition)->select;15     16     // 准备微信类及群发图文17     $weixin = new /weixin/Wxapi;18     $data = array;19     $data = array("title"=>$_POST['title'], "description"=>$_POST['description'],        "picurl"=>$_POST['picurl'], "url" =>$_POST['url']);20     21     // 遍历发送22     $array = array;23     foreach ($userlist as &$user) {24         $openid = $user['openid'];25         $result = $weixin->send_custom_message($openid, "news", $data);26         var_dump($openid);27         var_dump($result);28     }29 }  

用户收到的图文消息如图25-9所示。

图25-9 群发通知效果

如果群发的用户很多,使用轮询一对一发送的方式将出现极大的延迟,这时需要考虑使用其他方式异步执行,如使用队列的方式。