微信小程序授权获取用户信息和手机号码

1.微信官方文档

登录:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

手机号:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

2.获取用户手机号步骤

3.java后台 直接上干活

3.1 ApiLoginController

import com.alibaba.fastjson.JSONObject;
import com.dyt.common.HttpClientUtils;
import com.dyt.common.exception.DYTException;
import com.dyt.config.WeixinLoginProperties;
import com.dyt.utils.WXBizDataCrypt;
import com.dyt.vo.R;
import com.google.gson.Gson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@Api(tags = "微信小程序登录、获取手机号")
@RestController
public class ApiLoginController {@ApiOperation(value = "登录")@PostMapping("/wxlogin")public R callback(String code,String encryptedData,String iv){System.out.println("----------------------------------------------");//1.判断code是否合法if(StringUtils.isEmpty(code)){throw new DYTException(22008,"登录失败,尝试刷新重新登录!");}//2:通过code获取access_tokenString baseAccessTokenUrl = WeixinLoginProperties.WX_OPEN_GATEWAY+"?appid=%s" +"&secret=%s" +"&js_code=%s" +"&grant_type=authorization_code";String accessTokenUrl = String.format(baseAccessTokenUrl, WeixinLoginProperties.WX_OPEN_APP_ID, WeixinLoginProperties.WX_OPEN_APP_SECRET, code);String result = null;try {//执行请求,获取微信请求返回得数据  RestTemplate httpClientUtilsresult = new HttpClientUtils().get(accessTokenUrl);//对微信返回得数据进行转换Gson gson = new Gson();Map<String, Object> resultMap = gson.fromJson(result, HashMap.class);if (resultMap.get("errcode") != null) {throw new DYTException(22006,"微信登录出错!");}//解析微信用户得唯一凭证openidString openid = (String) resultMap.get("openid");if (StringUtils.isEmpty(openid)) {throw new DYTException(22009,"登录失败,尝试刷新重新登录!");}String session_key =(String)resultMap.get("session_key");String res = WXBizDataCrypt.decrypt1(encryptedData,session_key,iv);JSONObject json=JSONObject.parseObject(res);System.out.println("-----------json------------------"+json);if (!StringUtils.isEmpty(res)&&res.length()>0){String sex="0";if(json.getInteger("gender")==1){sex="男";}else if(json.getInteger("gender")==2){sex="女";}resultMap.put("avatarUrl",json.getString("avatarUrl"));resultMap.put("nickName",json.getString("nickName"));resultMap.put("sex",sex);}//封装返回return R.ok().data("resultMap",resultMap);}catch (Exception e){return R.error().code(601).message("微信解析失败");}}/*** 小程序授权获取手机号*/@ApiOperation(value = "获取手机号")@PostMapping("/getPhoneNumber")@ResponseBodypublic  Map<String,Object> getPhoneNumber(String encryptedData, String iv, String session_key) {Map<String,Object> map=new HashMap<>();String result= WXBizDataCrypt.decrypt1(encryptedData,session_key,iv);JSONObject json=JSONObject.parseObject(result);if (!StringUtils.isEmpty(result)&&result.length()>0) {//map.put("purePhoneNumber", json.getString("purePhoneNumber"));map.put("phoneNumber", json.getString("phoneNumber"));//map.put("countryCode", json.getString("countryCode"));map.put("msg","success");}map.put("msg","error");return map;}}

3.2 解密工具类

import org.apache.commons.codec.binary.Base64;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;public class WXBizDataCrypt {/*** AES解密** @param data   //密文,被加密的数据* @param key    //秘钥* @param iv     //偏移量* @return* @throws Exception*/public static String decrypt1(String data, String key,String iv){//被加密的数据byte[] dataByte = Base64.decodeBase64(data);//加密秘钥byte[] keyByte = Base64.decodeBase64(key);//偏移量byte[] ivByte = Base64.decodeBase64(iv);try {AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivByte);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);return new String(cipher.doFinal(dataByte),"UTF-8");} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (InvalidAlgorithmParameterException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}return null;}
}

微信小程序授权获取用户信息和手机号码相关推荐

  1. Java-(二)微信小程序授权获取用户信息和手机号码

    第一篇我们已经知道了微信小程序怎么授权登录获取用户信息. openId 和 unionId .下面将高速告诉大家,微信小程序如何授权获取用户信息和手机号码. 微信官方文档:https://develo ...

  2. 微信小程序授权 获取用户信息

    微信小程序授权 获取用户信息 小程序昵称突然变成了"微信用户",头像也不显示, <!-- 近期很多小伙伴通过该方法获取头像和昵称,代码也没有做改变,突然就变成了下面这样子 - ...

  3. uniapp微信小程序授权获取用户信息封装

    根据平台公告信息,2022年底wx.getUserProfile 与 wx.getUserInfo 接口被回收.新的小程序不能再授权获取头像和昵称:可以通过wx.login 接口直接获取用户的 ope ...

  4. 微信小程序制作——获取用户信息

    微信小程序制作--获取用户信息 1.获取用户信息 方式一 wxml <view bindtap="getUserName">获取当前用户名</view> j ...

  5. 支付宝小程序授权/获取用户信息

    支付宝小程序授权/获取用户信息 目录: 文章目录 支付宝小程序授权/获取用户信息 获取支付宝小程序授权token 解析支付宝小程序接口响应加密数据 获取支付宝小程序授权token ​ 前提准备工作: ...

  6. 【微信小程序】获取用户信息

    文章目录 获取用户信息 组件open-data button组件中的open-type 接口getUserProfile 查看授权结果 获取用户信息 组件open-data 组件 open-data用 ...

  7. 微信小程序如何获取用户信息

    自我介绍 我是IT果果日记,微信公众号请搜索 IT果果日记 一个普通的技术宅,定期分享技术文章,欢迎点赞.关注和转发,请多关照. 微信小程序用户基本信息有哪些? 除了基本信息,微信还会提供openId ...

  8. 玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)

