精华内容
下载资源
问答
  • 前端微信小程序获取code,后台使用asp获取session_key和openid;然后结合iv和encryptedData解密出微信用户手机号码【操作步骤】第1步:wx.login获取code第2步:传递code到服务器,获取session_key和openid第3步:...
  • 主要为大家详细介绍了Java解密微信小程序手机号的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • java解析的源码和小程序的源码,自己从项目中剥离出来的,肯定能用,有疑问私信,微信小程序获取各类信息(openid、session_key以及用户基本信息、解密手机号)
  • 主要介绍了微信小程序实现获取小程序码和二维码java接口开发,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 配置文件 WxConstant.java /** * wx 配置文件 * */ public class WxConstant { public static final String appid = "你的appid"; public static final String secret = "你的secret"; public static final ...

    配置文件 WxConstant.java

    /**
     * wx 配置文件
     * */
    public class WxConstant {
    
        public static final String appid = "你的appid";
        public static final String secret = "你的secret";
    
        public static final String AES = "AES";
        public static final String AES_CBC_PADDING = "AES/CBC/PKCS7Padding";
    
    }
    
    

    maven依赖引入

    <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.10</version>
            </dependency>
    
    

    Controller类 UserController.java

    @RestController
    @RequestMapping("/user")
    @CrossOrigin(origins = "*", maxAge = 3600)
    public class UserController {
    	@ApiOperation(value = "openid", notes = "获取openId的接口")
        @GetMapping("/auth")
        public Object auth(String code) {
            String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + WxConstant.appid + "&secret=" + WxConstant.secret + "&js_code=" + code + "&grant_type=authorization_code";
            Map<String, Object> map = new HashMap<>();
            String data = HttpUtils.sendGet(url, null);
            JSONObject jo = JSON.parseObject(data);
    
            map.put("code", 0);
            map.put("data", jo);
            map.put("msg", "调用成功");
    
            return map;
        }
    
        @ApiOperation(value = "权限获取用户手机号", notes = "权限获取用户手机号")
        @GetMapping("/auth/phone")
        public Object authPhone(String encryptedData, String session_key, String iv) {
            Map<String, Object> map = new HashMap<>();
            try {
                String result = WxUtils.wxDecrypt(encryptedData, session_key, iv);
                JSONObject json = JSONObject.parseObject(result);
                if (json.containsKey("phoneNumber")) {
                    String phone = json.getString("phoneNumber");
                    String appid = json.getJSONObject("watermark").getString("appid");
                    if (StringUtils.isNoneBlank(phone)) {
                        wxUserService.updateMobile(appid, phone);
                        map.put("code", 0);
                        map.put("msg", "成功");
                        map.put("data", "");
                    } else {
                        map.put("code", 4001);
                        map.put("msg", "失败!用户未绑定手机号");
                        map.put("data", "");
                    }
                } else {
                    map.put("code", 4001);
                    map.put("msg", "获取失败!");
                    map.put("data", "");
                }
            } catch (Exception e) {
                map.put("code", 4001);
                map.put("msg", "获取失败");
                map.put("data", "");
            }
            return map;
        }
    }
    

    手机号解密工具 WxUtils.java

    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.clunt.demo.constant.WxConstant;
    import org.apache.commons.codec.binary.Base64;
    
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    import java.security.AlgorithmParameters;
    import java.security.Key;
    import java.security.Security;
    
    /**
     * @author clunt
     * <p>微信手机号解密</p>
     * */
    
    public class WxUtils {
    
        /**
         *    * 微信 数据解密<br/>
         *    * 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充<br/>
         *    * 对称解密的目标密文:encrypted=Base64_Decode(encryptData)<br/>
         *    * 对称解密秘钥:key = Base64_Decode(session_key),aeskey是16字节<br/>
         *    * 对称解密算法初始向量:iv = Base64_Decode(iv),同样是16字节<br/>
         *    *
         *    * @param encrypted 目标密文
         *    * @param session_key 会话ID
         *    * @param iv 加密算法的初始向量
         *    
         */
        public static String wxDecrypt(String encrypted, String session_key, String iv) {
            String result = null;
            byte[] encrypted64 = Base64.decodeBase64(encrypted);
            byte[] key64 = Base64.decodeBase64(session_key);
            byte[] iv64 = Base64.decodeBase64(iv);
            try {
                init();
                result = new String(decrypt(encrypted64, key64, generateIV(iv64)));
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         *    * 初始化密钥
         *    
         */
    
        public static void init() throws Exception {
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
            KeyGenerator.getInstance(WxConstant.AES).init(128);
        }
    
        /**
         *    * 生成iv
         *    
         */
        public static AlgorithmParameters generateIV(byte[] iv) throws Exception {
            // iv 为一个 16 字节的数组,这里采用和 iOS 端一样的构造方法,数据全为0
            // Arrays.fill(iv, (byte) 0x00);
            AlgorithmParameters params = AlgorithmParameters.getInstance(WxConstant.AES);
            params.init(new IvParameterSpec(iv));
            return params;
        }
    
        /**
         *    * 生成解密
         *    
         */
        public static byte[] decrypt(byte[] encryptedData, byte[] keyBytes, AlgorithmParameters iv)
                throws Exception {
            Key key = new SecretKeySpec(keyBytes, WxConstant.AES);
            Cipher cipher = Cipher.getInstance(WxConstant.AES_CBC_PADDING);
            // 设置为解密模式
            cipher.init(Cipher.DECRYPT_MODE, key, iv);
            return cipher.doFinal(encryptedData);
        }
    
    }
    

    ***特别注意:***小程序前台在拿到手机号授权信息前,不可以执行重新获取code的操作。不然会提示 code is used error

    展开全文
  • java后台微信小程序获取手机

    千次阅读 2020-09-25 14:22:43
    现在我们利用合法的域名来获取手机的接口,是Ok的 话不多说,我们直接干代码 首先wxml文件显示的ui <view class='head head-height'> <block wx:if="{{phone==null||phone==''}}"> <view class=...

    首先我们获取手机号需要合法域名的比如(https://www.baidu.com)自己的域名

    在这里我们看,我这个请求地址是会提示不合法的,所以无法请求
    在这里插入图片描述
    现在我们利用合法的域名来获取手机的接口,是Ok的
    在这里插入图片描述
    在这里插入图片描述

    话不多说,我们直接干代码

    首先wxml文件显示的ui

      <view class='head head-height'>
        <block wx:if="{{phone==null||phone==''}}">
          <view class="userinfo">
            <image class="userinfo-avatar" src="../me/img/p.jpg" mode="cover"></image>
          </view>
          <button class="login-button head-height" open-type="getPhoneNumber" type='primary' bindgetphonenumber="getPhoneNumber" hover-class> 获取手机号登录 </button>
        </block>
        <block wx:else>
          <view class="userinfo">
            <image bindtap="bindViewTap" class="userinfo-avatar" src="../me/img/p.jpg" mode="cover"></image>
            <text class="userinfo-nickname">{{userName}}</text>
          </view>
        </block>
      </view>
      <view class="hr"></view>
    <block wx:if="{{phone==null||phone==''}}">
        <view><text>\n</text></view>
        <button open-type="getPhoneNumber" type='primary' bindgetphonenumber="getPhoneNumber">更换绑定手机</button>
        <text>\n</text>
        <button type="primary" bindtap='clearStorage'>退出登录</button>
      
        
    </block>
    <block wx:else>
    <view class='item'>
      <view class="title" style="margin-left:35%; font-size:20px;font-weight:bold">XX科技</view>
      <view class="detail2">
      </view>
    </view>
    <view class='item'>
      <view class="title">用户名称:{{userName}}</view>
      <view class="detail2">
      </view>
    </view>
    <view class='item'>
      <view class="title">用户别名:{{userid}}</view>
      <view class="detail2">
      </view>
    </view>
    <view class='item'>
      <view class="title">手机号码:{{phone}}</view>
      <view class="detail2">
      </view>
    </view>
    
    <view><text>\n</text></view>
    <button open-type="getPhoneNumber" type='primary' bindgetphonenumber="getPhoneNumber">更换绑定手机</button>
    <text>\n</text>
    <button type="primary" bindtap='clearStorage'>退出登录</button>
    
    </block>
    

    然后是wxss文件 就是样式

    .head-height {
      height: 240rpx;
      line-height: 240rpx;
      font-size: 25px;
    }
    
    .head {
      display:flex;
      width: 100%;
      background-color: #15c261;
      align-items: center;
    }
    
    .login-button {
      /* opacity: 0;  */
      width: 100%;
      /* position: fixed; */
      
    }
    
    .userinfo {
      display: flex;
      flex-direction: row;
      align-items: center;
      width: 100%;
      position: fixed;
    }
    
    .userinfo-avatar {
      width: 150rpx;
      height: 150rpx;
      margin: 30rpx;
      border-radius: 50%;
    }
    
    .userinfo-nickname {
      color: #333333;
      font-size: 25px;
    }
    
    /* 个人中心下面 */
     .hr {
      width: 100%;
      height: 15px;
      background-color: #f4f5f6;
    }
    
    .item {
      display: flex;
      flex-direction: row;
    }
    
    .title {
      padding-top: 15px;
      padding-bottom: 15px;
      padding-left: 15px;
      font-size: 15px;
    }
    
    .detail2 {
      font-size: 15px;
      position: absolute;
      right: 10px;
      height: 50px;
      line-height: 50px;
      color: #888;
    }
    
    .line {
      border: 1px solid #ccc;
      opacity: 0.2;
    }
    
    /* .userview{
      width: 80%;
      background-color: aqua;
    } */
    
    
    

    随后是我们主要的地方,请求方法的地方 微信小程序js文件

    //获取应用实例
    
    const app = getApp();
    Page({
      /**
       * 页面的初始数据
       */
      data: {
        // 用户登录信息
        userInfo: {},
        userName:"",
        userid:"",
        // 用户的openid
        userInfoid: "",
        // phone: wx.getStorageSync('phone'),
        phone:"",
        hasUserInfo: false,
        canIUse: wx.canIUse('button.open-type.getUserInfo'),
      
        
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function () {
        var that = this;
      getPhoneNumber: function (e) {
        var that = this;
        wx.login({
          success: res => {
            // 获取到用户的 code 之后:res.code
            console.log("用户的code:" + res.code);
            // 可以传给后台,再经过解析获取用户的 openid
            // 或者可以直接使用微信的提供的接口直接获取 openid ,方法如下:
            wx.request({
              method: "POST",
              //首先这里去得到当前用户的session_key(下面请求接口写你自己的地址)
              url: app.globalData.serverUrl+'/Asset/getsessionkey',
              data: {
                code:res.code
              },
              header: {
                'Content-Type': 'application/json' // 默认值
              },
              success: res => {
                // 获取到用户的 session_key
                console.log("用户的session_key:" + res.data.data);
              
                wx.checkSession({
                  success: function () {
                    var ency = e.detail.encryptedData;
                    var iv = e.detail.iv;
                    var sessionk = res.data.data;
                    if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
                      wx.showToast({
                        title: '您拒绝了授权',
                        icon: 'loading',
                        duration: 2000
                      })
    
                    } else {//同意授权
                    //如果同意了,就去解密并且获取用户手机号码
                      wx.request({
                        method: "POST",
                        url: app.globalData.serverUrl+'/Asset/WXgetPhone',  //请求的地址根据你自己实际情况来
                        data: {
                          encrypdata: ency,
                          ivdata: iv,
                          sessionkey: sessionk
                        },
                        header: {
                          'Content-Type': 'application/json' // 默认值
                        },
                        success: (res) => {
                          console.log("解密成功~~~~~~~将解密的号码保存到本地~~~~~~~~");
                          var phone = res.data.phoneNumber;
                           //1.存用户信息到本地存储(我这里存在本地,你也可以弹出来看一下)
                           wx.setStorageSync('phone',phone)
                          that.onLoad();
                        }, fail: function (res) {
                          console.log("解密失败~~~~~~~~~~~~~");
                        
                        }
                      });
    
                    }
    
                  },
    
                  fail: function () {
    
                    console.log("session_key 已经失效,需要重新执行登录流程");
    
                    that.wxlogin(); //重新登录
    
                  }
    
                });
    
    
              }
            });
          }
        });
     },
     onShow: function () {
       
     },
     clearStorage:function(e){
       var that = this;
      wx.showModal({
        title: '提示',
        content: '是否退出账号',
        success (res) {
          if (res.confirm) {
            wx.clearStorageSync();
            that.setData({
               userName:"",
               userid:"",
               phone:""
             })
            app.globalData.userid="";
            wx.switchTab({
              url: '../work/work'
            })
          } else if (res.cancel) {
            
          }
        }
      })
     },
    
    
    })
    

    下面看看我们获取请求的接口controller

    /**
     * 获取微信小程序手机号控制类
     */
    @Controller
    @RequestMapping("/Asset")
    public class AssetController {
        /**
         * 微信小程序登录获取session_key
         * https://api.weixin.qq.com/sns/jscode2session
         */
        @PostMapping(value = "/getsessionkey")
        @ResponseBody
        public BaseResponse getsessionkey(@RequestBody Map map)throws Exception {
    
            String appid = "wx860b3a275b1de0674";  //你自己的,这里我乱写的
            String secret = "f224f4720f28ced1ea5f51d19245c7e4d";  //你自己的,这里我乱写的
            String grant_type = "authorization_code";
            String js_code = String.valueOf(map.get("code"));
            String params = "appid=" + appid + "&secret=" + secret + "&js_code=" + js_code + "&grant_type="
                    + grant_type;
            // 发送请求
            String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);
            // 解析相应内容(转换成json对象)
            System.err.println(sr);
            JSONObject json = JSON.parseObject(sr);
            // 获取会话密钥(session_key)
            String session_key = json.get("session_key").toString();
            BaseResponse response = new BaseResponse(StatusCode.Success);
            response.setData(session_key);
            return response;
    
        }
        /**
         * 微信小程序
         * 解密并且获取用户手机号码
         * @param
         * @param
         * @param
         * @return
         * @throws
         */
        @PostMapping(value = "/WXgetPhone")
        @ResponseBody
        public String deciphering(@RequestBody Map map)throws Exception {
            byte[] encrypData = org.apache.commons.codec.binary.Base64.decodeBase64(String.valueOf(map.get("encrypdata")));
            byte[] ivData = org.apache.commons.codec.binary.Base64.decodeBase64(String.valueOf(map.get("ivdata")));
            byte[] sKey = Base64.decodeBase64(String.valueOf(map.get("sessionkey")));
            String decrypt = decrypt(sKey,ivData,encrypData);
            return decrypt;
    
        }
    //    微信小程序
        public static String decrypt(byte[] key, byte[] iv, byte[] encData) throws Exception {
            AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            //解析解密后的字符串
            return new String(cipher.doFinal(encData),"UTF-8");
        }
        }
    
    展开全文
  • 我没有做过微信小程序,我有一个接口,授权手机号码,今天看了很多笔记</strong></p> <p><strong>大致流程是这样:</strong></p> <p><strong>1.前端调接口,得到Code等返回信息...
  • 注意:目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。 官网地址如下: ...

    注意:目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。
    官网地址如下:
    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
    1.小程序授权拿到code

    wx.login({
      success (res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: 'https://test.com/onLogin',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
    

    2.小程序授权获取手机号标签拿到encryptedData与iv

    # 授权按钮,绑定用户点击后的方法 getPhoneNumber()
    <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
      js方法:
    getPhoneNumber: function (e) {
      // 参数e是绑定的授权方法自动传入过来的, 主要是为了拿到vi和encryptedData值从后台换取用户联系方式
      if ("getPhoneNumber:ok" != e.detail.errMsg){
        wx.showToast({
          icon:'none',
          title: '快捷登陆失败'
        })
        return;
      }
      var iv = e.detail.iv;
      var encryptedData = e.detail.encryptedData; 
      var code = this.data.wxCode;//小程序授权拿到的code 
      var _this = this; 
      api.sendPost({
        url: ‘’, //调用后台接口获取用户手机号码
        params:{
          encrypted: encryptedData,
          iv:iv,
          code:code
        },
        success:function(data){
         // 获取到的手机号码
          var phone = data.phone;
        },
        fail:function(msg){
       })
    }
    

    3.后台接口

    	/*
         *  获取小程序用户基本信息
         */
        @RequestMapping(value="code2Session", method = RequestMethod.GET)
        public ReturnData code2Session(HttpServletRequest req,String code,String encryptedData,String iv) throws Exception {
            String code = req.getParameter("code");
            //第一步:通过code换取网页授权access_token 
            String url = "https://api.weixin.qq.com/sns/jscode2session?appid=‘你的小程序appid’&secret=‘你的小程序密钥’&js_code="+code+"&grant_type=authorization_code";
            JSONObject jsonObject = WXAuthUtil.doGetJson(url);
            Map<String,String> map=new HashMap<>();
            map.put("openid",jsonObject.getString("openid"));
            map.put("unionid",jsonObject.getString("unionid"));
            map.put("session_key",jsonObject.getString("session_key"));    
            String sessionkey = jsonObject.getString("session_key");
            // 解密
            byte[] encrypData = Base64Utils.decodeFromString(encryptedData);
            byte[] ivData = Base64Utils.decodeFromString(iv);
            byte[] sessionKey = Base64Utils.decodeFromString(sessionkey);
            AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivData);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec keySpec = new SecretKeySpec(sessionKey, "AES");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);// 设置为解密模式
    
            String resultString = new String(cipher.doFinal(encrypData), "UTF-8");
            JSONObject object = JSONObject.parseObject(resultString);
            map.put("phone",object.getString("phoneNumber"));// 拿到手机号码
            return ReturnData.success(map);
        }
    
    展开全文
  • 微信小程序getPhoneNumber获取用户手机小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等, 有了这个组件可以快速获取微信绑定手机号码,无须用户填写。 1.getPhoneNumber这个组件通过button...
  • 1、适用于uniapp开发支付宝小程序 2、 组件 open-type=getAuthorize ,用于授权 3、当用户点击并同意之后,可以通过my.getPhoneNumber() 接口获取到支付宝服务器返回的加密数据
  • 1.微信官方api文档 ...2.获得结果 3.代码实现 WxPhoneUtil工具类,附带主方法测试 pom.xml加入 <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov

    1.微信官方api文档
    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
    在这里插入图片描述
    2.获得结果
    在这里插入图片描述
    3.代码实现
    WxPhoneUtil工具类,附带主方法测试
    pom.xml加入

    <dependency>
          <groupId>org.bouncycastle</groupId>
          <artifactId>bcprov-jdk15on</artifactId>
          <version>1.57</version>
    </dependency>
    
    package com.shifen.userservice.utils;
    
    import org.bouncycastle.jce.provider.BouncyCastleProvider;
    import org.bouncycastle.util.encoders.Base64;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    import java.security.Key;
    import java.security.Security;
    import java.util.Arrays;
    
    public class WxPhoneUtil {
        public static void main(String[] args) {
            String result = decryptData(
                    "前端传回",
                    "sessionKey登录时后台获取的",
                    "前端传回"
            );
            System.out.println("result = " + result);
        }
    
        public static String decryptData(String encryptDataB64, String sessionKeyB64, String ivB64) {
            return new String(
                    decryptOfDiyIV(
                            Base64.decode(encryptDataB64),
                            Base64.decode(sessionKeyB64),
                            Base64.decode(ivB64)
                    )
            );
        }
    
        private static final String KEY_ALGORITHM = "AES";
        private static final String ALGORITHM_STR = "AES/CBC/PKCS7Padding";
        private static Key key;
        private static Cipher cipher;
    
        private static void init(byte[] keyBytes) {
            // 如果密钥不足16位,那么就补足.  这个if 中的内容很重要
            int base = 16;
            if (keyBytes.length % base != 0) {
                int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);
                byte[] temp = new byte[groups * base];
                Arrays.fill(temp, (byte) 0);
                System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);
                keyBytes = temp;
            }
            // 初始化
            Security.addProvider(new BouncyCastleProvider());
            // 转化成JAVA的密钥格式
            key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
            try {
                // 初始化cipher
                cipher = Cipher.getInstance(ALGORITHM_STR, "BC");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 解密方法
         *
         * @param encryptedData 要解密的字符串
         * @param keyBytes      解密密钥
         * @param ivs           自定义对称解密算法初始向量 iv
         * @return 解密后的字节数组
         */
        private static byte[] decryptOfDiyIV(byte[] encryptedData, byte[] keyBytes, byte[] ivs) {
            byte[] encryptedText = null;
            init(keyBytes);
            try {
                cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivs));
                encryptedText = cipher.doFinal(encryptedData);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return encryptedText;
        }
    }
    
    

    4.业务层,根据自己业务需求

    @ApiOperation(value = "获取手机号", notes = "获取手机号")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "encryptedData", value = "encryptedData", required = true, paramType = "query", dataType = "string"),
                @ApiImplicitParam(name = "iv", value = "iv", required = true, paramType = "query", dataType = "string"),
                @ApiImplicitParam(name = "session_key", value = "session_key", required = true, paramType = "query", dataType = "string"),
        })
        @GetMapping("/user/getUserPhone")
        public Result getUserPhone(String encryptedData, String iv, String session_key) {
            try {
                UserVoDetail user = UserContextHolder.getInstance().getUser();
                Long gid = user.getUserId();
                String relust = WxPhoneUtil.decryptData(encryptedData, session_key, iv);
                Map<String, Object> map = JSON.parseObject(relust, HashMap.class);
                User user1 = userService.getUserInfo(gid);
                user1.setPhone(String.valueOf(map.get("phoneNumber")));
                userService.updateUserInfo(user1);
                return Result.success();
            } catch (Exception e) {
                e.printStackTrace();
                return Result.fail("系统出错");
            }
    
        }
    

    session_key在登陆时获取,可在登陆成功传给前端,调用方法是在由前端返回

    在这里插入图片描述

    获取到的结果字符串是这样的(以下是官方)

    {
        "phoneNumber": "13580006666",
        "purePhoneNumber": "13580006666",
        "countryCode": "86",
        "watermark":
        {
            "appid":"APPID",
            "timestamp": TIMESTAMP
        }
    }
    

    获取手机号,json字符串转map,根据key获取即可

     Map<String, Object> map = JSON.parseObject(relust, HashMap.class);
      String phone= String.valueOf(map.get("phoneNumber"))

    最终结果保存到数据库
    在这里插入图片描述

    展开全文
  • 可能会用到unionId这种功能,由于公司业务需要,我们需要使用unionId,具体使用方法,请参考微信开放平台的说明,但是在微信小程序的文档中只给出了部分语言实现的源码,竟然没有java的,小程序的开发人员是有多么懒...
  • 微信小程序获取手机号 (java解密)

    万次阅读 热门讨论 2019-04-10 10:19:05
    微信小程序获取手机号,官方文档里面有教程 官方教程https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html 官方也提供了解密方式(但是没有java的) 话不多说,先上自己的...
  • 微信小程序授权登录java代码微信小程序授权登录java代码 微信小程序授权登录java代码 微信小程序登录和普通后台系统登录不一样,因为这并不是你输入账户密码然后点击登录就登录了,而是通过微信授权,去换取openid,...
  • 微信小程序获取用户手机java后端

    千次阅读 2020-09-17 09:53:15
    小程序端会先调用登录:wx.login获取code,往后端传入的参数有:iv,encryptedData,code,这里注意用post结构体接受参数,不要去url中传,会导致无法准确解密。 代码: @RequestMapping(value = "obtainPhone",...
  • 微信官方文档 · 小程序 获取手机获取微信用户绑定的手机号,需先调用wx.login接口。 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 button 组件的点击来触发。 注意:目前该...
  • 下面将高速告诉大家,微信小程序如何授权获取用户信息和手机号码。 微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html Java后台接收小程序端传过来的 ...
  • LZ-Says:有些东西,真的是很矛盾,本来很简单的事儿,各自坚持,结果,不欢而散,不舍?...今天接到要实现一个解密微信小程序获取微信绑定的手机号接口,有点懵。 下面一起开始吧~ 解密获取绑定...
  • 微信小程序获取手机号后端JAVA解密流程代码

    千次阅读 热门讨论 2020-07-15 15:31:13
    小程序获取手机JAVA解密流程 微信官方文档获取手机号地址 微信官方文档获取手机号内容步骤 1.获取微信用户绑定的手机号,前端需先调用wx.login接口获取登录凭证code,...
  • * 获取微信小程序session_key * * @param jsonStr * @return */ @RequestMapping(value = "/getSessionKey", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
  • 微信小程序 开放数据校验与解密JavaJava微信小程序获取用户信息和手机号码解密Java版 一、依赖pom <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --> <dependency> ...
  • public String decrypt(String key, String iv, String encrypdata) throws Exception { AlgorithmParameterSpec ivSpec = new IvParameterSpec(Base64.decodeBase64(iv)); Cipher cipher = Ci...
  • 本篇记录说明 微信小程序获取用户手机号码,Java后台servlet解密 (第一次写博客,写得不好的地方见谅,面向新手,大佬请无视,不喜勿喷) 一、前言: 微信小程序有一个获取用户手机号码很便捷的接口,通过...
  • java后台实现微信小程序获取用户手机号1、控制层2、Service3、DecodeUtil工具类4、测试数据(已失效) 获取手机号 微信Api文档 1、控制层 @GetMapping("wx/decode") Object create(String encrypted, String ...
  • 如何用JAVA解密微信小程序获取手机号 1、加解密工具类 package ***; import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec...
  • 具体思路为:小程序前端点击按钮,弹出授权手机号窗口,用户允许后,js得到加密数据,加密向量,session_key,将这些信息传递到java后台解密,最终拿到电话号码。(直接通过js只能获取到加密数据,需要后台解密) ...
  • 微信官方说的特别详细(微笑),使用iv,session_key和encryptedData解密获取到用户手机号,然后官方提供的解密算法是这样的。 经过查找bai大du量zhi的dao资料,终于写出了解决办法T_T 上代码: @ApiOperation(...
  • 下载微信开发者工具 注册开发者 获取appid 和 appSecret 获取code 发送后台获取openid 和sessionKey(获取用户信息) ...获取用户信息java代码 Map<String, String> params = new HashMap<String...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,569
精华内容 37,827
关键字:

java获取小程序手机

java 订阅