diff --git a/pom.xml b/pom.xml index d8d5c4c3d..c8b6882fa 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 4.0.0 manage - 1.3.0 + 1.3.1 UTF-8 1.4.0 diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java index 06238fea9..6ad758ca6 100644 --- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java @@ -38,16 +38,26 @@ public class RetailRSvcServiceImpl implements RetailRSvcService { throw new BadRequestException("this channel config is wrong"); } RSvcMchBean svcMchBean = clientManager.findSvcMchByAccountId(device.getString("account_id")); - String pubKeyEncCredentialCode = SignUtils.encData(svcMchBean.getCredentialCode(), svcInfo.getString("channel_pub_key")); String aesKeyStr = Base64.encodeBase64String(AESCrypt.randomKey().getEncoded()); Key key = AESCrypt.fromKeyString(Base64.decodeBase64(aesKeyStr)); - String decCredentialCode = Base64.encodeBase64String(AESCrypt.encrypt(pubKeyEncCredentialCode.getBytes(StandardCharsets.UTF_8), key)); JSONObject result = (JSONObject) JSON.toJSON(svcMchBean); result.put("sign_type", "RSA2"); - result.put("enc_data", decCredentialCode); + result.put("enc_data", new JSONObject(true) { + { + put("credentialCode", encData(svcMchBean.getCredentialCode(), key, svcInfo.getString("channel_pub_key"))); + put("payHost", encData(svcMchBean.getPayHost(), key, svcInfo.getString("channel_pub_key"))); + put("partnerCode", encData(svcMchBean.getPartnerCode(), key, svcInfo.getString("channel_pub_key"))); + put("merchantNumber", encData(svcMchBean.getMerchantNumber(), key, svcInfo.getString("channel_pub_key"))); + } + }); result.put("nonce_str", aesKeyStr); result.put("timestamp", System.currentTimeMillis()); result.put("sign", SignUtils.buildSign(result.toJSONString(), svcInfo.getString("platform_pri_key"))); return result; } + + private String encData(String data, Key key, String publicKey) { + String pubKeyEncData = SignUtils.encData(data, publicKey); + return org.apache.commons.codec.binary.Base64.encodeBase64String(AESCrypt.encrypt(pubKeyEncData.getBytes(StandardCharsets.UTF_8), key)); + } }