最近做微信小程序,需要用户授权登录和获取微信绑定的手机号。
首先我是个渣渣,看微信文档理解不了人家的逻辑,所以。。。我觉得微信小程序的文档写的简直是一坨粑粑,好了吐槽完毕,进入正文
首先这个流程是怎么样的呢?他这个流程图还是很ok的
简单来说就是通过wx.log方法获取当前的code,用这个code来向微信服务器验证,然后拿到openid和sessionkey,然后在用openid来获得授权,嘛,我是后端,没写过前端,所以,不晓得怎么获取code,我们接着说 后台怎么获得授权吧,就这样子
'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
我们通过访问人家的接口,获取数据嘛,最简单了,来看地址的参数 appid和secret都是成为开发者就能获取到的,还要个code就是前段传过来的。上代码
public function openid(){ $code= input('code'); $appid = '*************'; $secret = '************'; //secret if (!$code) { return json(array('code'=>"0",'msg'=>'缺少code参数!')); } if (!$appid || !$secret) { return json(array('code'=>"0",'msg'=>'参数错误!')); } $url='https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code'; function getcurl($url){ $ch = curl_init(); curl_setopt ($ch,CURLOPT_URL,$url); curl_setopt ($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt ($ch,CURLOPT_TIMEOUT,30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 设置是否检查服务器端的证书 $content=curl_exec($ch); //获取结果 $status=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE ); if($status==404) { return ""; } curl_close($ch); return $content; } //code换取openid $res= getcurl($url); return json(array('code'=>"0",'msg'=>'获取成功!','data'=>json_decode($res))); }
然后前段就可以获取到代表用户的openid和sessionkey了,然后就是我们需要授权下,
//授权登录接口 public function authlogin(){ $openid = input('openid'); if (!$openid) { return json(array('code'=>"1",'msg'=>'授权失败!')); } $con = array(); $con['wxid']=trim($openid); $uid = db('user')->where($con)->value('id'); //查询是否有openid if ($uid) { //如果有openid $userinfo = db('user')->where('id='.$uid)->find(); //查询wxid是否为0 $err = array(); //用来存放查询出来的用户id,昵称和头像 $err['id'] = $uid; $err['nickname'] = $userinfo['nname']; $err['phono'] = $userinfo['phono']; $err['touxiang'] = $userinfo['touxiang']; return json(array('code'=>"0",'msg'=>'成功','data'=>$err)); }else{ //如果用户首次登录,就是注册 $data = array(); $data['nname'] = input('nname'); //获取用户名 $data['touxiang'] = input('touxiang'); //头像地址 $data['phono'] = input('phono'); //手机号 $data['sex'] = input('sex'); //性别 $data['wxid'] = $openid; //openid $data['retime'] = time(); //当前时间 if (!$data['wxid']) { return json(array('code'=>"1",'msg'=>'授权失败!')); } $res = db('user')->insertGetId($data); if ($res) { $err = array(); $err['id'] = $res; $err['nickname'] = urldecode($data['nname']); $err['phono'] = urldecode($data['phono']); $err['icon'] = $data['touxiang']; return json(array('code'=>"0",'msg'=>'成功','data'=>$err)); }else{ return json(array('code'=>"1",'msg'=>'授权失败!')); } } }
嗯,大概就这样子