namespace Topxia\Component\OAuthClient;

/**

* 微信扫码登陆

* Enter description here ...

* @author Administrator

*

*/

class WeixinOAuthClient extends AbstractOAuthClient

{

public $tokenURL;

public $authorizeURL;

public $userURL;

public $scope = '';

public $app_key;

public $app_secret;

public $display = '';

public $graphURL = '';

public $token = array();

public $meth = array();

public $post_login = array();

public $post_token = array();

public $post_msg = array();

public function getAuthorizeUrl($callbackUrl)

{

$state = md5(time()+rand(0,9999));

$_SESSION['weixin_state'] = $state;

$url="";

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false)

{

/**

* 公众号登录

* Enter description here ...

* @var unknown_type

*/

$this->config['key']="wx";//用户 微信公交号登录的 APPID

$url = "https://open.weixin.qq.com/connect/oauth2/authorize";

$url .="?appid=".$this->config['key']."&redirect_uri=".urlencode($callbackUrl)."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";

}

else

{

/**

* 微信网页授权登录

* Enter description here ...

* @var unknown_type

*/

$this->authorizeURL = 'https://open.weixin.qq.com/connect/qrconnect';

$this->app_key = $this->config['key'];

$this->app_secret = $this->config['secret'];

$this->parameter = array(

'response_type' => 'code',

'scope' => 'snsapi_login',

'state' => $state,

);

$url = $this->authorizeURL.'?';

$url .= 'appid='.$this->app_key;

if(!empty($callbackUrl))

{

$this->parameter['redirect_uri'] = $callbackUrl;

}

$url .= '&'.http_build_query($this->parameter);

}

return $url;

}

public function getAccessToken($code, $callbackUrl)

{

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false)

{

/**

* 公众号登录

* Enter description here ...

* @var unknown_type

*/

$APPID="wx";//用户 微信公交号登录的 APPID

$SCRETID="200049";//用户 微信公交号登录的 SCRETID

$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$APPID."&secret=".$SCRETID."&code=".$code."&grant_type=authorization_code";

$re = $this->curl_get_contents1($url);

$rearr = json_decode($re,true);

$openid = $rearr['openid'];

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

$re3 = $this->curl_get_contents1($url3);

$re3arr = json_decode($re3,true);

//print_r($re3arr);exit;

$token1['openid1']=$openid;

$token1['token']=$re3arr['access_token'];

$unionid=$this->getunionid($token1);

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

$token = array(

'userId' => $unionid,

'token' => $re3arr['access_token'],

'openid' => $unionid,

'openid1' => $openid,

// 'refresh_token' => $rawToken['refresh_token'],

);

return $token;

}

else

{

$url = sprintf('https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code',$this->config['key'],$this->config['secret'],$code);

$re = $this->curl_get_contents1($url);

$rawToken = json_decode($re,true);

if($rawToken['errcode']){

echo "错误提示:".$data;

exit;

}

//$_SESSION['openid'] = $rawToken['openid'];

$token1['openid1']=$rawToken['openid'];

$token1['token']=$rawToken['access_token'];

$unionid=$this->getunionid($token1);

$token = array(

'userId' => $unionid,

'token' => $rawToken['access_token'],

'openid' => $unionid,

'openid1' => $rawToken['openid'],

'refresh_token' => $rawToken['refresh_token'],

);

return $token;

}

}

/**

* 获取unionid 统一微信登录用户

* Enter description here ...

* @param unknown_type $token

*/

public function getunionid($token)

{

$userInfo=array();

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false)

{

/**

* 公众号登录

* Enter description here ...

* @var unknown_type

*/

header("Content-type: text/html; charset=utf-8");

$url2 = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$token['token']."&openid=".$token['openid1']."&lang=zh_CN";

$re2 = $this->curl_get_contents1($url2);

$userInfo = json_decode($re2,true);

}

else

{

$params = array();

$params['access_token'] = $token['token'];

$params['openid'] = $token['openid1'];

$url='https://api.weixin.qq.com/sns/userinfo';

$url .="?access_token=".$params['access_token']."&openid=".$params['openid']."&lang=zh_CN";

$re = $this->curl_get_contents1($url);

$userInfo = json_decode($re,true);

}

return $userInfo['unionid'];

}

public function getUserInfo($token)

{

$userInfo=array();

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false)

{

/**

* 公众号登录

* Enter description here ...

* @var unknown_type

*/

header("Content-type: text/html; charset=utf-8");

$url2 = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$token['token']."&openid=".$token['openid1']."&lang=zh_CN";

$re2 = $this->curl_get_contents1($url2);

$userInfo = json_decode($re2,true);

}

else

{

$params = array();

$params['access_token'] = $token['token'];

$params['openid'] = $token['openid1'];

$url='https://api.weixin.qq.com/sns/userinfo';

$url .="?access_token=".$params['access_token']."&openid=".$params['openid']."&lang=zh_CN";

$re = $this->curl_get_contents1($url);

$userInfo = json_decode($re,true);

//$this->checkError($userInfo);

}

//print_r($userInfo);exit;

return $this->convertUserInfo($userInfo);

}

protected function convertUserInfo($rawUserInfo)

{

$info = array();

//print_r($rawUserInfo);

$info['name'] = $rawUserInfo['nickname'];

$info['sex'] = $rawUserInfo['sex'];

$info['id'] = $rawUserInfo['unionid'];

$info['smallAvatar'] = $rawUserInfo['headimgurl'];

return $info;

}

