微信小程序开发笔记 进阶篇②——多个微信小程序一个用户体系,同一个UnionID

一、前言

微信小程序开发笔记——导读

二、微信开放平台绑定小程序

微信官方文档:UnionID 机制说明

  • 我们目前有一个微信开放平台,两个微信小程序,一个自己的后台服务器,没有公众号。
  • 所以先登录微信开放平台 — 管理中心 — 小程序 — 绑定小程序
    • 然后走第一条途径调用接口 wx.getUserInfo,从解密数据中获取 UnionID。
    • 具体的方法如下。

在这里插入图片描述

三、微信小程序login和getUserInfo

  • 调用之前,记得要获取到用户授权
    wx.login({
      success: function(res) {
        if (res.code) {
          var code = res.code
          wx.getUserInfo({
            success: function(res) {
              //发起网络请求
              wx.request({
                url: 'https://yourHostName.com/login',
                data: {
                  code: code,
                  rawData: res.rawData,
                  signature: res.signature,
                  iv: res.iv
                },
                success: function(res) {
                    console.log("login success", res)
                }
              })
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

四、后台请求auth.code2Session

微信官方文档:auth.code2Session

  • 如果我们有公众号,那么到这一步就结束了,直接可以拿到unionid
  • 但是我们没有,那就只能拿session_key和wx.getUserInfo获取的加密数据,进行进一步的解密得到unionid
    在这里插入图片描述

五、后台解密开放数据

微信官方文档:服务端获取开放数据

  • 其中微信官网给了四个语言的示例代码
  • 以Node.js为例,看到代码还是相对简单的,将encryptedData解密成开放数据,其中就包含我们需要的unionid
    在这里插入图片描述
var WXBizDataCrypt = require('./WXBizDataCrypt')

var appId = 'wx4f4bc4dec97d474b'
var sessionKey = 'tiihtNczf5v6AKRyjwEUhQ=='
var encryptedData = 
	'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM'+
	'QmRzooG2xrDcvSnxIMXFufNstNGTyaGS'+
	'9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+'+
	'3hVbJSRgv+4lGOETKUQz6OYStslQ142d'+
	'NCuabNPGBzlooOmB231qMM85d2/fV6Ch'+
	'evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6'+
	'/1Xx1COxFvrc2d7UL/lmHInNlxuacJXw'+
	'u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn'+
	'/Hz7saL8xz+W//FRAUid1OksQaQx4CMs'+
	'8LOddcQhULW4ucetDf96JcR3g0gfRK4P'+
	'C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB'+
	'6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns'+
	'/8wR2SiRS7MNACwTyrGvt9ts8p12PKFd'+
	'lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV'+
	'oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG'+
	'20f0a04COwfneQAGGwd5oa+T8yO5hzuy'+
	'Db/XcxxmK01EpqOyuxINew=='
var iv = 'r7BXXKkLb8qrSNn05n0qiA=='

var pc = new WXBizDataCrypt(appId, sessionKey)

var data = pc.decryptData(encryptedData , iv)

console.log('解密后 data: ', data)
// 解密后的数据为
//
// data = {
//   "nickName": "Band",
//   "gender": 1,
//   "language": "zh_CN",
//   "city": "Guangzhou",
//   "province": "Guangdong",
//   "country": "CN",
//   "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0",
//   "unionId": "ocMvos6NjeKLIBqg5Mr9QjxrP1FA",
//   "watermark": {
//     "timestamp": 1477314187,
//     "appid": "wx4f4bc4dec97d474b"
//   }
// }

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
统一多个微信小程序一个网页端管理系统的用户登录,你可以使用微信开放平台提供的授权登录功能,将微信小程序和网页端管理系统的用户登录都绑定在同一个微信开放平台账号下。这样,用户只需要在微信开放平台登录一次,就可以在不同的应用中共享登录状态。 在MySQL中,你可以创建一个包含以下列的表来存储用户信息: ``` CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, openid VARCHAR(50) NOT NULL, unionid VARCHAR(50) NOT NULL, nickname VARCHAR(50) NOT NULL, avatar VARCHAR(255) NOT NULL, app_id VARCHAR(50) NOT NULL ); ``` 这个表包含以下列: - `id`:自增长的用户ID,作为主键。 - `openid`:用户微信小程序中的唯一标识。 - `unionid`:用户在微信开放平台中的唯一标识。 - `nickname`:用户昵称。 - `avatar`:用户头像地址。 - `app_id`:存储用户所属的应用的ID,可以是微信小程序或网页端管理系统的ID。 在这个表中,你可以将所有应用的用户信息存储在同一个表中,通过`app_id`字段来区分不同的应用。通过微信开放平台提供的授权登录功能,你可以在用户登录时获取到用户的`openid`和`unionid`,并将其存储到这个表中。 在用户登录时,你可以根据用户的`openid`或`unionid`查询该用户是否存在,并且该用户所属的应用是否正确。如果存在,则可以在MySQL中存储登录状态,以便用户在不同的应用中共享登录状态。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值