    LZ-Says:总是要各种颠沛流离,才能换得片刻安宁.努力让自己变得更好,加油- 前言 前几天,完成了微信小程序的首章,学习起来,还是多多少少有点坑,不舒服. 今天我们继续开启微信小程序 Study ...

  9. 微信小程序开发----获取用户信息

    今天介绍两种微信小程序获取用户信息的方法 第一中直接授权获取(在同一页面之中): 首先在微信程序一个页面的WXML文件写入获取用户信息的按钮 <!-- bindTap用于绑定事件 --> ...

最新文章

  1. GARFIELD@01-18-2005
  2. hdu4685 最大匹配可能性
  3. Leecode之翻转整数
  4. OpenGL屏幕空间环境光遮挡的实例
  5. HDU - 6203 ping ping ping(LCA+dfs序+线段树)
  6. STL 之随机访问迭代器
  7. P1092虫食算-深度优先搜索+玄学剪枝
  8. protobuf java文档_Java中使用Protobuf
  9. html怎么把字转换为行内元素,什么是行内元素?
  10. AI初学者用什么软件?适合AI新手的9款人工智能开源软件
  11. 【学习笔记】尚硅谷-AJAX
  12. Cocos2D场景编辑器
  13. window certutil查看文件md5,校验文件MD5
  14. Nginx 限流配置-令牌桶算法
  15. 《打地鼠》游戏简单制作
  16. java 将doc格式的文档转化为pdf格式(实现Word文件预览)
  17. tp6动态连接数据库
  18. 数据科学中的离散概率分布与连续概率分布
  19. 离开外包之后,花了10000小时,最后我走进字节跳动拿到了offer
  20. 更快、更 Pythonic 的 PyTorch 2.0 | 非常值得期待

热门文章

  1. Windows CE在嵌入式工业控制系统中的应用思考
  2. php aes padding,PHP中的AES算法
  3. uniapp中的input,输入input回车事件和输入input事件
  4. 普通大学生自学java,怎样才能进入大厂?
  5. MySQL中的锁机制详细说明
  6. 爱施德继续盈利背后:业绩波动明显,投资一公司累计亏损约4亿元
  7. 认证性 不可否认性_一次性密码不提供不可否认性
  8. linux mutt安装配置_Linux配置msmtp+mutt发送邮件(可放在脚本中定时发送邮件)
  9. 暴走英雄坛服务器维护时间,暴走英雄坛1.4.1版本维护公告 两段前期支线剧情更新...
  10. 能用foreach遍历访问的对象需要实现____接口或声明____方法的类型