具体思路为:小程序前端点击按钮,弹出授权手机号窗口,用户允许后,js得到加密数据,加密向量,session_key,将这些信息传递到java后台解密,最终拿到电话号码。(直接通过js是获取不到的)

wxml按钮的代码为:

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号码</button>

核心为open-type="getPhoneNumber"。

js代码:

 getPhoneNumber:function(e){console.log(e.detail);//你可以输出看一下e.detail的内容if (e.detail.errMsg =="getPhoneNumber:ok"){//同意授权手机号//请求后台解密wx.request({url: app.globalData.host + '/xx/xxxx',data: {encryptedData: e.detail.encryptedData,//加密数据iv: e.detail.iv,//向量session_key: wx.getStorageSync("session_key")//秘钥,在登录的时候可以得到,可以参考本人的博客,微信小程序实现登录},method: 'POST',header: {'content-type': 'application/x-www-form-urlencoded'},success: function (res) {console.log("获取电话号码成功" + res.data);}})}},

java后台解密代码:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.apache.ibatis.annotations.Param;
import javax.servlet.http.HttpServletRequest;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Security;import org.bouncycastle.jce.provider.BouncyCastleProvider;
import com.alibaba.fastjson.JSONObject;/**所需的maven依赖包
<!-- 阿里JSON解析器 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!-- bouncycastle--><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.54</version></dependency>**//*******************************小程序********************************/@PostMapping("/xx/xxxx")@ResponseBodypublic String mini_getPhone(HttpServletRequest request,@Param("encryptedData")String encryptedData,@Param("iv")String iv,@Param("session_key")String session_key){//JSONObject obj=getPhoneNumber(session_key,encryptedData,iv);//解密电话号码//System.out.println(obj);String sphone=obj.get("phoneNumber").toString();return sphone;}//解析电话号码public JSONObject getPhoneNumber(String session_key, String encryptedData, String iv) {byte[] dataByte = Base64.decode(encryptedData);byte[] keyByte = Base64.decode(session_key);byte[] ivByte = Base64.decode(iv);try {int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}// 初始化Security.addProvider(new BouncyCastleProvider());Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");parameters.init(new IvParameterSpec(ivByte));cipher.init(Cipher.DECRYPT_MODE, spec, parameters);byte[] resultByte = cipher.doFinal(dataByte);if (null != resultByte && resultByte.length > 0) {String result = new String(resultByte, "UTF-8");return JSONObject.parseObject(result);}} catch (Exception e) {e.printStackTrace();}return null;}

原创不易,转载请注明出处,谢谢!

微信小程序实现授权用户绑定的手机号,后台java解密相关推荐

  1. 基于微信小程序的家政服务预约系统(后台Java+SSM+MySQL)

    目 录 摘 要 I ABSTRACT II 1绪论 1 1.1选题背景及意义 1 1.2研究现状 1 1.3研究主要内容 2 2系统工具 3 2.1 Java语言 3 2.3 Vue.js框架 4 2 ...

  2. 微信小程序如何获取用户绑定手机号

    简单说:(直接撸步骤...) 1.用户需要调用wx.login()方法,来拿到用户登录凭证code. wx.login({ success:function(res){ console.log('lo ...

  3. 微信小程序python解析获取用户手机号_微信小程序如何获取用户绑定手机号

    简单说:(直接撸步骤...) 1.用户需要调用wx.login()方法,来拿到用户登录凭证code.wx.login({ success:function(res){ console.log('log ...

  4. uniapp 开发微信小程序如何授权用户信息

    <template><view class="content"><view @click="wxGetUserInfo">授 ...

  5. 微信小程序开发之——用户登录-开放数据校验与解密(6)

    一 概述 小程序端获取到的用户信息通过wx.request发送给开发者服务器 开发者服务器无法辨别数据的真伪(如发送虚假用户信息) 小程序提供了开发数据的校验和解密机制 二 获取用户信息 2.1 代码 ...

  6. 微信小程序订阅消息推送(附带后台java代码)

    官方文档: 小程序前端:点击进入 小程序服务端:点击进入 一,代码实现(后端) ①定义实体类 package com.saic.fin.system.sendInfo;import lombok.Da ...

  7. uniapp 微信小程序中授权用户手机号码

    <button class="list-btn" open-type="getPhoneNumber"@getphonenumber="onGe ...

  8. 微信小程序2022最新用户信息授权设置

    微信小程序2022最新用户信息授权设置 微信小程序中 用户信息授权 一直是一个非常重要的功能,它有着提升用户体验.进行用户身份认证.便于开发者进行数据分析等作用. -- 但是用户授权功能涉及到用户隐私 ...

  9. 微信小程序自定义授权弹框

    微信小程序自定义授权弹框 最近微信获取用户信息的接口有调整,就是这货:wx.getUserInfo(OBJECT),文档描述如下: 此接口有调整,使用该接口将不再出现授权弹窗,请使用 <butt ...

最新文章

  1. centos 删除crontab_centos crontab(定时任务) 使用
  2. this keyword details
  3. 【 FPGA 】FIR 滤波器之滤波器的系数数据(Filter Coefficient Data)
  4. stm32与arm7比较(经典)
  5. ubuntu/deepin 禁用IPV6
  6. jdk8集合类流_JDK 8中的流驱动的集合功能
  7. 搜索引擎关键词劫持之php篇(源码与分析)
  8. 【Oracle】重置参数
  9. php 相对时间,php返回相对时间(如:20分钟前,3天前)的方法
  10. Mac使用Docker搭建python测试执行环境
  11. HDU 2553(N皇后问题)
  12. 摩拜单车2019春招笔试题
  13. Python基础学习之文件(1)
  14. ubuntu16.04 设置动态ip和静态ip及route命令的使用
  15. 根号二怎么不用计算机算,[转载]开根号,不用计算器你会么?
  16. 卸载wps后,office图标显示异常、变成白板
  17. 2021年校招,最值得加入的互联网公司有哪些?
  18. EXCEL的扩展名xls与xlsm有啥区别
  19. 2022.08.03 第三组 高小涵
  20. 尚硅谷 jQuery 笔记(张晓飞 2018)

热门文章

  1. python爬虫(个人学习笔记)
  2. 骨传导耳机哪款音质更好、音质较好的骨传导蓝牙耳机推荐
  3. C语言买金鱼问题答案,鱼食喂太多鱼缸里养的金鱼容易死掉因为什么 蚂蚁庄园1月18日答案...
  4. 中秋节2007中秋节中秋祝福
  5. 学python选什么专业好就业_2020男生学什么专业好就业工资高
  6. ubuntu16.04安装NVIDIA显卡驱动和C++开发环境配置方法
  7. 玩游戏显示连接主服务器超时,一加7玩和平精英登录游戏后进不去,显示与服务器连接超时...
  8. 【HDU】4859海岸线-最小割最大独立点权变形
  9. 『线程池』在.NET中如何优雅地调优ThreadPool
  10. 宋仲基太阳的后裔头像 撩到你了吗