最近因為客戶需求,研究了一下微信公眾號的模板消息推送,花了一個半小時,終於搞出來了,如圖:
下面介紹一下流程
1.首先先獲取access_token
2.獲取到了access_token,那么就去微信的模板庫里挑選模板,並且把它添加到我的模板里面
3.接下來就是編輯數據,傳遞過去即可
4.當你發送了數據之后,微信會把推送成功的信息發送到你公眾號基本配置里的服務器配置里配置的地址上面去
具體代碼如下:
//推送消息 public function push(){ $access_token = $this->access_token(); if ($access_token == 400){ return json(['code'=>0,'message'=>'獲取access_token失敗']); }$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$access_token; $data = array( "touser" => $openid, //openid "template_id" => '模板id', //模板id "url" => '用戶點擊信息跳轉地址', "data" => array( 'first' => array( 'value'=>'尊敬的客戶,您的訂單有了新的進展', 'color'=>'' ), 'keyword1'=>array( 'value'=>123465, 'color'=>'' ), 'keyword2'=>array( 'value'=>'訂單進度提醒', 'color'=>'' ), 'keyword3'=>array( 'value'=>66666, 'color'=>'' ), 'keyword4'=>array( 'value'=>date('Y-m-d H:i:s', time()), 'color'=>'' ), 'remark' => array( 'value'=>'最新訂單狀態', 'color'=>'' ), ), //模板數據 ); return $this->http_post_json($url,json_encode($data));//發送請求 } public function http_post_json($url, $jsonStr) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($jsonStr) ) ); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return json_encode(array($httpCode, $response),true); } //獲取access_token public function access_token(){ $access_token = Cache::get('access_token'); if (!empty($access_token)){ return $access_token; } $appId = APPID; $appSecret = appsecret; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret; $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,$url); //要訪問的地址 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳過證書驗證 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 從證書中檢查SSL加密算法是否存在 $data = json_decode(curl_exec($ch),true); if(curl_errno($ch)){ var_dump(curl_error($ch)); //若錯誤打印錯誤信息 } curl_close($ch);//關閉curl if(Cache::set('access_token',$data['access_token'],172800)){ return $data['access_token']; }else{ return 400; } }