thinkadmin实现微信服务号登录注册,包括省市县三级联动

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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值