//var_dump($openid);

function curl_get_contents1($url) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_TIMEOUT, 2);

curl_setopt($ch, CURLOPT_USERAGENT, "IE 6.0");

curl_setopt($ch, CURLOPT_REFERER, "");

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$r = curl_exec($ch);

curl_close($ch);

return $r;

}

private function checkError($userInfo)

{

if (!array_key_exists('error_code', $userInfo)) {

return ;

}

if ($userInfo['error_code'] == '21321') {

throw new \Exception('unaudited');

}

throw new \Exception($userInfo['error']);

}

}

php unid,微信扫码登陆/微信公交号 登录PHP 自适应 UnionID统一用户相关推荐

  1. 微信扫码登陆/微信公交号 登录PHP 自适应 UnionID统一用户

    <?php namespace Topxia\Component\OAuthClient; /**  * 微信扫码登陆  * Enter description here ...  * @aut ...

  2. php 微信登陆unionid,微信扫码登陆/微信公交号 登录PHP 自适应 UnionID统一用户

    标签:php<?php namespace Topxia\Component\OAuthClient; /** * 微信扫码登陆 * Enter description here ... * @ ...

  3. java实现PC网站实现微信扫码登陆

    近期,开发一个项目要求PC网站可以进行扫码登陆. 1.前期工作 需要先在微信开放平台进行注册(https://open.weixin.qq.com/),并认证一个网站应用. 点击查看按钮,我们需要记录 ...

  4. 第六天 黑马十次方 用户注册、用户登陆掌握js-cookie、微信扫码登陆、nuxt嵌套路由

    学习目标: ** 完成用户注册功能 完成用户登陆功能,掌握js-cookie的使用 完成微信扫码登陆的功能 完成用户中心嵌套布局,掌握nuxt嵌套路由的使用 ** 1 用户注册 1.1 页面构建 创建 ...

  5. 微信扫码登陆在chrome浏览器失败

    浏览器会提示:(新版本的浏览器会提示) Unsafe JavaScript attempt to initiate navigation for frame with URL 'http://www. ...

  6. 微信扫码登陆在chrome浏览器被拦截

    浏览器会提示:(新版本的浏览器会提示) Unsafe JavaScript attempt to initiate navigation for frame with URL 'http://www. ...

  7. Android 微信扫码登陆

    最近项目需求中有一个微信扫码登陆功能,即用手机微信扫码功能扫描终端二维码实现登陆的功能 随即打开微信开发者文档查看,不亏为官方,简洁明了,看得我是一脸懵逼,踩了N多坑,太不友好了,言归正传,希望对一些 ...

  8. 微信扫码登陆PC端(Vue)(小程序)

    本文章基于Vue项目并且已经开发一个完整上线的微信小程序,制作PC端时实现微信小程序扫码登陆PC端. 一.向后端请求token 1.后端会定时生成并更新的一个token 2.正常的接口请求从后端拿到这 ...

  9. 微信扫码登陆功能(保姆级)

    微信官网文档 https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 一.申 ...

  10. 账号与微信绑定,微信扫码登陆

    今天完成了pc端微信相关功能的开发,主要是账号与微信绑定,微信扫码登陆. 流程,用户登陆后,在个人中心里有一个和微信绑定界面,用户使用微信扫描后,当前账号和微信账号绑定,可以用来微信扫描登陆. 在登陆 ...

最新文章

  1. 解题报告(一)快速沃尔什变换FWT(ACM / OI)超高质量题解
  2. [Java] SpringMVC工作原理之四:MultipartResolver
  3. ELF文件的格式和加载过程
  4. rxjava 被观察者_RxJava:从未来到可观察
  5. 蛮力法在查找算法中的应用(JAVA)--顺序查找
  6. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (
  7. VS项目打包,并自动安装SQL数据库
  8. mysql 、慢查询、到底如何玩
  9. java多表查询实体类_自己设计一个JAVA+MyBatis解析实体类多表通用查询
  10. CTF中压缩包的思路
  11. 重磅 | 谱尼测试圆满承办化妆品生产企业研学班
  12. 【个人随笔】留下第一个脚印
  13. 倍升工作效率的小策略
  14. text to image(一):《GENERATING IMAGES FROM CAPTIONS WITH ATTENTION》
  15. 秋招算法岗,面试复盘
  16. 什么是permit-inside功能
  17. Maple希腊字母按键查表
  18. 走进MySQL---分享dept、emp、bonus、salgrade员工信息管理表
  19. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒
  20. 工程伦理--15.4 异种移植的伦理问题(下)

热门文章

  1. 金融业大整顿,是要回到十年前的水平吗?
  2. 阿里云 cGPU 容器技术白皮书
  3. Alibaba Cloud Linux 2 LTS OS 启动优化实践 | 凌云时刻
  4. 联想服务器怎么安装虚拟机,Windows 8里的虚拟机Hyper-V的安装及使用
  5. 【心音信号】基于matlab GUI EMD心音信号特征提取【含Matlab源码 1735期】
  6. 【RWM】基于matlab路由无线传感器网络模拟随机路点运动模型【含Matlab源码 1565期】
  7. python列表比大小_Python列表按组大小排序
  8. mfc 制作不同的文档模板mdi不同的子窗体_法律行业python教程——利用python批量制作律师函...
  9. 端到端车道线检测_如何使用Yolov5创建端到端对象检测器?
  10. ieee浮点数与常规浮点数_浮点数如何工作