From: sijun.li Date: Wed, 30 Sep 2020 06:16:11 +0000 (+0800) Subject: 修改绑定签约、解约接口 X-Git-Tag: 1.0.27^2~5 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=9a9f482224aa3f71dc466f9fe496ea21fcb20349;p=epayment%2Ffood_payapi.git 修改绑定签约、解约接口 --- diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java new file mode 100644 index 00000000..92428f00 --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java @@ -0,0 +1,34 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; + +@Getter +@Setter +public class BindCardParam extends APIRequestParam { + @Sign + @NotEmpty(message = "卡号不能为空") + private String cardno; + @Sign + @NotEmpty(message = "姓名不能为空") + private String name; + @Sign + @NotEmpty(message = "证件类型不能为空") + private String idtype; + @Sign + @NotEmpty(message = "证件号不能为空") + private String idno; + @Sign + @NotEmpty(message = "手机号不能为空") + private String phone; + + @Override + public boolean checkParam() throws RequestParamCheckException { + return true; + } +} diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java new file mode 100644 index 00000000..cca72786 --- /dev/null +++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java @@ -0,0 +1,31 @@ +package com.supwisdom.dlpay.api.bean; + +import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.Sign; +import com.supwisdom.dlpay.api.exception.RequestParamCheckException; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; + +@Getter +@Setter +public class QrcodeParam extends APIRequestParam { + @Sign + @NotEmpty(message = "用户id不能为空") + private String userid; + @Sign + @NotEmpty(message = "手机用户id不能为空") + private String uid; + @Sign + @NotEmpty(message = "secertkey不能为空") + private String secertkey; + @Sign + @NotEmpty(message = "rsapublic不能为空") + private String rsapublic; + + @Override + public boolean checkParam() throws RequestParamCheckException { + return true; + } +} \ No newline at end of file diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java index 55aa02e7..39a759e8 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java @@ -55,4 +55,15 @@ public interface UserProxy { @PostMapping("/api/user/updateCardTransStatus") ApiResponse updateCardTransStatus(@RequestParam("cardno") String cardno,@RequestParam("status") String status); + @PostMapping("/api/user/bindcard") + Map bindCard(@RequestBody BindCardParam param); + + @PostMapping("/api/user/signbxy") + ApiResponse signbxy(@RequestParam("userid") String userid,@RequestParam("code") String code,@RequestParam("phone") String phone); + + @PostMapping("/api/user/unsignbxy") + ApiResponse unsignbxy(@RequestParam("userid") String userid,@RequestParam("phone") String phone); + + @PostMapping("/api/user/qrcode") + Map qrcode(@RequestBody QrcodeParam param); } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt index 14a7bf82..d20d6160 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt @@ -1,13 +1,18 @@ package com.supwisdom.dlpay.api.controller +import com.supwisdom.dlpay.agent.citizencard.YnrccUtil +import com.supwisdom.dlpay.agent.service.CitizencardPayService import com.supwisdom.dlpay.api.bean.* import com.supwisdom.dlpay.api.exception.RequestParamCheckException import com.supwisdom.dlpay.api.service.CardService import com.supwisdom.dlpay.api.service.KafkaSendMsgService +import com.supwisdom.dlpay.api.service.QRCodeService import com.supwisdom.dlpay.api.service.UserService import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.ResponseBodyBuilder +import com.supwisdom.dlpay.framework.util.TradeDict import com.supwisdom.dlpay.framework.util.TradeErrorCode +import com.supwisdom.dlpay.mobile.service.MobileApiService import com.supwisdom.dlpay.system.bean.LevelBean import com.supwisdom.dlpay.system.service.PointsService import org.apache.commons.beanutils.BeanUtils @@ -27,6 +32,15 @@ class UserAPIController { private lateinit var kafkaSendMsgService: KafkaSendMsgService @Autowired private lateinit var pointsService: PointsService + @Autowired + private lateinit var mobileApiService: MobileApiService + @Autowired + private lateinit var userService: UserService + @Autowired + private lateinit var citizencardPayService: CitizencardPayService + @Autowired + private lateinit var qrcodeService: QRCodeService + @PostMapping("/open") @@ -263,4 +277,101 @@ class UserAPIController { .fail(ret.retcode, ret.retmsg)) } } + + /** + * 用户绑卡 + */ + @PostMapping("/bindcard") + fun bindCard(@RequestBody param: BindCardParam):ResponseEntity{ + val card = mobileApiService.findCardByNo(param.cardno) + ?: return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(400, "银行卡号有误")) + if (card.userid.isNullOrEmpty() || card.status != TradeDict.STATUS_NORMAL) { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(500, "银行卡号信息有误")) + } + val person = userService.findOnePersonByUserid(card.userid) + if (person.name != param.name) { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(400, "绑定信息有误[姓名]")) + } + if (person.idtype != param.idtype || person.idno != param.idno) { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(400, "绑定信息有误[证件类型/证件号]")) + } + var signed = "" + //call api + val resp = citizencardPayService.bindCard(param.cardno, param.name, param.idtype, param.idno, param.phone) + if (resp.code != "0000") { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(500, resp.message)) + } + if (resp.sinstatus == YnrccUtil.TRANSTYPE_SIGNCARD ) { + signed = TradeDict.STATUS_YES + if(!card.signed){ + card.signed = true + mobileApiService.saveCard(card) + } + } + return ResponseEntity.ok(ResponseBodyBuilder.create().data("signed", signed) + .success("ok")) + } + + /** + * 签约银行协议 + */ + @PostMapping("/signbxy") + fun signbxy(userid: String, code: String, phone: String): ResponseEntity { + val card = mobileApiService.findCardByUserid(userid) + ?: return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(400, "卡片不存在,请重新绑定")) + //call sign api + val person = userService.findOnePersonByUserid(card.userid) + val resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, phone, YnrccUtil.TRANSTYPE_SIGNCARD, code) + if (resp.code != "0000") { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(500, resp.message)) + } + card.signed = true + mobileApiService.saveCard(card) + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success("ok")) + } + + /** + * 用户解约 + */ + @PostMapping("/unsignbxy") + fun unsignbxy(userid: String,phone:String): ResponseEntity { + val card = mobileApiService.findCardByUserid(userid) + ?: return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(400, "银行卡不存在,不能解除代扣协议")) + //call sign api + val person = userService.findOnePersonByUserid(card.userid) + val captcha = ""//此处为验证码,暂由此参数代替 + var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, phone, YnrccUtil.TRANSTYPE_UNSIGNCARD, captcha) + if (resp.code != "0000") { + return ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(500, resp.message)) + } + card.signed = false + mobileApiService.saveCard(card) + return ResponseEntity.ok(ResponseBodyBuilder.create() + .success("ok")) + } + + /** + * 二维码 + */ + @PostMapping("/qrcode") + fun qrcode(@RequestBody param: QrcodeParam): ResponseEntity { + val resp = qrcodeService.encodeCode(param) + return if (resp.retcode == 0) { + ResponseEntity.ok(ResponseBodyBuilder.create().data("qrcode", resp.retmsg) + .success("ok")) + } else { + ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(500, resp.retmsg)) + } + } } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt index f26dafa0..31da5df8 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt @@ -3,6 +3,7 @@ package com.supwisdom.dlpay.api.service.impl import com.google.gson.Gson import com.supwisdom.dlpay.api.bean.ApiResponse import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse +import com.supwisdom.dlpay.api.bean.QrcodeParam import com.supwisdom.dlpay.api.service.QRCodeService import com.supwisdom.dlpay.api.service.UserService import com.supwisdom.dlpay.framework.service.SystemUtilService @@ -30,8 +31,9 @@ class QRCodeServiceImpl:QRCodeService{ val logger = KotlinLogging.logger { } - override fun encodeCode(uid:String): ApiResponse { + override fun encodeCode(param: QrcodeParam): ApiResponse { var resp = ApiResponse() + val uid = param.uid val rootkey = systemUtilService.getBusinessValue("aes.cfb.rootkey") val iv = systemUtilService.getBusinessValue("aes.cfb.iv") if (rootkey.isNullOrEmpty()||iv.isNullOrEmpty()) { @@ -39,23 +41,12 @@ class QRCodeServiceImpl:QRCodeService{ resp.retmsg = "秘钥未配置" return resp } - val muser = mobileApiService.findUserById(uid) - if(muser==null||TradeDict.STATUS_NORMAL!=muser.status){ - resp.retcode = 1 - resp.retmsg = "用户不存在或状态异常" - return resp - } - if(muser.userid.isNullOrEmpty()){ - resp.retcode = 1 - resp.retmsg = "用户未绑定身份" - return resp - } - val totp = QrCodeTotpUtil.generateTOTP(muser.secertkey) + val totp = QrCodeTotpUtil.generateTOTP(param.secertkey) val rowdata = QrcodeRawData() - rowdata.userid = muser.userid + rowdata.userid = param.userid rowdata.setTotp(totp) val orgData = Gson().toJson(rowdata) - val publicKey = RSAKeysGenerate.getPublicKey(muser.rsapublic) + val publicKey = RSAKeysGenerate.getPublicKey(param.rsapublic) val encdata = org.apache.commons.codec.binary.Base64.encodeBase64String(RSAKeysGenerate.encryptbyte(publicKey, orgData)) val qrcode = AesUtil.encryptCFB("$uid:$encdata", rootkey, iv, "AES/CFB/NoPadding") diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt index 029f6a8e..b5facd87 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt @@ -2,8 +2,9 @@ package com.supwisdom.dlpay.api.service import com.supwisdom.dlpay.api.bean.ApiResponse import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse +import com.supwisdom.dlpay.api.bean.QrcodeParam interface QRCodeService { - fun encodeCode(uid: String): ApiResponse + fun encodeCode(param: QrcodeParam): ApiResponse fun decodeCode(qrcode: String): DoorQrcodeResponse } \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt index 299fd7fb..417e852d 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt @@ -857,18 +857,18 @@ class ApiV1 { * * 二维码在线生成 * */ - @RequestMapping("/qrcode") - fun qrcode(): JsonResult { - val p = SecurityContextHolder.getContext().authentication - val user = mobileApiService.findUserById(p.name) - ?: return JsonResult.error("用户不存在,请注册") - val resp = qrcodeService.encodeCode(user.uid) - return if(resp.retcode==0){ - JsonResult.ok("ok").put("qrcode", resp.retmsg)!! - }else{ - JsonResult.error(resp.retmsg) - } - } +// @RequestMapping("/qrcode") +// fun qrcode(): JsonResult { +// val p = SecurityContextHolder.getContext().authentication +// val user = mobileApiService.findUserById(p.name) +// ?: return JsonResult.error("用户不存在,请注册") +// val resp = qrcodeService.encodeCode(user.uid) +// return if(resp.retcode==0){ +// JsonResult.ok("ok").put("qrcode", resp.retmsg)!! +// }else{ +// JsonResult.error(resp.retmsg) +// } +// } /** *