From 9ac244038a6efd54f8ebc117044ffe7993ad5694 Mon Sep 17 00:00:00 2001 From: "taylor.dang" Date: Mon, 2 Dec 2019 22:30:39 +0800 Subject: [PATCH] =?UTF-8?q?[Y]=20R=20service=20=E5=8A=A0=E5=AF=86=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 +- src/db/20191202/R-service.sql | 3 + .../manage/appclient/beans/RSvcMchBean.java | 50 ++++++++ .../appclient/core/RetailRSvcService.java | 14 +++ .../core/impls/RetailRSvcServiceImpl.java | 53 +++++++++ .../appclient/web/RetailRSvcController.java | 26 ++++ .../mappers/system/ClientAccountMapper.java | 4 + .../manage/merchants/core/ClientManager.java | 111 ++++++++++-------- .../core/impls/ClientManagerImpl.java | 28 ++++- .../mappers/system/ClientAccountMapper.xml | 20 ++++ .../payment/manage/valid/JPinYinTest.java | 50 +++++++- 11 files changed, 306 insertions(+), 59 deletions(-) create mode 100644 src/db/20191202/R-service.sql create mode 100644 src/main/java/au/com/royalpay/payment/manage/appclient/beans/RSvcMchBean.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailRSvcService.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java create mode 100644 src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailRSvcController.java 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)); + + } }