微信公众平台开发教程⑥ 微信开发集成类的使用图文详解


Posted in PHP onApril 10, 2019

本文实例讲述了微信公众平台开发之微信开发集成类的使用。分享给大家供大家参考,具体如下:

背景

  这几天又在接触微信PHP方面的开发,认为之前写的文章确实有些乱,刚好发现了一个不错的集成类(看原始代码,出自“云知梦军哥”,不算打广告,只是尊重别人的开发成果,谢谢)里面涉及了非常全面的函数,在此针对我自己的实际使用过程简单的描述一下希望能给同道小白们一个诚恳的引导 ...

  框架:ThinkPHP 3.2.3

前期准备:

①.微信公众平台的配置

这里不赘述,具体的可以参考我前面所写的1、2章,个人认为还是比较全面的

②. 将文件 Weixin.class.php 放在对应的 library 目录中

不过本人人开发是基于 ThinkPHP 框架,如果使用了其它的方式,注意更改引用路径,相信还是较为容易的,参考截图如下:

微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

③. 对应的数据库中需要新建一个表

当然,后期优化可以考虑去掉或自行设计,在这里个人觉得比较合理,也方便自己测试(公众号在线接口调试工具)

微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

④. 此表是用来微信授权时自动存储公众号信息及其token 获取时间

而对应操作此表的代码位于 Weixin.class 中的 getaccesstoken()方法,

如果不是采用的 ThinkPHP 框架,可针对此方法中的 sql 语句进行替换截取部分代码可供参考

微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

一.开发者模式配置

①. 参考配置截图

微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

②. 注意匹配对应目录以及令牌

/**
 * 微信开发配置控制器
 * 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();
 }
 }
}

③. 必要文件上传

    微信公众平台近期发现规定需要在相应域名的根目录下上传文件,具体可从公众号下载。

  微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

二. 请求授权登录,获取微信用户信息

①. 代码参考

    下面是本人摘抄并精简的部分代码,具体的业务逻辑需要自己相应进行补充或删减

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{
//重新跳转,或其他操作...
}

②. 手机微信端登录对应链接的结果

 微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

③. 补充说明

$user_info = $wechat->getOauthUserinfo($reT['access_token'],$openid);

   此处返回的$user_info 为授权用户的详细信息,可追踪方法查看源代码中 OAUTH_USERINFO_URL 的定义开发者文档有介绍其意义,之前的两篇文章里也做了简单介绍

三、微信端分享功能

①. 配置微信分享相应数据

下面的方法个人设计面向对象时是在继承的 Controller 构造函数中初始化调用的,大家可以按自己需求放置

/**
 * 配置微信分享功能
 */
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 代码,具体的数据可自己修改

<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,待正确无误后再改回来。针对具体的报错信息需要查询微信开发者文档,相信每一个想走程序猿道路的人,都会强制习惯补坑填坑 ...

debug : true,

四、公众号发送消息

可用于简单消息的发送,比如用户购物完成后对公众号管理员的消息提醒等.

①. 前提

所要发送信息的用户关注了当前的公众号

②. 代码举例

/**
 * 此方法不支持 图片发送 注意文字的换行显示
 */
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(),对于其中详细的数据处理可根据不同的触发事件路径进行代码的修改

    微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

③. 举例:关注公众号后的消息发送

微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

④. 举例:

根据用户的输入进行消息的自动回复,代码实际开发中可根据获得的文字进行项目数据库中的文字匹配,此处简单演示即可。

微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

⑤. 效果实现截图

微信公众平台开发教程⑥ 微信开发集成类的使用图文详解 微信公众平台开发教程⑥ 微信开发集成类的使用图文详解 微信公众平台开发教程⑥ 微信开发集成类的使用图文详解

附录

因为集成的微信类代码偏多,不在此粘贴,可从下面的链接进行下载参考    

①. 前期文章参考

参考文章一:获取用户Openid及个人信息

参考文章二:微信端分享功能

②. 源代码

源代码下载 >>>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
做个自己站内搜索引擎
Oct 09 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
php中的观察者模式
Mar 24 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
如何用C语言编写PHP扩展的详解
Jun 13 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
PHP中加密解密函数与DES加密解密实例
Oct 17 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
PHP的反射机制实例详解
Mar 29 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 #PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 #PHP
laravel配置Redis多个库的实现方法
Apr 10 #PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 #PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 #PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 #PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 #PHP
You might like
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php导入模块文件分享
2015/03/17 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
js实现自定义路由
2017/02/04 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
vue实现表单录入小案例
2019/09/27 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
在Python的web框架中配置app的教程
2015/04/30 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python实现简易动态时钟
2018/11/19 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
Python @property及getter setter原理详解
2020/03/31 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
行政工作个人的自我评价
2014/02/13 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
实验室标语
2014/06/21 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
小学大队长竞选稿
2015/11/20 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
python数字图像处理实现图像的形变与缩放
2022/06/28 Python