Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	pom.xml
#	src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java
master
duLingLing 5 years ago
commit 98309e68b1

@ -9,7 +9,7 @@
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>manage</artifactId> <artifactId>manage</artifactId>
<version>1.2.98</version> <version>1.3.1</version>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jib-maven-plugin.version>1.4.0</jib-maven-plugin.version> <jib-maven-plugin.version>1.4.0</jib-maven-plugin.version>
@ -212,6 +212,10 @@
<artifactId>HikariCP</artifactId> <artifactId>HikariCP</artifactId>
<version>3.2.0</version> <version>3.2.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>

@ -0,0 +1,3 @@
ALTER TABLE sys_incremental_channels ADD COLUMN channel_pub_key TEXT DEFAULT NULL AFTER source_code;
ALTER TABLE sys_incremental_channels ADD COLUMN platform_pub_key TEXT DEFAULT NULL AFTER channel_pub_key;
ALTER TABLE sys_incremental_channels ADD COLUMN platform_pri_key TEXT DEFAULT NULL AFTER platform_pub_key;

@ -0,0 +1,50 @@
package au.com.royalpay.payment.manage.appclient.beans;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RSvcMchBean {
/**
*
*/
private String merchantNumber;
/**
* partnerCode
*/
private String partnerCode;
/**
* CredentialCode
*/
private String credentialCode;
/**
* HostpayHost
*/
private String payHost;
/**
* logo
*/
private String logo;
/**
*
*/
private String industryCode;
/**
*
*/
private String industryName;
/**
*
*/
private String merchantName;
}

@ -0,0 +1,14 @@
package au.com.royalpay.payment.manage.appclient.core;
import com.alibaba.fastjson.JSONObject;
public interface RetailRSvcService {
/**
* Appservice code
*
* @param device
* @param sourceCode
* @return
*/
JSONObject findMchInfoBySourceCode(JSONObject device, String sourceCode);
}

@ -0,0 +1,65 @@
package au.com.royalpay.payment.manage.appclient.core.impls;
import au.com.royalpay.payment.manage.appclient.beans.RSvcMchBean;
import au.com.royalpay.payment.manage.appclient.core.RetailRSvcService;
import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.tools.codec.AESCrypt;
import au.com.royalpay.payment.tools.device.DeviceSupport;
import au.com.royalpay.payment.tools.encryptalgorithm.SignUtils;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import au.com.royalpay.payment.tools.mappers.CommonIncrementalChannelMapper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.util.Base64;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
import java.security.Key;
@Service
public class RetailRSvcServiceImpl implements RetailRSvcService {
@Resource
private ClientManager clientManager;
@Resource
private DeviceSupport deviceSupport;
@Resource
private CommonIncrementalChannelMapper commonIncrementalChannelMapper;
@Override
public JSONObject findMchInfoBySourceCode(JSONObject device, String sourceCode) {
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
JSONObject svcInfo = commonIncrementalChannelMapper.findIncreamentalChannelBySourceCode(sourceCode);
if (svcInfo == null || StringUtils.isEmpty(svcInfo.getString("channel_pub_key"))
|| StringUtils.isEmpty(svcInfo.getString("platform_pub_key")) || StringUtils.isEmpty("platform_pri_key")) {
throw new BadRequestException("this channel config is wrong");
}
RSvcMchBean svcMchBean = clientManager.findSvcMchByAccountId(device.getString("account_id"));
String aesKeyStr = Base64.encodeBase64String(AESCrypt.randomKey().getEncoded());
Key key = AESCrypt.fromKeyString(Base64.decodeBase64(aesKeyStr));
JSONObject result = (JSONObject) JSONObject.toJSON(svcMchBean);
result.put("sign_type", "RSA2");
result.put("enc_data", new JSONObject() {
{
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 = JSONObject.parseObject(JSON.toJSONString(result), Feature.OrderedField);
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));
}
}

@ -0,0 +1,26 @@
package au.com.royalpay.payment.manage.appclient.web;
import au.com.royalpay.payment.manage.appclient.core.RetailRSvcService;
import au.com.royalpay.payment.tools.CommonConsts;
import au.com.royalpay.payment.tools.device.advise.AppClientController;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
@AppClientController
@RequestMapping("/api/v1.0/retail/rsvc")
public class RetailRSvcController {
@Resource
private RetailRSvcService retailRSvcService;
@GetMapping(value = "/{source_code}/userinfo")
public JSONObject findUserInfoBySourceCode(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable String source_code) {
return retailRSvcService.findMchInfoBySourceCode(device, source_code);
}
}

@ -99,4 +99,8 @@ public interface ClientAccountMapper {
@AutoSql(type = SqlType.SELECT) @AutoSql(type = SqlType.SELECT)
@AdvanceSelect(addonWhereClause = "is_valid=1", excludeColumns = {"salt", "password_hash"}) @AdvanceSelect(addonWhereClause = "is_valid=1", excludeColumns = {"salt", "password_hash"})
List<JSONObject> findByWechatUnionId(@Param("wx_unionid")String unionId); List<JSONObject> findByWechatUnionId(@Param("wx_unionid")String unionId);
@AutoSql(type = SqlType.SELECT)
JSONObject findRSvcClientInfo(@Param("account_id")String accountId);
} }

