<?php
//官方文档 https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
namespace Mobile\Controller;
use Common\Model\MemberModel;
use Think\Controller;
class BaseController extends Controller {protected $UID = 0;protected $userInfo = [];public function _initialize(){header('Content-Type:text/html;charset=utf-8');//用户ID  用来判断用户是否登录$member_model = new MemberModel();$this->UID = intval($member_model->getAuthInfo('id'));//用户信息$userInfo = M('Member')->where(['id'=>$this->UID])->find();$this->userInfo = $userInfo;//获取微信openid 和 unionid$wx_info = session('wx_info');if(is_WeChat() && CONTROLLER_NAME != 'Login' && !$wx_info['openid']){session('wx_openid',null);$wx_openid = $this->get_openid();//根据access_token 和 openid 获取unionid$access_token = $this->get_access_token();$user_info_url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid='.$wx_openid;$wx_info = json_decode(curl_get($user_info_url),true);session('wx_info',$wx_info);//如果系统存在该微信账户 则使其登录$member_model->wx_login(['wx_unionId'=>$wx_info['unionid']]);}}/*** 获取微信用户openid*/public function get_openid(){$openid = null;$wx_openid = I('param.openid');if($wx_openid){session('wx_openid',$wx_openid);}$openid = session('wx_openid');if(empty($openid)){$openid = get_openid();}return $openid;}/*** 获取access_token  公众号的全局唯一接口调用凭据*/private function get_access_token(){$info = M('we_chat')->find();$access_token = $info['access_token'];$over_time = $info['over_time'];if(!$access_token || $over_time < time()){$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$info['app_id'].'&secret='.$info['app_secret'];$json = curl_get($url);$arr = json_decode($json,true);$access_token = $arr['access_token'];$data['id'] = $info['id'];$data['access_token'] = $arr['access_token'];$data['over_time'] = time() + 7100;//access_token的有效期目前为2个小时M('we_chat')->save($data);}return $access_token;}}
<?php/*** 是否为微信端*/
function is_WeChat(){if (strpos($_SERVER['HTTP_USER_AGENT'],'MicroMessenger') !== false) {return true;}return false;
}/*** 获取微信用户openid*/
function get_openid() {if(!empty($_REQUEST['openid'])){$openid = $_REQUEST['openid'];session('wx_openid',$openid);return $openid;}else{$callback = C('ROOT_URL').'?m=mobile&c=Index&a=index';OAuthWX($callback);}
}/*** 获取微信用户openid* @param string $callback*/
function OAuthWX($callback){$wx_chat = M('we_chat')->where(['id'=>1])->find();$param['appid'] = $wx_chat['app_id'];if (!isset($_GET['getOpenId'])){$param['redirect_uri'] = $callback.'&getOpenId=1';$param['response_type'] = 'code';$param['scope'] = 'snsapi_base';//snsapi_base  snsapi_userinfo$param['state'] = 'wx_login';$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?'.http_build_query($param).'#wechat_redirect';redirect($url);} elseif ($_GET['state']){$param['secret'] = $wx_chat['app_secret'];$param['code'] = I('code');$param['grant_type'] = 'authorization_code';$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?'.http_build_query($param);$content = curl_get($url);$content = json_decode($content,true);$openid = $content['openid'] ? $content['openid'] : -1;redirect($callback.'&openid='.$openid);}
}/*** Curl GET 请求* @param string $url* @return string*/
function curl_get($url) {$ch = curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳过ssl检查项$output = curl_exec($ch);if($output === FALSE ){echo "CURL Error:".curl_error($ch);}curl_close($ch);return $output;
}

微信开放平台 获取微信openid和unionid相关推荐

  1. 微信公众平台—— 获取微信服务器IP地址

    微信公众平台-- 获取微信服务器IP地址 const ServerIpUrl = 'https://api.weixin.qq.com/cgi-bin/getcallbackip?&acces ...

  2. 微信开放平台开发 微信登录

    在这篇微信公众平台开发教程中,我们将介绍如何使用微信开放平台接口实现微信扫码登录的功能. 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信O ...

  3. 【微信开放平台】微信第三方扫码登录(亲测可用)

    开放平台需要企业认证才能注册,正好这次公司提供了一个账号,调通以后,就顺便写一篇博客吧. 公众平台与开放平台的区别 微信开放平台 主要面对移动应用/网站应用开发者,为其提供微信登录.分享.支付等相关权 ...

  4. 微信开放平台与微信公众平台简介

    微信开放平台地址:微信开放平台 微信公众平台地址:微信公众平台 一.微信开放平台常用功能 app: 分享与收藏 微信登录 微信支付 智能接口(具体参看文档) 网站: 微信登录 智能接口(具体参看文档) ...

  5. 微信商业闭环谈论之微信开放平台实现微信卡券投放实践(附部分JAVA源码)

    一.微信卡券及现状 先认识几个概念:微信开放平台.公众号第三方平台和微信公众平台开发者模式. 微信开放平台:简单的说,是用于微信生态平台,该平台提供各种接口,第三方App通过接口接入微信登录.微信分享 ...

  6. 微信开放平台,微信登陆第三方网站 提示redirect_uri 参数错误

    在微信开放平台上我填写的回调域是:bbs.qiaoshisui.com/LoginApi/WeiXinCallBack,我构造的链接是:https://open.weixin.qq.com/conne ...

  7. php微信开放平台获取openid,微信公众平台获取openid

    微信公众平台可以通过接口获取用户的openid,但是获取用户信息的时候需要做一次跳转. 我在后台有一张用户表,用户如果关注了公众平台就将他的信息录入到数据库,包括openid.现在要做一个简单的系统, ...

  8. 微信开放平台获取用户信息接口 https://api.weixin.qq.com/sns/userinfo,中文乱码问题python版

    由于微信从这个接口过来的返回值是 ISO-8859-1 编码的,所以只需要把返回的值进行encode就行了 # 获取用户信息 server1 = "https://api.weixin.qq ...

  9. 微信开放平台 第三方平台开发

    1.开放账号 首先,开放平台和第三方平台不是一回事,第三方平台只是开放平台中一个分支,提供的是公众号的授权,代替公众号拥有者操作公众号的部分权利(与授权的权限有关) 微信开放平台拥有单独账号,需要开发 ...

最新文章

  1. [HNOI2009]无归岛
  2. HyperWorks2020中文版
  3. MATLAB中的fft后为何要用fftshift?
  4. curd boy 入门
  5. Git提交代码时报 Please tell me who you are
  6. gin redis 链接不上_php + redis 高并发商品秒杀 完整业务模拟流程 实现方案
  7. Python自动对Word文件中Python程序进行着色
  8. nginx日志采集 mysql_shell + go + mysql nginx日志统计 (三) :数据的展示
  9. 回调函数透彻理解Java
  10. f分布表完整图a=0.01_第7章 分布分析
  11. ipad版实现横屏竖屏 详解iPad横竖屏切换解决方案
  12. 牛逼哄哄的对象深复制
  13. 国家标准中常出入的IDT、MOD、EQV、NEQ是啥意思
  14. Java8里不得不说的那些常用日期处理,码起来~
  15. Internet Explorer 11内置浏览器的下载
  16. Python基础+数据科学入门(三)组合数据类型
  17. 仅仅允许本校报考?多所985/211大学计算机第二学士学位
  18. pdc是什么部门_PDC绩效管理
  19. Android MP3录音功能(能暂停,含源码,可编译)
  20. 计算机的结课论文,计算机结课论文-20210510000145.docx-原创力文档

热门文章

  1. (离散化)洛谷P1496火烧赤壁
  2. python爬虫之使用requests进行图片爬取
  3. 有n个人围成一圈,顺序编号,从第一个人开始报数,凡报到3的人出圈,编写程序,问最后留下的是原来第几号的那位?
  4. 低通、高通滤波器的工作原理是怎样的
  5. 这篇麦肯锡报告,透露了几个行业秘密...
  6. 可证明安全——公钥加密
  7. FindWindowEx死循环的问题
  8. php 外勤,Qdphpcode 签到程序,可用于外勤 ,支持百度地图SDK! Web Server 269万源代码下载- www.pudn.com...
  9. 《敏捷宣言》四大价值观,十二大原则
  10. ANSYS热分析以及开关电器理论