From: kaixiang.xia Date: Fri, 30 Apr 2021 07:58:11 +0000 (+0800) Subject: 大理线下签约同步接口定义 X-Git-Tag: 1.0.32^2~3 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=cde662a495b82311f11aee8ebffa700cb88cec32;p=epayment%2Ffood_payapi.git 大理线下签约同步接口定义 --- diff --git a/payapi/sql/update-210106.sql b/payapi/sql/update-210106.sql index 803b1826..45a6a77d 100644 --- a/payapi/sql/update-210106.sql +++ b/payapi/sql/update-210106.sql @@ -30,3 +30,10 @@ CREATE INDEX idx1_ynrccpay_sign ON tb_ynrccpay_sign(bankcardno,shopaccno,status) INSERT INTO "tb_transcode" ("transcode_id", "transcode", "transname", "tenantid") VALUES (4, 3050, '农商行网关快捷支付', '{tenantid}'); commit; + + +INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('26', '农商行网关支付商户号', NULL, 'ynrcc.netpay.Mer_Id', 'f', 'ynrccpay', '{tenantid}'); +INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('27', '农商行网关支付商户名', NULL, 'ynrcc.netpay.Mer_IdName', 'f', 'ynrccpay', '{tenantid}'); +INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('28', '农商行网关支付回调地址', NULL, 'ynrcc.netpay.MerURL', 'f', 'ynrccpay', '{tenantid}'); +INSERT INTO "public"."tb_sourcetype_config"("id", "config_name", "config_value", "configid", "globalflag", "sourcetype", "tenantid") VALUES ('25', '农商行网关支付地址', 'https://ebank.ynrcc.com/pweb/%s?LoginType=C&_locale=zh_CN&BankId=9999', 'ynrcc.netpay.URL', 't', 'ynrccpay', '{tenantid}'); +commit; \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt index 21edbe8b..5c3163c6 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt @@ -5,6 +5,8 @@ import com.google.gson.reflect.TypeToken import com.supwisdom.dlpay.api.exception.RequestParamCheckException import com.supwisdom.dlpay.framework.util.* import com.supwisdom.dlpay.util.DesUtil +import java.util.* +import kotlin.collections.ArrayList class DaliDatasyncParam { var app_id: String = "" @@ -85,4 +87,59 @@ class DaliDatasyncErrorDetail { var errmsg: String = "" } +/** + * 农商行推送线下签约数据报文 + * */ +class YnrccSendSignInfoParam { + var appId: String = "" + var bankCardNo: String = "" + var idType: String = "" + var idNo: String = "" + var phone: String = "" + var signStatus: String = "" + var timestamp: String = "" + var signType: String = "" + var sign: String = "" + + fun checkParam(): Boolean { + if (StringUtil.isEmpty(appId)) { + throw RequestParamCheckException("请求参数错误[应用ID为空]") + } + if(StringUtil.isEmpty(bankCardNo)){ + throw RequestParamCheckException("请求参数错误[银行卡号为空]") + } + if (StringUtil.isEmpty(idType)) { + throw RequestParamCheckException("请求参数错误[证件类型为空]") + } + if (StringUtil.isEmpty(idNo)) { + throw RequestParamCheckException("请求参数错误[证件号码为空]") + } + if (StringUtil.isEmpty(phone)) { + throw RequestParamCheckException("请求参数错误[手机号为空]") + } + if (StringUtil.isEmpty(phone)) { + throw RequestParamCheckException("请求参数错误[手机号为空]") + } + if(!listOf("Y","N").contains(signStatus)){ + throw RequestParamCheckException("请求参数错误[签约状态(Y/N)]") + } + if (!DateUtil.checkDatetimeValid(timestamp, DateUtil.DATETIME_FMT)) { + throw RequestParamCheckException("请求参数错误[时间戳]") + } + if (StringUtil.isEmpty(signType) + || !"HmacSHA256".equals(signType, true)) { + throw RequestParamCheckException("请求参数错误[签名算法]") + } + if (StringUtil.isEmpty(sign)) { + throw RequestParamCheckException("请求参数错误[签名为空]") + } + return true + } + + fun checkSign(key: String): Boolean { + val signData ="appId=$appId&bankCardNo=$bankCardNo&idType=$idType&idNo=$idNo&phone=$phone&signStatus=$signStatus×tamp=$timestamp" + return sign.equals(HmacUtil.HMACSHA256(signData, key), true) + } +} + diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt index ee0d97ac..d017f6e0 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt @@ -4,6 +4,7 @@ import com.google.gson.Gson import com.supwisdom.dlpay.api.bean.DaliDatasyncDetail import com.supwisdom.dlpay.api.bean.DaliDatasyncErrorDetail import com.supwisdom.dlpay.api.bean.DaliDatasyncParam +import com.supwisdom.dlpay.api.bean.YnrccSendSignInfoParam import com.supwisdom.dlpay.api.exception.RequestParamCheckException import com.supwisdom.dlpay.api.service.DaliDatasyncService import com.supwisdom.dlpay.framework.ResponseBodyBuilder @@ -247,5 +248,39 @@ class DaliDatasyncApiController { } } + /** + * ============================================================================ + * 大理卡管系统推送市民卡信息同步接口 + * ============================================================================ + * */ + @PostMapping("/signsync") + fun daliDatasync(@RequestBody param: YnrccSendSignInfoParam): ResponseEntity { + try{ + if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置 + param.checkParam() + val appid = systemUtilService.getSysparaValue(2022) + val appkey = systemUtilService.getSysparaValue(2023) + if (StringUtil.isEmpty(appid) || StringUtil.isEmpty(appkey)) { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(1000, "系统参数未配置")) + } else if (appid != param.appId) { + throw RequestParamCheckException("请求参数错误[应用ID错误]") + } + if (!param.checkSign(appkey)) { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(2002, "签名错误")) + } + + return ResponseEntity.ok(mapOf("retcode" to "0000", "retmsg" to "SUCCESS")) + }catch (ex: RequestParamCheckException) { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(2001, ex.message ?: "请求参数错误")) + }catch (e:Exception){ + e.printStackTrace() + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(4000, "系统业务处理异常")) + } + + } }