ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简介 OAuth2.0鉴权 ![](https://box.kancloud.cn/cfbbe40456de29136d9a421b5fc1d7df_1242x692.png) # 设置微信授权域名 ![](https://box.kancloud.cn/050ff0e8dc2da3cd07f44203d012d639_1092x211.png) ![](https://box.kancloud.cn/378121699fdf992af413650b3e2696a3_558x455.png) # 网页授权开发工具 为了帮助开发者简单和高效地开发和调试微信公众号,推出了全新的 微信开发者工具,集成了公众号网页调试和小程序调试两种开发模式 下载地址: https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html ![](https://box.kancloud.cn/598a6874766b42a99a2bd237ca5ade22_542x255.png) ![](https://box.kancloud.cn/9fb7eab432fcee6b9b42ea90888a545c_362x448.png) ![](https://box.kancloud.cn/d7daf9bc99e459b43158aeccbf1da25b_1217x568.png) # 微信授权代码实现 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 ![](https://box.kancloud.cn/7e77f6917a59171a7220c780e77bf440_1061x187.png) base此权限只能获取用户的openid而得不到用户的基本信息,授权是无感,不需要用户确认就可以完成授权,静默方式。 userinfo 可能获取openid和用户的基本信息,需要用户确认 ![](https://box.kancloud.cn/93f9162624f8debb6c2b39e95cf42024_514x216.png) # 步骤 [https://mp.weixin.qq.com/wiki?t=resource/res\_main&id=mp1421140842](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842) ## 获取code值 ![](https://box.kancloud.cn/06177807884e3c7feaeb2f227b73f5d5_915x552.png) ![](https://box.kancloud.cn/39a1f71f819740d00492ae024aeac4c0_900x436.png) 在服务器中编写生成跳转地址url程序 ~~~ <?php $appid = 'wx77c5845xx9abaf8ad6'; //我写个假的防止别人使用 $secret = '8074c29bdfa71fdbex9debc19060275dc'; //我写个假的防止别人使用 // 授权成功后回调地址 请使用 urlEncode 对链接进行处理 $redirect_uri = urlencode('http://ns9aum.natappfree.cc/auth/shop.php'); //引导关注者打开如下页面 $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=100#wechat_redirect'; $url = sprintf($url, $appid, $redirect_uri); //我们把输出的url放到微信开发者工具中,然后把这个url放到地址栏那,他会授权,然后跳转到$redirect_uri那 //echo $url; //跳转 header('location:' . $url); ~~~ 跳转的url的代码,这是授权成功后跳转的页面 `http://ns9aum.natappfree.cc/auth/shop.php` ~~~ <!doctype html> <html lang="zh-Hans"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <pre> <?php var_dump($_GET); ?> </pre> </body> </html> ~~~ 输出 ![](https://box.kancloud.cn/f3b6676cc56ae3bd6f6b5aecafaeed36_744x220.png) **注意: code有效期是5分钟** ## 得到openid完成授权 ![](https://box.kancloud.cn/01b75ee0428ca40d1d44f511f927920d_799x568.png) ![](https://box.kancloud.cn/605f3efb6e95350071ae9af8f4df47c0_795x708.png) openid重要 ![](https://box.kancloud.cn/343fc54326f7340a20bf002f00e3f159_841x269.png) ![](https://box.kancloud.cn/1dfffe9c6fcda0db12b59502d14928e1_845x348.png) ## 拉取用户信息 ![](https://box.kancloud.cn/c28320a5fdee976372d614e0b0dad61b_833x579.png) ![](https://box.kancloud.cn/0d0be59aeb7e0c9145a4b32d97cdc96d_903x390.png) shop.php ~~~ <?php //appid公众号 $appid = 'wx77c58459abaf8ad6'; $secret = '8074c29bdfa71fdbe9debc19060275dc'; //得到code $code = $_GET['code']; $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code'; $url = sprintf($url,$appid,$secret,$code); // 发起get请求, http_request是封装的curl方法 $json = http_request($url); # json 转为 array $arr = json_decode($json,true); $access_token = $arr['access_token']; $openid = $arr['openid']; // 拉取用户信息 $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN'; $url = sprintf($url,$access_token,$openid); // 发起get请求 $json = http_request($url); # json 转为 array $userinfo = json_decode($json,true); //var_dump($userinfo); function http_request($url,$ret='',$file=''){ if (!empty($file)) { // 有文件上传 # php5.5之前 '@'.$file;就可以进地文件上传 # $ret['pic'] = '@'.$file; # php5.6之后用此方法 $ret['media'] = new CURLFile($file); } // 初始化 $ch = curl_init(); // 相关设置 # 设置请求的URL地址 curl_setopt($ch,CURLOPT_URL,$url); # 请求头关闭 curl_setopt($ch,CURLOPT_HEADER,0); # 请求的得到的结果不直接输出,而是以字符串结果返回 必写 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); # 设置请求的超时时间 单位秒 curl_setopt($ch,CURLOPT_TIMEOUT,30); # 设置浏览器型号 curl_setopt($ch,CURLOPT_USERAGENT,'MSIE001'); # 证书不检查 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); # 设置为post请求 if($ret){ # 如果 $ret不为假则是post提交 # 开启post请求 curl_setopt($ch,CURLOPT_POST,1); # post请求的数据 curl_setopt($ch,CURLOPT_POSTFIELDS,$ret); } // 发起请求 $data = curl_exec($ch); // 有没有发生异常 if(curl_errno($ch) > 0){ // 把错误发送给客户端 echo curl_error($ch); $data = ''; } // 关闭请求 curl_close($ch); return $data; } ?> <!doctype html> <html lang="zh-Hans"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div class="user"> <p>openid:<?php echo $openid;?></p> <p>昵称:<?php echo $userinfo['nickname'];?></p> <p>性别:<?php echo $userinfo['sex']==1 ? '先生' : '靓妹';?></p> <p> 头像: <img src="<?php echo $userinfo['headimgurl'] ?>" style="width: 300px;"> </p> <p>还有省市</p> </div> </body> </html> ~~~ 小结: * 生成跳转的url地址,得到了code * 用code换取access_token和openid,完成授权 * 非必须的,如果是userinfo授权,则可以获取用户的基本信息