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


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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
PHP 数组教程 定义数组
Oct 23 PHP
一些php技巧与注意事项分析
Feb 03 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 PHP
PHP实现常用排序算法的方法
Feb 05 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 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可逆加密解密算法实例代码
2014/01/21 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
python发送HTTP请求的方法小结
2015/07/08 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
Python类中self参数用法详解
2020/02/13 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Python Json数据文件操作原理解析
2020/05/09 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
五一服装活动方案
2014/01/11 职场文书
留学自荐信写作方法
2014/01/27 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
工程造价专业求职信
2014/07/17 职场文书
活动总结范文
2014/08/30 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
2015年效能监察工作总结
2015/04/23 职场文书