2019-02-11 11:36:01
围观(5688)
写微信小程序开发时,一边开发一边骂着官方文档烂。
现在需要写公众号的网页授权,突然觉得小程序文档已经很良心了...
小程序文档每个组件或者API至少有DEMO代码片段,到了公众号这边,只告诉你API的URL和使用流程,DEMO或者API测试工具?不存在的!
官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
既然官方不给DEMO 那就只能把写好的代码贴到这 记录一下,以后需要用到可以来搬
入口代码 (index.php/login.php) 括号内的是文件命名 随便命名都行:
<?php $appid='appid'; //将字符串以URL编码。 $redirect_uri = urlencode ( 'http://localhost/getUserInfo.php' ); //拼接字串 将参数拼接进官方接口中 $url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect"; //重定向向官方发送HTTP报头。 header("Location:".$url); ?>
回调代码 (getUserInfo.php):
<?php header("content-type:text/html;charset=utf-8"); //将GET方式提交的code数据存入变量 $code = $_GET["code"]; //判断code是否存在 if (isset($_GET['code'])){ $userinfo = getUserInfo($code); //userinfo即是用户信息 是个数组。 var_dump($userinfo); /*** * * #CODE * 业务逻辑编写 * ***/ }else{ echo "NO CODE"; } function getUserInfo($code) { $appid = "appid"; $appsecret = "appsecret"; //获取access_token $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$code}&grant_type=authorization_code"; //发起请求 调用https_request函数 $access_token_json = https_request($access_token_url); //将JSON格式的字符串进行解码,并转换为数组 $access_token_array = json_decode($access_token_json,true); //获取access_token $access_token = $access_token_array['access_token']; //获取openid $openid = $access_token_array['openid']; //获取用户信息 $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}"; //发起请求获得用户信息的JSON格式字符串 $userinfo_json = https_request($userinfo_url); //将JSON格式字符串编码并转为数组 $userinfo_array = json_decode($userinfo_json,ture); return $userinfo_array; } /*** * 自定义https_request函数,发起请求并返回结果 ***/ function https_request($url) { //初始化CURL $curl = curl_init(); //设置CURL请求参数 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); $data = curl_exec($curl); if (curl_errno($curl)){ return 'ERROR'.curl_error($curl); } curl_close($curl); return $data; } ?>
最后别忘了需要到公众号平台设置一下:
设置的时候需要验证token 代码后续再贴上。