本文實例講述了微信公眾平臺開發之微信開發集成類的使用。分享給大家供大家參考,具體如下:
背景
這幾天又在接觸微信php方面的開發,認為之前寫的文章確實有些亂,剛好發現了一個不錯的集成類(看原始代碼,出自“云知夢軍哥”,不算打廣告,只是尊重別人的開發成果,謝謝)里面涉及了非常全面的函數,在此針對我自己的實際使用過程簡單的描述一下希望能給同道小白們一個誠懇的引導 ...
框架:thinkphp 3.2.3
前期準備:
①.微信公眾平臺的配置
這里不贅述,具體的可以參考我前面所寫的1、2章,個人認為還是比較全面的
②. 將文件 weixin.class.php 放在對應的 library 目錄中
不過本人人開發是基于 thinkphp 框架,如果使用了其它的方式,注意更改引用路徑,相信還是較為容易的,參考截圖如下:
③. 對應的數據庫中需要新建一個表
當然,后期優化可以考慮去掉或自行設計,在這里個人覺得比較合理,也方便自己測試(公眾號在線接口調試工具)
④. 此表是用來微信授權時自動存儲公眾號信息及其token 獲取時間
而對應操作此表的代碼位于 weixin.class 中的 getaccesstoken()方法,
如果不是采用的 thinkphp 框架,可針對此方法中的 sql 語句進行替換截取部分代碼可供參考
一.開發者模式配置
①. 參考配置截圖
②. 注意匹配對應目錄以及令牌
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/** * 微信開發配置控制器 * class weixincontroller * @package m\controller */ class weixincontroller extends controller { public function index() { import( 'org.wechat.weixin' ); //參數傳值 token、appid、appsecert $wechat = new \weixin( 'zxxxi' , 'wxxxxxxxxx89' , 'efxxxxxxxxxxxxxxxxxxxxxxxb7' ); if (!isset( $_get [ 'echostr' ])) { //todo 調用響應消息函數 自動回復 $wechat ->responsemsg(); } else { //實現網址接入,調用驗證消息函數 $wechat ->valid(); } } } |
③. 必要文件上傳
微信公眾平臺近期發現規定需要在相應域名的根目錄下上傳文件,具體可從公眾號下載。
二. 請求授權登錄,獲取微信用戶信息
①. 代碼參考
下面是本人摘抄并精簡的部分代碼,具體的業務邏輯需要自己相應進行補充或刪減
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import( 'org.wechat.weixin' ); //參數傳值 token、appid、appsecert $wechat = new \weixin( 'zxxxxi' , 'wxxxxxxxxxxxxx9' , 'efxxxxxxxxxxxxxxxxxxxxxxxxxxxx7' ); //可理解為這是當下的鏈接地址 $url = "http://www.xxxxx.com" . $_server [ 'request_uri' ]; //todo 判斷 memcache是否有值,是否過期 (此處只是一個判斷舉例) if (!s(session( 'xxxname' ). '_nameid' )){ if (! $_get [ 'code' ]){ $redirect_uri = $url ; $urls = $wechat ->getoauthredirect( $redirect_uri ); header( "location:" . $urls ); die ; } } $ret = $wechat ->getoauthaccesstoken(); //todo 如果獲得 token值 if ( $ret ){ $openid = $ret [ 'openid' ]; $user_info = $wechat ->getoauthuserinfo( $ret [ 'access_token' ], $openid ); //查詢數據庫是否存在 $userdata = m( 'users' ) ->where( "openid = '$openid'" ) ->field( 'user_id,user_name,abnormal' ) ->find(); if ( $userdata [ 'user_id' ]) { //執行操作 或者跳轉頁面 header( "location:???????" ); } else { //沒有帳號需要轉到用戶名填寫頁面來完成授權 $maxuid = m( 'users' )->max( 'user_id' ); $user [ 'openid' ] = $openid ; $user [ 'nickname' ] = $user_info [ 'nickname' ]; $user [ 'sex' ] = $user_info [ 'sex' ]; $user [ 'reg_time' ] = time(); $user [ 'user_img' ] = $user_info [ 'headimgurl' ]; //todo 進行新用戶的添加 $addtag = add( 'users' , $user ); } } else { //重新跳轉,或其他操作... } |
②. 手機微信端登錄對應鏈接的結果
③. 補充說明
1
|
$user_info = $wechat ->getoauthuserinfo( $ret [ 'access_token' ], $openid ); |
此處返回的$user_info 為授權用戶的詳細信息,可追蹤方法查看源代碼中 oauth_userinfo_url 的定義開發者文檔有介紹其意義,之前的兩篇文章里也做了簡單介紹
三、微信端分享功能
①. 配置微信分享相應數據
下面的方法個人設計面向對象時是在繼承的 controller 構造函數中初始化調用的,大家可以按自己需求放置
1
2
3
4
5
6
7
8
9
10
11
|
/** * 配置微信分享功能 */ public function getwxshare(){ import( 'org.wechat.weixin' ); $wechat = new \weixin( 'zxxxxi' , 'wxxxxxxxxxxxx9' , 'efxxxxxxxxxxxxxxxxxxb7' ); $url = "http://www.xxxxxmi.com" . $_server [ 'request_uri' ]; $res = $wechat ->getjssign( $url ); $res [ 'wxurl' ] = $url ; $this ->assign( 'wx' , $res ); } |
②. 前臺頁面的配置信息
多數就是 html 前臺文件,補充如下的 js 代碼,具體的數據可自己修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<script src= "http://res.wx.qq.com/open/js/jweixin-1.1.0.js" type= "text/javascript" ></script> <script> /** * created by 百鬼夜行 on 2017/4/27. */ //通過config接口注入權限驗證配置 wx.config({ debug : false, appid : "{$wx.appid}" , timestamp : "{$wx.timestamp}" , noncestr : "{$wx.noncestr}" , url : "{$wx.url}" , signature : "{$wx.signature}" , jsapilist : [ 'onmenusharetimeline' , 'onmenushareappmessage' , 'onmenushareqq' , 'onmenushareweibo' ] }); wx.ready( function (){ //朋友圈 wx.onmenusharetimeline({ title : "真米如初:美好的東西 如期相遇 值得期待" , // 分享標題 link : "{$wx.wxurl}" , // 分享鏈接 desc : "關注飲食,品質生活。您的健康,是我們最好的堅持,有真米,生活才夠美!" , //分享描述 imgurl : "http://img.52zhenmi.com/public/upload/20170426/149321008494428.jpg" , // 分享圖標 }); //發送給好友 wx.onmenushareappmessage({ title : "真米如初:美好的東西 如期相遇 值得期待" , // 分享標題 link : "{$wx.wxurl}" , // 分享鏈接 desc : "關注飲食,品質生活。您的健康,是我們最好的堅持,有真米,生活才夠美!" , //分享描述 imgurl : "http://img.52zhenmi.com/public/upload/20170426/149321008494428.jpg" , // 分享圖標 }); //qq好友 wx.onmenushareqq({ title : "真米如初:美好的東西 如期相遇 值得期待" , // 分享標題 link : "{$wx.wxurl}" , // 分享鏈接 desc : "關注飲食,品質生活。您的健康,是我們最好的堅持,有真米,生活才夠美!" , //分享描述 imgurl : "http://img.52zhenmi.com/public/upload/20170426/149321008494428.jpg" , // 分享圖標 }); //騰訊微博 wx.onmenushareweibo({ title : "真米如初:美好的東西 如期相遇 值得期待" , // 分享標題 link : "{$wx.wxurl}" , // 分享鏈接 desc : "關注飲食,品質生活。您的健康,是我們最好的堅持,有真米,生活才夠美!" , //分享描述 imgurl : "http://img.52zhenmi.com/public/upload/20170426/149321008494428.jpg" , // 分享圖標 }); }); </script> |
③. 最終實現的效果如下
補充提醒:
(1).首先要保證開發配置信息的準確性
(2).有時會出現token令牌失效的情況,注意本地測試時很可能會影響線上,應該就是獲取新的令牌使得線上的數據庫中不對應,注意一下。
(3).分享頁面的操作,為了方便處理可能出現的失敗情況,可以先用調試模式將wx.config中的 debug值更改為true,待正確無誤后再改回來。針對具體的報錯信息需要查詢微信開發者文檔,相信每一個想走程序猿道路的人,都會強制習慣補坑填坑 ...
1
|
debug : true, |
四、公眾號發送消息
可用于簡單消息的發送,比如用戶購物完成后對公眾號管理員的消息提醒等.
①. 前提
所要發送信息的用戶關注了當前的公眾號
②. 代碼舉例
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/** * 此方法不支持 圖片發送 注意文字的換行顯示 */ public function postmsg(){ import( 'org.wechat.weixin' ); $wechat = new \weixin( 'zxxxxi' , 'wxxxxxxxxxx9' , 'efxxxxxxxxxxxxxxxxxxxxxxxxxb7' ); $content = "微信公眾號發送:\n" ; $content .= "人生如戲,我們以為可以改變自己的命運,卻沒想到我們的結局早已注定。\n無論怎么做都擺脫不了戲里既定的安排,可謂殊途同歸。" ; $content .= "如此看來,我們的拼搏和掙扎就像小丑在跳舞,徒惹人發笑罷了。" ; //todo 微信用戶唯一標記-openid 前提是對方已經關注公眾號 $wxopenid = "oiacoxxxxxxxxxxxxxxxxxxxxfe0" ; $wechat ->postmaggertouser( $wxopenid , $content ); } |
③. 實現效果
五、公眾號自動回復
功能主要用于用戶操作公眾號時的觸發事件處理,比如關注時的消息發送、按鈕點擊的監聽等
①. 主要的配置
其實來源于上面第一節對開發者模式的配置,而舉例代碼中 weixincontroller 的 index()重要的就是那不到十行的代碼
②. 監聽響應消息的函數
監聽響應消息的函數為 weixin.class 中的 responsemsg(),對于其中詳細的數據處理可根據不同的觸發事件路徑進行代碼的修改
③. 舉例:關注公眾號后的消息發送
④. 舉例:
根據用戶的輸入進行消息的自動回復,代碼實際開發中可根據獲得的文字進行項目數據庫中的文字匹配,此處簡單演示即可。
⑤. 效果實現截圖
附錄
因為集成的微信類代碼偏多,不在此粘貼,可從下面的鏈接進行下載參考
①. 前期文章參考
②. 源代碼
希望本文所述對大家php程序設計有所幫助。
原文鏈接:https://blog.csdn.net/u011415782/article/details/71171395