diff --git a/pom.xml b/pom.xml
index f79740693..d8d5c4c3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
4.0.0
manage
- 1.2.97
+ 1.3.0
UTF-8
1.4.0
@@ -212,6 +212,10 @@
HikariCP
3.2.0
+
+ org.projectlombok
+ lombok
+
diff --git a/src/db/20191202/R-service.sql b/src/db/20191202/R-service.sql
new file mode 100644
index 000000000..d4603bc0c
--- /dev/null
+++ b/src/db/20191202/R-service.sql
@@ -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;
\ No newline at end of file
diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/beans/RSvcMchBean.java b/src/main/java/au/com/royalpay/payment/manage/appclient/beans/RSvcMchBean.java
new file mode 100644
index 000000000..282b7db6a
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/beans/RSvcMchBean.java
@@ -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;
+
+ /**
+ * 支付Host:payHost
+ */
+ private String payHost;
+
+ /**
+ * 商户logo地址
+ */
+ private String logo;
+
+ /**
+ * 行业编号
+ */
+ private String industryCode;
+
+ /**
+ * 行业名称
+ */
+ private String industryName;
+
+ /**
+ * 商户名称
+ */
+ private String merchantName;
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailRSvcService.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailRSvcService.java
new file mode 100644
index 000000000..96e0295d9
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailRSvcService.java
@@ -0,0 +1,14 @@
+package au.com.royalpay.payment.manage.appclient.core;
+
+import com.alibaba.fastjson.JSONObject;
+
+public interface RetailRSvcService {
+ /**
+ * App通过service code获取用户信息
+ *
+ * @param device
+ * @param sourceCode
+ * @return
+ */
+ JSONObject findMchInfoBySourceCode(JSONObject device, String sourceCode);
+}
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
new file mode 100644
index 000000000..06238fea9
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java
@@ -0,0 +1,53 @@
+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 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 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("nonce_str", aesKeyStr);
+ result.put("timestamp", System.currentTimeMillis());
+ result.put("sign", SignUtils.buildSign(result.toJSONString(), svcInfo.getString("platform_pri_key")));
+ return result;
+ }
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailRSvcController.java b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailRSvcController.java
new file mode 100644
index 000000000..f4debc8cf
--- /dev/null
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailRSvcController.java
@@ -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);
+ }
+
+}
diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.java
index 1ae4eee05..7da29bd8f 100644
--- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.java
+++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.java
@@ -99,4 +99,8 @@ public interface ClientAccountMapper {
@AutoSql(type = SqlType.SELECT)
@AdvanceSelect(addonWhereClause = "is_valid=1", excludeColumns = {"salt", "password_hash"})
List findByWechatUnionId(@Param("wx_unionid")String unionId);
+
+ @AutoSql(type = SqlType.SELECT)
+ JSONObject findRSvcClientInfo(@Param("account_id")String accountId);
+
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java
index 250439283..fb979ebcb 100644
--- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java
+++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java
@@ -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.manage.appclient.beans.AppClientBean;
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.tradelog.beans.TradeLogQuery;
import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig;
@@ -40,7 +41,7 @@ public interface ClientManager {
JSONObject listClients(JSONObject manager, PartnerQuery query);
- void exportClients(JSONObject manager,PartnerQuery query,HttpServletResponse resp);
+ void exportClients(JSONObject manager, PartnerQuery query, HttpServletResponse resp);
JSONObject listClientsByApp(JSONObject manager, AppMerchantBean query);
@@ -136,7 +137,7 @@ public interface ClientManager {
void toggleAccountReceiveNoticeByOpenId(String openid, boolean enable);
@Transactional
- void togglePayNotice(JSONObject account,String clientMoniker, boolean enable);
+ void togglePayNotice(JSONObject account, String clientMoniker, boolean enable);
@Transactional
void changeRole(JSONObject manager, String clientMoniker, String accountId, int role);
@@ -150,7 +151,7 @@ public interface ClientManager {
JSONObject getAccountByOpenId(String openid);
- void updateClientBDUser(JSONObject account,String clientMoniker, int managerId);
+ void updateClientBDUser(JSONObject account, String clientMoniker, int managerId);
void refreshClientCredentialCode(JSONObject manager, String clientMoniker);
@@ -183,13 +184,13 @@ public interface ClientManager {
JSONObject getQRCode(JSONObject manager, String clientMoniker, QRCodeConfig config);
- String getQrCodeBoard(JSONObject client, QRCodeConfig config,JSONObject account,String plantform);
+ String getQrCodeBoard(JSONObject client, QRCodeConfig config, JSONObject account, String plantform);
- void writeAggregateQrCodeBoard(JSONObject manager, String clientMoniker, QRCodeConfig config, OutputStream ous,String plantform);
+ void writeAggregateQrCodeBoard(JSONObject manager, String clientMoniker, QRCodeConfig config, OutputStream ous, String plantform);
- void writeCBBankAggregateQrCodeBoard(JSONObject manager, String clientMoniker, OutputStream ous,String plantform);
+ void writeCBBankAggregateQrCodeBoard(JSONObject manager, String clientMoniker, OutputStream ous, String plantform);
- void writeQrCodeBoard(JSONObject manager, String clientMoniker, QRCodeConfig config, OutputStream ous,String plantform);
+ void writeQrCodeBoard(JSONObject manager, String clientMoniker, QRCodeConfig config, OutputStream ous, String plantform);
void writePoster(JSONObject manager, String clientMoniker, OutputStream ous);
@@ -198,7 +199,7 @@ public interface ClientManager {
void writeActivityPoster(JSONObject manager, String clientMoniker, String activityName, OutputStream ous) throws IOException;
@Transactional
- void updateTimeZone(JSONObject account,String clientMoniker, String timezone);
+ void updateTimeZone(JSONObject account, String clientMoniker, String timezone);
JSONObject listClientDevices(JSONObject manager, String clientMoniker, String remark, int page, int limit, String client_type, String[] client_ids);
@@ -210,19 +211,19 @@ public interface ClientManager {
JSONObject getBankInfo(JSONObject manager, String clientMoniker, String bsb_no);
- void setMaxOrderAmount(JSONObject account,String clientMoniker, BigDecimal limit);
+ void setMaxOrderAmount(JSONObject account, String clientMoniker, BigDecimal limit);
- void setClientQRCodePaySurCharge(JSONObject account,String clientMoniker, boolean paySurcharge);
+ void setClientQRCodePaySurCharge(JSONObject account, String clientMoniker, boolean paySurcharge);
- void setClientApiPaySurCharge(JSONObject account,String clientMoniker, boolean enableApiSurcharge);
+ void setClientApiPaySurCharge(JSONObject account, String clientMoniker, boolean enableApiSurcharge);
- void setClientRetailPaySurCharge(JSONObject account,String clientMoniker, boolean paySurcharge);
+ void setClientRetailPaySurCharge(JSONObject account, String clientMoniker, boolean paySurcharge);
- void setClientCBBankPaySurCharge(JSONObject account,String clientMoniker, boolean paySurcharge);
+ void setClientCBBankPaySurCharge(JSONObject account, String clientMoniker, boolean paySurcharge);
- void setClientTaxInSurcharge(JSONObject account,String clientMoniker, boolean taxInSurcharge);
+ void setClientTaxInSurcharge(JSONObject account, String clientMoniker, boolean taxInSurcharge);
- void setClientCustomerTaxFree(JSONObject account,String clientMoniker, boolean customerTaxFree);
+ void setClientCustomerTaxFree(JSONObject account, String clientMoniker, boolean customerTaxFree);
List listClientsForSettlement();
@@ -282,7 +283,7 @@ public interface ClientManager {
void changeCBBankPaymentPage(JSONObject account, String paypad_version);
- void changeManualSettle(JSONObject account , int client_id, boolean manual_settle,String operator_id,int type,String operation);
+ void changeManualSettle(JSONObject account, int client_id, boolean manual_settle, String operator_id, int type, String operation);
void changeQRCodePaySurcharge(JSONObject account, boolean paySurcharge);
@@ -296,37 +297,37 @@ public interface ClientManager {
void changeRequireRemark(JSONObject account, boolean requireRemark);
- void changeSurcharge(JSONObject account,JSONObject device, UpdateSurchargeDTO updateSurchargeDTO);
+ void changeSurcharge(JSONObject account, JSONObject device, UpdateSurchargeDTO updateSurchargeDTO);
void refusePartner(String clientMoniker, JSONObject manager, String refuse_remark);
JSONArray getAllClientIds(int clientId);
- void updateAppClient(JSONObject account,int client_id, AppClientBean appClientBean);
+ void updateAppClient(JSONObject account, int client_id, AppClientBean appClientBean);
- void setSkipClearing(JSONObject account,String clientMoniker, Boolean skip_clearing,String remark);
+ void setSkipClearing(JSONObject account, String clientMoniker, Boolean skip_clearing, String remark);
void setSurchargeMode(JSONObject account, String clientMoniker, String surcharge_mode);
JSONObject surchargeAccount(JSONObject account, String clientMoniker);
- void setAllowSurchargeCredit(JSONObject account,String clientMoniker, Boolean allow_surcharge_credit);
+ void setAllowSurchargeCredit(JSONObject account, String clientMoniker, Boolean allow_surcharge_credit);
- List getAccountTransactions(JSONObject account,String clientMoniker);
+ List getAccountTransactions(JSONObject account, String clientMoniker);
- List getAccountDetailByMonths(JSONObject account,String clientMoniker);
+ List getAccountDetailByMonths(JSONObject account, String clientMoniker);
- List getAccountTransactionsByDetailId(JSONObject account,String clientMoniker, String detailId);
+ List getAccountTransactionsByDetailId(JSONObject account, String clientMoniker, String detailId);
- List getAccountMonthDetails(JSONObject account,String clientMoniker);
+ List getAccountMonthDetails(JSONObject account, String clientMoniker);
- void saveAccountTransaction(JSONObject account,String clientMoniker, JSONObject transaction);
+ void saveAccountTransaction(JSONObject account, String clientMoniker, JSONObject transaction);
- void enableGatewayUpgrade(JSONObject account,String clientMoniker, boolean gatewayUpgrade);
+ void enableGatewayUpgrade(JSONObject account, String clientMoniker, boolean gatewayUpgrade);
- void enableGatewayAlipayOnline(JSONObject account,String clientMoniker, boolean gatewayAlipayOnline);
+ void enableGatewayAlipayOnline(JSONObject account, String clientMoniker, boolean gatewayAlipayOnline);
- void setCustomerSurchargeRate(JSONObject account,String clientMoniker, BigDecimal customer_surcharge_rate);
+ void setCustomerSurchargeRate(JSONObject account, String clientMoniker, BigDecimal customer_surcharge_rate);
void setPartnerPublicKeyConfig(JSONObject account, String ipWhitelistConfig);
@@ -334,17 +335,17 @@ public interface ClientManager {
void setIpWhitelistConfig(JSONObject account, String ipWhitelistConfig);
- void setOrderExpiryConfig(JSONObject account,String clientMoniker, String orderExpiryConfig);
+ void setOrderExpiryConfig(JSONObject account, String clientMoniker, String orderExpiryConfig);
void getAgreeFile(String clientMoniker, JSONObject manager) throws Exception;
- void getAggregateAgreeFile(String clientMoniker, JSONObject manager,boolean renewal) throws Exception;
+ void getAggregateAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception;
- void getNewAggregateAgreeFile(String clientMoniker, JSONObject manager,boolean renewal) throws Exception;
+ void getNewAggregateAgreeFile(String clientMoniker, JSONObject manager, boolean renewal) throws Exception;
void temporaryExportPdf(String clientMoniker, JSONObject manager, HttpServletResponse httpResponse) throws Exception;
- void importAgreeFile(String clientMoniker, JSONObject manager, String sourceFile,boolean renewal);
+ void importAgreeFile(String clientMoniker, JSONObject manager, String sourceFile, boolean renewal);
void completeAgree(String clientMoniker, JSONObject manager);
@@ -356,17 +357,18 @@ public interface ClientManager {
/**
* 导出清算日志
+ *
* @param manager
* @param clientMoniker
* @param query
*/
- void excelSettlementLog(JSONObject manager, String clientMoniker, TradeLogQuery query,HttpServletResponse response);
+ void excelSettlementLog(JSONObject manager, String clientMoniker, TradeLogQuery query, HttpServletResponse response);
void updateRefundPwd(JSONObject account, String pwd);
void validRefundPwd(JSONObject account, String pwd);
- void setWeekendDelay(JSONObject account,String client_moniker,int clientId, boolean delay);
+ void setWeekendDelay(JSONObject account, String client_moniker, int clientId, boolean delay);
List listSubMerchantIdApplys(JSONObject manager, String clientMoniker);
@@ -374,7 +376,7 @@ public interface ClientManager {
List listYeepaySubMerchantIdApplys(JSONObject manager, String clientMoniker);
- String subMerchantApplication(String clientMoniker, SubMerchantIdApply subMerchantApply,JSONObject manager);
+ String subMerchantApplication(String clientMoniker, SubMerchantIdApply subMerchantApply, JSONObject manager);
void registerAlipayGms(String clientMoniker, JSONObject manager);
@@ -390,25 +392,25 @@ public interface ClientManager {
String queryAlipayOnlineGmsStatus(String clientMoniker, JSONObject manager);
- List listMerchantIds(String clientMoniker,JSONObject manager);
+ List listMerchantIds(String clientMoniker, JSONObject manager);
void clearCacheSubMerchantIdApplices(String clientMoniker);
- JSONObject getCheckClientInfo(int client_id,String account_id, String channel);
+ JSONObject getCheckClientInfo(int client_id, String account_id, String channel);
- List getClientSubMerchantIdLogs(String clientMoniker,JSONObject manager);
+ List getClientSubMerchantIdLogs(String clientMoniker, JSONObject manager);
void applyToCompliance(String client_moniker, JSONObject account);
- void sendVerifyEmail(JSONObject client,String accountId);
+ void sendVerifyEmail(JSONObject client, String accountId);
JSONObject getWithConfig(int client_id);
List getClientsByBD(String bd_user);
- JSONObject simpleQuery(JSONObject param, int page,int limit);
+ JSONObject simpleQuery(JSONObject param, int page, int limit);
- JSONObject getByEmail(String email, int page, int limit,List ExceptClientIds);
+ JSONObject getByEmail(String email, int page, int limit, List ExceptClientIds);
void addSub(String client_moniker, JSONObject manager);
@@ -416,25 +418,25 @@ public interface ClientManager {
String getShortLink(String client_moniker);
- String getGatewayShortLink(String client_moniker,String channel);
+ String getGatewayShortLink(String client_moniker, String channel);
@Transactional
- void switchHfLink(JSONObject manager, String clientMoniker,boolean allow);
+ void switchHfLink(JSONObject manager, String clientMoniker, boolean allow);
@Transactional
- void switchGatewayLink(JSONObject manager, String clientMoniker,String channel,boolean allow);
+ void switchGatewayLink(JSONObject manager, String clientMoniker, String channel, boolean allow);
void sendHfEmailNotice(JSONObject order);
void sendGatewayEmailNotice(JSONObject order);
- void subRpayMerchantApplication(String clientMoniker,JSONObject merchantInfo, JSONObject manager);
+ void subRpayMerchantApplication(String clientMoniker, JSONObject merchantInfo, JSONObject manager);
- void subYeepayMerchantApplication(String clientMoniker,JSONObject merchantInfo, JSONObject manager);
+ void subYeepayMerchantApplication(String clientMoniker, JSONObject merchantInfo, JSONObject manager);
- void subYeepayMerchantAdd(String clientMoniker,JSONObject merchantInfo, JSONObject manager);
+ void subYeepayMerchantAdd(String clientMoniker, JSONObject merchantInfo, JSONObject manager);
- void reSubYeepayMerchantApplication(String clientMoniker,JSONObject merchantInfo, JSONObject manager);
+ void reSubYeepayMerchantApplication(String clientMoniker, JSONObject merchantInfo, JSONObject manager);
void updateAllPartnerPassword(String clientMoniker);
@@ -445,7 +447,7 @@ public interface ClientManager {
*
* @param clientId
*/
- boolean postponeClientRate(int clientId, String clientMoniker,String nextYearExipryDate);
+ boolean postponeClientRate(int clientId, String clientMoniker, String nextYearExipryDate);
JSONObject comListPartnerSelection(JSONObject manager, PartnerQuery query);
@@ -474,7 +476,7 @@ public interface ClientManager {
*/
void resetRefundPassword(JSONObject account, JSONObject json);
- void resetRefundPasswordByManage(String clientMoniker,JSONObject manage, JSONObject json);
+ void resetRefundPasswordByManage(String clientMoniker, JSONObject manage, JSONObject json);
List listLevel3Client(int client_id);
@@ -496,20 +498,23 @@ public interface ClientManager {
/**
* 保存/修改增值服务配置
+ *
* @param clientMoniker
* @param incrementalService
*/
- void changePartnerIncrementalService(String clientMoniker, JSONObject incrementalService,JSONObject manager);
+ void changePartnerIncrementalService(String clientMoniker, JSONObject incrementalService, JSONObject manager);
/**
* 禁用/启用增值服务
+ *
* @param clientMoniker
* @param incrementalService
*/
- void changeSwitchIncrementalService(String clientMoniker, JSONObject incrementalService,JSONObject manager);
+ void changeSwitchIncrementalService(String clientMoniker, JSONObject incrementalService, JSONObject manager);
/**
* 获取商户增值服务详情
+ *
* @param clientMoniker
* @return
*/
@@ -517,4 +522,6 @@ public interface ClientManager {
JSONObject findByLookupCode(String code);
+ RSvcMchBean findSvcMchByAccountId(String accountId);
+
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java
index 666fcc129..0f7844be0 100644
--- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java
@@ -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.InvalidShortIdException;
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.core.utils.OrderExpiryRuleResolver;
import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper;
@@ -6139,14 +6140,33 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
@Override
- public JSONObject findByLookupCode(String code){
+ public JSONObject findByLookupCode(String code) {
JSONObject industryInfo = industryLookupMapper.findByLookupCode(code);
- if(industryInfo==null){
- return new JSONObject(){{
- put("lookup_code","未知行业");
+ if (industryInfo == null) {
+ return new JSONObject() {{
+ put("lookup_code", "code");
+ put("lookup_value", "未知行业");
}};
}
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;
+ }
+
}
diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.xml
index 8abdc3f0d..b1b473e4a 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientAccountMapper.xml
@@ -41,4 +41,24 @@
ORDER BY a.create_time DESC
limit 1
+
diff --git a/src/test/java/au/com/royalpay/payment/manage/valid/JPinYinTest.java b/src/test/java/au/com/royalpay/payment/manage/valid/JPinYinTest.java
index 46c8871e7..cef5a20dd 100644
--- a/src/test/java/au/com/royalpay/payment/manage/valid/JPinYinTest.java
+++ b/src/test/java/au/com/royalpay/payment/manage/valid/JPinYinTest.java
@@ -1,11 +1,23 @@
package au.com.royalpay.payment.manage.valid;
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.PinyinFormat;
-import com.github.stuxuhai.jpinyin.PinyinHelper;
+import org.apache.commons.net.util.Base64;
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
*/
@@ -16,4 +28,38 @@ public class JPinYinTest {
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));
+
+ }
}