微信小程序登录思路和代码

icy2003 程序 2020-04-16 18:51:00 196 0条

关键词:微信小程序、登录

83518-b522pgt5cw.png

事先声明:

  1. 微信经常改接口是正常操作,一切以微信最新文档为主。
  2. php 代码都会整合在 icy2003/php 里,如果正式版里没有相关代码,就先使用开发版。
    • 正式版:composer require icy2003/php ~1.0
    • 开发版:composer require icy2003/php dev-dev

思路

小程序登录流程:传送门

  1. 使用 wx.login() 获取 code。
  2. 拿到 code 后,服务端调用 code2Session 获得 session_key。
  3. 服务端调用 getAccessToken,解密后获得 UnionID 作为开发者系统里用户的唯一标识。
  4. 通过 UnionID 查询开发者系统里的用户进行登录。

代码

前端以 uniapp 为例子。

参考接口:

模板代码

<template>
    <view class="container">
        <view class="wrapper">
            <view class="info-item">
                <open-data type="userAvatarUrl" class="avatarurl"></open-data>
            </view>
            <view class="info-item">
                <open-data type="userNickName"></open-data>
            </view>
            <button open-type="getUserInfo" @getuserinfo="getUserInfo">授权</button>
        </view>
    </view>
</template>

javascript

methods: {
    getUserInfo() {
        wx.login({
            success: (loginResult => {
                wx.getUserInfo({
                    success: (userInfoResult => {
                        uni.request({
                            url: url,// 服务端获取 UnionID 请求
                            data:{
                                code: loginResult.code,
                                encryptedData: userInfoResult.encryptedData,
                                iv: userInfoResult.iv,
                            },
                            success: (res => {
                                this.login(res.data); // 保存自定义的登录信息
                            })
                        })
                    }),
                })
            })
        })
    }
}

php

以下涉及的类都在 icy2003/php 里。

该类命名空间为:icy2003\php\iapis\wechat\miniprogram\Auth

$auth = new Auth($appid, $secret);

先从数据库或者缓存里检查 access_token 是否过期,如果过期,重新获取并保存最新的。

$auth->getAccessToken();
$accessArray = $auth->toArray(); // 'access_token', 'expires_in'

根据 code 获取 session_key。

$auth->code2Session($code);
// 此处可能有 UnionID,但可能没有。
$codeArray = $auth->toArray(); // 'openid', 'session_key', 'unionid'

该类命名空间为:icy2003\php\iapis\wechat\miniprogram\DataCrypt

$dataCrypt = new DataCrypt($appid);
$dataCrypt->decrypt($encryptedData, $iv, $sessionKey); // 这几个前端都有传。
$data = $dataCrypt->toArray();

返回数据里有用户的头像昵称等信息,并且稳定获得 UnionID,可用于创建或者登录用户。

到这里,微信小程序的登录就完成了。

标签: php, 微信, javascript

非特殊说明,本博所有文章均为博主原创。