微信公众号开发文档链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

微信公众号授权登录分为两种:

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

以下说做授权的思路

明确思路后,开始动手吧

有一个很好用的微信开发SDK,里面集合了微信公众号、微信支付、阿里支付的功能

SDK项目相关地址
GITHUB源码地址:https://github.com/zoujingli/wechat-php-sdk
OSChina源码地址:http://git.oschina.net/zoujingli/wechat-php-sdk
Composer包名称:zoujingli/wechat-php-sdk
在线文档地址:http://www.kancloud.cn/zoujingli/wechat-php-sdk

这里推荐使用composer来管理SDK,composer安装

composer require zoujingli/wechat-developer

安装完SDK后便可以开始写自己的代码了

在config里app.php写下微信公众号相关信息

//    公众号配置
'wechat' => [
'token' => 'test',
'appid' => '你的微信公众号appid',
'appsecret' => '你的微信公众号appsecret',
'encodingaeskey' => '',
// 配置商户支付参数(可选,在使用支付功能时需要)
'mch_id' => "你的商户平台mch_id",
'mch_key' => '你的商户平台mch_key',
// 配置商户支付双向证书目录(可选,在使用退款|打款|红包时需要)
'ssl_key' => '',
'ssl_cer' => '',
// 缓存目录配置(可选,需拥有读写权限)
'cache_path' => '',
]

然后是控制器代码

        $config = config('wechat');//微信配置
$oauth = new Oauth($config);
$thisUrl = $this -> get_url();//当前地址
$code = $this -> request -> param('code');
if( !Session::has('user_id') ){//没有session保存的user_id
if( !Session::has('isEmpty') ){//静默获取openid
$oauth -> getOauthRedirect($thisUrl,'','snsapi_base');//静默授权换取code
$data = $oauth -> getOauthAccessToken($code);//通过 code 获取 AccessToken 和 openid
Session::set('openid',$data['openid']); //通过Open搜索数据库是否有该用户
$user = new \app\api\model\User();
$userId = $user -> getUserId($data['openid']);
if(!$userId){//未注册
Session::set('isEmpty',1);
$thisUrl = str_replace(strchr($thisUrl, "code"), '', $thisUrl);//清除code
header('location:'.$thisUrl);//重新访问当前网址
}else{
Session::set('isEmpty',2);
Session::set('userId',$userId);
}
}else if(Session::get('isEmpty') == 1){//注册会员
$oauth -> getOauthRedirect($thisUrl);//用户授权换取code
Session::delete('isEmpty');//删除判断用的session
$data = $oauth -> getOauthAccessToken($code);//通过 code 获取 AccessToken 和 openid
$userInfo = $oauth -> getUserInfo($data['access_token'],$data['openid']);
$wxUser = new User($config);
$wxUserInfo = $wxUser -> getUserInfo(Session::get('openid'));
// dump($wxUserInfo);
$userInfo['subscribe_time'] = $wxUserInfo['subscribe'] ? $wxUserInfo['subscribe_time'] : '';
$userInfo['subscribe'] = $wxUserInfo['subscribe'] ? 1 : 0;
// dump($userInfo);exit;
$user = new \app\api\model\User();
$userId = $user -> addUserInfo($userInfo);
Session('userId',$userId);
}
}else{//实时更新用户数据,实时监测用户是否关注
$wxUser = new User($config);
$wxUserInfo = $wxUser -> getUserInfo(Session::get('openid'));
if(!empty($wxUserInfo)){
$user = new \app\api\model\User();
$user -> updateUserInfo($wxUserInfo);
} }

以上

