Thinkphp5微信小程序获取用户信息接口的实例详解

前端之家收集整理的这篇文章主要介绍了Thinkphp5微信小程序获取用户信息接口的实例详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

ThinkPHP5微信小程序获取用户信息接口的实例详解

首先在官网下载示例代码,选PHP的,

这里有个坑

官方的PHP文件,编码是UTF-8+的,所以要把文件改为UTF-8

然后在ThinkPHP5 extend文件夹下建立Wxxcx命名空间,把官方的几个类文件放进去(这里要注意文件夹名,命名空间名,类名的,大小写,一定要一样,官方的文件名和类名大小写不一样)

然后是自己的thinkPHP接口代码:

PHP;"> 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 = "你的<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封装函数:

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; }

然后是小程序代码:

{ 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 发送给<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) 
   } 
  } 
 }) 
} 

}
})
},

如果有报错,自己调试一下,看看哪里的变量有问题 查找原因.

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持

猜你在找的ThinkPHP相关文章