日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

微信小程序獲取手機(jī)號,后端JAVA解密流程代碼

瀏覽:213日期:2022-05-26 11:52:55

小程序獲取手機(jī)號,后端JAVA解密流程代碼

微信官方文檔獲取手機(jī)號流程地址,先看下最好方便理解下面步驟實(shí)現(xiàn)思路,步驟如下

1.前端需先調(diào)用官方wx.login接口獲取登錄憑證code。2.后端接收code 調(diào)用官方接口地址獲取用戶秘鑰 sessionKey。3.前端通過官方getPhoneNumber獲取encryptedData,iv4.前端通過參數(shù)**【encryptedData】 、【iv】 、【sessionKey】** 發(fā)送請求后端接口,解密用戶手機(jī)號

小程序獲取sessionkey詳細(xì)接口文檔

后端工作如下,

1.參數(shù)code 解密出sessionKey {“session_key”:“eF9PAi5P7ZbSaQqkGzEY5g==”,“openid”:“otJ1I4zMSFGDtk7C33O_h6U3IRK8”} 2.參數(shù)sessionKey,iv,encryptedData 解密出手機(jī)號

代碼如下:

下面工具類很全,放心代碼必須全,良心教程。

業(yè)務(wù)代碼Controller

package com.df.detection.controller;import com.df.detection.base.entity.ResultBean;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import org.apache.commons.codec.binary.Base64;import org.json.JSONException;import org.springframework.web.bind.annotation.*;import java.io.UnsupportedEncodingException;import java.security.InvalidAlgorithmParameterException;import org.json.JSONObject;/** * @Author Songzhongjin * @Date 2020/7/15 10:09 * @Version 1.0 */@Api(value = '小程序登錄授權(quán) Controller',tags = {'小程序登錄授權(quán)接口'})@RestController@RequestMapping('/app')public class APPController { /** * 微信小程序登錄獲取 * 獲取session_key * @param * @return */ @ResponseBody @PostMapping('/initWxLogin') @ApiImplicitParams({ @ApiImplicitParam(name = 'js_code', value = '登錄時獲取的code',paramType = 'form', dataType = 'string', required = true) }) public ResultBeaninitWxLogin(@RequestParam(value = 'js_code', required = true) String js_code) throws JSONException { //測試數(shù)據(jù)code// js_code = '081ZQ3f91fr9VM1HYdb91y93f91ZQ3fU'; //微信獲取session_key接口地址 String wxLoginUrl = 'https://api.weixin.qq.com/sns/jscode2session'; //接口參數(shù) String param = 'appid=小程序id&secret=小程序secret&js_code=' + js_code + '&grant_type=authorization_code'; //調(diào)用獲取session_key接口 請求方式get String jsonString = GetPostUntil.sendGet(wxLoginUrl, param); System.out.println(jsonString); //因?yàn)閖son字符串是大括號包圍,所以用JSONObject解析 JSONObject json = new JSONObject(jsonString); //json解析session_key值 String session_key = json.getString('session_key'); System.out.println('session_key:' + session_key); //返回給前端 return ResultBean.success('session_key',session_key); } /** * 解密小程序用戶敏感數(shù)據(jù) * * @param encryptedData 明文 * @param iv 加密算法的初始向量 * @param sessionKey 用戶秘鑰 * @return */ @ResponseBody @PostMapping(value = '/decodeUserInfo') @ApiImplicitParams({ @ApiImplicitParam(name = 'encryptedData', value = '包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù)',paramType = 'form', dataType = 'string', required = true), @ApiImplicitParam(name = 'iv', value = '加密算法的初始向量',paramType = 'form', dataType = 'string', required = true), @ApiImplicitParam(name = 'sessionKey', value = '用戶秘鑰',paramType = 'form', dataType = 'string', required = true) }) public ResultBean decodeUserInfo(@RequestParam(required = true, value = 'encryptedData') String encryptedData, @RequestParam(required = true, value = 'iv') String iv, @RequestParam(required = true, value = 'sessionKey') String sessionKey ) throws UnsupportedEncodingException, InvalidAlgorithmParameterException, JSONException { //AESUtils微信獲取手機(jī)號解密工具類 AESUtils aes = new AESUtils(); //調(diào)用AESUtils工具類decrypt方法解密獲取json串 byte[] resultByte = aes.decrypt(Base64.decodeBase64(encryptedData), Base64.decodeBase64(sessionKey), Base64.decodeBase64(iv)); //判斷返回參數(shù)是否為空 if (null != resultByte && resultByte.length > 0) { String jsons = new String(resultByte, 'UTF-8'); System.out.println(jsons); JSONObject json = new JSONObject(jsons); //json解析phoneNumber值 String phoneNumber = json.getString('phoneNumber'); System.out.println('phoneNumber:' + phoneNumber); return ResultBean.success('手機(jī)號', phoneNumber); } return ResultBean.error(500,'session_key:失敗'); }}

工具類代碼如下

package com.df.detection.controller;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java.net.URLConnection;import java.util.List;import java.util.Map;/** * @Author Songzhongjin * @Date 2020/7/15 10:37 * @Version 1.0 */public class GetPostUntil { /** * 向指定URL發(fā)送GET方法的請求 * * @param url * 發(fā)送請求的URL * @param param * 請求參數(shù),請求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。 * @return URL 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果 */ public static String sendGet(String url, String param) { String result = ''; BufferedReader in = null; try {String urlNameString = url + '?' + param;URL realUrl = new URL(urlNameString);// 打開和URL之間的連接URLConnection connection = realUrl.openConnection();// 設(shè)置通用的請求屬性connection.setRequestProperty('accept', '*/*');connection.setRequestProperty('connection', 'Keep-Alive');connection.setRequestProperty('user-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)');// 建立實(shí)際的連接connection.connect();// 獲取所有響應(yīng)頭字段Map<String, List<String>> map = connection.getHeaderFields();// 遍歷所有的響應(yīng)頭字段for (String key : map.keySet()) { System.out.println(key + '--->' + map.get(key));}// 定義 BufferedReader輸入流來讀取URL的響應(yīng)in = new BufferedReader(new InputStreamReader( connection.getInputStream()));String line;while ((line = in.readLine()) != null) { result += line;} } catch (Exception e) {System.out.println('發(fā)送GET請求出現(xiàn)異常!' + e);e.printStackTrace(); } // 使用finally塊來關(guān)閉輸入流 finally {try { if (in != null) { in.close(); }} catch (Exception e2) { e2.printStackTrace();} } return result; } /** * 向指定 URL 發(fā)送POST方法的請求 * * @param url * 發(fā)送請求的 URL * @param param * 請求參數(shù),請求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。 * @return 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果 */ public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ''; try {URL realUrl = new URL(url);// 打開和URL之間的連接URLConnection conn = realUrl.openConnection();// 設(shè)置通用的請求屬性conn.setRequestProperty('accept', '*/*');conn.setRequestProperty('connection', 'Keep-Alive');conn.setRequestProperty('user-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)');// 發(fā)送POST請求必須設(shè)置如下兩行conn.setDoOutput(true);conn.setDoInput(true);// 獲取URLConnection對象對應(yīng)的輸出流out = new PrintWriter(conn.getOutputStream());// 發(fā)送請求參數(shù)out.print(param);// flush輸出流的緩沖out.flush();// 定義BufferedReader輸入流來讀取URL的響應(yīng)in = new BufferedReader( new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) { result += line;} } catch (Exception e) {System.out.println('發(fā)送 POST 請求出現(xiàn)異常!'+e);e.printStackTrace(); } //使用finally塊來關(guān)閉輸出流、輸入流 finally{try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); }}catch(IOException ex){ ex.printStackTrace();} } return result; } }

AESUtils工具類 解密手機(jī)號

package com.df.detection.controller;import org.apache.tomcat.util.codec.binary.Base64;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;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 javax.xml.transform.Result;import java.security.*;/** * @Author Songzhongjin * @Date 2020/7/15 11:46 * @Version 1.0 */public class AESUtils { public static boolean initialized = false; /** * AES解密 * @param content 密文 * @return * @throws InvalidAlgorithmParameterException * @throws NoSuchProviderException */ public byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException { initialize(); try { Cipher cipher = Cipher.getInstance('AES/CBC/PKCS7Padding'); Key sKeySpec = new SecretKeySpec(keyByte, 'AES'); cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化 byte[] result = cipher.doFinal(content); return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static void initialize(){ if (initialized) { return; } Security.addProvider(new BouncyCastleProvider()); initialized = true; } //生成iv public static AlgorithmParameters generateIV(byte[] iv) throws Exception { AlgorithmParameters params = AlgorithmParameters.getInstance('AES'); params.init(new IvParameterSpec(iv)); return params; }}

接口返回對象ResultBean定義工具類 防止有些朋友發(fā)現(xiàn)沒有這個類

package com.df.detection.base.entity;import io.swagger.annotations.ApiModelProperty;/** * @author Liu Yaoguang * @Classname aaa * @Description * @Date 2019/12/06 09:22 */public class ResultBean<T> { @ApiModelProperty(value = '返回碼',dataType = 'int') private int code; @ApiModelProperty(value = '返回描述信息',dataType = 'string') private String message; @ApiModelProperty(value = '返回數(shù)據(jù)') private T data; @ApiModelProperty(value = '口令',dataType = 'string') private String token; private ResultBean() { } public static ResultBean error(int code, String message) { ResultBean resultBean = new ResultBean(); resultBean.setCode(code); resultBean.setMessage(message); return resultBean; } public static<T> ResultBean error(int code, String message,T data) { ResultBean resultBean = new ResultBean(); resultBean.setCode(code); resultBean.setMessage(message); resultBean.setData(data); return resultBean; } public static ResultBean success(String message) { ResultBean resultBean = new ResultBean(); resultBean.setCode(200); resultBean.setMessage(message); return resultBean; } public static<T> ResultBean success(String message,T data) { ResultBean resultBean = new ResultBean(); resultBean.setCode(200); resultBean.setMessage(message); resultBean.setData(data); return resultBean; } public static ResultBean success(String message,Object data,String token) { ResultBean resultBean = new ResultBean(); resultBean.setCode(200); resultBean.setMessage(message); resultBean.setData(data); resultBean.setToken(token); return resultBean; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public T getData() { return data; } public void setData(T data) { this.data = data; } public String getToken() { return token; } public void setToken(String token) { this.token = token; }}

以上就是微信小程序獲取手機(jī)號,后端JAVA解密流程代碼的詳細(xì)內(nèi)容,更多關(guān)于微信小程序獲取手機(jī)號的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: 微信
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品理论电影在线| 午夜在线精品| 精品久久在线| 不卡一区综合视频| 日本91福利区| 日韩中文在线电影| 蜜臀久久99精品久久久久宅男| 国产欧美日韩精品高清二区综合区| 亚洲性色av| 日韩欧美中文字幕一区二区三区| 成人午夜亚洲| 亚洲精品日本| 日韩国产综合| 国产精品一区二区av交换| 99视频精品全国免费| 日韩精品一页| 日韩毛片在线| 国产精品成人**免费视频 | 鲁大师影院一区二区三区| 麻豆高清免费国产一区| 男人操女人的视频在线观看欧美| 久久精品免视看国产成人| 免费国产自线拍一欧美视频| 久久精品理论片| 日本一区二区三区中文字幕| 国产99久久| 免费在线欧美黄色| 亚洲欧洲国产精品一区| 91tv亚洲精品香蕉国产一区| 国产精品综合色区在线观看| 午夜在线播放视频欧美| 激情亚洲影院在线观看| 国产美女视频一区二区| 蜜桃av一区二区在线观看| 天堂日韩电影| 成人日韩av| 国产精品magnet| 亚洲精品乱码日韩| 久久一区二区三区电影| 九九九精品视频| 午夜久久av| 欧美黑人做爰爽爽爽| 亚洲精品极品| 欧美专区在线| 91精品久久久久久久久久不卡| 久久不卡国产精品一区二区| 日韩av在线免费观看不卡| 久久av在线| 亚洲精品电影| 99久久久国产精品美女| 国产a亚洲精品| 国产精品xxx在线观看| 婷婷视频一区二区三区| 久色成人在线| 亚洲国产日韩欧美在线| 久久婷婷一区| 91精品综合| 欧美综合另类| 日韩毛片在线| 成人精品天堂一区二区三区| 91视频久久| 91一区二区三区四区| 岛国av免费在线观看| 精品国产亚洲日本| 国产精品a级| 国产精品115| 国产精品视频3p| 欧美激情麻豆| 韩国女主播一区二区三区| 欧美日韩18| 国产精品一区二区三区美女| 国产精品视频一区二区三区四蜜臂 | 天使萌一区二区三区免费观看| 久久久久久久久99精品大| 日韩精品欧美| 婷婷综合网站| 亚洲一区成人| 天海翼亚洲一区二区三区| 亚洲区国产区| 青青国产91久久久久久| 国产欧美亚洲精品a| 国产精品国码视频| 麻豆国产精品视频| 日韩大片在线| 午夜欧美视频| 亚洲免费成人av在线| 久久国产三级| 精品视频一区二区三区四区五区 | 欧美精品黄色| 国产视频一区在线观看一区免费| 亚洲精品1区| 麻豆亚洲精品| 亚洲精品乱码| 久久av超碰| 中文字幕色婷婷在线视频| 国产 日韩 欧美一区| 五月精品视频| 亚洲男人在线| 你懂的国产精品| 午夜av不卡| 五月婷婷六月综合| 中文字幕一区二区av| 国产欧美高清| 亚洲性色av| 视频一区视频二区在线观看| 日本不卡不码高清免费观看| 国产精品1区在线| 精品国模一区二区三区| 9国产精品视频| 欧美日韩一区二区三区四区在线观看 | 香蕉成人av| 在线一区欧美| 欧美色综合网| 群体交乱之放荡娇妻一区二区| 视频一区在线视频| 国产欧美88| 99久久精品网| 日韩精品一区二区三区中文在线| 国产精品xxx| 日韩视频一区| 久久成人福利| 黄色成人91| 国产精品自在| 国产综合精品一区| 日本免费一区二区视频| 亚洲天堂免费电影| 亚洲aa在线| 秋霞影视一区二区三区| 日韩三级精品| 999国产精品| 欧美视频久久| 午夜欧美精品| 久久久久伊人| 一区二区三区四区精品视频| 黄在线观看免费网站ktv| 免费的成人av| 亚洲va中文在线播放免费| 蜜臀av一区二区三区| 久久精品二区亚洲w码| 一区在线免费| 国产+成+人+亚洲欧洲在线| 综合一区在线| 人人香蕉久久| 欧美xxxx性| 香蕉久久久久久| 亚洲天堂成人| 成人精品动漫一区二区三区| 亚洲1区在线| 午夜欧美精品| 亚洲天堂免费电影| 国产乱码精品一区二区亚洲| 午夜欧美视频| 蜜桃成人精品| 美女高潮久久久| 亚洲免费毛片| 亚洲国产一区二区在线观看| 久久av资源| 奇米亚洲欧美| 久久激情综合网| 亚洲区欧美区| 日韩精品欧美大片| 国产精品xvideos88| 亚洲精品一级| 欧美va天堂| 国产精品99一区二区三区| 日本va欧美va精品发布| 99在线精品免费视频九九视| 最新中文字幕在线播放| 欧美日韩一区二区国产| 久热综合在线亚洲精品| 国产一区亚洲| 精品成人免费一区二区在线播放| 国产精品久久国产愉拍| 亚洲精品系列| 蜜臀精品久久久久久蜜臀| 亚洲视频综合| 亚洲综合在线电影| 国产中文字幕一区二区三区| 国产精品一区亚洲| 日韩二区三区在线观看| 日韩中文字幕91| 亚洲特级毛片| 久久精品国产大片免费观看| 粉嫩av一区二区三区四区五区 | 精品一区在线| 日韩成人精品一区二区三区| 97se综合| 日韩激情啪啪| 久久一级电影| 麻豆中文一区二区| 欧美男人天堂| 久久精品国产99国产| 91精品麻豆| 日韩高清在线不卡| 婷婷亚洲成人| 欧美日韩1区2区3区| 国产精品丝袜在线播放| 国产精品v亚洲精品v日韩精品| 国产日产高清欧美一区二区三区 | 91欧美日韩在线|