php三方網站使用微信公眾號推送文章
//獲取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 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的方法
1、配置回撥域名
進入公眾號,介面許可權,找到網頁服務,網頁獲取使用者基本資訊
進去修改你的域名即可
新建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...
最終的回撥連結是
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是什麼?
就是你要推送的那個卡片的模板
例如支付成功模板,上課通知模板,發貨模板....