修改部分,微信推送事件,lkl的部分配置

This commit is contained in:
liuyingfang
2023-04-20 15:29:59 +08:00
parent 73fdf1b517
commit 082896aabc
15 changed files with 361 additions and 25 deletions

View File

@@ -89,6 +89,8 @@ public class ParameterConfig {
*/ */
@Value("${parameter.APPLETS_APPID}") @Value("${parameter.APPLETS_APPID}")
public String APPLETS_APPID; public String APPLETS_APPID;
@Value("${parameter.APPLETS_SECRET}")
public String APPLETS_SECRET;
/** /**
* AppSecret * AppSecret
*/ */
@@ -272,6 +274,7 @@ public class ParameterConfig {
ParametersUtil.WECHAT_RATE = WECHAT_RATE; ParametersUtil.WECHAT_RATE = WECHAT_RATE;
ParametersUtil.APPID = APPID; ParametersUtil.APPID = APPID;
ParametersUtil.APPLETS_APPID = APPLETS_APPID; ParametersUtil.APPLETS_APPID = APPLETS_APPID;
ParametersUtil.APPLETS_SECRET = APPLETS_SECRET;
ParametersUtil.APPSECRET = APPSECRET; ParametersUtil.APPSECRET = APPSECRET;
ParametersUtil.PID = PID; ParametersUtil.PID = PID;
ParametersUtil.KEY = KEY; ParametersUtil.KEY = KEY;

View File

@@ -45,6 +45,10 @@ public class ParametersUtil {
* 小程序付款的appid * 小程序付款的appid
*/ */
public static String APPLETS_APPID; public static String APPLETS_APPID;
/**
* 小程序密钥
*/
public static String APPLETS_SECRET;
/** /**
* AppSecret * AppSecret
*/ */

View File

@@ -113,7 +113,7 @@ public class RSAUtils {
public static PrivateKey getPrivateKey(String key) throws Exception { public static PrivateKey getPrivateKey(String key) throws Exception {
byte[] keyBytes; byte[] keyBytes;
keyBytes = Base64.getDecoder().decode(key); keyBytes = Base64.getMimeDecoder().decode(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA); KeyFactory keyFactory = KeyFactory.getInstance(RSA);
return keyFactory.generatePrivate(keySpec); return keyFactory.generatePrivate(keySpec);

View File

@@ -0,0 +1,161 @@
package cn.pluss.platform.util;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import cn.pluss.platform.exception.MsgException;
import org.bouncycastle.crypto.CryptoException;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;
import static org.bouncycastle.util.encoders.Base64.toBase64String;
//import com.lakala.zf.idry.yzt.exception.CryptoException;
public class SM4Util {
public static final String ALGORITHM_NAME = "SM4";
public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";
// SM4算法目前只支持128位即密钥16字节
public static final int DEFAULT_KEY_SIZE = 128;
public static final String ENCODING = "UTF-8";
static {
Security.addProvider(new BouncyCastleProvider());
}
/**
* 生成Base64编码的密钥
*
* @return Base64编码的密钥
* @throws CryptoException
*/
public static String generateKeyToBase64() throws CryptoException {
return toBase64String(generateKey());
}
public static byte[] generateKey() throws CryptoException {
return generateKey(DEFAULT_KEY_SIZE);
}
/**
* 生成Base64编码的密钥
*
* @param keySize 密钥长度 单位为bit
* @return Base64编码的密钥
* @throws CryptoException
*/
public static String generateKeyToBase64(int keySize) throws CryptoException {
return toBase64String(generateKey(keySize));
}
public static byte[] generateKey(int keySize) throws CryptoException {
KeyGenerator kg = null;
try {
kg = KeyGenerator.getInstance(ALGORITHM_NAME, BouncyCastleProvider.PROVIDER_NAME);
} catch (Exception e) {
throw new CryptoException("SM4Util generateKey error:", e);
}
kg.init(keySize, new SecureRandom());
return kg.generateKey().getEncoded();
}
public static byte[] encrypt_ECB_Padding(byte[] key, byte[] data) throws CryptoException {
try {
Cipher cipher = generateECBCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(data);
} catch (Exception e) {
throw new CryptoException("SM4Util encrypt_ECB_Padding error:", e);
}
}
/**
* ECB_PKCS5Padding 加密返回Base64编码后的密文
*
* @param key base64
* @param data 正常明文数据
* @return
* @throws MsgException
*/
public static String encrypt(String key, String data) throws CryptoException {
try {
Cipher cipher = generateECBCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, Base64.decode(key));
byte[] enData =cipher.doFinal(data.getBytes(ENCODING));
return Base64.toBase64String(enData);
} catch (Exception e) {
throw new CryptoException("SM4Util encrypt_ECB_Padding error:", e);
}
}
/**
* ECB_PKCS5Padding 解密 ,返回正常明文数据
*
* @param key base64
* @param cipherText 返回Base64编码后的密文
* @return
* @throws Exception
*/
public static String decrypt(String key, String cipherText) throws CryptoException {
try {
Cipher cipher = generateECBCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, Base64.decode(key));
byte[] data =cipher.doFinal(Base64.decode(cipherText));
return new String(data,ENCODING);
} catch (Exception e) {
throw new CryptoException("SM4Util decrypt_ECB_Padding error:", e);
}
}
public static byte[] decrypt_ECB_Padding(byte[] key, byte[] cipherText) throws CryptoException {
try {
Cipher cipher = generateECBCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, key);
return cipher.doFinal(cipherText);
} catch (Exception e) {
throw new CryptoException("SM4Util decrypt_ECB_Padding error:", e);
}
}
private static Cipher generateECBCipher(String algorithmName, int mode, byte[] key)
throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException,
InvalidKeyException {
Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);
Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
cipher.init(mode, sm4Key);
return cipher;
}
public static void main(String[] args) throws Exception {
try {
String key = "dRzPaYd7z6vYn9sL/JTZ3A==";
String data = "阿萨德哈的哦已我居然挤公交大幅度AAAADDF";
String cipherText = encrypt(key, data);
System.out.println("cipherText " + cipherText);
String deData = decrypt(key, cipherText);
System.out.println("deData " + deData);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

View File

@@ -84,13 +84,13 @@ public class WxConstants {
public static final Integer RESULT_SUCCESS_CODE = 0; public static final Integer RESULT_SUCCESS_CODE = 0;
public static final Integer QR_EXPIRE_SECONDS = 2592000; public static final Integer QR_EXPIRE_SECONDS = 25920000;
/** /**
* 微信会员开卡通知模板ID * 微信会员开卡通知模板ID
* @date: 2021/12/9 18:17 * @date: 2021/12/9 18:17
*/ */
public static final String VIP_CARD_SUCCESS_TEMPLATE_ID = "Hf_WLVwVAc0HD4KV2_zLD0vTgiw4jpZ-OkcN4lIffUA"; public static final String VIP_CARD_SUCCESS_TEMPLATE_ID = "AEEmXqtyvSIppWOX-RWglgU8Wc8DxSNDi4xXq7iles0";
/** /**
* 会员卡余额变动通知模板ID * 会员卡余额变动通知模板ID

View File

@@ -101,6 +101,8 @@ parameter:
# wxfffc7bff64c7a11e # wxfffc7bff64c7a11e
#小程序付款APPID #小程序付款APPID
APPLETS_APPID: wxc2bb94c0ddda1032 APPLETS_APPID: wxc2bb94c0ddda1032
#小程序密钥
APPLETS_SECRET: 625cbce8772629312e42e8278a8d6889
APPSECRET: 4e00bbf3fc75a1ff68ce866fd13f2bcc APPSECRET: 4e00bbf3fc75a1ff68ce866fd13f2bcc
# b84ee0efaa0d9a649746ac65525f8e10 # b84ee0efaa0d9a649746ac65525f8e10
KEY: 微信原生加密用的KEY KEY: 微信原生加密用的KEY

View File

@@ -0,0 +1,2 @@
lkl:
private_key: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGxrIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhDZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbWdhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCNrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK15quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZKNXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAKTPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gHSTTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLvAtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeIRgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlkeMzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw48zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBPscd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDibEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCnLl2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEzNzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3jAylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilqCHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6QsFLQgFyXgvDnzr/o+hQJelW

View File

@@ -24,13 +24,13 @@ ys:
## 进件URL前缀v2 ## 进件URL前缀v2
auditDomainV2: https://ouser.ysepay.com:6443/ auditDomainV2: https://ouser.ysepay.com:6443/
## 机构号ID ## 机构号ID
src: 3520000052 src: 3520000064
## 代理商编号 ## 代理商编号
agentNoV2: 801521000002UUS agentNoV2: 801521000002WJW
## 进件私钥v2 ## 进件私钥v2
priKeyV2: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT/PW5hpPAtgKXd9BvhtpfXhzbK6U9UURKhBgFIkQ+oIJQNfbB/F2jdVK9ke3IYi0/TXHMnY63x43qxciLeAOt+LxdhHn6ZImV4MsRkPjF/zLsaJrPOPWbc2m4T1yvinfzkrxhZaWn1dj4+IdyO3tA/juXCjydQqKR2kSqJlo6gdT9N3RIJ+ETda2UUahZyYXBfjyxFQEaOXthm6krZH1zBHs510Og6bQJQHjMmTskkslWvj38qPDfsuC4tq0Hgbu3LcyiX9vGYzQoGOaGhDEiNPObdDlOuh5gn0slRmg+PxAgMBAAECggEAJRvrCBRki50C5HD6Kmtp/M/vVYwYYhcAum2ViO9qk2ILNJ+CYpsCvASEVvzuBtm2L8xq3Vw2C1AubXGC8KSsa33o/EG4qIM1REnP+a8VKbr6dlOIuoMFyNMI+QpDX7mAafnxmRqgXuGAJDmupYFsFaU/mRHRxhKoZDsd2FA5HEbuDI9SJp86keE72NHsxyqfDIZyIk3Z8k7HZY2wg3FW+YaOKQBHVA9JYvhfZMeaQ1ymrA0IAqWpUqjLkqAa2Qa6xUsbj+QhvrkBCE48i8duamXKDSOaLfkqTb8IyxOM9eTsFwLVGEuZQrkhrLxdrg5aBPvu81pIJME6SgrquJJ84QKBgQD/MAFLiWU0wDJ4Hqf2jKa5vgrBmCqOsANBc079s8gDXM4zbsG/TjMHPDmiOGZxtDG8937twjYzRv9XpnqyITMArlhWWMhTOJ3r3CTVr/OISgeZKPGjfp+MbeDsOK4OggTVKZmNLx3nKiuc94IlTDOcz5qArVBTxKadWg56f1UGswKBgQD28G+haXxneMhRZozoHPjcfdgtDoZJaVa8XTXw8nvQala5ioU9yesbIAdtD/VR/eWwuMtO4rK1IFxtNZQ/MtSXwqlnKLf1xDJQPuj3kY5mC7H7sn4HGeFDP50VFnPgIaUnB5VwgyYFm8l19AW06OBjlnoBv0dnl1s5u+DgpzQcywKBgQCfeWSVzBtPR/1CTAYzcdqPoVAfg/S0jxK5yFHJAp0wXMMQKVszLq99CgoKcqyyyiV7LkBIXWJ50RipsgRjZZP2DP5vl7Q5LdyjFUR/tiG/PmRZNtkrj2ot3Ez/0rwTnPVgMUsgjB1n5Va0FYljvadTi/nGCIl2kCJ/m1QJAaIlOQKBgGV8TwRxS9ViiEEb+lDyhzxm488wpvPIvQLQ8/hAT65J5bZ/PV81etA9C5BA/Ltjs2A7siKLfJJ/6DxhxrlqdICiWeixjVkN9vePw0LrqTA7IjylELJuamuu2yntflXgvfUaYspIu/mWGufFEAtXodCL6TyKlhf21mEV28e4L+ydAoGAItgCUGbot95QNT1z+9QFN+18AvMnWCNvqanrC4qsk0phjYX9FFwfSCqWVeVm0Q0+2tUrRNcUEcbmlbQToBZq/hSu0nPcZIPvnNxLfW/NY7eVCXIcI5eNPjUIgbRCVMc6w5ukYMxPidOBuRXIt1iq2+iV20/FMbA58sY7AgOiaMw= priKeyV2: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT/PW5hpPAtgKXd9BvhtpfXhzbK6U9UURKhBgFIkQ+oIJQNfbB/F2jdVK9ke3IYi0/TXHMnY63x43qxciLeAOt+LxdhHn6ZImV4MsRkPjF/zLsaJrPOPWbc2m4T1yvinfzkrxhZaWn1dj4+IdyO3tA/juXCjydQqKR2kSqJlo6gdT9N3RIJ+ETda2UUahZyYXBfjyxFQEaOXthm6krZH1zBHs510Og6bQJQHjMmTskkslWvj38qPDfsuC4tq0Hgbu3LcyiX9vGYzQoGOaGhDEiNPObdDlOuh5gn0slRmg+PxAgMBAAECggEAJRvrCBRki50C5HD6Kmtp/M/vVYwYYhcAum2ViO9qk2ILNJ+CYpsCvASEVvzuBtm2L8xq3Vw2C1AubXGC8KSsa33o/EG4qIM1REnP+a8VKbr6dlOIuoMFyNMI+QpDX7mAafnxmRqgXuGAJDmupYFsFaU/mRHRxhKoZDsd2FA5HEbuDI9SJp86keE72NHsxyqfDIZyIk3Z8k7HZY2wg3FW+YaOKQBHVA9JYvhfZMeaQ1ymrA0IAqWpUqjLkqAa2Qa6xUsbj+QhvrkBCE48i8duamXKDSOaLfkqTb8IyxOM9eTsFwLVGEuZQrkhrLxdrg5aBPvu81pIJME6SgrquJJ84QKBgQD/MAFLiWU0wDJ4Hqf2jKa5vgrBmCqOsANBc079s8gDXM4zbsG/TjMHPDmiOGZxtDG8937twjYzRv9XpnqyITMArlhWWMhTOJ3r3CTVr/OISgeZKPGjfp+MbeDsOK4OggTVKZmNLx3nKiuc94IlTDOcz5qArVBTxKadWg56f1UGswKBgQD28G+haXxneMhRZozoHPjcfdgtDoZJaVa8XTXw8nvQala5ioU9yesbIAdtD/VR/eWwuMtO4rK1IFxtNZQ/MtSXwqlnKLf1xDJQPuj3kY5mC7H7sn4HGeFDP50VFnPgIaUnB5VwgyYFm8l19AW06OBjlnoBv0dnl1s5u+DgpzQcywKBgQCfeWSVzBtPR/1CTAYzcdqPoVAfg/S0jxK5yFHJAp0wXMMQKVszLq99CgoKcqyyyiV7LkBIXWJ50RipsgRjZZP2DP5vl7Q5LdyjFUR/tiG/PmRZNtkrj2ot3Ez/0rwTnPVgMUsgjB1n5Va0FYljvadTi/nGCIl2kCJ/m1QJAaIlOQKBgGV8TwRxS9ViiEEb+lDyhzxm488wpvPIvQLQ8/hAT65J5bZ/PV81etA9C5BA/Ltjs2A7siKLfJJ/6DxhxrlqdICiWeixjVkN9vePw0LrqTA7IjylELJuamuu2yntflXgvfUaYspIu/mWGufFEAtXodCL6TyKlhf21mEV28e4L+ydAoGAItgCUGbot95QNT1z+9QFN+18AvMnWCNvqanrC4qsk0phjYX9FFwfSCqWVeVm0Q0+2tUrRNcUEcbmlbQToBZq/hSu0nPcZIPvnNxLfW/NY7eVCXIcI5eNPjUIgbRCVMc6w5ukYMxPidOBuRXIt1iq2+iV20/FMbA58sY7AgOiaMw=
## 进件公钥v2 ## 进件公钥v2
pubKeyV2: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7SPkmIUf2auwkgbVchMyfeCDgICuA1GKrSwRbDI24UMVhzDgcIxCUmFG5/DfcPJz0d3oV9Ggkd4/7NmteRvmNnOOGNOnmR6AGEKafDpL1mAdpndmpkAZ0f6OVo3Py5JDg2wt8d+u3dF0AFWwd2rrrqscWvxJVB55DnuZfXl2CyQIDAQAB pubKeyV2: MIGfMA0GCSGqSIb3DQEBAQUAA4GNADCBiQKBgQC7SPkmIUf2auwkgbVchMyfeCDgICuA1GKrSwRbDI24UMVhzDgcIxCUmFG5/DfcPJz0d3oV9Ggkd4/7NmteRvmNnOOGNOnmR6AGEKafDpL1mAdpndmpkAZ0f6OVo3Py5JDg2wt8d+u3dF0AFWwd2rrrqscWvxJVB55DnuZfXl2CyQIDAQAB
## 加密密钥 ## 加密密钥
encryptPwd: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT encryptPwd: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD2J82Gg79Tk8HZ9Zl7EOeLwvUn41c4ktUg6jveIhYLhT
oldPayV2: oldPayV2:

View File

@@ -0,0 +1,14 @@
package cn.pluss.platform.klk;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "lkl")
public class LklConfig {
@Value("private_key")
private String privateKey;
}

View File

@@ -0,0 +1,59 @@
package cn.pluss.platform.klk.entity;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.pluss.platform.yinsheng.ReqEntity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Date;
/**请求参数
* @author lyf
*/
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ReqKlkEntity {
/**
* 接入方交易请求发起的系统时间(秒) long timestamp = System.currentTimeMillis()/1000【必传】
*/
private String timestamp;
private final String appid = "OP00000354";
/**
* 12个字符的随机字符串【必传】
*/
private final String nonceStr = "qazwsxedc987";
private String charset = "utf-8";
private String sign;
/**
* 加签用的证书序列号
*/
private final String serialNo = "00dfba8194c41b84cf";
private String version = "3.0";
public static ReqKlkEntity get(String jsonString) {
ReqKlkEntity entity = new ReqKlkEntity();
entity.timestamp = String.valueOf(System.currentTimeMillis() / 1000);
String format = "appid"+"\n"+"serialNo"+"\n"+"timeStamp"+"\n"+"nonceStr"+"\n"+"body"+"\n";
entity.sign = format.replace("appid", entity.appid).replace("serialNo", entity.serialNo)
.replace("timeStamp", entity.timestamp).replace("nonceStr",entity.nonceStr)
.replace("body",jsonString);
return entity;
}
public static void main(String[] args) {
System.out.println(get("req_data\": {\n" +
" \"member_id\": \"AAA200154561278\",\n" +
" \"mer_order_id\": \"202112030923011\"\n" +
" }\n"));
}
}

View File

@@ -0,0 +1,31 @@
package cn.pluss.platform.klk.entity;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* @author lyf
*/
@Setter
@Getter
public class RespKlkEntity {
/**
* 网关响应码
*/
private String code;
/**
* 网关响应码描述
*/
private String msg;
/**
* 响应时间
*/
private String resp_time;
/**
* 响应参数
*/
private Object resp_data;
}

View File

@@ -0,0 +1,51 @@
package cn.pluss.platform.klk.service;
import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.klk.LklConfig;
import cn.pluss.platform.klk.entity.ReqKlkEntity;
import cn.pluss.platform.klk.entity.RespKlkEntity;
import cn.pluss.platform.util.RSAUtils;
import cn.pluss.platform.util.SM4Util;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
/**
* @author lyf
*/
@Slf4j
@Service("KlkService")
public class KlkService {
@Autowired
private LklConfig lklConfig;
public void reqKlk()throws Exception{
String data = "req_data\": {\n" +
" \"member_id\": \"AAA200154561278\",\n" +
" \"mer_order_id\": \"202112030923011\"\n" +
" }\n";
String key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGxrIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhDZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbWdhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCNrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK15quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZKNXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAKTPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gHSTTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLvAtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeIRgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlkeMzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw48zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBPscd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDibEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCnLl2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEzNzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3jAylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilqCHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6QsFLQgFyXgvDnzr/o+hQJelW";
ReqKlkEntity reqKlkEntity = ReqKlkEntity.get(data);
System.out.println("signFormat++++++++++++++"+reqKlkEntity.getSign());
String sign = RSAUtils.signSHA256(key, reqKlkEntity.getSign());
System.out.println("sign++++++++++++++++++"+sign);
//设置Authorization
HttpHeaders headers = new HttpHeaders();
headers.setContentType(APPLICATION_JSON);
headers.set("Authorization", "LKLAPI-SHA256withRSA");
String finalSign = "Content-Type: application/json"+"\n"+"Authorization:LKLAPI-SHA256withRSA"+" "+"appid="+reqKlkEntity.getAppid()+","+"serial_no="+reqKlkEntity.getSerialNo()+","+
reqKlkEntity.getTimestamp()+","+"nonce_str="+reqKlkEntity.getNonceStr()+","+
"signature="+sign;
System.out.println(finalSign);
}
// public String signEncrypt(String sign){
// SM4Util
// }
}

View File

@@ -149,7 +149,8 @@ public class MerchantMenberServiceImpl extends ServiceImpl<MerchantMenberMapper,
throw new MsgException("验证码错误!"); throw new MsgException("验证码错误!");
} }
// 使用验证码之后删除验证码 // 使用验证码之后删除验证码
phoneValidateCodeMapper.deletePhoneValidateCode(existValidateCode); //TODO 线下的删除老是进行行锁,线上不影响
//phoneValidateCodeMapper.deletePhoneValidateCode(existValidateCode);
MerchantStore ms = new MerchantStore(); MerchantStore ms = new MerchantStore();
ms.setMerchantCode(merchantCode); ms.setMerchantCode(merchantCode);

View File

@@ -96,9 +96,13 @@ public class WechatUtils {
} }
public static WxUserInfoResponse getWxUserInfo(String accessToken,String openid) { public static WxUserInfoResponse getWxUserInfo(String accessToken,String openid) {
logger.info("accessToken{}", accessToken);
logger.info("openid{}", openid);
String url = WxConstants.WX_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("OPENID",openid); String url = WxConstants.WX_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("OPENID",openid);
logger.info("url{}", url);
try { try {
JSONObject response = HttpUtil.httpRequest(url,"GET", null); JSONObject response = HttpUtil.httpRequest(url,"GET", null);
logger.info("response{}", response);
if(response == null){ if(response == null){
MsgException.throwException("获取微信用户信息异常"); MsgException.throwException("获取微信用户信息异常");
} }

View File

@@ -80,10 +80,10 @@ public class WechantController {
private RestTemplate restTemplate; private RestTemplate restTemplate;
/** /**
* *
* goUpgradePage:(跳转到升级页面). <br/> * goUpgradePage:(跳转到升级页面). <br/>
* *
* *
* @author Administrator * @author Administrator
* @param userId * @param userId
* @return * @return
@@ -124,10 +124,10 @@ public class WechantController {
} }
/** /**
* *
* jumpUrl:(乐刷支付完成后的跳转地址). <br/> * jumpUrl:(乐刷支付完成后的跳转地址). <br/>
* *
* *
* @author Administrator * @author Administrator
* @param orderNumber * @param orderNumber
* @param * @param
@@ -185,10 +185,10 @@ public class WechantController {
// } // }
/** /**
* *
* getMerchantInfo:(得到商户名称,门店名称). <br/> * getMerchantInfo:(得到商户名称,门店名称). <br/>
* *
* *
* @author Administrator * @author Administrator
* @param merchantCode * @param merchantCode
* @param storeId * @param storeId
@@ -223,7 +223,7 @@ public class WechantController {
/** /**
* 从request中获取请求方IP * 从request中获取请求方IP
* *
* @param request * @param request
* @return * @return
*/ */
@@ -257,10 +257,10 @@ public class WechantController {
} }
/** /**
* *
* wechatCallBack:(设备订单微信回调通知). <br/> * wechatCallBack:(设备订单微信回调通知). <br/>
* *
* *
* @author Administrator * @author Administrator
* @param request * @param request
* @param response * @param response
@@ -302,7 +302,7 @@ public class WechantController {
* *
* wechatCallBack:(设备订单微信回调通知). <br/> * wechatCallBack:(设备订单微信回调通知). <br/>
* *
* *
* @author Administrator * @author Administrator
* @param request * @param request
* @param response * @param response
@@ -367,7 +367,7 @@ public class WechantController {
backMsgXml.append("<FromUserName><![CDATA["+(String) map.get("ToUserName")+"]]></FromUserName>"); backMsgXml.append("<FromUserName><![CDATA["+(String) map.get("ToUserName")+"]]></FromUserName>");
backMsgXml.append("<CreateTime>"+System.currentTimeMillis()+"</CreateTime>"); backMsgXml.append("<CreateTime>"+System.currentTimeMillis()+"</CreateTime>");
backMsgXml.append("<MsgType><![CDATA[text]]></MsgType>"); backMsgXml.append("<MsgType><![CDATA[text]]></MsgType>");
backMsgXml.append("<Content><![CDATA[你好,欢迎关注收银呗生活圈]]></Content>"); backMsgXml.append("<Content><![CDATA[你好,欢迎关注快银收银!]]></Content>");
backMsgXml.append("</xml>"); backMsgXml.append("</xml>");
response.setContentType("text/xml; charset=utf-8"); response.setContentType("text/xml; charset=utf-8");
response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8");
@@ -396,16 +396,19 @@ public class WechantController {
merchantMenber.setMerchantCode(merchantCode); merchantMenber.setMerchantCode(merchantCode);
List<MerchantMenber> queryMerchantMenberList = merchantMenberService.queryMerchantMenberList(merchantMenber); List<MerchantMenber> queryMerchantMenberList = merchantMenberService.queryMerchantMenberList(merchantMenber);
if(queryMerchantMenberList!=null&&queryMerchantMenberList.size()>0) { if(queryMerchantMenberList!=null&&queryMerchantMenberList.size()>0) {
System.out.println("queryMerchantMenberList++++++++++++++++++");
merchantMenber = queryMerchantMenberList.get(0); merchantMenber = queryMerchantMenberList.get(0);
if(StringUtil.isBlank(merchantMenber.getOpenid())){ if(StringUtil.isBlank(merchantMenber.getOpenid())){
merchantMenber.setOpenid(openId); merchantMenber.setOpenid(openId);
if(wxUserInfo != null){ if(wxUserInfo != null){
System.out.println("wxUserInfo++++++++++++++++++"+wxUserInfo);
wxUserInfo.buildMember(merchantMenber,null); wxUserInfo.buildMember(merchantMenber,null);
} }
merchantMenberService.updateMerchantMenber(merchantMenber); merchantMenberService.updateMerchantMenber(merchantMenber);
System.out.println("更新完成++++++++++++++++++++++++++");
try { try {
MerchantStore store = merchantStoreService.getStoreByMerchantCode(merchantMenber.getMerchantCode()); MerchantStore store = merchantStoreService.getStoreByMerchantCode(merchantMenber.getMerchantCode());
System.out.println("模板消息++++++++++++++++++++++++++++++");
JSONObject miniprogram = new JSONObject(); JSONObject miniprogram = new JSONObject();
miniprogram.put("appid",ParametersUtil.APPLETS_APPID); miniprogram.put("appid",ParametersUtil.APPLETS_APPID);
miniprogram.put("pagepath","pages/card/index?storeId="+store.getId()+"&phone="+merchantMenber.getPhone()); miniprogram.put("pagepath","pages/card/index?storeId="+store.getId()+"&phone="+merchantMenber.getPhone());
@@ -415,7 +418,7 @@ public class WechantController {
double usableGiveFee = merchantMenber.getUsableGiveFee() == null ? 0 : StringUtil.bigDecimal(merchantMenber.getUsableGiveFee()); double usableGiveFee = merchantMenber.getUsableGiveFee() == null ? 0 : StringUtil.bigDecimal(merchantMenber.getUsableGiveFee());
String useFee = BigDecimal.valueOf(usableRechargeFee + usableGiveFee).setScale(2,BigDecimal.ROUND_HALF_DOWN).toString(); String useFee = BigDecimal.valueOf(usableRechargeFee + usableGiveFee).setScale(2,BigDecimal.ROUND_HALF_DOWN).toString();
String[] array = {store.getStoreName(),merchantMenber.getPhone(),store.getStoreName()+"会员卡",useFee+""}; String[] array = {store.getStoreName(),merchantMenber.getPhone(),store.getStoreName()+"会员卡",useFee+""};
WxTemolateRequest tempRequest = new WxTemolateRequest(openId,WxConstants.VIP_CARD_SUCCESS_TEMPLATE_ID,null,miniprogram) WxTemolateRequest tempRequest = new WxTemolateRequest(openId,WxConstants.VIP_CARD_SUCCESS_TEMPLATE_ID,null,null)
.buildData(first,remark,array); .buildData(first,remark,array);
//发送开卡成功消息模板 //发送开卡成功消息模板
wxCommonService.sendTemplateMsg(tempRequest,tokenRequest); wxCommonService.sendTemplateMsg(tempRequest,tokenRequest);
@@ -443,9 +446,10 @@ public class WechantController {
response.getWriter().write(backMsgXml.toString()); response.getWriter().write(backMsgXml.toString());
} }
} }
/** /**
* 读取request数据 * 读取request数据
* *
* @param request * @param request
* @return * @return
*/ */