@ -3,6 +3,7 @@ package au.com.royalpay.payment.manage.merchants.core;
import au.com.royalpay.payment.core.exceptions.EmailException; import au.com.royalpay.payment.core.exceptions.EmailException;
import au.com.royalpay.payment.manage.appclient.beans.AppClientBean; import au.com.royalpay.payment.manage.appclient.beans.AppClientBean;
import au.com.royalpay.payment.manage.appclient.beans.AppMerchantBean; import au.com.royalpay.payment.manage.appclient.beans.AppMerchantBean;
import au.com.royalpay.payment.manage.appclient.beans.RSvcMchBean;
import au.com.royalpay.payment.manage.merchants.beans.*; import au.com.royalpay.payment.manage.merchants.beans.*;
import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery; import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery;
import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig; import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig;
@ -365,6 +366,7 @@ public interface ClientManager {
/** /**
* *
*
* @param manager * @param manager
* @param clientMoniker * @param clientMoniker
* @param query * @param query
@ -505,6 +507,7 @@ public interface ClientManager {
/** /**
* / * /
*
* @param clientMoniker * @param clientMoniker
* @param incrementalService * @param incrementalService
*/ */
@ -512,6 +515,7 @@ public interface ClientManager {
/** /**
* / * /
*
* @param clientMoniker * @param clientMoniker
* @param incrementalService * @param incrementalService
*/ */
@ -519,10 +523,14 @@ public interface ClientManager {
/** /**
* *
*
* @param clientMoniker * @param clientMoniker
* @return * @return
*/ */
JSONObject partnerIncrementalServiceInfo(String clientMoniker, String incrementalId); JSONObject partnerIncrementalServiceInfo(String clientMoniker, String incrementalId);
JSONObject findByLookupCode(String code); JSONObject findByLookupCode(String code);
RSvcMchBean findSvcMchByAccountId(String accountId);
} }

@ -17,6 +17,7 @@ import au.com.royalpay.payment.core.PaymentChannelApi;
import au.com.royalpay.payment.core.exceptions.EmailException; import au.com.royalpay.payment.core.exceptions.EmailException;
import au.com.royalpay.payment.core.exceptions.InvalidShortIdException; import au.com.royalpay.payment.core.exceptions.InvalidShortIdException;
import au.com.royalpay.payment.core.mappers.SysClientMapper; import au.com.royalpay.payment.core.mappers.SysClientMapper;
import au.com.royalpay.payment.manage.appclient.beans.RSvcMchBean;
import au.com.royalpay.payment.tools.defines.IncrementalChannel; import au.com.royalpay.payment.tools.defines.IncrementalChannel;
import au.com.royalpay.payment.core.utils.OrderExpiryRuleResolver; import au.com.royalpay.payment.core.utils.OrderExpiryRuleResolver;
import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper; import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper;
@ -6164,10 +6165,29 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
JSONObject industryInfo = industryLookupMapper.findByLookupCode(code); JSONObject industryInfo = industryLookupMapper.findByLookupCode(code);
if (industryInfo == null) { if (industryInfo == null) {
return new JSONObject() {{ return new JSONObject() {{
put("lookup_code","未知行业"); put("lookup_code", "code");
put("lookup_value", "未知行业");
}}; }};
} }
return industryInfo; return industryInfo;
} }
@Override
public RSvcMchBean findSvcMchByAccountId(String accountId) {
JSONObject mchInfo = clientAccountMapper.findRSvcClientInfo(accountId);
if (mchInfo == null || mchInfo.isEmpty()) {
throw new BadRequestException("Client Not Exists!");
}
RSvcMchBean svcMchBean = new RSvcMchBean();
svcMchBean.setMerchantNumber(mchInfo.getString("username"));
svcMchBean.setMerchantName(mchInfo.getString("short_name"));
svcMchBean.setPartnerCode(mchInfo.getString("client_moniker"));
svcMchBean.setCredentialCode(mchInfo.getString("credential_code"));
svcMchBean.setPayHost(PlatformEnvironment.getEnv().mainHost());
svcMchBean.setLogo(mchInfo.getString("logo_url"));
svcMchBean.setIndustryCode(mchInfo.getString("industry"));
svcMchBean.setIndustryName(findByLookupCode(mchInfo.getString("industry")).getString("lookup_value"));
return svcMchBean;
}
} }

