微信发送模版消息
一、 首选了解一下流程
1.获取access_token-》2.拿到用户openid-》3.拼接消息模版数据-》发送消息模版
二 、 准备材料
微信服务号的 appid、appsecret
用户 openid ( 这个一般是存在你网站的会员帐号里 )
三 、获取access_token,通过下面两个方法即可
public function getToken() { $appid = '你的微信appid'; $appsecret = '你的微信appsecret'; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; $date = $this->postcurl($url); $access_token = $date['access_token']; return $access_token; } //请求接口方法 public function postcurl($url, $data = null) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); if (!empty($data)) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); return $output = json_decode($output, true); }
注意,微信官说access_token 有效时间是7200秒,但我在测试时,偶尔access_token会失效,看个人情况缓存access_token ,提高效率
四、获取模版id(服务号后台里找),根据模版内容,拼接消息数据,下面举个例子
//下单成功通知 public function orderSuccess(){ if(request()->isPost()){ //默认参数 $default = [ 'user_id'=>'', //用户id 'url'=>'http://weixin.qq.com/download', //消息祥情链接 'name'=>'商品信息', //商品信息 'remark'=>'无' //备注 ]; //接收参数 $data = input('post.'); if(empty($data['user_id'])){ return response(2,'user_id不能为空'); } $data = array_merge($default,$data); //合并参数 //获取用户openid $data['open_id'] = $this->getOpenId($data['user_id']); if(empty($data['open_id'])){ return response(2,'用户open_id不存在'); } //消息模版数据 $data = [ "touser"=>$data['open_id'], "template_id"=>"V9cGK3kGcIo52e6YoBssXli-oYut8BBtTkuk7KRE9Bc", //模版id "url"=>$data['url'], "topcolor"=>"#000", "data"=>[ 'name'=>[ "value"=>$data['name'], "color"=>"#000" ], 'remark'=>[ "value"=>$data['remark'], "color"=>"#000" ], ] ]; //发送数据 return $this->send($data); } } /* * 发送消息 * @param 模版消息数据 */ public function send($data) { //获取微信token $access_token = $this->getToken(); //请求微信发送地址 $url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$access_token; //发送 $res = json_decode($this->curl_post($url,json_encode($data)),true); return $res }