一、access_token
1)兩種access_token,網頁授權access_token和普通access_token
1、微信網頁授權是透過OAuth2.0機制實現的,在使用者授權給公眾號後,公眾號碼可以取得到一個網頁授權特有的介面調用憑證(網頁授權access_token),透過網頁授權access_token可以進行授權後介面調用,如取得使用者基本資訊。
2、其他微信接口,需要透過基礎支援中的「取得access_token」接口來取得到的普通access_token呼叫。 access_token是公眾號的全域唯一票據,access_token的有效期限目前為2個小時,需定時刷新,重複取得將導致上次取得的access_token失效。
2)分別取得access_token
1、網頁授權的:點選檢視網頁授權取得使用者基本資訊文檔,透過檢視此文檔,
#可以看到透過code換取網頁授權access_token,而這個code是透過微信的一個授權連結取得的,然後再根據文件中的請求取得到的,具體的連結位址和參數可以參考文件。
/** * 创建一个需要通过微信的OAuth2.0认证的服务url * @param $url 服务号需要认证访问的url * @param $scope string snsapi_userinfo | snsapi_base * snsapi_userinfo 可以用来获取用户信息 * snsapi_base 可以用来获取openid * @param string $state 自定义状态值 * 此处约定为from_weixin代表是从微信认证过来,一般无需轻易变化 * @return string 返回认证url地址 */ public function createAuthUrl($url, $scope = 'snsapi_base', $state = 'from_weixin') { $url = strval($url); $authUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize'; /** * 此处有大坑,请不要打乱param的顺序 * 否则微信认证界面会出现白屏 */ $param = array( 'appid' => $this->appId, 'redirect_uri' => urlencode($url), 'response_type' => 'code', 'scope' => $scope, 'state' => $state ); $seg = array(); foreach ($param as $k => $v) { $seg[] = "{$k}={$v}"; } return $authUrl . '?' . join('&', $seg) . '#wechat_redirect'; }
2、普通的:點選檢視取得access token文檔,透過三個參數取得。
這裡要注意的是,取得到的token,是有時效性的,2 個小時,所以我會保存在MongoDB中,先從資料庫中比對超時了沒有,沒有的話就直接從資料庫中獲取,減少不必要的請求。
二、推送日誌
在與微信的互動中,會產生很多日誌訊息,並且開發的時候經常需要分析這些日誌,這裡我將日誌都保存在MongoDB中了。 MongoDB方便的地方是任何結構的資料都能放在一個document中,不像MySQL要定義好字段名,我經常調試的時候將各種結構放在一個document中。
在微信的入口頁中,也就是前面提到的URL(伺服器位址),會在這裡面做保存日誌的邏輯。邏輯包含關注的時候推播訊息,二維碼掃描關注,點擊某個選單產生事件,點擊選單的超連結等。
日誌結構如下:
1、程式碼包含簽章驗證邏輯
2、透過file_get_contents('php: //input')來取得請求數據,就是下面的getRawMsg方法
3、將推送日誌直接塞入到MongoDB中
4、將接收到的請求資訊SimpleXMLElement對象,就是下面的parseMsg方法
5、handleEventMsg就是在處理各種不同情況了
/** * 微信公众号入口 */ public function actionPortal() { $weixin = new Weixin(); //签名验证逻辑 // if($weixin->checkSignature()){ // echo $_GET['echostr']; // } // exit; //读取原始请求数据 $msg = $weixin->getRawMsg(); //推送日志 $pushlog = new WeixinPushLog(); $pushlog->logWeixinPush($msg); $msgObj = $weixin->parseMsg($msg); if ($msgObj === false || !is_object($msgObj)) { exit; } switch ($msgObj->MsgType) { case 'event' : //接收事件消息 $this->handleEventMsg($msgObj); break; default : //todo break; } }
##
public function getRawMsg() { return file_get_contents('php://input'); } /** * 解析接收到的消息 * @param string $msg 消息体 * @return bool|SimpleXMLElement */ public function parseMsg($msg = '') { if (!$msg || empty($msg)) { return false; } $msgObj = simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA); if ($msgObj === false || !($msgObj instanceof \SimpleXMLElement)) { return false; } return $msgObj; }##################### ### ######6、如果要推播訊息,die這個方法得要加上######7、下面的程式碼只列舉了兩種事件情況,一種是訂閱、一種是點選事件######8、createRawTuWenMsg是在拼接XML,點選查看範本訊息介面。 #########
private function handleEventMsg($msgObj) { $weixin = new Weixin(); $openId = $msgObj->FromUserName; $fromUserName = $msgObj->ToUserName; //未关注,关注后推送 if ($msgObj->Event == 'subscribe') { $pushData['PicUrl'] = 'http://mmbiz.qpic.cn/'; $pushData['Title'] = '基因检测,带你一起探索生命的奥妙 '; $pushData['Description'] = '为什么不同人在身高、体重、肤色和形状上长得不一样?但是往往又和自己的父母相似?'; $pushData['Url'] = 'http://mp.weixin.qq.com'; $msg = $weixin->createRawTuWenMsg($fromUserName, $openId, array($pushData)); die($msg); }elseif($msgObj->Event == 'CLICK'){ //die($msg); } }############
public function createRawTuWenMsg($fromUserName, $toUserName, $items = array()) { if (!is_array($items)) { return ''; } $count = count($items); $its = ''; foreach ($items as $item) { $its .= <title></title> <description></description> <picurl></picurl> <url></url> ITEMTPL; } $msg = <tousername></tousername> <fromusername></fromusername> <createtime>12345678</createtime> <msgtype></msgtype> <articlecount>{$count}</articlecount> <articles> {$its} </articles> MSG; return $msg; }###demo下載:######github網址:https://github.com/pwstrick/weixin_demo# #####CSDN網址:http://download.csdn.net/detail/loneleaf1/9045731######更多微信公眾平台開發access_token、日誌相關文章請關注PHP中文網! ###

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境