From: Tang Cheng Date: Tue, 9 Jul 2019 06:20:30 +0000 (+0800) Subject: refactor: 重新整合API接口 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=546404dabf3deffbd6ad6dbbe886f95bc4ee0642;p=epayment%2Ffood_payapi.git refactor: 重新整合API接口 --- diff --git a/common/src/main/java/com/supwisdom/dlpay/api/annotation/IDNoCheck.java b/common/src/main/java/com/supwisdom/dlpay/api/annotation/IDNoCheck.java index bf486dbe..1760452c 100644 --- a/common/src/main/java/com/supwisdom/dlpay/api/annotation/IDNoCheck.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/annotation/IDNoCheck.java @@ -1,5 +1,6 @@ package com.supwisdom.dlpay.api.annotation; +import com.supwisdom.dlpay.api.util.IDTypes; import com.supwisdom.dlpay.api.validator.IDNoCheckValidator; import javax.validation.Constraint; @@ -32,5 +33,5 @@ public @interface IDNoCheck { * * @return */ - String[] value(); + IDTypes value(); } \ No newline at end of file diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginInitResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiLoginInitResponse.java similarity index 54% rename from payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginInitResponse.java rename to common/src/main/java/com/supwisdom/dlpay/api/bean/ApiLoginInitResponse.java index 405d4aed..5eb21d49 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginInitResponse.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiLoginInitResponse.java @@ -1,11 +1,15 @@ -package com.supwisdom.dlpay.paysdk.bean; +package com.supwisdom.dlpay.api.bean; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; @Getter @Setter +@NoArgsConstructor +@AllArgsConstructor public class ApiLoginInitResponse extends ApiResponse { private String timestamp; private String token; diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiLoginResponse.java similarity index 57% rename from payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginResponse.java rename to common/src/main/java/com/supwisdom/dlpay/api/bean/ApiLoginResponse.java index 787fe908..14994089 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginResponse.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiLoginResponse.java @@ -1,10 +1,14 @@ -package com.supwisdom.dlpay.paysdk.bean; +package com.supwisdom.dlpay.api.bean; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; @Getter @Setter +@AllArgsConstructor +@NoArgsConstructor public class ApiLoginResponse extends ApiResponse { private String jwt; private String appid; diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiResponse.java similarity index 80% rename from payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiResponse.java rename to common/src/main/java/com/supwisdom/dlpay/api/bean/ApiResponse.java index 4b18413e..1f34e8ca 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiResponse.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiResponse.java @@ -1,4 +1,4 @@ -package com.supwisdom.dlpay.paysdk.bean; +package com.supwisdom.dlpay.api.bean; import lombok.Getter; diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiVersionResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiVersionResponse.java new file mode 100644 index 00000000..911777ce --- /dev/null +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/ApiVersionResponse.java @@ -0,0 +1,14 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class ApiVersionResponse extends ApiResponse { + private String version; +} diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenPayResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenPayResponse.java new file mode 100644 index 00000000..c0b92e59 --- /dev/null +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenPayResponse.java @@ -0,0 +1,16 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class CitizenPayResponse extends ApiResponse { + private String refno; + private String billno; + private Double amount; +} diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java index 4fc1ae13..3be30ad3 100644 --- a/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java @@ -1,9 +1,12 @@ package com.supwisdom.dlpay.api.bean; import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.IDNoCheck; +import com.supwisdom.dlpay.api.annotation.MobileNumber; import com.supwisdom.dlpay.api.annotation.Sign; import com.supwisdom.dlpay.api.exception.RequestParamCheckException; import com.supwisdom.dlpay.api.annotation.ShopType; +import com.supwisdom.dlpay.api.util.IDTypes; import lombok.Getter; import lombok.Setter; @@ -13,6 +16,7 @@ import javax.validation.constraints.NotNull; @Getter @Setter +@IDNoCheck(value = IDTypes.IDTYPE_LIST, idno = "idno", idtype = "idtype", message = "证件类型错误") public class OpenShopParam extends APIRequestParam { @Sign @NotEmpty(message = "商户唯一号不能为空") @@ -33,6 +37,7 @@ public class OpenShopParam extends APIRequestParam { @Sign private String idno; @Sign + @MobileNumber private String mobile; @Sign @Email(message = "Email 格式错误") diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java index 5ec96028..ceaae42e 100644 --- a/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java @@ -1,11 +1,13 @@ package com.supwisdom.dlpay.api.bean; import com.supwisdom.dlpay.api.APIRequestParam; +import com.supwisdom.dlpay.api.annotation.IDNoCheck; import com.supwisdom.dlpay.api.annotation.MobileNumber; import com.supwisdom.dlpay.api.annotation.Sex; import com.supwisdom.dlpay.api.annotation.Sign; import com.supwisdom.dlpay.api.exception.RequestParamCheckException; import com.supwisdom.dlpay.api.util.Constants; +import com.supwisdom.dlpay.api.util.IDTypes; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; @@ -13,8 +15,10 @@ import org.apache.commons.lang3.StringUtils; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; + @Setter @Getter +@IDNoCheck(value = IDTypes.IDTYPE_LIST, idno = "idno", idtype = "idtype", message = "证件类型错误") public class OpenUserParam extends APIRequestParam { @Sign @NotEmpty(message = "用户唯一号不能为空") diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/PayReverseResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/PayReverseResponse.java new file mode 100644 index 00000000..2c3c8190 --- /dev/null +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/PayReverseResponse.java @@ -0,0 +1,14 @@ +package com.supwisdom.dlpay.api.bean; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +public class PayReverseResponse extends ApiResponse { + private String refno; +} diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryTransDtlResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryTransDtlResponse.java new file mode 100644 index 00000000..118bd561 --- /dev/null +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryTransDtlResponse.java @@ -0,0 +1,22 @@ +package com.supwisdom.dlpay.api.bean; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Setter +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class QueryTransDtlResponse extends ApiResponse { + private String refno; + private String outTradeNo; + private Double amount; + private String status; + private String sourceType; + private String payinfo; + private String reverseFlag; + private String transdesc; +} diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ShopResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/ShopResponse.java similarity index 53% rename from payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ShopResponse.java rename to common/src/main/java/com/supwisdom/dlpay/api/bean/ShopResponse.java index f4cec8cd..25dd194a 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ShopResponse.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/ShopResponse.java @@ -1,10 +1,14 @@ -package com.supwisdom.dlpay.paysdk.bean; +package com.supwisdom.dlpay.api.bean; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; @Getter @Setter +@AllArgsConstructor +@NoArgsConstructor public class ShopResponse extends ApiResponse { private Integer shopid; private String shopaccno; diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/UserResponse.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/UserResponse.java similarity index 69% rename from payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/UserResponse.java rename to common/src/main/java/com/supwisdom/dlpay/api/bean/UserResponse.java index a646aeda..1afe0528 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/UserResponse.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/UserResponse.java @@ -1,10 +1,14 @@ -package com.supwisdom.dlpay.paysdk.bean; +package com.supwisdom.dlpay.api.bean; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; @Getter @Setter +@AllArgsConstructor +@NoArgsConstructor public class UserResponse extends ApiResponse { private String userid; private String uid; diff --git a/common/src/main/java/com/supwisdom/dlpay/api/util/Constants.java b/common/src/main/java/com/supwisdom/dlpay/api/util/Constants.java index da6d48f3..3c4aebe3 100644 --- a/common/src/main/java/com/supwisdom/dlpay/api/util/Constants.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/util/Constants.java @@ -3,4 +3,5 @@ package com.supwisdom.dlpay.api.util; public class Constants { public static final String SEX_MALE = "male"; public static final String SEX_FEMALE = "female"; + } diff --git a/common/src/main/java/com/supwisdom/dlpay/api/util/IDTypes.java b/common/src/main/java/com/supwisdom/dlpay/api/util/IDTypes.java new file mode 100644 index 00000000..999f37f6 --- /dev/null +++ b/common/src/main/java/com/supwisdom/dlpay/api/util/IDTypes.java @@ -0,0 +1,26 @@ +package com.supwisdom.dlpay.api.util; + +public enum IDTypes { + IDTYPE_IDCARD("idcard"), // 身份证 + IDTYPE_PASSPORT("passport"), // 护照 + IDTYPE_DRIVING_LICENSE("driving_license"), // 驾照 + IDTYPE_HK_MACAU_PASS("hk_macau_pass"), // 港澳通行证 + IDTYPE_STUDENT_IDCARD("student_idcard"), // 学生证 + IDTYPE_OTHER("unknown"), + IDTYPE_LIST(new IDTypes[]{IDTYPE_IDCARD, IDTYPE_PASSPORT, + IDTYPE_DRIVING_LICENSE, IDTYPE_HK_MACAU_PASS, IDTYPE_STUDENT_IDCARD, IDTYPE_OTHER}); // 其它 + + IDTypes(Object data) { + this.data = data; + } + + public String value() { + return this.data.toString(); + } + + public Object getData() { + return this.data; + } + + private Object data; +} diff --git a/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java b/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java index 5fba2751..812ad555 100644 --- a/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java +++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java @@ -1,18 +1,41 @@ package com.supwisdom.dlpay.api.validator; import com.supwisdom.dlpay.api.annotation.IDNoCheck; +import com.supwisdom.dlpay.api.util.IDTypes; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang3.StringUtils; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; -public class IDNoCheckValidator implements ConstraintValidator { +public class IDNoCheckValidator implements ConstraintValidator { private String idnoField; private String idtypeField; private String[] idtypeList; @Override - public boolean isValid(String value, ConstraintValidatorContext context) { + public boolean isValid(Object value, ConstraintValidatorContext context) { + try { + String idtype = BeanUtils.getProperty(value, idtypeField); + if (idtype == null) { + return true; + } + if (!Arrays.asList(idtypeList).contains(idtype)) { + return false; + } + String idno = BeanUtils.getProperty(value, idnoField); + if (StringUtils.isEmpty(idno)) { + return false; + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } return false; } @@ -23,6 +46,16 @@ public class IDNoCheckValidator implements ConstraintValidator> payCancel(@RequestBody ConsumePayCancelParam param); - - @PostMapping("/api/consume/payrefund") - ResponseEntity> payRefund(@RequestBody ConsumePayRefundParam param); -} diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java index e965ded7..0184e912 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java @@ -2,7 +2,7 @@ package com.supwisdom.dlpay.paysdk.proxy; import com.supwisdom.dlpay.api.bean.OpenShopParam; import com.supwisdom.dlpay.api.bean.QueryShopParam; -import com.supwisdom.dlpay.paysdk.bean.ShopResponse; +import com.supwisdom.dlpay.api.bean.ShopResponse; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java new file mode 100644 index 00000000..570587af --- /dev/null +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/TransactionProxy.java @@ -0,0 +1,18 @@ +package com.supwisdom.dlpay.paysdk.proxy; + +import com.supwisdom.dlpay.api.bean.*; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(name = "payTransactionProxy", url = "${payapi.url}") +public interface TransactionProxy { + @PostMapping("/api/consume/paycancel") + PayReverseResponse payCancel(@RequestBody ConsumePayCancelParam param); + + @PostMapping("/api/consume/payrefund") + PayReverseResponse payRefund(@RequestBody ConsumePayRefundParam param); + + @PostMapping("/api/consume/queryresult") + QueryTransDtlResponse queryDtlResult(@RequestBody QueryDtlResultParam param); +} 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 3420e6ce..ddcf1983 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 @@ -3,7 +3,7 @@ package com.supwisdom.dlpay.paysdk.proxy; import com.supwisdom.dlpay.api.bean.ModifyUserParam; import com.supwisdom.dlpay.api.bean.OpenUserParam; import com.supwisdom.dlpay.api.bean.QueryUserParam; -import com.supwisdom.dlpay.paysdk.bean.UserResponse; +import com.supwisdom.dlpay.api.bean.UserResponse; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java index ff65c098..bd7f8d54 100644 --- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java +++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java @@ -2,10 +2,10 @@ package com.supwisdom.dlpay.paysdktest; import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam; +import com.supwisdom.dlpay.api.bean.CitizenPayResponse; import com.supwisdom.dlpay.paysdk.ApiLoginHelper; import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy; import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy; -import com.supwisdom.dlpay.paysdk.bean.CitizenPayInitResponse; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; @@ -16,7 +16,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.FeignAutoConfiguration; import org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration; import org.springframework.context.annotation.ComponentScan; -import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import static org.hamcrest.MatcherAssert.assertThat; @@ -53,7 +52,7 @@ public class CitizenCardPayProxyTest { initParam.setAmount(100); initParam.setTransdate("20190708"); initParam.setTranstime("172713"); - CitizenPayInitResponse payInit = citizenCardPayProxy.citizencardPayinit(initParam); + CitizenPayResponse payInit = citizenCardPayProxy.citizencardPayinit(initParam); assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(), payInit.getRetcode(), equalTo(0)); } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt index 4ecb7df6..9479e50f 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt @@ -42,15 +42,9 @@ class ConsumeAPIController { fun queryDtlResult(@RequestBody param: QueryDtlResultParam): ResponseEntity { consumePayService.getTransactionMainDtl(param.refno, param.billno, param.shopaccno)?.let { return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("refno", it.refno) - .data("billno", it.outTradeNo) - .data("amount", it.shopDtl.amount) - .data("status", it.status) - .data("sourcetype", it.personDtl.sourceType) - .data("payinfo", it.personDtl.payinfo) - .data("reverseflag", it.reverseFlag) - .data("transdesc", it.shopDtl.transdesc) - .success("查询成功")) + .success(QueryTransDtlResponse(it.refno, it.outTradeNo, it.shopDtl.amount, + it.status, it.sourceType, it.personDtl.payinfo, it.reverseFlag, + it.shopDtl.transdesc), "查询成功")) } ?: return ResponseEntity.ok(ResponseBodyBuilder.create() .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在")) } @@ -188,10 +182,9 @@ class ConsumeAPIController { }.init(transactionService) return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("refno", transaction.refno) - .data("billno", transaction.outTradeNo) - .data("amount", transaction.shopDtl.amount) - .success("交易初始化成功")) + .success(CitizenPayResponse(transaction.refno, + transaction.outTradeNo, + transaction.shopDtl.amount), "交易初始化成功")) } return ResponseEntity.ok(ResponseBodyBuilder.create() @@ -213,10 +206,9 @@ class ConsumeAPIController { if (code.retcode == "0") { transactionService.success(param.refno, "支付").let { return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("refno", it.refno) - .data("billno", it.outTradeNo) - .data("amount", it.shopDtl.amount) - .success("交易确认成功")) + .success(CitizenPayResponse(it.refno, + it.outTradeNo, + it.shopDtl.amount), "交易确认成功")) } } else { @@ -246,8 +238,7 @@ class ConsumeAPIController { } transactionService.success(cancelTrans.refno) return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("refno", cancelTrans.refno) - .success("交易确认成功")) + .success(PayReverseResponse(cancelTrans.refno), "交易确认成功")) } ?: return ResponseEntity.ok(ResponseBodyBuilder.create() .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在")) } @@ -272,8 +263,7 @@ class ConsumeAPIController { } transactionService.success(refundTrans.refno) return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("refno", refundTrans.refno) - .success("交易确认成功")) + .success(PayReverseResponse(refundTrans.refno), "交易确认成功")) } ?: return ResponseEntity.ok(ResponseBodyBuilder.create() .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在")) } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt index 3d2e5d21..a55845fb 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/framework_controller.kt @@ -1,6 +1,7 @@ package com.supwisdom.dlpay.framework.controller import com.jcabi.manifests.Manifests +import com.supwisdom.dlpay.api.bean.ApiVersionResponse import com.supwisdom.dlpay.framework.ResponseBodyBuilder import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.GetMapping @@ -16,13 +17,11 @@ class AboutController { return try { Manifests.read("Payapi-Version").let { ResponseEntity.ok(ResponseBodyBuilder.create() - .data("version", it) - .success()) + .success(ApiVersionResponse(it))) } } catch (e: IllegalArgumentException) { ResponseEntity.ok(ResponseBodyBuilder.create() - .data("version", "unknown") - .success()) + .success(ApiVersionResponse("unknown"))) } } } \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt index 81f099de..84c0f8a7 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt @@ -1,6 +1,8 @@ package com.supwisdom.dlpay.framework.controller import com.google.code.kaptcha.Producer +import com.supwisdom.dlpay.api.bean.ApiLoginInitResponse +import com.supwisdom.dlpay.api.bean.ApiLoginResponse import com.supwisdom.dlpay.exception.TransactionCheckException import com.supwisdom.dlpay.framework.ResponseBodyBuilder import com.supwisdom.dlpay.framework.core.JwtConfig @@ -99,9 +101,7 @@ class ApiAuthController { apiClientRepository.save(it) } return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("token", token) - .data("timestamp", now) - .success()) + .success(ApiLoginInitResponse(token, now))) } } @@ -137,10 +137,8 @@ class ApiAuthController { } ResponseEntity.ok(ResponseBodyBuilder.create() - .data("jwt", token.jwtToken) - .data("appid", appid) - .data("expiredAt", DateUtil.getUTCTime(token.expiration.valueInMillis)) - .success()) + .success(ApiLoginResponse(token.jwtToken, + appid, DateUtil.getUTCTime(token.expiration.valueInMillis)))) } else { ResponseEntity.status(HttpStatus.UNAUTHORIZED).build() } @@ -173,10 +171,8 @@ class ApiAuthController { } ResponseEntity.ok(ResponseBodyBuilder.create() - .data("jwt", token.jwtToken) - .data("appid", appid) - .data("expiredAt", DateUtil.getUTCTime(token.expiration.valueInMillis)) - .success()) + .success(ApiLoginResponse(token.jwtToken, + appid, DateUtil.getUTCTime(token.expiration.valueInMillis)))) } else { ResponseEntity.status(HttpStatus.UNAUTHORIZED).build() } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt index b25a725a..1f63e384 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt @@ -1,6 +1,8 @@ package com.supwisdom.dlpay.framework import com.google.gson.Gson +import com.supwisdom.dlpay.api.APIRequestParam +import com.supwisdom.dlpay.api.bean.ApiResponse import com.supwisdom.dlpay.api.exception.RequestParamCheckException import com.supwisdom.dlpay.exception.TransactionCheckException import com.supwisdom.dlpay.exception.TransactionException @@ -36,6 +38,12 @@ class ResponseBodyBuilder private constructor() { return build() } + fun success(bean: ApiResponse, msg: String? = null): ApiResponse { + bean.retcode = 0 + bean.retmsg = msg ?: "成功" + return bean + } + fun fail(code: Int, msg: String): Map { if (code == 0) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "错误码未正确定义") @@ -44,6 +52,15 @@ class ResponseBodyBuilder private constructor() { return build() } + fun fail(bean: ApiResponse, code: Int, msg: String): ApiResponse { + if (code == 0) { + throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "错误码未正确定义") + } + bean.retcode = code + bean.retmsg = msg + return bean + } + fun exception(code: Int, exception: Exception, msg: String? = null): Map { data("exception", exception.message ?: "$exception") result(code, msg) @@ -56,18 +73,39 @@ class ResponseBodyBuilder private constructor() { return build() } + fun exception(bean: ApiResponse, code: Int, cause: Throwable?, msg: String? = null): ApiResponse { + bean.retcode = code + bean.retmsg = msg ?: "失败" + bean.exception = cause?.message ?: "unknown exception" + return bean + } + fun transException(exception: TransactionException, msg: String): Map { data("exception", exception.message!!) result(exception.code(), "$msg - [${exception.message}]") return build() } + fun transException(bean: ApiResponse, exception: TransactionException, msg: String): ApiResponse { + bean.retcode = exception.code() + bean.retmsg = "$msg - [${exception.message}]" + bean.exception = "$exception" + return bean + } + fun requestException(exception: RequestParamCheckException, msg: String): Map { data("exception", exception.message!!) result(exception.errCode, "$msg - [${exception.message}]") return build() } + fun requestException(bean: ApiResponse, exception: RequestParamCheckException, msg: String): ApiResponse { + bean.retcode = exception.errCode + bean.retmsg = "$msg - [${exception.message}]" + bean.exception = "$exception" + return bean + } + fun data(name: String, value: Any): ResponseBodyBuilder { if (name in RESERVED_KEY) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "返回值 <$name> 为保留值,不能使用")