微信网页授权(OAuth2.0) PHP 源码简单实现
程序员文章站
2024-02-28 10:08:46
提要:
1. 建议对oauth2.0协议做一个学习。
2. 微信官方文档和微信官网工具要得到充分利用。
比较简单,直接帖源...
提要:
1. 建议对oauth2.0协议做一个学习。
2. 微信官方文档和微信官网工具要得到充分利用。
比较简单,直接帖源代码了。其中“xxxxxxxxxx”部分,是需要依据自己环境做替换的
/** * oauth2.0微信授权登录实现 * * @author zzy * @文件名:getwxuserinfo.php */ // 回调地址 $url = urlencode("http://www.xxxxxxxxx.com/getwxuserinfo.php"); // 公众号的id和secret $appid = 'xxxxxxxxx'; $appsecret = 'xxxxxxxxx'; session_start(); // 获取code码,用于和微信服务器申请token。 注:依据oauth2.0要求,此处授权登录需要用户端操作 if(!isset($_get['code']) && !isset($_session['code'])){ echo '<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6c11a252ff1d00c4 &redirect_uri='.$url.'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect"> <font style="font-size:30">授权</font></a>'; exit; } // 依据code码去获取openid和access_token,自己的后台服务器直接向微信服务器申请即可 if (isset($_get['code']) && !isset($_session['token'])){ $_session['code'] = $_get['code']; $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid. "&secret=".$appsecret."&code=".$_get['code']."&grant_type=authorization_code"; $res = https_request($url); $res=(json_decode($res, true)); $_session['token'] = $res; } print_r($_session); // 依据申请到的access_token和openid,申请userinfo信息。 if (isset($_session['token']['access_token'])){ $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$_session['token']['access_token']."&openid=".$_session['token']['openid']."&lang=zh_cn"; echo $url; $res = https_request($url); $res = json_decode($res, true); $_session['userinfo'] = $res; } print_r($_session); // curl函数简单封装 function https_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, curlopt_url, $url); curl_setopt($curl, curlopt_ssl_verifypeer, false); curl_setopt($curl, curlopt_ssl_verifyhost, false); if (!empty($data)){ curl_setopt($curl, curlopt_post, 1); curl_setopt($curl, curlopt_postfields, $data); } curl_setopt($curl, curlopt_returntransfer, 1); $output = curl_exec($curl); curl_close($curl); return $output; }
得到正确结果如下:
array ( [code] => 041gzi4l0tvghg10n75l05fq4l0gzi42 [token] => array ( [access_token] => two6w5qmpztzibu3fph2k4edc5bllp4sgeqkc4nbztj-zti-ctzj1srrnl1qgcf2lb1-6o3n7kh2bcxl5bxtqqjegk1cq12l8czf40r9xva [expires_in] => 7200 [refresh_token] => iz3olcrkqpbojvssh2bokva09sjvsp1c8ltm7mvxxpfqxsbvi_wovmzhjqaszwlma7taggsg3mijmahjl7jrjhdquf1jkbhd6gndnltxq0u [openid] => ota_xwq4r_5niovmshq [scope] => snsapi_userinfo ) [userinfo] => array ( [openid] => ota_xwq4r_5niovmshqq [nickname] => 野狐 [sex] => 1 [language] => zh_cn [city] => 杭州 [province] => 浙江 [country] => 中国 [headimgurl] => http://wx.qlogo.cn/mmopen/piajxsqbraelwee7rhrt2ibnkc1menu04wiawrw9fkupbbgognrmbynnoeuxicgxoetw5vqqbtrs4fzdxnvawsz6gq/0 [privilege] => array ( ) ) )
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Java编程接口回调一般用法代码解析
下一篇: Java 单例模式线程安全问题