网页授权
应用 A :a.com
其他应用:b.com,c.com ...
其他应用 通过 返回的唯一标识 来调用主应用的接口 获取信息
1) 跳转A应用 url?redirect_uri=外部uri
2) 缓存外部uri
3) 跳转微信授权url?redirect_uri=当前uri
4) 微信授权完成 获取code
根据code 获取到用户所有信息 并用
key(code,userinfo) 格式缓存
5) 跳回 外部uri 并携带参数 code
6) 外部应用 根据code 向A应用请求接口
应用 A :a.com
其他应用:b.com,c.com ...
一、网页授权
注意授权域名 写主域名A 的域名地址
1. 方式一
主应用 A 获取用户信息 并缓存其他应用 通过 返回的唯一标识 来调用主应用的接口 获取信息
1) 跳转A应用 url?redirect_uri=外部uri
2) 缓存外部uri
3) 跳转微信授权url?redirect_uri=当前uri
4) 微信授权完成 获取code
根据code 获取到用户所有信息 并用
key(code,userinfo) 格式缓存
5) 跳回 外部uri 并携带参数 code
6) 外部应用 根据code 向A应用请求接口
取到用户信息
主应用 A---------------------------------------
/**
* 入口文件
*/
public function wysq(){
$this->session->set_userdata('redirect_uri',$this->input->get('redirect_uri'));
$array = array(
'appid' =>$this->_appid,
'redirect_uri' =>'http://'.$_SERVER['HTTP_HOST'].'/home/api/oauth',
'response_type' =>'code',
'scope' =>'snsapi_userinfo',//snsapi_base ,snsapi_userinfo
'state' =>'state'
);
$list = http_build_query($array);
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?'.$list.'#wechat_redirect';
echo '<script> location.href="'.$url.'"</script>';exit;
}
public function oauth(){
$code = $this->input->get('code');
if($code){
$this->curl->options(array(CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false));
$userinfo = $this->curl->simple_get("https://api.weixin.qq.com/sns/oauth2/access_token?appid=$this->_appid&secret=$this->_appsecret&code=$code&grant_type=authorization_code");
$user = json_decode($userinfo);
$access_token = $user->access_token;
$openid = $user->openid;
//这里判断用户是否存在啊
if($openid !== ''){
$this->curl->options(array(CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false));
$baseinfo = $this->curl->simple_get('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN');
$info = json_decode($baseinfo);
if(empty($info)){
die('微信返回有误!!!');
}
//coding here... 将info 存入缓存 key $code : $info
$gouri = $this->session->userdata('redirect_uri');
$gouri = stripos($gouri, '?') === false ? $gouri.'?code='.$code:$gouri.'&code='.$code;
header("Location:".$gouri);
exit;
}else{
die('微信返回有误!!!');
}
}else{
die('微信返回有误!!!');
}
}
//获取用户信息接口
public function getinfo(){
header("Content-type: application/json");