Thinkphp5微信小程序获取用户信息接口的实例详解
Thinkphp5微信小程序获取用户信息接口的实例详解
首先在官网下载示例代码,选php的,
这里有个坑
官方的php文件,编码是UTF-8+的,所以要把文件改为UTF-8
然后在Thinkphp5extend文件夹下建立Wxxcx命名空间,把官方的几个类文件放进去(这里要注意文件夹名,命名空间名,类名的,大小写,一定要一样,官方的文件名和类名大小写不一样)
然后是自己的thinkphp接口代码:
$id]); } publicfunctiondologin() { $code=Request::instance()->param('code'); $encryptedData=Request::instance()->param('encryptedData'); $iv=Request::instance()->param('iv'); $appid="你的小程序appid"; $secret="你的小程序secret"; //appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code $param=array( 'appid'=>$appid, 'secret'=>$secret, 'js_code'=>$code, 'grant_type'=>'authorization_code' ); //http函数为封装的请求函数 $res=http("https://api.weixin.qq.com/sns/jscode2session",$param,'post'); $arr=json_decode($res,true); $result=$this->wxdecode($encryptedData,$iv,$arr['session_key'],$appid); //returnjson($result); if($result){ returnjson(['code'=>1]); }else{ returnjson(['code'=>-1]); } } publicfunctionwxdecode($encryptedData,$iv,$sessionKey,$appid) { //Loader::import('Wxxcx\WXBizDataCrypt',EXTEND_PATH); $pc=newWXBizDataCrypt($appid,$sessionKey); $data=null; $errCode=$pc->decryptData($encryptedData,$iv,$data); //echo$data; //returnjson(['data'=>$data]); $data=json_decode($data); if($errCode==0){ //print($data."\n"); //dump($data); return$data; }else{ //print($errCode."\n"); //dump($errCode); return$errCode; } } }
http封装函数:
/** *发送HTTP请求方法 *@paramstring$url请求URL *@paramarray$params请求参数 *@paramstring$method请求方法GET/POST *@returnarray$data响应数据 */ functionhttp($url,$params,$method='GET',$header=array(),$multi=false){ $opts=array( CURLOPT_TIMEOUT=>30, CURLOPT_RETURNTRANSFER=>1, CURLOPT_SSL_VERIFYPEER=>false, CURLOPT_SSL_VERIFYHOST=>false, CURLOPT_HTTPHEADER=>$header ); /*根据请求类型设置特定参数*/ switch(strtoupper($method)){ case'GET': $opts[CURLOPT_URL]=$url.'?'.http_build_query($params); break; case'POST': //判断是否传输文件 $params=$multi?$params:http_build_query($params); $opts[CURLOPT_URL]=$url; $opts[CURLOPT_POST]=1; $opts[CURLOPT_POSTFIELDS]=$params; break; default: thrownewException('不支持的请求方式!'); } /*初始化并执行curl请求*/ $ch=curl_init(); curl_setopt_array($ch,$opts); $data=curl_exec($ch); $error=curl_error($ch); curl_close($ch); if($error)thrownewException('请求发生错误:'.$error); return$data; }
然后是小程序的代码:
//获取用户信息 wx.getSetting({ success:res=>{ if(res.authSetting['scope.userInfo']){ //已经授权,可以直接调用getUserInfo获取头像昵称,不会弹框 wx.getUserInfo({ success:res=>{ console.log(res); varencryptedData=res.encryptedData variv=res.iv wx.request({ url:"https://你的服务器地址/dologin",//dologin是访问后端的方法 method:"post", data:{ code:code, encryptedData:encryptedData, iv:iv }, success:function(ret){ console.log(ret); } }) //可以将res发送给后台解码出unionId this.globalData.userInfo=res.userInfo //由于getUserInfo是网络请求,可能会在Page.onLoad之后才返回 //所以此处加入callback以防止这种情况 if(this.userInfoReadyCallback){ this.userInfoReadyCallback(res) } } }) } } }) },
如果有报错,自己调试一下,看看哪里的变量有问题 查找原因.
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。