微信公众号登录分两步走

1,获取code(让马化腾服务器请求我们的服务器并带上 code)

微信登录

2.获取用户的openid(通过传递过来的code,生成openid openid是唯一的)

function index(){

//P($_GET);

$state_value = '123';

$appid = "xxxxxx"; // 正常时从数据库取数据

$appsecret = "xxxxxxxxx"; // 正常时从数据库取数据

$return_url = 'http://z-zfd.wh2013.com/index.php/oauth2';

$get_codeUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxx&redirect_uri='.$return_url.'&response_type=code&scope=snsapi_base&state='.$state_value.'#wechat_redirect';

$get_accessUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$_GET['code']."&grant_type=authorization_code";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $get_accessUrl);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);

curl_close($ch);

$jsoninfo = json_decode($output, true);

// ajaxReturn($jsoninfo,'JSONP');

$_SESSION['openid'] = $jsoninfo['openid'];

$this->redirect('user_insert/index');

}

3.根据openid获取用户信息(可以加上附加参数来做微信的分销功能)

// 获取微信 access_token 和 用户信息

function wx_get($openid,$chief){

//整理 访问微信服务器的地址 start

// P($_SESSION['wx_access_token']);

$chief = $chief ? $chief : 'qrscene_666';

$openid = $openid ? $openid : 'oNlhuxOMiPzAsCM8POazeEFzLLvk';

$wx_access_token = $_SESSION['wx_access_token'] ? $_SESSION['wx_access_token'] :'';

$wx_openid = $_SESSION['wx_openid'] ? $_SESSION['wx_openid'] :'';

// 先判断 access_token 是否存在 不存在则 重新获取 如果存在则 判断 是否可以用 不可以用则重新生成

if(!$wx_access_token || $wx_access_token ==''){

$appid = "xxxx"; // 正常时从数据库取数据

$appsecret = "xxxxxx"; // 正常时从数据库取数据

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);

curl_close($ch);

$jsoninfo = json_decode($output, true);

$wx_access_token = $jsoninfo["access_token"];

$_SESSION['wx_access_token'] = $wx_access_token;

}else{

$get_userinfo = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$wx_access_token."&openid=".$wx_openid;

$userinfo_ch = curl_init();

curl_setopt($userinfo_ch, CURLOPT_URL, $get_userinfo);

curl_setopt($userinfo_ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($userinfo_ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($userinfo_ch, CURLOPT_RETURNTRANSFER, 1);

$userinfo_out = curl_exec($userinfo_ch);

curl_close($userinfo_ch);

$json_userinfo = json_decode($userinfo_out,true);

if(isset($json_userinfo['errcode'])){

$appid = "xxxx"; // 正常时从数据库取数据

$appsecret = "xxxxxxx"; // 正常时从数据库取数据

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);

curl_close($ch);

$jsoninfo = json_decode($output, true);

$wx_access_token = $jsoninfo["access_token"];

$_SESSION['wx_access_token'] = $wx_access_token;

}

}

$get_userinfo = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$wx_access_token."&openid=".$openid;

$user_ch = curl_init();

curl_setopt($user_ch, CURLOPT_URL, $get_userinfo);

curl_setopt($user_ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($user_ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($user_ch, CURLOPT_RETURNTRANSFER, 1);

$user_out = curl_exec($user_ch);

curl_close($user_ch);

$json_user = json_decode($user_out,true);

// P($json_user);

//整理 访问微信服务器的地址 end

/* 整理获取到用户的数据 start */

$insert_user['user_name'] = $json_user['nickname'];

$insert_user['user_passwd'] = $json_user['openid'];

$insert_user['user_chief'] = $chief;

$insert_user['sex'] = $json_user['sex'];

$insert_user['phone'] = '';

$insert_user['user_pic'] = $json_user['headimgurl'];

$insert_user['country'] = $json_user['country'];

$insert_user['province'] = $json_user['province'];

$insert_user['city'] = $json_user['city'];

$insert_user['wx_openid'] = $json_user['openid'];

/* 整理获取到用户的数据 end */

//插入数据库

// P($insert_user);

$db_user = D('user');

$db_user->insert($insert_user);

// P($wx_access_token);

return(array('wx_access_token'=>$wx_access_token,'insert_user'=>$insert_user));

}

最后获得的用户信息可以直接存入数据库。(user_chief 为判断分销的字段,可以无限极分销(法律声明只能三级分销))

php 公众号授权登录,微信公众号授权登录 | 时刻需相关推荐

  1. 微信授权登录-微信公众号和PC端网站

    一.微信公众号授权登录--微信公众平台 微信授权登录,并调用后台接口,获取用户信息 1.网页授权回调域名 首先要在公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授 ...

  2. 微信python天天学_刚学Python一礼拜!我就能模拟登录微信公众号!我是天才吧!...

    最近迷上了用python写爬虫,一发不可收拾,下面我们来说一下如何实现模拟登录微信公众号平台. 故事起因,由于本人注册了一个公众号,想着如何通过脚本实现像部分用户发送消息呢? 如何实现一键上传材料呢? ...

  3. 多账号批量登录微信公众号工具_微众公众号助手

    多账号批量登录微信公众号工具_微众公众号助手 账号登录工具 微信公众号 多账号批量登录微信公众号工具 微众公众号助手 点退出会自动退出登录的账号 左表选中下一个账号

  4. 公众号 关注_微信公众号关注图文跳转网页如何操作实现?

    对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能设 ...

  5. 微信公众号之接入微信公众号服务器开发(一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶概述 公众号与公众平台 1. 微信账号类型 个人号 公众号 订阅号 服务号 企业号 2. 公众号 微信公众号主要面向名人.政府 ...

  6. php订阅号网页登录,微信订阅号怎么使用网页授权登录

    微信公众号配置网页授权域名怎么设置? 提示:无法访问banma13.tunnel.phpor.me指向的web服务器(或虚拟主机)打开微信公众平台,输入账号密码登录后台. 如果爱上一个人,请不要炫耀, ...

  7. 微信公众号开发之微信公众平台与公众号第三方平台区别

    微信公众号开发分为微信公众平台和公众号第三方平台. 首先需要一个认证服务号,然后在设置,基本配置里面配置公众号开发信息和服务器配置. 这是我们会得到开发者ID(AppID),开发者密码(AppSecr ...

  8. Java微信公众号开发之微信公众平台接入开发者

    微信开发者接入官方文档 : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 一.微信公共号通讯机制 作为开发 ...

  9. php公众号菜单链接,微信公众号菜单栏添加外部链接

    很多微信公号新手用户想通过自己的公众号来推广其他的连接地址,对于认证用户来说可以直接添加,但对于未认证的新手用户来说不知道该怎么做,那么现在就来告诉大家添加外部链接的方法吧. 方法如下: 1.首先打开 ...

  10. 微信公众号使用:微信公众平台企业类型的微信认证申请流程

    新成立的公司申请企业类型的微信公众号流程,作为一个微信公众号相关从业人员来说,是必备技能.本节就来讲讲微信公众平台企业号的认证申请步骤. 一.登录申请开通 具体步骤:登录微信公众平台->设置-& ...

最新文章

  1. 关于几种压缩算法以及hadoop和hbase中的压缩配置说明
  2. java 手动线程调度_Java Thread 多线程 操作线程
  3. SysTick的优先级是高还是低
  4. SQLite CodeFirst、Migration 的趟坑过程 [附源码]
  5. Q72:渲染方程(Rendering Equation)
  6. codeblock异常关闭,重新开机,启动时提示有另外的实例在运行的解决办法。
  7. mysql内部联结_关于mysql的内部联结
  8. 【开发日志】gtest踩坑:-1: error: cannot find -llibgtest
  9. flex blazeds java_Flex使用Blazeds与Java交互及自定义对象转换详解
  10. 学会这招,从此解决被知乎封号烦恼
  11. PPT - 双屏幕情况下,如何设置 PPT 不在主屏幕显示问题?
  12. matlab中对一个数求余,matlab中求余、求模运算方法总结
  13. 【皇室战争】使用Clash Royale API,构建你的皇室应用
  14. 按国家归类的海淘网站大全
  15. 华为社招机考考什么_华为机考一般考什么
  16. 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html...
  17. MongoDB——聚合管道之$project操作
  18. rust 官服指令_基本指令_腐蚀RUST基本指令及服务器指令大全_3DM单机
  19. freebsd和linux服务器,我看Linux与FreeBSD
  20. 图像兴趣点检测与描述 的深度学习方法总结

热门文章

  1. 专访李柯辰:有效的营销方法很重要 魅族为开发者构筑推广平台
  2. 搜狐快站,一款可视化建站工具。
  3. java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例
  4. ChatGPT问答技巧
  5. 微型计算机agp是什么意思,AGP是什么意思
  6. 关于c++使用TTS写的朗读软件
  7. python画k线图_Python+pyqtgraph:跟我学如何绘制股票K线图
  8. 硅谷新王登国会山,呼吁加强 AI 监管;马斯克任命推特新 CEO;数字媒体巨头申请破产;欧盟通过全球首个全面监管加密资产框架 | 经济学人第 21 周
  9. 打印机无法打印解决方法
  10. 程序员应知必会的思维模型之 12 席克定律 (Hick‘s Law or Hick-Hyman Law)