//獲取accesstoken 的方法
public function index(){ $appId = 'wxd0e50fe967dccccc'; $appSecret = 'd7f6be12ce41b60ss0f45054';//虛擬的,不要用 $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)); if(curl_errno($ch)){ var_dump(curl_error($ch)); //若錯誤打印錯誤信息 } var_dump($data); //打印信息 curl_close($ch);//關閉curl }
獲取accesstoken 的第二種方法,將accesstoken存在text文件中每隔2小時刷新一次php
<?php class TokenUtil { //獲取access_token並保存到token.txt文件中 public static function build_access_token(){ $ch = curl_init(); //初始化一個CURL對象 curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx2e9f8435ebdb2856&secret=288db114f02b2b5cdc249ca75a4bf1cc");//設置你所須要抓取的URL curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//設置curl參數,要求結果是否輸出到屏幕上,爲true的時候是不返回到網頁中,假設上面的0換成1的話,那麼接下來的$data就須要echo一下。 $data = json_decode(curl_exec($ch)); if($data->access_token){ $token_file = fopen("token.txt","w") or die("Unable to open file!");//打開token.txt文件,沒有會新建 fwrite($token_file,$data->access_token);//重寫tken.txt所有內容 fclose($token_file);//關閉文件流 }else{ echo $data->errmsg; } curl_close($ch); } //設置定時器,每兩小時執行一次build_access_token()函數獲取一次access_token public static function set_interval(){ ignore_user_abort();//關閉瀏覽器仍然執行 set_time_limit(0);//讓程序一直執行下去 $interval = 7200;//每隔必定時間運行 do{ build_access_token(); sleep($interval);//等待時間,進行下一次操做。 }while(true); } //讀取token public static function read_token(){ $token_file = fopen("token.txt", "r") or die("Unable to open file!"); $rs = fgets($token_file); fclose($token_file); return $rs; } } ?>
固然ACCESS_TOKEN是會過時的
本身須要整合這個api自動獲取
咱們學習過程當中作測試能夠直接獲取粘貼上去。
固然調用這個接口須要配置IP白名單
若是獲取過程當中出現一串英文,裏面有IP地址,就說明你還沒配置IP白名單
你須要進入公衆號後臺安全中心-IP白名單-粘貼提示的IP地址便可面試
若是你要給指定的openID羣發模板消息
例如你公司作教育培訓服務的
有3個學生報了大家公司的某課程培訓班
你須要在上課前15分鐘主動向每一個學生的微信推送模板消息通知上課
那麼這三個學生須要關注你的服務號
你還要獲取到這三個學生的openID
而後存入數組中,遍歷數組發送便可。算法
獲取openID的方法
一、配置回調域名
進入公衆號,接口權限,找到網頁服務,網頁獲取用戶基本信息json
進去修改你的域名便可api
新建oauth.php數組
<?php //獲取微信access_token function getaccess_token(){ $code = $_GET['code']; $appid = '本身的appid'; $appsecret = '本身的appsecret'; $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$code}&grant_type=authorization_code"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); $data = curl_exec($ch); curl_close($ch); echo $data; } getaccess_token();
配置用戶要訪問的網頁
https://open.weixin.qq.com/co...瀏覽器
REDIRECT_URI是回調連接
就是上面的oauth.php的地址
例如你的域名是
www.baidu.com
你把oauth.php上傳到根目錄
那麼URL轉碼的回調連接就是
http://www.baidu.com/oauth.php安全
回調連接須要URL轉碼
給你們提供一個轉碼工具微信
http://tool.oschina.net/encod...app
最終的回調連接是
http%3A%2F%2Fwww.baidu.com%2Foauth.php
例如的你APPID是:wx66666666666666
整個用戶要訪問的網頁就是
https://open.weixin.qq.com/co...://www.baidu.com/oauth.php&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
用戶訪問的網頁也須要URL轉碼
最終的網址是:
https%3A%2F%2Fopen.weixin.qq.com%2Fconnect%2Foauth2%2Fauthorize%3Fappid%3Dwx66666666666666%26redirect_uri%3Dhttp%3A%2F%2Fwww.baidu.com%2Foauth.php%26response_type%3Dcode%26scope%3DSCOPE%26state%3DSTATE%23wechat_redirect
而後用微信訪問上面的最終的網址,就會返回一串JSON數據,裏面有openid
要想得到3個學生的openid那麼就要這三個學生點進去,獲取發給你
下面就是模板消息推送給指定的openid的代碼
我就以這三個學生的openid爲例
<?php $ACCESS_TOKEN = "替換你的ACCESS_TOKEN";//ACCESS_TOKEN //openid數組 $touser = [ 'ouD7BuHpIKRXPIz7pdrwI9IwDRCU', 'ouD7BuI36wSUZgteyiydmDrldQLU', 'ouD7BuLejq7R4Vbuyh41bH778cg0']; //模板消息請求URL $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $ACCESS_TOKEN; //遍歷發送微信消息 foreach ($touser as $value) { $data = getDataArray($value); $json_data = json_encode($data);//轉化成json數組讓微信能夠接收 $res = https_request($url, urldecode($json_data));//請求開始 $res = json_decode($res, true); if ($res['errcode'] == 0 && $res['errcode'] == "ok") { echo "發送成功!<br/>"; } } //獲取發送數據數組 function getDataArray($value) { $data = array( 'touser' => $value, //要發送給用戶的openid 'template_id' => "mfopDNUlvoBGGsPLB-d_nrfL8Je92xnTq5vk5ZBxL-w",//改爲本身的模板id,在微信後臺模板消息裏查看 'url' => "http://mp.weixin.qq.com/s/8UWPqHVa8PReWZp-No0ebA", //本身網站連接url 'data' => array( 'first' => array( 'value' => "親愛的同窗,您有考試提醒,請查閱。", 'color' => "#000" ), 'keyword1' => array( 'value' => "2017下半年教師資格證面試", 'color' => "#f00" ), 'keyword2' => array( 'value' => "2018-1-6", 'color' => "#173177" ), 'keyword3' => array( 'value' => "請看您的准考證", 'color' => "#3d3d3d" ), 'keyword4' => array( 'value' => "教師資格證試講", 'color' => "#3d3d3d" ), 'keyword5' => array( 'value' => "答辯,選題,結構化", 'color' => "#3d3d3d" ), 'remark' => array( 'value' => "\n如今是打印准考證時間,請您在考試前打印准考證,戳進來能夠查看詳情>>>", 'color' => "#3d3d3d" ), ) ); return $data; } //curl請求函數,微信都是經過該函數請求 function https_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; } ?>
新建test.php
拷貝代碼
修改你的
ACCESS_TOKEN
修改你的學生的3個openid
修改你的模板ID
模板ID是什麼?
就是你要推送的那個卡片的模板
例如支付成功模板,上課通知模板,發貨模板....