1.通过授权网址,拿到code
固定式授权网址:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx70697366a034c0f7&redirect_uri=http://wd1700564.pro.wdcase.com/oauth2.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
所含参数:appid,redirect_uri可变,其他固定参数值
appid,
redirect_uri(回调地址),
response_type,
scope,
state
授权成功后,通过$_GET['code']可以拿到返回的code值
2.通过code值拿到用户的access_token和openid
固定式获取网址:
https://api.weixin.qq.com/sns/oauth2/access_token?
appid=wx70697366a034c0f7&secret=0622bff1d1b1200a665b0caa4da7b3cd&code=$code&grant_type=authorization_code
所含参数:appid,secret,code可变,其他固定参数值
appid,
secret,
code,
grant_type
用cURL访问网址,成功访问后返回json格式的字符串,用json_decode(xx,true)转化为数组,通过$xx['access_token'],$xx['openid']可以拿到access_token和openid
3.通过用户的access_token和openid,用CURL微信登录,获取用户信息
固定式微信登录网址:
https://api.weixin.qq.com/sns/userinfo?
access_token=$access_token&openid=$openid(&lang=zh_CN)
所含参数:access_token,openid可变
access_token,
openid,
lang(可写或不写)
用cURL访问网址,成功访问后返回json格式的字符串,用json_decode(xx,true)转化为数组得到用户信息
'user_name'=>(string)$user_info['nickname'],//用户名
'user_sex'=>$user_info['sex'],//性别
'user_img'=>$user_info['headimgurl'],//头像
'open_id'=>$openid,//用户的openid
'user_time'=>time(),//登录时间
备注:
1.code:微信授权成功后会返回一个code
2.access_token:公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token,有效期7200s,每天调用获取的次数只有2000次,建议保存到数据库或缓存起来。网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
3.openid:公众号的普通用户的一个唯一的标识,只针对当前的公众号有效
4.cURL:模拟浏览器请求的工具,比如获取远程的网页和接口,比类似功能的file_contents(),file(),readfile()强大
使用cURL发送URL请求四步:
curl_init():初始化一个cURL会话
curl_setopt():设置请求选项
curl_exec():执行一个cURL会话,并获取相关的回复(返回json格式的数据)
curl_close():关闭一个cURL会话
微信授权curl_setopt()要设置的选项
CURLOPT_URL:需要获取的URL地址
CURLOPT_SSL_VERIFYPEER:禁用后cURL将终止从服务端进行验证
CURLOPT_SSL_VERIFYHOST:禁用后就不检查证书中是否有CN(common name)字段和校验当前的域名是否与CN匹配
CURLOPT_RETURNTRANSFER:将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
5.获取当前URL作为redirect_uri(回调地址)时要用到的$_SERVER[''],一般都封装在get_url()方法中
如 URL是http://www.5idev.com/php/index.php/test/foo?username=hbolive
$_SERVER['SERVER_PORT']:获取端口(80是http://;443是https://)
$_SERVER['PHP_SELF']:获取URL除域名和参数的那块(如:/php/index.php/test/foo)
$_SERVER['SCRIPT_NAME']:获取URL除域名和参数和文件名的那块(如:/php/index.php)
$_SERVER['REQUEST_URL']:获取URL除域名的那块(如:/php/index.php/test/foo?username=hbolive)
$_SERVER['PATH_INFO']:获取URL文件名(如:/test/foo)
$_SERVER['QUERY_STRING']:获取URL的参数,不带问号"?"(如:username=hbolive)
$_SERVER['HTTP_HOST']:获取域名(如:www.5idev.com)
6.urlencode()和urldecode(),一般用于URL
urlencode():将字符串用URL编码
urldecode():将以URL编码的字符串解码(":"用$3A代替;"/"用%2F代替)
--------------------
扩展:授权登录后可以继续做的事情
4.判断是否关注微信公众号
网址:
https://api.weixin.qq.com/cgi-bin/user/info?
access_token=$access_token2&openid=$openid
所含参数
access_token:关注的微信号的access_token,保留7200s,过了两小时要重新获取
openid:用户的openid
5.获取微信公众号access_token
网址:
https://api.weixin.qq.com/cgi-bin/token?
grant_type=client_credential&appid={$wechat[appid]}&secret={$wechat[appsecret]}
所含参数
grant_type:固定参数值
appid:微信公众号的appid
secret:微信公众号的appsecret