php微信小程序登陆完整流程

这篇具有很好参考价值的文章主要介绍了php微信小程序登陆完整流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

小程序登陆流程:
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, unionId
            wx.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文章来源地址https://www.toymoban.com/news/detail-577415.html

  1. WXBizDataCrypt.php 文件
 <?php


namespace 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微信小程序登陆完整流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序支付完整流程

    1、注册微信支付商户号(由上级或法人注册) 注册链接:https://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal#none 此商户号,需要由主管及更上级领导进行注册,会成为公司收款账户 企业注册需要材料:营业执照,对公银行账户信息,法人身份证 2、注册小程序账号(由上级或

    2024年02月10日
    浏览(36)
  • php版 短信跳转微信小程序

    实现这功能首先,小程序端添加业务域名  php代码 下面使用js的 location.href location.href = \\\'https://***.***.com\\\' 我前端用的是uniapp,vue的话要安装axios或者jq 短信内容放前端链接地址,这样就可以通过打开游览器跳转到小程序了 注意 1.必须是发布的小程序才会被唤醒 2.接口有上限,

    2024年02月09日
    浏览(37)
  • 微信小程序-微信小程序登录流程(一)

    微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用 冷启动: 小程序首次打开或销毁后再次被打开,此时小程序需要重新加载启动,即冷启动。会检查小程序是否

    2024年02月11日
    浏览(30)
  • 微信小程序蓝牙授权完整流程

            1.1 authorize:                 提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。更多用法详见 用户授权。

    2024年04月27日
    浏览(38)
  • PHP 合并图片,微信小程序合并海报,合并文字

    //业务需求:我们需要一个微信小程序码,但是是需要提供给别人扫码的但是只有一个纯粹的小程序码是不好看的,所以需要推广的海报图片。再结合文字   最终效果     准备工作  1、需要海报的底图  2、小程序码的图片  代码部分结合YII2但不影响使用 完整过程 第一步:

    2024年02月08日
    浏览(53)
  • 微信小程序使用腾讯地图完整流程

    前言:开发小程序需要得到定位和位置的省市区文字信息,看了所有的文章都没有一个完整和像样的,全是copy来,copy去的文章 - _ -!,一怒之下,开始了自己的踩坑之路 腾讯地图地址:腾讯位置服务 - 立足生态,连接未来 1.常规的申请账号登录 2.新建应用  3.点击添加key  

    2023年04月09日
    浏览(36)
  • 微信小程序JSAPI下单支付PHP前后端教程

    准备数据: 微信支付API证书,微信支付商户号,小程序appid,微信支付API证书序列号 获取微信支付api证书教程:如何下载微信支付证书(API证书)_荒~的博客-CSDN博客_微信支付证书 获取微信支付API证书序列号:点击管理证书即可看到   第一步:生成预支付交易单 参考文档:

    2024年02月11日
    浏览(39)
  • 基于php微信小程序共享洗衣系统设计与实现

    开发概要 开发操作系统:windows10 + 4G内存 + 500G 小程序开发:微信开发者工具(MINA框架) 后台环境:IIS +PHP 后台开发语言:PHP 后台开发工具:Dreamweaver +PhpStorm 数据库:mysql8 数据库管理工具:navicat 其他开发语言:html + css +javascript

    2024年02月11日
    浏览(33)
  • 基于php微信小程序座位预约系统设计与实现

    开发概要 开发操作系统:windows10 + 4G内存 + 500G 小程序开发:微信开发者工具(MINA框架) 后台环境:IIS +PHP 后台开发语言:PHP 后台开发工具:Dreamweaver +PhpStorm 数据库:mysql8 数据库管理工具:navicat 其他开发语言:html + css +javascript

    2024年02月11日
    浏览(47)
  • 基于php微信小程序就餐预约系统设计与实现

    开发概要 开发操作系统:windows10 + 4G内存 + 500G 小程序开发:微信开发者工具(MINA框架) 后台环境:IIS +PHP 后台开发语言:PHP 后台开发工具:Dreamweaver +PhpStorm 数据库:mysql8 数据库管理工具:navicat 其他开发语言:html + css +javascript

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包