@ -41,4 +41,24 @@
ORDER BY a.create_time DESC ORDER BY a.create_time DESC
limit 1 limit 1
</select> </select>
<select id="findRSvcClientInfo" resultType="com.alibaba.fastjson.JSONObject">
SELECT
sa.username,
sc.client_id,
sc.client_moniker,
sc.credential_code,
sc.short_name,
sc.company_name,
ifnull(sc.logo_url,"NONE") logo_url,
sc.industry,
industry
FROM
sys_accounts sa,
sys_clients sc
WHERE
sa.account_id = #{account_id}
AND sc.client_id = sa.client_id
AND sc.is_valid = 1
AND sa.is_valid = 1
</select>
</mapper> </mapper>

@ -212,7 +212,7 @@
uib-tooltip="HF Pay" ng-if="trade.channel=='hf'"/> uib-tooltip="HF Pay" ng-if="trade.channel=='hf'"/>
<img src="/static/images/rpayplus_sign.png" <img src="/static/images/rpayplus_sign.png"
uib-tooltip="RPay+" ng-if="trade.channel=='Rpay'"/> uib-tooltip="RPay+" ng-if="trade.channel=='Rpay'"/>
{{trade.order_id2}}<span ng-if="trade.source!='system'"><i class="fa fa-question-circle-o" uib-tooltip-html="trade.htmlTooltip"></i></span> {{trade.order_id2}}<span ng-if="trade.source!='system' && trade.incremental_surcharge != null"><i class="fa fa-question-circle-o" uib-tooltip-html="trade.htmlTooltip"></i></span>
</td> </td>
<td ng-bind="trade.currency"></td> <td ng-bind="trade.currency"></td>
<td ng-bind="trade.display_amount"></td> <td ng-bind="trade.display_amount"></td>

