This article mainly introduces relevant information about the detailed examples of the Thinkphp5 WeChat applet to obtain user information interface. I hope this article can help everyone. Friends in need can refer to it
Thinkphp5 WeChat applet Detailed explanation of the example of the program's user information interface
First download the sample code from the official website, choose PHP,
There is a pitfall here
The official php file is encoded in UTF-8, so you need to change the file to UTF-8
Then create the Wxxcx namespace under the Thinkphp5 extend folder and put several official class files in it (here Pay attention to the folder name, namespace name, class name, and the case must be the same. The official file name and class name have different case)
Then your own thinkphp interface code:
<?php /** * Created by PhpStorm. * User: leeoo * Date: 2017/9/14 0014 * Time: 10:43 */ namespace app\api\controller\v1; 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 = "你的小程序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); //return json($result); if ($result) { return json(['code' => 1]); } else { return json(['code' => -1]); } } public function wxdecode($encryptedData, $iv, $sessionKey, $appid) { //Loader::import('Wxxcx\WXBizDataCrypt', EXTEND_PATH); $pc = new WXBizDataCrypt($appid, $sessionKey); $data = null; $errCode = $pc->decryptData($encryptedData, $iv, $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 encapsulation function:
/** * 发送HTTP请求方法 * @param string $url 请求URL * @param array $params 请求参数 * @param string $method 请求方法GET/POST * @return array $data 响应数据 */ function http($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: throw new Exception('不支持的请求方式!'); } /* 初始化并执行curl请求 */ $ch = curl_init(); curl_setopt_array($ch, $opts); $data = curl_exec($ch); $error = curl_error($ch); curl_close($ch); if($error) throw new Exception('请求发生错误:' . $error); return $data; }
Then the code of the mini program:
// 获取用户信息 wx.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 wx.getUserInfo({ success: res => { console.log(res); var encryptedData = res.encryptedData var iv = 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) } } }) } } }) },
If there is an error, debug it yourself and see where the variables are problematic. Search Reason.
The above is the entire content of this article. I hope it will be helpful to everyone’s study. For more related content, please pay attention to the PHP Chinese website!
Related recommendations:
About thinkPHP WeChat sharing Usage analysis of interface JSSDK
##About Thinkphp5 WeChat public account token verification failure reasons and solutions
The above is the detailed content of How to use Thinkphp5 WeChat applet to obtain user information interface. For more information, please follow other related articles on the PHP Chinese website!