修改部分,微信推送事件,lkl的部分配置
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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:
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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("获取微信用户信息异常");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user