大理线下签约同步接口定义
diff --git a/payapi/sql/update-210106.sql b/payapi/sql/update-210106.sql
index 803b182..45a6a77 100644
--- a/payapi/sql/update-210106.sql
+++ b/payapi/sql/update-210106.sql
@@ -30,3 +30,10 @@
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 21edbe8..5c3163c 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.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 @@
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 ee0d97a..d017f6e 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.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 @@
}
}
+ /**
+ * ============================================================================
+ * 大理卡管系统推送市民卡信息同步接口
+ * ============================================================================
+ * */
+ @PostMapping("/signsync")
+ fun daliDatasync(@RequestBody param: YnrccSendSignInfoParam): ResponseEntity<Any> {
+ 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, "系统业务处理异常"))
+ }
+
+ }
}