小程序登陆流程:
1、使用wx.login 获取code,
2、使用wx.getUserInfo 获取用户信息,然后上传到服务端,
3、服务端在通过codee获取access_token,openid 或 unionid
4、根据wx.getUserInfo 上传encryptdata 和 iv 解密获得用户的基本信息
5、执行注册流程返回注册信息

小程序端代码

// 登录wx.login({success: res => {console.log(res.code)// 获取用户信息wx.getUserInfo({success: rs => {console.log(rs)// 发送 res.code 到后台换取 openId, sessionKey, unionIdwx.request({url: 'http://api.****.com/v1/login/wx_login', method:"POST",data: {code: res.code, iv: rs.iv, encryptdata: rs.encryptedData},header: {'content-type': 'application/json' // 默认值},success(res) {console.log(res.data)}})}})},})

php服务端代码

 /*** 微信登陆* @Author wzb* @Date 2022/9/7 21:16*/function wx_login(){$encryptdata = input('encryptdata', '', 'strip_tags,trim');$iv = input('iv', '', 'strip_tags,trim');$code = input('code', '', 'strip_tags,trim');if (empty($code) || !$encryptdata || !$iv) {$this->ThrowExcption('请求数据不能为空');}$appId = config('wx_appid');$secret = config('wx_secret');// 根据拿的code来拿access_token$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appId}&secret={$secret}&js_code={$code}&grant_type=authorization_code";$return = $this->https_request($url);$jsonrt = json_decode($return, true);if (isset($jsonrt['errcode'])) {$this->ThrowExcption("微信授权发生错误:{$jsonrt['errmsg']},错误代码:" . $jsonrt['errcode']);}// 文档 https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages/user-info.html$sessionKey = $jsonrt['session_key'] ?? '';// 根据encryptdata 和 iv 解密获得用户的基本信息$pc = new WxBizDataCrypt($appId, $sessionKey);$errCode = $pc->decryptData($encryptdata, $iv, $data);if ($errCode != 0) {$this->ThrowExcption("数据解析错误,代码:" . $errCode);}$userInfo = json_decode($data);
//        $unionid = $userInfo->unionId;$openid = $userInfo->openId;$avatar = $userInfo->avatarUrl;$nickname = $userInfo->nickName;$data = [];$data['sex'] = max(0, intval($userInfo->gender)); // 用户的性别,值为 1 时是男性,值为 2 时是女性,值为 0 时是未知$data = ['nickname' => $nickname, 'avatar' => $avatar, 'openid' => $openid];// 业务代码 $data['uid'] = $uid; $this->successReturn($data);}function https_request($url, $data = null){$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)) {curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($curl);curl_close($curl);return $output;}

解密类

目录 my

  1. WXBizDataCrypt.php 文件
 <?phpnamespace my;class WxBizDataCrypt
{private $appid;private $sessionKey;/*** 构造函数* @param $sessionKey string 用户在小程序登录后获取的会话密钥* @param $appid string 小程序的appid*/public function __construct( $appid, $sessionKey){$this->sessionKey = $sessionKey;$this->appid = $appid;}/*** 检验数据的真实性,并且获取解密后的明文.* @param $encryptedData string 加密的用户数据* @param $iv string 与用户数据一同返回的初始向量* @param $data string 解密后的原文** @return int 成功0,失败返回对应的错误码*/public function decryptData( $encryptedData, $iv, &$data ){if (strlen($this->sessionKey) != 24) {return ErrorCode::$IllegalAesKey;}$aesKey=base64_decode($this->sessionKey);if (strlen($iv) != 24) {return ErrorCode::$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 ErrorCode::$IllegalBuffer;}if( $dataObj->watermark->appid != $this->appid ){return ErrorCode::$IllegalBuffer;}$data = $result;return ErrorCode::$OK;}
}/*** error code 说明.* <ul>*    <li>-41001: encodingAesKey 非法</li>*    <li>-41003: aes 解密失败</li>*    <li>-41004: 解密后得到的buffer非法</li>*    <li>-41005: base64加密失败</li>*    <li>-41016: base64解密失败</li>* </ul>*/
class ErrorCode
{public static $OK = 0;public static $IllegalAesKey = -41001;public static $IllegalIv = -41002;public static $IllegalBuffer = -41003;public static $DecodeBase64Error = -41004;
}

php微信小程序登陆完整流程相关推荐

  1. uniapp开发微信小程序/h5完整流程,含vant/uview(h5适配vw)

    theme: smartblue highlight: dark 创建项目 创建后的项目 此处插入一个坑 亦可以使用uniapp vue-cli 创建项目 vue create -p dcloudio ...

  2. uniCloud 微信小程序登陆全流程demo

    ps: Q群:743496144 博主一向不喜欢废话,直接说几个点,你悟了就直接去试,可以不用看完,还是得自己去试印象才深刻,博主写博文就怕自己以后忘记做个笔记顺便能帮一个是一个 1.你要获取unio ...

  3. mySQL微信小程序的div_做一个微信小程序的完整流程

    一. 引言 最近在和朋友探讨开发一个小程序,都说近一两年是小程序快速发展的一年,不懂技术的人,大部分零售店面都开始想做一个小程序帮助推广销售.虽然小程序技术门槛没那么高,但自己独立做一个小程序还是需要 ...

  4. 做一个微信小程序的完整流程

    一. 引言 最近在帮朋友开发一个小程序,都说今年是小程序快速发展的一年,不懂技术的人,大部分零售店面都开始想做一个小程序帮助推广销售.虽然小程序技术门槛没那么高,但自己独立做一个小程序还是需要了解的内 ...

  5. 微信小程序支付完整流程

    1.注册微信支付商户号(由上级或法人注册) 注册链接:https://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal#non ...

  6. 微信小程序登陆全流程及与PHP后端的交互

    总体的流程图 ,绿色代表小程序端,白色代表后端 演示:在点"获取用户信息"按钮后,会实现如下功能: 请求用户授权,用于获取用户信息 将用户相关信息,发送到应用服务器端api,实现登 ...

  7. 面试官:说说微信小程序的登录流程?

    一.背景 传统的web开发实现登陆功能,一般的做法是输入账号密码.或者输入手机号及短信验证码进行登录 服务端校验用户信息通过之后,下发一个代表登录态的 token 给客户端,以便进行后续的交互,每当t ...

  8. 从零开始实现微信小程序上线发布流程

    微信小程序上线发布流程 第一步:运行项目用微信开发者工具打开 第二步:确认一下是否是线上地址,appId是否有误,文件大小有无超出 2M(2048KB) 超出需要分包处理,或者查看是否存在大量本地图片 ...

  9. 微信小程序用户登录流程思路及主要代码

    微信小程序用户登录流程思路 由于微信官方不允许在刚进入小程序的时候,弹出用户登陆页面,需要在进入小程序后,用户主动点击才能进入登陆页面.此时,将会给小程序开发者在设计用户登陆页面时,带来一定的麻烦.现 ...

最新文章

  1. CF Educational Round 23 F.MEX Queries
  2. BZOJ4754 JSOI2016独特的树叶(哈希)
  3. 约瑟夫问题-学习笔记
  4. 手动爬虫之流程笔记1(python3)
  5. LeetCode MySQL 578. 查询回答率最高的问题
  6. erlang web服务器性能,100万并发连接服务器笔记之Erlang完成1M并发连接目标
  7. 647.回文字符串 (力扣leetcode) 博主可答疑该问题
  8. Linux kernel tick发起调度软中断函数调用图
  9. keepalived 二
  10. 二进位注册文件_手工添加注册表项文件reg执行出错,您在注册表编辑器中只能导入二进位注册文件...
  11. 【软件工程】北邮国际学院大三下期末复习
  12. IE-LAB网络实验室:思科CCNP考几门?
  13. c语言用乘法口诀编写三角形,九九乘法表怎么写本子上好看
  14. Django-登录注册
  15. python连通区域计算长度_连通区域算法小结
  16. ajax实现直播功能,jquery实现直播弹幕效果
  17. 报错Takes no arguements解决办法
  18. 有了LIGO,引力波不仅可以被探测,还可以被发射!
  19. 程序员必备技术类微信公众号
  20. Android VideoView播放网络视频简介

热门文章

  1. Section的背景色-UICollectionView
  2. 广西人工智能学会第一次会员代表大会召开
  3. [转]sourceinsight技巧
  4. 【scikit-learn】如何用Python和SciKit Learn 0.18实现神经网络
  5. 中企动力与九盈集团同行 布局互联网金融行业
  6. 知乎日报富文本处理android,有了这些app,工作效率啪啪啪
  7. linux多线程编程实现圆周率,linux环境下使用Monte Carlo计算π
  8. 安卓系统的指纹解锁_浅谈手机指纹识别的发展:从鸡肋到必备
  9. 解决localhost和IP访问在IE内核浏览器中访问不一致的办法
  10. fiddler限速_fiddler之弱网设置(模拟限速)