微信登入及获取微信手机号
生活随笔
收集整理的這篇文章主要介紹了
微信登入及获取微信手机号
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第三方登入現(xiàn)在以及非常普遍了,所以在此記錄微信登入的現(xiàn)實(shí)方式
看圖
說(shuō)明:
之后開(kāi)發(fā)者服務(wù)器可以根據(jù)用戶(hù)標(biāo)識(shí)來(lái)生成自定義登錄態(tài),用于后續(xù)業(yè)務(wù)邏輯中前后端交互時(shí)識(shí)別用戶(hù)身份。
注意:
具體代碼
wx.login({success(res) {if (res.code) {// 發(fā)起網(wǎng)絡(luò)請(qǐng)求wx.request({url: 'https://test.com/onLogin',data: {code: res.code//將code傳入的服務(wù)端}})} else {console.log('登錄失敗!' + res.errMsg)}} })//獲取到code//Java代碼 //appid,secret 保存在服務(wù)端OkHttpClient client = new OkHttpClient(); Request okrequest = new Request.Builder() .url("https://api.weixin.qq.com/sns/jscode2session?appid=" + WeiXinConfig.APP_ID + "&secret="+ WeiXinConfig.SECRET + "&js_code=" + request.getCode() + "&grant_type=authorization_code").get().addHeader("cache-control", "no-cache").build();try {Response response = client.newCall(okrequest).execute();if (200 != response.code()) {throw new BizException("獲取微信用戶(hù)信息失敗");}String openkey = response.body().string();JSONObject open = JSONObject.parseObject(openkey);String openid = open.getString("openid");if (StringUtils.isEmpty(openid)) {throw new BizException("獲取微信openid失敗");} user = userExtendsMapper.selectUserByOpenId(openid); userProfile.setUserId(user.getId()); String us = JSONObject.toJSON(userProfile).toString(); try {createJWT = TokenUtil.createJWT(UUIDGenerator.getUUID(), us, Constant.JWT_TTL); } catch (Exception e) {throw new BizException("生成token失敗"); }//生產(chǎn)服務(wù)token,用于微信小程序與服務(wù)器交互?
接下來(lái)就是采用session_key去獲取手機(jī)號(hào)碼了
需要將?<button>?組件?open-type?的值設(shè)置為?getPhoneNumber,當(dāng)用戶(hù)點(diǎn)擊并同意之后,可以通過(guò)?bindgetphonenumber?事件回調(diào)獲取到微信服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合?session_key?以及?app_id?進(jìn)行解密獲取手機(jī)號(hào)。
Page({getPhoneNumber(e) {console.log(e.detail.errMsg)console.log(e.detail.iv)console.log(e.detail.encryptedData)}} })//Java服務(wù)器端代碼 獲取session-key code是前端調(diào)用login()方法獲取到傳入后臺(tái)的 public static String getSeesionKey(String code) { String sessionKey = null; OkHttpClient client = new OkHttpClient(); Request okrequest = new Request.Builder() .url("https://api.weixin.qq.com/sns/jscode2session?appid=" + WeiXinConfig.APP_ID + "&secret="+ WeiXinConfig.SECRET + "&js_code=" + code + "&grant_type=authorization_code").get().addHeader("cache-control", "no-cache").build();Response response;try {response = client.newCall(okrequest).execute();if (200 != response.code()) {throw new BizException("獲取微信用戶(hù)信息失敗");}String openkey = response.body().string();JSONObject open = JSONObject.parseObject(openkey);sessionKey = open.getString("session_key");if (StringUtils.isEmpty(sessionKey)) {throw new BizException("獲取微信sessionKey失敗");}} catch (IOException e) {throw new BizException("獲取微信sessionKey失敗");}return sessionKey; }//解密方法 public static String decrypt(String encrypted, String session_key, String iv) throws Exception {byte[] encrypData = Base64.decodeBase64(encrypted);byte[] ivData = Base64.decodeBase64(iv);byte[] sessionKey = Base64.decodeBase64(session_key); // byte[] sessionKey = Base64.decodeBase64("Fn6r4IOiZJBXn4hQ0w==");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);// 解析解密后的字符串return new String(cipher.doFinal(encrypData), "UTF-8"); }//前臺(tái)傳入code,encrypted,iv public String getPhone(GetPhoneRequestBody request) {String seesionKey = AESDecodeUtils.getSeesionKey(request.getCode());String decrypt;try {decrypt = AESDecodeUtils.decrypt(request.getEncrypted(), seesionKey, request.getIv());} catch (Exception e) {throw new BizException("解密失敗");}//返回格式//{// "phoneNumber": "13580006666",// "purePhoneNumber": "13580006666",// "countryCode": "86",// "watermark": {// "appid": "APPID",// "timestamp": TIMESTAMP// }JSONObject open = JSONObject.parseObject(decrypt);String phoneNumber = open.getString("phoneNumber");if (StringUtils.isEmpty(phoneNumber)) {throw new BizException("獲取微信手機(jī)號(hào)失敗");}return phoneNumber; }最后返回phone給前端
?
總結(jié)
以上是生活随笔為你收集整理的微信登入及获取微信手机号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 查看数据库IP地址
- 下一篇: 海龟交易法则(策略源码)