1、access_token

  • 公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token;
  • access_token的存储至少要保留512个字符空间,有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效;
  • 使用AppID和AppSecret调用本接口来获取access_token
  •        https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

 

2、前提:服务号,且已微信认证

 

3、思路:

  1. 请求用户授权,获取code;
  2. 用code换取网页授权access_token和openid,并用两参数获取用户信息

 

4、具体实现:

1)请求用户授权,获取code

//公众号在微信的appid
$appid = '';
//重定向到回调地址(在公众号中授权回调页面域名才可使用,否则会出现参数错误)
$redirect_url = '';
/*
应用授权作用域
snsapi_base(不弹出授权页面,直接跳转,只能获取用户openid)
snsapi_userinfo(弹出授权页面,可通过openid拿到昵称、性别、所在地,并且,在未关注的情况下,只要用户授权,也可获取其信息)
*/
$scope = 'snsapi_userinfo';
//重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
$state = '';
//进行重定向操作
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.urlencode($redirect_uri).'&response_type=code&scope='.$scope.'&state='.$state.'#wechat_redirect';
header("Location:".$url);

2)用code换取网页授权access_token(访问令牌)和oppenid,并用两参数获取用户信息;

$appid = '';
$secret = '';
$code = $_GET['code'];
$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
//通过curl请求,获取到包含access_token和openid的json格式,再用json_decode函数解析成数组
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$get_token_url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);
$res = json_decode(curl_exec($ch),true);
curl_close($ch);

$access_token = $res['access_token'];
$openid = $res['openid'];
$get_user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
//通过curl请求,获取用户信息
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$get_user_info_url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);
$userinfo = json_decode(curl_exec($ch),true);
curl_close($ch);

 

5、cURL是什么?
一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。
curl_init():初始化 cURL 会话
curl_setopt():设置 cURL 传输选项,由于参数太多,用的时候再看
curl_exec():执行 cURL 会话
curl_close():关闭 cURL 会话

欢迎留言