问筑网微信自动注册登录技术收集

现在wecenter这个开源项目有不少开发问答平台的大小站长在支持,我现在就在对其进行二次开发。当有需求,要使用多个三方登录的时候,发现wecenter还没有网站上的微信三方登录和微信客户端面注册登录。和群内交流时,很多朋友php基础不是很好,这里出一个初级的教程。 ​   今天,我就和大家说说,我在wecenter使用微信网站三方登录的流程。其实,他也适合各个环境下的登录。    微信登录简单来说分为一下6个步骤:   1,你必须是微信的开发者。(自行认证,¥300,疼讯,你懂的)   2,认证后验证网站,添加网站,不是应用和公众号,三方平台。如下图:​​    在添加网站验证的时候,有一个回调url,这个url就是你请求后,微信给您发送code的目标地址。也是你接受code的地址。    验证和认证成功后,你会得到appid,secret,在应用详情里。    也就是说,在第二步,你需要得到回调地址 即REDIRECT_URI:比如,以主页为例子:www.kangdf.cn                                                        appid   和   secret   3,给微信发送登录请求: 最简单的就是你把请求网址放在你的登录连接的href里 如:https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect​“​>微信登录 标红色的地方,就是你在第二步拿到的东西。还有一个state是什么?就是一个验证码,判断是不是你的,你可以填任意字符 4,接受code,请求access_token 当点击连接的时候,其实就是给微信发请求了,微信验证标红的参数是否正确,然后会跳转到你的回调地址上并带上code,就是这个样子:http://www.xxxx.cn/?code=89zs8d79889797809809&state=123 这个时候你只要在你的​主页控制器中接受code 验证  state代码如下: //接收参数并验证 $code = htmlspecialchars($_GET['code']); $state = htmlspecialchars($_GET['state']); if(!$code or !$state){     H::redirect_msg(AWS_APP::lang()->_t('与 微信通信出错, 或用户拒绝,请重新登录'),"/account/login/"); }​​ if($​state != get_setting('state')){   H::redirect_msg(AWS_APP::lang()->_t('与非法请求,请重新登录'),"/account/login/"); }​ 到这一步,你已经成功接收code了,然后就是去请求获得access_token //请求access_token 获取access_token的时候,新手朋友们都会在curl这个环节上出现一点点疑惑。curl其实就是利用URL语法在命令行方式下获取远程的文件信息。php中有个curl的函数,需要服务器支持​。这里,你只要用这个函数进行下面的操作,就可以了。标红的就是上面获得的参数值。 $url ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url);       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,FALSE);       curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);      curl_setopt($curl, CURLOPT_POST,1);           curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);       $result =curl_exec($curl);      if (curl_errno($curl)){          return'Errno'.curl_error($curl);      }       curl_close($curl); 执行以上函数,你可以打印$result看看。如果参数正确,你会得到一个对象,你可以json_decode一下。 { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN","openid":"OPENID", "scope":"SCOPE","unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}​ 如果参数不对,会返回错误的信息。 5,获取到信息后,我们即将要用到的就是access_token和openid。openid就是用微信登录用户的id。通过这两个参数就可以用获取token的同样方法相应想信息了​。就是把$url改成:$url ="https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";​ 同样执行函数,你就可以得到一个包含用户信息的对象。如下:{ "openid":"OPENID","nickname":"NICKNAME","sex":1,"province":"PROVINCE","city":"CITY","country":"COUNTRY","headimgurl":"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0","privilege":["PRIVILEGE1", "PRIVILEGE2"],"unionid":" o6_bmasdasdsad6_2sgVt7hMZOPfL"}​ 6,有了这些信息,我们就可以进行自动注册,登录的逻辑操作了。 你可以用nickname作为用户名,指定一个password,然后进行注册,然后再将信息update到用户信息。我这里列出一个简单的例子 //生成用户名 $user_name = $uinfo['nickname'].mb_substr(time(),7,10);​​ //生成密码 $password = 'xxx'; //判断是否重名    $user_name =$uinfo['nickname'].mb_substr(time(),9,10) .rand(10,99);​​    functionname($user_name){      if($this->model('account')->check_username($user_name)){               $user_name = $user_name = $uinfo['nickname'].mb_substr(time(),7,10);                name($user_name);                 }else{                return $user_name;                 }          }       $user_name = name($user_name); //注册 $uid =$this->model('account')->user_register($user_name,md5($password),$email);​ $this->model('account')->update('users',array(              'province'   =>$uinfo['province'],                             'city'      =>$uinfo['city'],                              'sex'      =>$sex,                                         'weixin_id'=>$uinfo['unionid'],                        ), 'uid = ' .intval($uid));       $this->associate_avatar($uid,$uinfo['avatar_url']); //发送通知 $this->model('message')->send_message(1,$uid,null,'感谢您使用微信登录康大夫,您的用户名为'.$user_name.',初始密码为xxx;享受更多的特权,请您进行认证,邀请还可以获得好礼'); 到此,就完成了自动注册了,然后设置cookies自动登录。整个过程就完成了。
已邀请:

要回复问题请先登录注册