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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。