页面
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">手机号</button>
Page({
getPhoneNumber (e) {
if(e.detail.errMsg == "getPhoneNumber:fail user deny") {
wx.showToast({
icon: "none",
title: '请允许获取手机号,否则功能不可用!',
})
return
}
console.log("e.detail.errMsg="+e.detail.errMsg)
console.log("e.detail.iv=->", e.detail.iv);
console.log("e.detail.encryptedData->", e.detail.encryptedData);
console.log("123123")
this.getphone(e.detail.encryptedData, e.detail.iv);
this.triggerEvent("isHiddenPopup");
},
getphone: function(encryptedData, iv) {
let openid = wx.getStorageSync('openid')
let sessionkey = wx.getStorageSync('sessionkey')
wx.request({
url: "http://192.168.0.102:7777/ys/wxlogin/getsessionkey",
data: {
'SessionKey':sessionkey,
'openid':openid,
'encryptedData' : encryptedData,
'iv':iv
},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: function(data) {
console.log("后台返回的数据 =", data)
console.log("获取手机号返回JSON数据 =", data.data)
console.log("手机号 = "+data.data.phoneNumber)
if(data.data==undefined){
wx.showToast({
icon: "none",
title: '手机号获取失败,请重新登录!',
})
return
}
if(data.statusCode == 200) {
if(data.data.phoneNumber==undefined){
console.log("获取手机号失败");
return
}
wx.switchTab({
url: "/pages/mine/mine"
})
}
},
fail: function(err) {
console.log(err);
wx.showToast({
icon: "none",
title: 'session_key获取失败,请重新登录!',
})
return
}
})
}
})
服务端
package com.demo.util;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.InvalidParameterSpecException;
import java.util.Arrays;
public class SecretUtilTools {
public SecretUtilTools() {
}
public static String encryptForDES(String souce, String key) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
SecureRandom sr = new SecureRandom();
DESKeySpec dks = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key1 = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(1, key1, sr);
byte[] encryptedData = cipher.doFinal(souce.getBytes("UTF-8"));
String base64Str = (new BASE64Encoder()).encode(encryptedData);
return base64Str;
}
public static String decryptForDES(String souce, String key) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IOException, IllegalBlockSizeException, BadPaddingException {
SecureRandom sr = new SecureRandom();
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key1 = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(2, key1, sr);
byte[] encryptedData = (new BASE64Decoder()).decodeBuffer(souce);
byte[] decryptedData = cipher.doFinal(encryptedData);
return new String(decryptedData, "UTF-8");
}
public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception {
byte[] dataByte = Base64.decodeBase64(data);
byte[] keyByte = Base64.decodeBase64(key);
byte[] ivByte = Base64.decodeBase64(iv);
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;
}
try {
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
parameters.init(new IvParameterSpec(ivByte));
cipher.init(2, spec, parameters);
byte[] resultByte = cipher.doFinal(dataByte);
if (null != resultByte && resultByte.length > 0) {
String result = new String(resultByte, encodingFormat);
return result;
}
return null;
} catch (NoSuchAlgorithmException var13) {
var13.printStackTrace();
} catch (NoSuchPaddingException var14) {
var14.printStackTrace();
} catch (InvalidParameterSpecException var15) {
var15.printStackTrace();
} catch (InvalidKeyException var16) {
var16.printStackTrace();
} catch (InvalidAlgorithmParameterException var17) {
var17.printStackTrace();
} catch (IllegalBlockSizeException var18) {
var18.printStackTrace();
} catch (BadPaddingException var19) {
var19.printStackTrace();
} catch (UnsupportedEncodingException var20) {
var20.printStackTrace();
}
return null;
}
}
package com.demo.controller.wxdl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.demo.entity.Auser;
import com.demo.entity.Wxcode;
import com.demo.service.AuserService;
import com.demo.service.WxcodeService;
import com.demo.service.impl.RedisUtils;
import com.demo.util.IdmApiClient;
import com.demo.util.Result;
import com.fasterxml.jackson.core.JsonProcessingException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import java.security.spec.AlgorithmParameterSpec;
@RestController
@RequestMapping("/ys/wxlogin")
@Api(tags="测试接口(微信)")
public class WXDenglv {
@GetMapping("/getsessionkey")
public Object getsessionkey(String SessionKey,String openid,String encryptedData, String iv) throws JsonProcessingException {
System.out.println("SessionKey="+SessionKey);
System.out.println("openid="+openid);
System.out.println("encryptedData="+encryptedData);
System.out.println("iv="+iv);
String result = "";
try {
result = SecretUtilTools.decrypt(encryptedData, SessionKey, iv, "UTF-8");
if (null != result && result.length() > 0) {
} else {
System.out.println("getMiniUserInfo error");
}
} catch (Exception var11) {
var11.printStackTrace();
}
return result;
}
}
package com.demo.controller.wxdl;
public class Wxpojo {
public final static String appId = "";
public final static String secrets = "";
}
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>