@ -346,7 +346,7 @@
uib-tooltip="Yeepay" ng-if="trade.channel=='Yeepay'"/> uib-tooltip="Yeepay" ng-if="trade.channel=='Yeepay'"/>
<img src="/static/images/lakalapay_sign.png" <img src="/static/images/lakalapay_sign.png"
uib-tooltip="LakalaPay" ng-if="trade.channel=='LakalaPay'"/> uib-tooltip="LakalaPay" ng-if="trade.channel=='LakalaPay'"/>
{{trade.order_id2}}<span ng-if="trade.source!='system'"><i class="fa fa-question-circle-o" uib-tooltip-html="trade.htmlTooltip"></i></span> {{trade.order_id2}}<span ng-if="trade.source!='system' && trade.incremental_surcharge != null"><i class="fa fa-question-circle-o" uib-tooltip-html="trade.htmlTooltip"></i></span>
</td> </td>
<td ng-bind="trade.currency"></td> <td ng-bind="trade.currency"></td>
<td ng-bind="trade.display_amount"></td> <td ng-bind="trade.display_amount"></td>

@ -442,7 +442,7 @@
<img src="/static/images/rpayplus_sign.png" uib-tooltip="RPay+" ng-if="trade.channel=='Rpay'"/> <img src="/static/images/rpayplus_sign.png" uib-tooltip="RPay+" ng-if="trade.channel=='Rpay'"/>
<img src="/static/images/yeepay_sign.png" uib-tooltip="Yeepay" ng-if="trade.channel=='Yeepay'"/> <img src="/static/images/yeepay_sign.png" uib-tooltip="Yeepay" ng-if="trade.channel=='Yeepay'"/>
<img src="/static/images/lakalapay_sign.png" uib-tooltip="LakalaPay" ng-if="trade.channel=='LakalaPay'"/> <img src="/static/images/lakalapay_sign.png" uib-tooltip="LakalaPay" ng-if="trade.channel=='LakalaPay'"/>
{{trade.order_id}}<span ng-if="trade.source!='system'"><i class="fa fa-question-circle-o" uib-tooltip-html="trade.htmlTooltip"></i></span> {{trade.order_id}}<span ng-if="trade.source!='system' && trade.incremental_surcharge != null"><i class="fa fa-question-circle-o" uib-tooltip-html="trade.htmlTooltip"></i></span>
</td> </td>
<td> <td>
{{trade.total_amount|currency:trade.currency+' '}} {{trade.total_amount|currency:trade.currency+' '}}

@ -486,7 +486,7 @@
uib-tooltip="Yeepay" ng-if="trade.channel=='Yeepay'"/> uib-tooltip="Yeepay" ng-if="trade.channel=='Yeepay'"/>
<img src="/static/images/lakalapay_sign.png" <img src="/static/images/lakalapay_sign.png"
uib-tooltip="LakalaPay" ng-if="trade.channel=='LakalaPay'"/> uib-tooltip="LakalaPay" ng-if="trade.channel=='LakalaPay'"/>
{{trade.order_id}}<span ng-if="trade.source!='system'"><i class="fa fa-question-circle-o" uib-tooltip-html="trade.htmlTooltip"></i></span> {{trade.order_id}}<span ng-if="trade.source!='system' && trade.incremental_surcharge != null"><i class="fa fa-question-circle-o" uib-tooltip-html="trade.htmlTooltip"></i></span>
</td> </td>
<td> <td>
{{trade.total_amount|currency:trade.currency}} {{trade.total_amount|currency:trade.currency}}

