本文實(shí)例講述了微信公眾平臺(tái)開(kāi)發(fā)之微信開(kāi)發(fā)集成類的使用。分享給大家供大家參考,具體如下:
背景
這幾天又在接觸微信PHP方面的開(kāi)發(fā),認(rèn)為之前寫的文章確實(shí)有些亂,剛好發(fā)現(xiàn)了一個(gè)不錯(cuò)的集成類(看原始代碼,出自“云知夢(mèng)軍哥”,不算打廣告,只是尊重別人的開(kāi)發(fā)成果,謝謝)里面涉及了非常全面的函數(shù),在此針對(duì)我自己的實(shí)際使用過(guò)程簡(jiǎn)單的描述一下希望能給同道小白們一個(gè)誠(chéng)懇的引導(dǎo) ...
框架:ThinkPHP 3.2.3
前期準(zhǔn)備:
①.微信公眾平臺(tái)的配置
這里不贅述,具體的可以參考我前面所寫的1、2章,個(gè)人認(rèn)為還是比較全面的
②. 將文件 Weixin.class.php 放在對(duì)應(yīng)的 library 目錄中
不過(guò)本人人開(kāi)發(fā)是基于 ThinkPHP 框架,如果使用了其它的方式,注意更改引用路徑,相信還是較為容易的,參考截圖如下:
③. 對(duì)應(yīng)的數(shù)據(jù)庫(kù)中需要新建一個(gè)表
當(dāng)然,后期優(yōu)化可以考慮去掉或自行設(shè)計(jì),在這里個(gè)人覺(jué)得比較合理,也方便自己測(cè)試(公眾號(hào)在線接口調(diào)試工具)
④. 此表是用來(lái)微信授權(quán)時(shí)自動(dòng)存儲(chǔ)公眾號(hào)信息及其token 獲取時(shí)間
而對(duì)應(yīng)操作此表的代碼位于 Weixin.class 中的 getaccesstoken()方法,
如果不是采用的 ThinkPHP 框架,可針對(duì)此方法中的 sql 語(yǔ)句進(jìn)行替換截取部分代碼可供參考
一.開(kāi)發(fā)者模式配置
①. 參考配置截圖
②. 注意匹配對(duì)應(yīng)目錄以及令牌
/**
* 微信開(kāi)發(fā)配置控制器
* Class WeixinController
* @package M\Controller
*/
class WeixinController extends Controller
{
public function index()
{
import('Org.Wechat.Weixin');
//參數(shù)傳值 token、AppID、AppSecert
$wechat = new \Weixin('zxxxi', 'wxxxxxxxxx89', 'efxxxxxxxxxxxxxxxxxxxxxxxb7');
if (!isset($_GET['echostr'])) {
//TODO 調(diào)用響應(yīng)消息函數(shù) 自動(dòng)回復(fù)
$wechat->responseMsg();
} else {
//實(shí)現(xiàn)網(wǎng)址接入,調(diào)用驗(yàn)證消息函數(shù)
$wechat->valid();
}
}
}
③. 必要文件上傳
微信公眾平臺(tái)近期發(fā)現(xiàn)規(guī)定需要在相應(yīng)域名的根目錄下上傳文件,具體可從公眾號(hào)下載。
二. 請(qǐng)求授權(quán)登錄,獲取微信用戶信息
①. 代碼參考
下面是本人摘抄并精簡(jiǎn)的部分代碼,具體的業(yè)務(wù)邏輯需要自己相應(yīng)進(jìn)行補(bǔ)充或刪減
import('Org.Wechat.Weixin');
//參數(shù)傳值 token、AppID、AppSecert
$wechat=new \Weixin('zxxxxi','wxxxxxxxxxxxxx9','efxxxxxxxxxxxxxxxxxxxxxxxxxxxx7');
//可理解為這是當(dāng)下的鏈接地址
$url = "http://www.xxxxx.com".$_SERVER['REQUEST_URI'];
//TODO 判斷 memcache是否有值,是否過(guò)期 (此處只是一個(gè)判斷舉例)
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);
//查詢數(shù)據(jù)庫(kù)是否存在
$userData = M('users')
->where("openid = '$openid'")
->Field('user_id,user_name,abnormal')
->find();
if ($userData['user_id']) {
//執(zhí)行操作 或者跳轉(zhuǎn)頁(yè)面
header("Location:???????");
}else{
//沒(méi)有帳號(hào)需要轉(zhuǎn)到用戶名填寫頁(yè)面來(lái)完成授權(quán)
$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 進(jìn)行新用戶的添加
$addTag = add('users',$user);
}
}else{
//重新跳轉(zhuǎn),或其他操作...
}
②. 手機(jī)微信端登錄對(duì)應(yīng)鏈接的結(jié)果
③. 補(bǔ)充說(shuō)明
$user_info = $wechat->getOauthUserinfo($reT['access_token'],$openid);
此處返回的$user_info 為授權(quán)用戶的詳細(xì)信息,可追蹤方法查看源代碼中 OAUTH_USERINFO_URL 的定義開(kāi)發(fā)者文檔有介紹其意義,之前的兩篇文章里也做了簡(jiǎn)單介紹
三、微信端分享功能
①. 配置微信分享相應(yīng)數(shù)據(jù)
下面的方法個(gè)人設(shè)計(jì)面向?qū)ο髸r(shí)是在繼承的 Controller 構(gòu)造函數(shù)中初始化調(diào)用的,大家可以按自己需求放置
/**
* 配置微信分享功能
*/
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);
}
②. 前臺(tái)頁(yè)面的配置信息
多數(shù)就是 html 前臺(tái)文件,補(bǔ)充如下的 js 代碼,具體的數(shù)據(jù)可自己修改
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.
*/
//通過(guò)config接口注入權(quán)限驗(yàn)證配置
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 : "真米如初:美好的東西 如期相遇 值得期待", // 分享標(biāo)題
link : "{$wx.wxurl}", // 分享鏈接
desc : "關(guān)注飲食,品質(zhì)生活。您的健康,是我們最好的堅(jiān)持,有真米,生活才夠美!", //分享描述
imgUrl : "http://img.52zhenmi.com/Public/upload/20170426/149321008494428.jpg", // 分享圖標(biāo)
});
//發(fā)送給好友
wx.onMenuShareAppMessage({
title : "真米如初:美好的東西 如期相遇 值得期待", // 分享標(biāo)題
link : "{$wx.wxurl}", // 分享鏈接
desc : "關(guān)注飲食,品質(zhì)生活。您的健康,是我們最好的堅(jiān)持,有真米,生活才夠美!", //分享描述
imgUrl : "http://img.52zhenmi.com/Public/upload/20170426/149321008494428.jpg", // 分享圖標(biāo)
});
//QQ好友
wx.onMenuShareQQ({
title : "真米如初:美好的東西 如期相遇 值得期待", // 分享標(biāo)題
link : "{$wx.wxurl}", // 分享鏈接
desc : "關(guān)注飲食,品質(zhì)生活。您的健康,是我們最好的堅(jiān)持,有真米,生活才夠美!", //分享描述
imgUrl : "http://img.52zhenmi.com/Public/upload/20170426/149321008494428.jpg", // 分享圖標(biāo)
});
//騰訊微博
wx.onMenuShareWeibo({
title : "真米如初:美好的東西 如期相遇 值得期待", // 分享標(biāo)題
link : "{$wx.wxurl}", // 分享鏈接
desc : "關(guān)注飲食,品質(zhì)生活。您的健康,是我們最好的堅(jiān)持,有真米,生活才夠美!", //分享描述
imgUrl : "http://img.52zhenmi.com/Public/upload/20170426/149321008494428.jpg", // 分享圖標(biāo)
});
});
/script>
③. 最終實(shí)現(xiàn)的效果如下
補(bǔ)充提醒:
(1).首先要保證開(kāi)發(fā)配置信息的準(zhǔn)確性
(2).有時(shí)會(huì)出現(xiàn)token令牌失效的情況,注意本地測(cè)試時(shí)很可能會(huì)影響線上,應(yīng)該就是獲取新的令牌使得線上的數(shù)據(jù)庫(kù)中不對(duì)應(yīng),注意一下。
(3).分享頁(yè)面的操作,為了方便處理可能出現(xiàn)的失敗情況,可以先用調(diào)試模式將wx.config中的 debug值更改為true,待正確無(wú)誤后再改回來(lái)。針對(duì)具體的報(bào)錯(cuò)信息需要查詢微信開(kāi)發(fā)者文檔,相信每一個(gè)想走程序猿道路的人,都會(huì)強(qiáng)制習(xí)慣補(bǔ)坑填坑 ...
debug : true,
四、公眾號(hào)發(fā)送消息
可用于簡(jiǎn)單消息的發(fā)送,比如用戶購(gòu)物完成后對(duì)公眾號(hào)管理員的消息提醒等.
①. 前提
所要發(fā)送信息的用戶關(guān)注了當(dāng)前的公眾號(hào)
②. 代碼舉例
/**
* 此方法不支持 圖片發(fā)送 注意文字的換行顯示
*/
public function postMsg(){
import('Org.Wechat.Weixin');
$wechat=new \Weixin('zxxxxi','wxxxxxxxxxx9','efxxxxxxxxxxxxxxxxxxxxxxxxxb7');
$content = "微信公眾號(hào)發(fā)送:\n";
$content .= "人生如戲,我們以為可以改變自己的命運(yùn),卻沒(méi)想到我們的結(jié)局早已注定。\n無(wú)論怎么做都擺脫不了戲里既定的安排,可謂殊途同歸。";
$content .= "如此看來(lái),我們的拼搏和掙扎就像小丑在跳舞,徒惹人發(fā)笑罷了。";
//TODO 微信用戶唯一標(biāo)記-openID 前提是對(duì)方已經(jīng)關(guān)注公眾號(hào)
$wxOpenID = "oIaCOxxxxxxxxxxxxxxxxxxxxFe0";
$wechat->postMaggerToUser($wxOpenID,$content);
}
③. 實(shí)現(xiàn)效果
五、公眾號(hào)自動(dòng)回復(fù)
功能主要用于用戶操作公眾號(hào)時(shí)的觸發(fā)事件處理,比如關(guān)注時(shí)的消息發(fā)送、按鈕點(diǎn)擊的監(jiān)聽(tīng)等
①. 主要的配置
其實(shí)來(lái)源于上面第一節(jié)對(duì)開(kāi)發(fā)者模式的配置,而舉例代碼中 WeixinController 的 index()重要的就是那不到十行的代碼
②. 監(jiān)聽(tīng)響應(yīng)消息的函數(shù)
監(jiān)聽(tīng)響應(yīng)消息的函數(shù)為 Weixin.class 中的 responseMsg(),對(duì)于其中詳細(xì)的數(shù)據(jù)處理可根據(jù)不同的觸發(fā)事件路徑進(jìn)行代碼的修改
③. 舉例:關(guān)注公眾號(hào)后的消息發(fā)送
④. 舉例:
根據(jù)用戶的輸入進(jìn)行消息的自動(dòng)回復(fù),代碼實(shí)際開(kāi)發(fā)中可根據(jù)獲得的文字進(jìn)行項(xiàng)目數(shù)據(jù)庫(kù)中的文字匹配,此處簡(jiǎn)單演示即可。
⑤. 效果實(shí)現(xiàn)截圖
附錄
因?yàn)榧傻奈⑿蓬惔a偏多,不在此粘貼,可從下面的鏈接進(jìn)行下載參考
①. 前期文章參考
參考文章一:獲取用戶Openid及個(gè)人信息
參考文章二:微信端分享功能
②. 源代碼
源代碼下載 >>>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP微信開(kāi)發(fā)技巧匯總》、《php curl用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP中json格式數(shù)據(jù)操作技巧匯總》及《PHP針對(duì)XML文件操作技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- 微信公眾平臺(tái)實(shí)現(xiàn)獲取用戶OpenID的方法
- 微信公眾號(hào)支付(一)如何獲取用戶openId
- .NET微信公眾號(hào)獲取OpenID和用戶信息
- PHP通過(guò)微信跳轉(zhuǎn)的Code參數(shù)獲取用戶的openid(關(guān)鍵代碼)
- MVC微信網(wǎng)頁(yè)授權(quán)獲取用戶OpenId
- ASP.NET Core2靜默獲取微信公眾號(hào)的用戶OpenId實(shí)例代碼
- 微信公眾平臺(tái)開(kāi)發(fā)教程②微信端分享功能圖文詳解
- 詳解微信圖片防盜鏈“此圖片來(lái)自微信公眾平臺(tái) 未經(jīng)允許不得引用”的解決方案
- PHP封裝的微信公眾平臺(tái)接口開(kāi)發(fā)操作類完整示例
- 微信公眾平臺(tái)開(kāi)發(fā)教程①獲取用戶Openid及個(gè)人信息圖文詳解