ThinkPHP5微信小程序获取用户信息接口的实例详解
这里有个坑
官方的PHP文件,编码是UTF-8+的,所以要把文件改为UTF-8
然后在ThinkPHP5 extend文件夹下建立Wxxcx命名空间,把官方的几个类文件放进去(这里要注意文件夹名,命名空间名,类名的,大小写,一定要一样,官方的文件名和类名大小写不一样)
use think\Loader;
use think\Request;
use Workerman\Protocols\Http;
use Wxxcx\WXBizDataCrypt;
use first\second\Foo;
class Index
{
public function index($id)
{
return json(['msg' => $id]);
}
public function dologin()
{
$code = Request::instance()->param('code');
$encryptedData = Request::instance()->param('encryptedData');
$iv = Request::instance()->param('iv');
$appid = "你的<a href="/tag/xiaochengxu/" target="_blank" class="keywords">小程序</a>appid";
$secret = "你的<a href="/tag/xiaochengxu/" target="_blank" class="keywords">小程序</a>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);
//return json($result);
if ($result) {
return json(['code' => 1]);
} else {
return json(['code' => -1]);
}
}
public function wxdecode($encryptedData,$sessionKey,$appid)
{
//Loader::import('Wxxcx\WXBizDataCrypt',EXTEND_PATH);
$pc = new WXBizDataCrypt($appid,$sessionKey);
$data = null;
$errCode = $pc->decryptData($encryptedData,$data);
//echo $data;
//return json(['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封装函数:
// 可以将 res 发送给<a href="/tag/houtai/" target="_blank" class="keywords">后台</a>解码出 unionId
this.globalData.userInfo = res.userInfo
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
}
})
}
}
})
},
如果有报错,自己调试一下,看看哪里的变量有问题 查找原因.
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!