微信小程序登录&授权&获取用户信息(thinkphp5后台)

thinkphp5小程序微信登录 1、绑定登录事件<button open-type="getUserInfo" bindgetuserinfo="wxlogin">登录</button>2、获取用户信息之后调用微信登录接口获取code发送给服务端3、服务端处理//微信登录 public function wxLogin(){ $code = input('param.code');//获取code... 阅读详情

后台用到的公共方法(写入common.php文件的)

1.发送HTTP请求方法,用于获取code。

/**
 * 发送HTTP请求方法
 * @param  string $url    请求URL
 * @param  array  $params 请求参数
 * @param  string $method 请求方法GET/POST
 * @return array  $data   响应数据
 */
function httpCurl($url, $params, $method = 'POST', $header = array(), $multi = false){
    date_default_timezone_set('PRC');
    $opts = array(
        CURLOPT_TIMEOUT        => 30,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_HTTPHEADER     => $header,
        CURLOPT_COOKIESESSION  => true,
        CURLOPT_FOLLOWLOCATION => 1,
        CURLOPT_COOKIE         =>session_name().'='.session_id(),
    );
    /* 根据请求类型设置特定参数 */
    switch(strtoupper($method)){
        case 'GET':
            // $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
            // 链接后拼接参数  &  非?
            $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;
}

2.微信信息解密方法

/**
 * 微信信息解密
 * @param  string  $appid  小程序id
 * @param  string  $sessionKey 小程序密钥
 * @param  string  $encryptedData 在小程序中获取的encryptedData
 * @param  string  $iv 在小程序中获取的iv
 * @return array 解密后的数组
 */
function decryptData( $appid , $sessionKey, $encryptedData, $iv ){
    $OK = 0;
    $IllegalAesKey = -41001;
    $IllegalIv = -41002;
    $IllegalBuffer = -41003;
    $DecodeBase64Error = -41004;

    if (strlen($sessionKey) != 24) {
        return $IllegalAesKey;
    }
    $aesKey=base64_decode($sessionKey);

    if (strlen($iv) != 24) {
        return $IllegalIv;
    }
    $aesIV=base64_decode($iv);

    $aesCipher=base64_decode($encryptedData);

    $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
    $dataObj=json_decode( $result );
    if( $dataObj  == NULL )
    {
        return $IllegalBuffer;
    }
    if( $dataObj->watermark->appid != $appid )
    {
        return $DecodeBase64Error;
    }
    $data = json_decode($result,true);

    return $data;
}

3.请求过程中因为编码原因+号变成了空格,需要用下面的方法转换回来

/**
 * 请求过程中因为编码原因+号变成了空格
 * 需要用下面的方法转换回来
 */
function define_str_replace($data)
{
    return str_replace(' ','+',$data);
}

控制器里写入的代码

 public function weixinlogin()
    {
        $get = input('get.');
        //获取session_key
        $params['appid']= '小程序ID';
        $params['secret']= '小程序密钥';
        $params['js_code']= define_str_replace($get['code']);
        $params['grant_type']= 'authorization_code';
        $http_key = httpCurl('https://api.weixin.qq.com/sns/jscode2session', $params, 'GET');
        $session_key = json_decode($http_key,true);
        if(!empty($session_key['session_key'])){
            $appid = $params['appid'];
            $encryptedData= urldecode($get['encryptedData']);
            $iv = define_str_replace($get['iv']);
            $errCode = decryptData($appid,$session_key['session_key'],$encryptedData,$iv);
            dump($errCode); //打印获取的数据
        }else{
            echo '获取session_key失败!';
        }
    }

小程序JS因为getUserInfo方法将不再出现授权弹窗,请使用 <button open-type="getUserInfo"></button> 引导用户主动进行授权操作,

所以需要在页面加一个引导用户授权的按钮在js页面data里加一个

 data: {
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },

wxml里也需要加一个

<button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button>

 

 onLoad: function() {
      wx.login({//login流程
      success: function (res) {//登录成功
        if (res.code) {
          var code = res.code;
          wx.getUserInfo({//getUserInfo流程
            success: function (res2) {//获取userinfo成功
            var encryptedData = encodeURIComponent(res2.encryptedData);//一定要把加密串转成URI编码
              var iv = res2.iv;
              //请求自己的服务器
             Login(code,encryptedData,iv);
            }
          })
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    });
    function  Login(code,encryptedData,iv){
              //创建一个dialog
              wx.showToast({
                title: '正在登录...',
                icon: 'loading',
                duration: 10000
              });
              //请求服务器
              wx.request({
                url: '你的服务器API接口',
                data: {
                  code:code,
                  encryptedData:encryptedData,
                  iv:iv
                },
                method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
                header: {
                  'content-type': 'application/json'
                }, // 设置请求的 header
                success: function (res) {
                  // success
                  wx.hideToast();
                  console.log('服务器返回'+res.data);

                },
                fail: function () {
                  // fail
                  // wx.hideToast();
                },
                complete: function () {
                  // complete
                }
              })
      }
}

 

thinkphp5.0获取微信小程序用户信息unionid 因公司业务需要,接触了微信小程序,在做微信自动登录的时候遇到了问题,头像昵称未能获取到,在网上找了一个服务器端解密的方法,只能获取到用户openid和unionid,仅供参考,如果有大佬知道获取昵称头像的方法,请指点一下。先说获取unionid,小程序端传参数到服务器端,服务器端再调用微信官方接口,通过小程序传的参数生成签名,然后对比微信官方返回的签名,如果一致,并且在微信开放平台已经绑定了账号,... 阅读详情

相关推荐

微信小程序:实现微信手机授权登录

微信小程序:实现微信手机授权登录

weixin_46001736的博客 1917

微信小程序 + ThinkPHP5 登录态实现

微信小程序中,一般会涉及三种登录方式: 1. 使用微信账号登录 2. 自有的账号注册和登录 3. 使用其他第三方平台账号登录 微信账号登录流程: 1. wx.login获取code,发往后台,后台以此向微信API换取session_key和openid; 2. 随机生成字符串作为sessionid(key),session_key和openid作为value,存入r...

qq_31093755的博客 2万+

小程序授权登录完整步骤(开发实例)

开发使用的thinkphp5 一,小程序登录 可参考小程序登录 前端调用 wx.login() 获取 临时登录凭证code 。 二,微信授权 前端请求后端授权登录接口(code参数传递过来),代码实现。 /* * APPID //定义常量 APPID * SECRET // 定义常量密钥 * GRANTYPE //定义常量类型 * WX_LOGIN_URL //定义常量微信请求地址 https://api.weixin.qq.com/

lwaimj的博客 3013

PHP —— 用 ThinkPHP5.0 实现微信小程序登陆

大家好,之前学习了原生PHP和框架,今天我们运用框架TP5.0来实现一下微信小程序的用户登陆以及获取用户的信息接口。

LizequaNNN的博客 3055

uniapp+Thinkphp5实现微信小程序手机号一键登录全流程(附前后端代码及详细解释)

实现微信小程序手机号一键登录的流程主要包括以下几个步骤:用户授权、获取手机号码、后端验证与注册/登录处理。这里将结合uni-app作为前端框架和ThinkPHP5作为后端框架来详细介绍这一过程,并提供关键代码示例。

man2017的博客 1585

使用ThinkPHP实现移动端微信授权登录

方法中,我们可以获取用户的信息,例如用户的OpenID、昵称等,并进行相应的处理,例如保存用户信息到数据库。用户可以通过微信登录你的应用,方便快捷地使用应用的相关功能。接下来,我们需要配置应用的相关信息,包括微信开放平台的AppID和AppSecret等。方法中,我们使用EasyWeChat库来创建一个微信公众号实例,并进行OAuth授权,跳转到微信登录页面。方法中,我们获取用户授权后的信息,可以对用户信息进行处理,例如保存到数据库。是用户授权后重定向的URL,需要替换为你应用的实际URL。

MquaDevops的博客 1100

基于Thinkphp5+EasyWeChat+fastadmin微信小程序授权登录&获取手机号&微信公众号网页---联合授权登录

基于TP5、EasyWeChat、fastadmin 微信小程序 微信公众号 授权登录

weixin_43588185的博客 7157

微信小程序结合ThinkPHP5授权登陆后获取手机号

微信小程序结合ThinkPHP5授权登陆后获取手机号

m0_71661429的博客 742

ThinkPHP5-微信小程序获取用户授权登录信息

因为最近在用 TP5 开发小程序,所以就上网搜索了一下 TP 框架对应的微信小程序获取授权信息的依赖,但是结果不太理想,于是就借鉴了 laravel 的 iwanli/wxxcx 依赖,自己手动写了一个 TP5 的获取信息接口,下面分享一下具体的实现流程。 1. 梳理 首先要知道的是,小程序开发中,微信小程序授权时后台会获取的参数: encryptedData:加密后的用户信息 code:登录凭证码 iv:偏移向量,在解密是要用到的 这三个参数是通过小程序前端发送到后台的。 之后需要去微信小程序官方文

daifeng的博客 2325

thinkphp后台获取微信小程序用户信息

首先需要看懂微信小程序开发文档的 &nbsp;开放接口中的 &nbsp;登录 和 用户信息。 &nbsp; wx.login(OBJECT) 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid)&nbsp;及本次登录的&nbsp;会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。 code 换取 session_key ​这是一个 HTTPS 接口,开发者服务器使用登录凭证 code&nbsp;获取 session_key 和 openid。 session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。 小程序端的代码: [ja

【独立小程序商城】THINKPHP带后台管理+MYSQL数据库微信小程序商城系统源码.rar

【独立小程序商城】THINKPHP带后台管理+MYSQL数据库微信小程序商城系统源码 源码名称1:一套微信小程序商城源码+thinkPHP后台管理+Mysql数据库 环境要求1:php+mysql 源码名称2:微信小程序商城源码 LeanCloud 环境要求2:后端语言php 部署在LeanCloud, 不需要购买服务器 不需要购买域名 不需要部署https,可以用LeanCloud免费版,需求比较简单的用户完全可以满足!!!

thinkphp5.1下获取微信登录授权获取用户信息

后端代码 public function index() { $code = input('param.code'); $signature = input('param.signature'); $rawData = input('param.rawData'); $encryptedData = input('...

xuedong的博客 2013

基于thinkphp+uniapp的外卖点餐微信小程序和后台管理

功能: 小程序端(uniapp)可定位附近的店点餐,显示多少距离,商品价格信息,加入购物车,微信支付下单,订单管理,收货地址管理,用户注册微信授权登录; 后台管理端(thinkphp5)能看到订单信息,会员管理,外卖店铺管理,系统配置,管理员权限管理等

微信小程序注册登录获取用户信息thinkPHP5

需求 :小程序使用微信登录,后端获取用户详细(包含openid,unionid)写入数据库,并生成token 小程序登录获取token 1.通过wx.login获取到code, 2.wx.getUserInfo 获取到加密数据encryptedData ,及iv ,​ 3.将数据发送到后台换取token 小程序代码 var that = this; wx.getSetting({...

flysnownet的博客 9308

数据库实验报告--MySQL

数据库完整版报告--MySQL 包括数据库创建、表的创建、视图以及授权和触发器的创建等内容,全是精华!看完点赞加收藏O(∩_∩)O~。

Mortalz7 4924

ICNN实现入侵检测的思路与源码(CIC-IDS-2017)

基于ICNN实现入侵检测,可用于现实网络

t1274171989的博客 8415

tp5微信公众号获取用户openid_ThinkPHP5-微信小程序获取用户授权登录信息

因为最近在用TP5开发小程序,所以就上网搜索了一下TP框架对应的微信小程序获取授权信息的依赖,但是结果不太理想,于是就借鉴了laravel的iwanli/wxxcx依赖,自己手动写了一个TP5的获取信息接口,下面分享一下具体的实现流程。1.梳理首先要知道的是,小程序开发中,微信小程序授权时后台会获取的参数:encryptedData:加密后的用户信息code:登录凭证码iv:偏移向量,在解密是要用...

weixin_39753211的博客 785

Windows/Mac/Linux三系统保姆级教程:用llama.cpp将safetensors模型转gguf格式(附常见错误解决)

本文提供Windows、Mac和Linux系统下使用llama.cpp将safetensors模型转换为gguf格式的详细教程,涵盖环境配置、转换原理及常见错误解决方案。通过跨平台兼容性处理,帮助开发者高效完成模型格式转换,优化边缘计算性能。

weixin_29227425的博客 270

PHP(thinkphp)微信小程序获取openid和unionid

前提条件 1\保证小程序绑定在微信开发平台(不是微信公众号平台) 步骤 1\网上下载微信官方提供的PHP的demo,会有3个文件: 2\在微信小程序通过用户授权获得code,iv,encryptedData /** * 授权登录 */ authorLogin: function(e) { //这里就可以获取用户的基本信息了 let _this = this; consol...

abchuangyoucheng的博客 1785

ROS2机械臂MPC轨迹规划实战:从MoveIt 2插件配置到参数调优全流程

本文详细介绍了ROS2机械臂MPC轨迹规划的全流程,从MoveIt 2插件配置到参数调优。通过模型预测控制(MPC)技术,实现高精度运动控制,特别适合复杂装配任务。文章包含环境搭建、插件部署、参数设计及实战调优方法,帮助开发者快速掌握ROS2机械臂的MPC轨迹规划技术。

i0j1k2l3m的博客 206

Educoder:爬虫实战——求是网周刊文章爬取

第1关:获取新闻url importrequests importre defgeturls(): #**********Begin**********# url='http://www.qstheory.cn/dukan/qs/2014/2019-01/01/c_1123924172.htm' headers={ 'User-Agent':'Mozilla/5.0(Linux;Android6.0;Nexus5Buil...

weixin_46026136的博客 5254

authorization 怎么获取_基于ThinkPHP框架小程序获取微信用户信息并将存进数据库...

场景描述:在微信小程序中,我们可能用到很多种登陆方式,例如用手机作为标识登陆亦或者用微信信息作为标识登陆(但这写都要看你的项目需要),在这里我说一下如何使用微信信息作为标识登陆。编程思路:分三步走,第一步微信信息获取发送给后台-》第二步解密微信信息验证数据库-》登陆成功保存缓存并且更新token小程序前端处理//调用登录接口,获取 code wx.login({ success: ...

weixin_33305349的博客 815

Python APP反爬实战:Frida+Charles抓包,破解签名校验

Charles抓包定位参数 → jadx-gui反编译找函数 → Frida Hook拿密钥/规则 → Python还原签名算法;Frida的核心价值:Hook住APP的加密函数,拿到“输入(密钥/参数)+输出(签名)”,无需懂复杂的逆向底层;严格对齐APP的参数排序、拼接规则、加密算法,差一点都会验证失败。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1535

网站调用微信小程序授权登录示例

晓杰网站增加了多个登录方案包括公众号扫码登录,公众号快捷登录,QQ快捷登录,后面也研究了下小程序扫码登录方案,现在分享给大家。

Soujer 1665

Unreal5从入门到精通之如何录制360°VR全景视频

摘要:本文详细介绍了使用虚幻引擎(UE)生成360°全景视频的完整流程。首先需启用MovieRender Queue和Panoramic Capture插件,准备场景并设置相机序列。通过影片渲染队列选择8K分辨率输出PNG序列帧,利用ffmpeg工具转换为MP4格式,最终获得高精度全景视频。该方法适用于VR内容开发,能以较低性能消耗实现影院级画质,特别适合冥想类应用场景。教程涵盖从插件配置到后期合成的全链路操作,为开发者提供高效的全景内容生产解决方案。(150字)

TxNet 1402

改进YOLOv9的CT图像肺结节检测与分类算法:从原理到实战

本文将详细介绍如何改进YOLOv9算法,使其更好地适应CT图像肺结节检测与分类任务。我们将从数据集准备、模型改进、训练优化到最终部署,完整呈现一个端到端的深度学习项目,并提供完整的代码实现。

YOLO 188
上一篇: TP5.0整合webuploader实现多图片上传功能
下一篇: 微信小程序支付(2) tp5
苦艾酒丶
博客等级 码龄9年 0粉丝 99原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值