@ -1,11 +1,23 @@
package au.com.royalpay.payment.manage.valid; package au.com.royalpay.payment.manage.valid;
import au.com.royalpay.payment.manage.analysis.beans.ato.CharacterUtils; import au.com.royalpay.payment.manage.analysis.beans.ato.CharacterUtils;
import au.com.royalpay.payment.manage.appclient.beans.RSvcMchBean;
import au.com.royalpay.payment.tools.codec.AESCrypt;
import au.com.royalpay.payment.tools.encryptalgorithm.SignUtils;
import com.alibaba.fastjson.JSONObject;
import com.github.stuxuhai.jpinyin.PinyinException; import com.github.stuxuhai.jpinyin.PinyinException;
import com.github.stuxuhai.jpinyin.PinyinFormat; import org.apache.commons.net.util.Base64;
import com.github.stuxuhai.jpinyin.PinyinHelper;
import org.junit.Test; import org.junit.Test;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
/** /**
* Create by yixian at 2018-09-06 8:57 * Create by yixian at 2018-09-06 8:57
*/ */
@ -16,4 +28,38 @@ public class JPinYinTest {
System.out.println(CharacterUtils.convertFullWidthToHalfWidth(CharacterUtils.convertToPinYin(test))); System.out.println(CharacterUtils.convertFullWidthToHalfWidth(CharacterUtils.convertToPinYin(test)));
} }
@Test
public void testRSA() throws NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, InvalidKeySpecException {
String rsa1_pub = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlxNzoulC++qq9a37bvNe5hyoWhlybZxrOGXRunMK84zpTlCL1tDfiwVYuXipAH8z9U0GcU6noEeY1WqIDftK89zLiUtOEkIMZsIDkiuCbJip61ArhI/oRhb6DeyRk9oLo+5kO428ZOr/9NdVJUapMEqKSEvdMzDvnU5ruU7jBcUZpLkn108478OcNTptxAvy4+xaErij8BOuIooG6F2IfIRz9TfcYV7ycaD449lks64oeMZJok+Gr+NyD8YXJDQrVw5tP1LUwDjQHJanmShCrPboSXKF6+h2Puv8F8Iy+vXZdP3Y6X9VHJdjBn3nMaohIrbuK9YCjTOAue+lFPzK+wIDAQAB";
String rsa1_pri = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXE3Oi6UL76qr1rftu817mHKhaGXJtnGs4ZdG6cwrzjOlOUIvW0N+LBVi5eKkAfzP1TQZxTqegR5jVaogN+0rz3MuJS04SQgxmwgOSK4JsmKnrUCuEj+hGFvoN7JGT2guj7mQ7jbxk6v/011UlRqkwSopIS90zMO+dTmu5TuMFxRmkuSfXTzjvw5w1Om3EC/Lj7FoSuKPwE64iigboXYh8hHP1N9xhXvJxoPjj2WSzrih4xkmiT4av43IPxhckNCtXDm0/UtTAONAclqeZKEKs9uhJcoXr6HY+6/wXwjL69dl0/djpf1Ucl2MGfecxqiEitu4r1gKNM4C576UU/Mr7AgMBAAECggEAFPmbZXPzW9yB7ehA72+UrmguK4w66eL8s/DXBIbyb0wSHFBsid+oGbodTmrlM+91PEp8aYDdHxCxtHe8+gv4pRDzpVUyOrC23hFzw3iM/BzaApS35gjA2/JWt1YwBBIS6aiwe+A61twVu12mMa200cKXnmACDxhtPC7mH+1G8cbsG23qW2LnbZoMAa8CtaE8/oVi57AsoxYdK2mEh0wgwdIVpDANWnS7WRr9Qb3VzcJNFkcd1ngt5NdjmtJaAfkV0JZuANWG/7exrUFkzTiaejeKCn3hCEmT4yD7D+27WLzrjOJDFOaPmQjcLYpWxQsckxAG1PCZcyZbW99QVl4XmQKBgQDLi9f4TwZFb55fHM9kja7KP8Ts34z6vlE2RPzd5gf6Zdt3yFxh/nl8e1m+SPzgUZnrlaSyP4HMKsEoLOGCCqyuHjxE3u8S4Y6pzZOxfD+j5t30cSfGbflyRnE1vhsHsNeQ4sx9Slcj2erZeI1IeKXbA3Z4bI5x7g4xiF8ufhMeDQKBgQC+Ahb1JNIO3JVlR5mWmcQkrlQCLCJznjoXQ2ikhtwJ4j/Gg6JZUD2OjnqX2gzIB+6DYI0Xfv6Ph31DuAQ1/pLG+Q9rRicox9PkDV7nol6ZPH0peCECVf40FvQWXlt6crWkNk8ukrQJi5Y/msFCmR1v9DA6ovaxr/KfvNA9QmlTJwKBgDaDbYQDJhrSmge/H4w+peFk0sjd1lQRRI7USyTixqA5R139O0DDdqXwI0jjI1awhBikK0fR2mFj0feAjaTWVwkK7/lB+6WC40J23Gdcb27mFeuxooVyTqxcUVWjZHna0uDq3PlxP4VKh6tWrgAKz+CoPMJj0IKSzxpU+6jn+xbBAoGAc0zfU4kxctVGTvxA5lOO49dpoRvZGCHnDGDaaiRv+At0Oel9Jgd8Izqwh99IrEWr5cs8MwrcPIqyZ9qNq5o8xUMzqRwb/TItkZDPi25LS1+acAS2uy0locRgAAboKgjb0rcmG5PobnZnCVfGeLxjUaFzdtGXM8IaT/aKwvG+6jcCgYEAnyMYkTyyyPlzJRdvQz/ovuXzI+dRvDGbkOpwZcCp5JukoQGSZvy8LCDbiMjKXq1q2/PfUdYxvala7pCBstX7MHg4dy8UvZAnAVy1jM6sJs2zXsR3d4F6/GlVO0aLd0spEgmxqEnLl84F/bRwypr6CzqpkROxUa/SbtdxSjXFqOA=";
String rsa2_pub = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoDwO29Hs7XCm7bEhNVs57Jfgr+kj0vivPcX3XvIs+jXQzvMDfNrnwcsI3cNqQ/4+tVmt9ie8Qy1yn4mjJW4Leuv+2CqIRkOmzohwzjN2F1ue4EaNUF0YJaM1OTYhTMxud/6h05h4fVapuAycJ5NZ9fZW+7pV73Jn4ZMm5pIdE4m+NDcqVUyrBqBsxmJ0QVf6qpvfU5zE9a3PhLK4YhnLT278B+J+yGKFiNO/0W5KMpVcLSZ9e29x/aPFu+SyqmkJfGECNmvRKD3JkD3+YnCBR/TQLHPallL/mUDBc7kLQqkhzdEXepfPVg99K7PggNcsyIlUMmSP9SsSUcmXLUUcHwIDAQAB";
String rsa2_pri = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCgPA7b0eztcKbtsSE1Wznsl+Cv6SPS+K89xfde8iz6NdDO8wN82ufBywjdw2pD/j61Wa32J7xDLXKfiaMlbgt66/7YKohGQ6bOiHDOM3YXW57gRo1QXRglozU5NiFMzG53/qHTmHh9Vqm4DJwnk1n19lb7ulXvcmfhkybmkh0Tib40NypVTKsGoGzGYnRBV/qqm99TnMT1rc+EsrhiGctPbvwH4n7IYoWI07/RbkoylVwtJn17b3H9o8W75LKqaQl8YQI2a9EoPcmQPf5icIFH9NAsc9qWUv+ZQMFzuQtCqSHN0Rd6l89WD30rs+CA1yzIiVQyZI/1KxJRyZctRRwfAgMBAAECggEAYpexuNY5h3vqapSzz0XbpVVqXjMA5P45rbPS2uv+etKEMeJbggab1aVdRj7Icx/Ma//LR4v5jgg34CxrY0uL6s2tGEtLYJid2bUgW/BUOFkar/sZVpqBkh8TT6mb4cpkKpdV8YF+mfiqI2I27y7+ipZRvUBRQi1N+AF4TSUYmP0N+l+13y+ndDAi45qzhhsyF7aD50jZ6cRK35PqkgWx9vEhnDHBUYVWIJ3V5D/fFiJHjTX8+a/pC8SriQvvi3p1sUdcMil3qn/6J/rytZ331h1f7IcHaR3RRfJrVd0g9JT4jUOx1wzZTLw3ZxEK3xKMRDHCIpYkDBti4fk00nZ9IQKBgQDLHUCIlNEA3WQcee/t1031N5VzxDRTy4SHW6jgDsllHOcvC2URIBga4mbczS5MYlZ2Jll3iyqDBD8FDhCdf5CE5Ey2N4DxSKPzHSqn+rdvQRAs2QaVPUcND63V7J5mpp97MzsqWzBiESG0jIoNys0IrpdrqHCkcMAtOukEZ9o+MQKBgQDJ9KB086XiS3gIYqgfutF2QuTTpm9sjuPr3Ij1Xq6xPo3Dxc1nCMNx8dnka0erwPZ1bypbQcvgjxjxuow1XsnbvY9dQpmg51eH1/oFoXHeuY4qel5LnODJ05RSPK25bYX29ezV4Fp+LX/5ZRQwJXojPvZhxB8i0RdMiNmPQzjbTwKBgQCRB0sL+w6dSndwKdUag5CjllO9fIxMhNYVfGpBye0dqJyeJ8m7h6oOkDgYUt1LJzBLXqilRhZNxJtm9ZsBipNbgFQSC+Gi51ZBgkLx/IA8DT4Kd9BOgZmZBuf+Bt03uKPJaVRGsyQB8e+aJntwy6zJFTkDYxtDH0rpQNYfEjRwEQKBgA+p3IQVnakWh2HHHRkQ6UwN1iegQgYecwkJGspFJLF0k5Q6lDrIkDgXNPolY/KrTbJAA/399W0eTCX7fQJqrqdPZX4rOzUinERZ+PdU1TscEy2yPfwJV9nvghJ6yFKYbwp/enYAJ6SfrMxQDafKUFXJfVyJ1IxjwTXba1xUL2W7AoGAc6PzW66wEVYqvzfWzWr22tR0JS87b0h9eqyqHib5XATKmpKpJztMZvgj50fCGWxWcwW+QoEoxFZqRXWiFiS1Tax+UY7QDRF55JOOfZyl1+eerAQAq99sVg0QAom/9V4jZNfX3JZvIYI15opGSdI2hsRrtW7CBvYxsGz7mT3cLoE=";
RSvcMchBean aaa = new RSvcMchBean();
aaa.setMerchantNumber("taylor");
aaa.setIndustryName("其他服务行业");
aaa.setIndustryCode("331");
aaa.setCredentialCode("7dlXrdvhyuN73NDpZsGYftdIMuZms1Qc");
aaa.setLogo("https://file.royalpay.com.au/open/2017/07/24/1500898932409_7uFGyWIpk4IRTQyT3INk2Nk3KHedOG.png");
aaa.setPayHost("http://192.168.1.6:9008/");
aaa.setPartnerCode("PINE");
aaa.setMerchantName("TEST");
String pubKeyEncCredentialCode = SignUtils.encData(aaa.getCredentialCode(), rsa1_pub);
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) JSONObject.toJSON(aaa);
result.put("sign_type", "RSA2");
result.put("enc_data", decCredentialCode);
result.put("nonce_str", aesKeyStr);
result.put("timestamp", System.currentTimeMillis());
result.put("sign", SignUtils.buildSign(result.toJSONString(), rsa2_pri));
System.err.println(result);
String signa = result.getString("sign");
result.remove("sign");
SignUtils.checkStringSign(result.toJSONString(), signa, rsa2_pub);
String aesData = new String(AESCrypt.decrypt(Base64.decodeBase64(result.getString("enc_data")), key), StandardCharsets.UTF_8);
System.err.println(SignUtils.decData(aesData, rsa1_pri));
}
} }

Loading…
Cancel
Save