【tp5.1】微信公众号授权登录及获取信息录入数据库的更多相关文章

  1. 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题

    开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...

  2. uniapp - 微信公众号授权登录

    [缘由] 采用uniapp进行微信小程序和微信公众号双版本开发:考虑到用户唯一性,我们后端确定了以“unionid”.作为唯一标识. 有的小伙伴估计也是刚入这坑,我就简单说一下步骤流程   [摸索] ...

  3. 微信公众号授权登录,提示“redirect_uri 参数错误”

    做微信公众号开发授权登录的时候遇到的坑... 后台服务用node,index.js相关代码如下: const oauth = new OAuth(conf.appid, conf.appsecret) ...

  4. 微信公众号授权登录后报redirect_uri参数错误的问题

      在进行微信公众号二次开发的时候,需要通过授权码模式来进行微信授权.比如,在进行登录的时候,用户点击了登录按钮,然后弹出一个授权框,用户点击同意后,就可以获取用户的OpenId等信息了.这篇文章主要 ...

  5. Chrome插件:微信公众号自动登录(chrome.extension)

    manifest.json: { "manifest_version": 2, "name": "WX.AutoLogin", " ...

  6. 微信公众号授权,支付,退款总结【shoucang】

    1.支付前准备 1.1首先两个平台接入账户. 商户平台:https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F 公众平台: ...

  7. 微信公众号授权回调用户信息,获取openid

    1.--------------------用户授权登录并获取code 授权登录方式有两个,一种为静默授权登录(scope=snsapi_base),一种为非静默授权登录(scope=snsapi_u ...

  8. PHP之路——微信公众号授权获取用户信息

    官方文档链接:http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html /** * 获取code */ public f ...

  9. C#微信公众号开发——access_token的获取

    access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_toke ...

随机推荐

  1. 【阿里云产品公测】PTS压力测试最低配ECS性能及评测

    PTS是一个性能测试工具,可以使用PTS对自身系统性能在阿里云环境里的状况进行整体评估来找出你的系统性能瓶颈从而优化系统,同时你还可以在了解自己的系统性能指标情况下便于未来新增扩容.在使用PTS前你必 ...

  2. 使用CKRule实现PVC配方计算

    1,PVC计算的基本原理 配方员设计好配方,再进行抽象提炼,会出现相对于软件而言可以理解的逻辑,如属性的概念,对厂企生成的PVC产品而言,一般都有产品大类名称,花纹,颜色,长度,宽度,厚度等概念,这对 ...

  3. 【Linux】Windows与Linux之间的文件共享(基于网络)

    切记:Linux的安全机制的存在--iptables和selinux. 一.操作前提 1.1 从Windows能够ping通Linux 1.2 关闭Linux防火墙 command1:/etc/ini ...

  4. Android Proguard.flags LOCAL_PROGUARD_FLAGS

    在Android项目中用到JNI,当用了proguard后,发现native方法找不到很多变量,原来是被produard优化掉了.所以,在JNI应用中该慎用progurad啊. 解决办法: 1.在An ...

  5. php执行与curl区别

            如执行一个文件写入 Linux服务器,分别php **/a.php与 curl http://**/a.php 结果:php执行写入到/root/test.txt, curl与浏览器运 ...

  6. eclipse插件svn和客户端工具TortoiseSvn的版本对应关系

    如果同时使用这两个软件,一定要保证版本的对应关系: 插件svn1.4.x对应TortoiseSvn 1.5.x 插件svn1.6.x对应TortoiseSvn 1.6.x 插件svn1.8.x对应To ...

  7. Java框架安全

    (一)Mybatis注入问题 Mybatis是目前比较常用的ORM的框架,一般与SpringMVC框架整合较多,但使用不当会有SQL注入的风险. Mybatis里mapper中SQL语句的写法支持两种 ...

  8. Oracle里删除重复记录,保留一项

    我们在使用数据库的时候,有时数据会有所重复,当我们只需要一项数据时,不需要显示重复的记录时 如下就有SQL代码: --查找表中多余的重复记录,重复记录是根据单个字段来判断 select * from ...

  9. ASP.NET向MySQL写入中文的乱码问题-.NET技术/C#

    1,在 mysql数据库安装目录下找到my.ini文件,把default-character-set的值修改为 default-character-set=gb2312(修改两处),保存,重新启动. ...

  10. June 17th 2017 Week 24th Saturday

    Absence sharpens love, presence strengthens it. 相聚爱益切,离别情更深. There is almost no such love that can i ...