parent
bd286aa447
commit
f8f33857fe
@ -0,0 +1,113 @@
|
||||
package jnpf.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jnpf.base.ActionResult;
|
||||
import jnpf.model.wx.WxLoginParam;
|
||||
import jnpf.util.wxutil.HttpUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.security.AlgorithmParameters;
|
||||
import java.security.Key;
|
||||
import java.security.Security;
|
||||
import java.util.Base64;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@Tag(name = "Wexin" , description = "scm")
|
||||
@RequestMapping("/api/scm/wx")
|
||||
public class WxController {
|
||||
|
||||
@Value("${wx.huishouyuan.appid}")
|
||||
private String appid;
|
||||
@Value("${wx.huishouyuan.appsecret}")
|
||||
private String appsecret;
|
||||
@Value("${wx.code2Session}")
|
||||
private String code2Session;
|
||||
|
||||
@Operation(summary = "小程序登录-回收员端")
|
||||
@GetMapping("/hsyLogin")
|
||||
public String login(@RequestParam("code") String code) {
|
||||
// System.out.println("===========小程序登录-回收员端=============");
|
||||
// System.out.println(appid);
|
||||
// System.out.println(appsecret);
|
||||
// System.out.println(code2Session);
|
||||
String url = code2Session+"?appid="+appid+"&secret="+appsecret+"&js_code="+code+"&grant_type=authorization_code";
|
||||
return HttpUtil.sendHttpGet(url);
|
||||
}
|
||||
|
||||
@Operation(summary = "小程序获取绑定的手机号-回收员端")
|
||||
@PostMapping("/hsyGetPhone")
|
||||
public String hsyGetPhone(@RequestBody WxLoginParam wxLoginParam) {
|
||||
String url = code2Session+"?appid="+appid+"&secret="+appsecret+"&js_code="+wxLoginParam.getCode()+"&grant_type=authorization_code";
|
||||
String loginResult = HttpUtil.sendHttpGet(url);
|
||||
JSONObject loginResultObject = JSONObject.parseObject(loginResult);
|
||||
if(null != loginResultObject.get("errcode")){
|
||||
return loginResult;
|
||||
}
|
||||
String sessionKey = (String) loginResultObject.get("session_key");
|
||||
JSONObject decrypt = decrypt(sessionKey,wxLoginParam.getEncryptedData(), wxLoginParam.getIv());
|
||||
decrypt.put("sessionKey",sessionKey);
|
||||
return decrypt.toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解密成json
|
||||
*
|
||||
* @param encryptedData
|
||||
* @param iv
|
||||
* @return
|
||||
*/
|
||||
public JSONObject decrypt(String sessionKey, String encryptedData, String iv) {
|
||||
byte[] encryptedDataDecode = Base64.getDecoder().decode(encryptedData);
|
||||
byte[] sessionKeyDecode = Base64.getDecoder().decode(sessionKey);
|
||||
byte[] ivDecode = Base64.getDecoder().decode(iv);
|
||||
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
|
||||
byte[] decodeData = decode(encryptedDataDecode, sessionKeyDecode, ivDecode);
|
||||
String stringData = new String(decodeData);
|
||||
JSONObject jsonObject = JSONObject.parseObject(stringData);
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解密算法 AES-128-CBC
|
||||
* 填充模式 PKCS#7
|
||||
*
|
||||
* @param encryptedDataDecode 目标密文
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
private byte[] decode(byte[] encryptedDataDecode, byte[] sessionKeyDecode, byte[] iv) {
|
||||
try {
|
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
|
||||
Key sKeySpec = new SecretKeySpec(sessionKeyDecode, "AES");
|
||||
cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(iv));// 初始化
|
||||
byte[] result = cipher.doFinal(encryptedDataDecode);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理iv
|
||||
*
|
||||
* @param iv
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
private AlgorithmParameters generateIV(byte[] iv) throws Exception {
|
||||
AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
|
||||
params.init(new IvParameterSpec(iv));
|
||||
return params;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package jnpf.model.wx;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class WxLoginParam {
|
||||
private String code;
|
||||
private String encryptedData;
|
||||
private String iv;
|
||||
}
|
Loading…
Reference in new issue