PS:本篇文章使用了thinkadmin框架,thinkadmin框架是建立在thinkphp的基础上的,更多thinkadmin的详情请自行前往搜索了解;
注:本篇文章中所要的数据库,以及注册界面图片等,在后续我会上传资源,大家自行下载了结即可;
控制器: getUserMassage
代码如下:
<?php
namespace app\Permissions\controller;
use app\wechat\service\WechatService;
use think\admin\Controller;
use think\facade\Db;
use think\facade\Request;
/**
* curl访问
*/
class getUserMassage extends Controller
{
public function curlRequest($url)
{
$action = curl_init();
curl_setopt($action, CURLOPT_URL, $url);
curl_setopt($action, CURLOPT_HEADER, 0);
curl_setopt($action, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($action, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($action, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($action, CURLOPT_CONNECTTIMEOUT, 60);
$result = curl_exec($action);
curl_close($action);
return $result;
}
/**
* 用于获取用户登录的最基本数据
* @return void
* @throws \think\admin\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getUserOpenid()
{
$getConfig = WechatService::getConfig(); //获取到微信公众号的相关配置
$appid = $getConfig['appid']; //从获取到的数组中获取到微信服务号的appid与secret
$secret = $getConfig['appsecret'];
$code = Request::get('code'); //接收到用户授权登录发送过来的code
//使用curl访问微信提供的url地址,包括appid与secret与code三个参数
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $secret . '&code=' . $code . '&grant_type=authorization_code';
$resultData = $this->curlRequest($url); //此处微信返回的数据中心包括openid与access_token与refresh_token与刷新时间等,详情请看微信开放文档公众号授权的详细描述
$arrayData = json_decode($resultData, true); //将返回的数据由json转换为数组
$openid = $arrayData['openid']; //从数组中获取到openid
$userData = Db::table('user_basic_information')->where('openid', '=', $openid)->find(); //根据用户的openid在数据库用户数据表查询用户的相关数据
if ($userData == null) {
//如果在数据库中没有检索到用户的数据,则进行用户注册
$access_token = $arrayData['access_token']; //从上方获取的数组中获取到access_token,此处的token是专用于获取用户数据的token与普通调用接口的token不同
$getUserDataUrl = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN'; //根据上方的access_token与openid访问微信提供的url拉取用户数据
$getResult = $this->curlRequest($getUserDataUrl); //此处使用curl进行访问
$arrayResult = json_decode($getResult, true); //将返回的json数据转化为数组
$nickName = $arrayResult['nickname']; //从返回的数据中获取到用户昵称
$headimg = $arrayResult['headimgurl']; //从返回的数据中获取到用户的头像url
$inDBdata = array( //将用户的昵称,头像以及openid还有自定义注册状态组合成一个数组
'nickName' => $nickName,
'headimg' => $headimg,
'openid' => $openid,
'status' => '0'
);
Db::table('user_basic_information')->save($inDBdata); //将获取到的数据存入数据库的用户信息表
$getUserId = Db::table('user_basic_information')->where('openid', '=', $openid)->column('id'); //根据用户的openid获取到数据库中用户信息表的主键
$userId = $getUserId['0']; //获取到用户在用户信息表的主键id
$this->fetch('enroll', ['id' => $userId]); //将id渲染至视图,并打开注册界面
} else {
$status = $userData['status']; //如果在数据库中用户的数据存在则获取用户的注册状态status
if ($status == 0) {
//当用户的注册状态为0时,意味着用户已经授权相关信息但是还未进行注册
$getUserId = Db::table('user_basic_information')->where('openid', '=', $openid)