微信开发集成类的使用

背景:

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

前期准备:

1).微信公众平台的配置,这里不赘述,具体的可以参考我前面所写的1、2章,个人认为还是比较全面的
2).将文件Weixin.class.php放在对应的library目录中,
  • 不过本人人开发是基于ThinkPHP框架,如果使用了其它的方式,
  • 注意更改引用路径,相信还是较为容易的,参考截图如下:


3).对应的数据库中需要新建一个表,当然,后期优化可以考虑去掉或自行设计,
  • 在这里个人觉得比较合理,也方便自己测试(公众号在线接口调试工具)
4).注意token的获取
  • 此表是用来微信授权时自动存储公众号信息及其token 获取时间,而对应操作此表的代码位于Weixin.class中的 getaccesstoken()方法,如果不是采用的ThinkPHP框架,可针对此方法中的sql语句进行替换截取部分代码可供参考

一.开发者模式配置

1).参考配置截图
2).注意匹配对应目录以及令牌
/**
 * 微信开发配置控制器
 * 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();
        }
    }
}
3).必要文件上传
  • 微信公众平台近期发现规定需要在相应域名的根目录下上传文件,具体可从公众号下载。


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

1).代码参考
  • 下面是本人摘抄并精简的部分代码,具体的业务逻辑需要自己相应进行补充或删减
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{
//重新跳转,或其他操作...
}
2).手机微信端登录对应链接的结果
3).补充说明
$user_info = $wechat->getOauthUserinfo($reT['access_token'],$openid);
  • 此处返回的$user_info 为授权用户的详细信息,可追踪方法查看源代码中 OAUTH_USERINFO_URL 的定义,开发者文档有介绍其意义,之前的两篇文章里也做了简单介绍。

三、微信端分享功能

  • 以ThinkPHP3.2框架为例

1).配置微信分享相应数据

  • 下面的方法个人设计面向对象时是在继承的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);
}

2).前台页面的配置信息

  • 多数就是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>
3).最终实现的效果如下
补充提醒:
  • 首先要保证开发配置信息的准确性
  • 有时会出现token令牌失效的情况,注意本地测试时很可能会影响线上,应该就是获取新的令牌使得线上的数据库中不对应,注意一下。
  • 分享页面的操作,为了方便处理可能出现的失败情况,可以先用调试模式将wx.config中的 debug值更改为true,待正确无误后再改回来。针对具体的报错信息需要查询微信开发者文档,相信每一个想走程序猿道路的人,都会强制习惯补坑填坑...
    debug : true,

四、公众号发送消息

  • 可用于简单消息的发送,比如用户购物完成后对公众号管理员的消息提醒等.
1).前提
  • 所要发送信息的用户关注了当前的公众号
2).代码举例
/**
 * 此方法不支持 图片发送 注意文字的换行显示
 */
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);
}

3).实现效果

五、公众号自动回复

  • 功能主要用于用户操作公众号时的触发事件处理,比如关注时的消息发送、按钮点击的监听等
1).主要的配置其实来源于上面第一节对开发者模式的配置,而举例代码中WeixinController的index()重要的就是那不到十行的代码
2).监听响应消息的函数为 Weixin.class中的 responseMsg(),对于其中详细的数据处理可根据不同的触发事件路径进行代码的修改
3).举例:关注公众号后的消息发送
4).举例:根据用户的输入进行消息的自动回复,代码实际开发中可根据获得的文字进行项目数据库中的文字匹配,此处简单演示即可。
5).效果实现截图

附录:

(1).获取用户Openid及个人信息
(2).微信端分享功能
(3).源代码下载 >>>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,050评论 25 707
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,590评论 0 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 看点与思考: 房地产营销操作没有标准化,所以,很多人都可以操作。在无法标准化的情况下,是否可以做到模块化与步骤化操...
    创智研究院阅读 467评论 0 1
  • 闲 难眠 意阑珊 信步游园 桃柳竞相妍 翩跹蜂蝶逐撵 疲思倦意皆消散 湖光远山雾气虚掩 蓬莱仙岛难遂玉环愿 十里春...
    代香阅读 267评论 0 0