微信小程序获取UnionId - Java后台解决

本文介绍了如何通过微信小程序获取UnionId,并在Java后台进行解密处理。首先需要在微信小程序平台上完成账号绑定,然后在小程序前端调用wx.getUserInfo接口获取encryptedData,通过HTTP请求发送到后台。后台控制器接收到请求后,利用AES解密工具类解密encryptedData以获取UnionId。
摘要由CSDN通过智能技术生成

UnionId 是微信平台用户的唯一标识,对于后台开发来说,UnionId 无疑是一个非常好用的东西。

前言

在获取 UnionId 之前,首先需要做下面的准备:

  • 在小程序平台完善自己的微信小程序信息

  • 在微信开放平台将自己的微信小程序进行绑定
    在这里插入图片描述
    (在绑定小程序中使用的小程序账号就是上一步注册小程序时所用的账号/邮箱)

一、编写微信小程序前端代码

wx.getUserInfo接口文档 中可以知道,UnionId 被加密在 wx.getUserInfo的回调函数返回值 encryptedData 中,所以我们只需要将 encryptedData 解密就可以获取到 UnionId 的值了。

1.编写 wxml button组件

编写 button 按钮且存在open-type="getUserInfo"属性,bindgetuserinfo 指定函数来接收回调函数返回值:

<view class="order_auth_wrap">
    <button type="primary" plain open-type="getUserInfo" 
    bindgetuserinfo="handleGetUserInfo">
        获取授权
    </button>
</view>

2.编写 js 请求发送逻辑代码

在js代码中,我封装了 wx.request 接口函数,但是参数类型是相同的(其中 url 就是将encryptedData, iv, code发送到自己后台服务器进行解密的请求路径):

import {
    login, request } from "../../utils/asyncWx.js";
import regeneratorRuntime from '../../lib/runtime/runtime';

//获取应用实例
const app = getApp()

Page({
   
  // 获取用户信息回调函数
  async handleGetUserInfo(e) {
   
    try {
   
      // 1.获取用户信息
      const {
    encryptedData, iv } = e.detail;
      // 2.获取小程序成功登陆后的code
      const {
    code } = await login();

      // 3.向后台发送 encryptedData, iv, code,后台通过解密之后获取 UserInfo
      const params = {
    encryptedData, iv, code };
      const header = {
    'content-type': 'application/x-www-form-urlencoded' };
      const result = await request({
    url: "***", data: params, method: "POST", header });
      console.log(result);
      const {
    unionId } = result.data;
      // 4.将 unionId 保存到全局变量中
      app.globalData.unionId = unionId;
      // 5.跳转回上一层页面
      wx.navigateBack({
   
        delta: 1
      });
    } catch (error) {
   
      console.log(error);
    }
  }
})

二、后台解密Controller实现

1.处理前端发送的 url 请求 controller:

package com.kiger.controller;

import com.alibaba.fastjson.JSONObject;
import com.kiger.Utils.AesCbcUtil;
import com.kiger.Utils.HttpRequest;
import com.kiger.entities.CommonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author zk_kiger
 * @date 2020/4/18
 */

@RestController
@Slf4j
@RequestMapping("/api")
public class ConsumerController {
   

    @PostMapping("/getUserInfo")
    public CommonResult<Map> getUserInfo(String encryptedData, String iv, String code)<
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值