增加了user,shop 相关接口
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/annotation/Sex.java b/common/src/main/java/com/supwisdom/dlpay/api/annotation/Sex.java
new file mode 100644
index 0000000..4697807
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/annotation/Sex.java
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.api.annotation;
+
+import com.supwisdom.dlpay.api.validator.StatusValidator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+@Constraint(validatedBy = {StatusValidator.class})
+@Documented
+@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Sex {
+  String message() default "不正确的性别 , 应该是 'male', 'female','unknown' 其中之一";
+
+  Class<?>[] groups() default {};
+
+  Class<? extends Payload>[] payload() default {};
+}
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/annotation/ShopType.java b/common/src/main/java/com/supwisdom/dlpay/api/annotation/ShopType.java
new file mode 100644
index 0000000..d869ffe
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/annotation/ShopType.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.api.annotation;
+
+import com.supwisdom.dlpay.api.validator.ShopTypeValidator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+
+@Constraint(validatedBy = {ShopTypeValidator.class})
+@Documented
+@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ShopType {
+  String message() default "不正确的状态 , 应该是 '1', '2' 其中之一";
+
+  Class<?>[] groups() default {};
+
+  Class<? extends Payload>[] payload() default {};
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/annotation/UserStatus.java b/common/src/main/java/com/supwisdom/dlpay/api/annotation/UserStatus.java
new file mode 100644
index 0000000..3b034fb
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/annotation/UserStatus.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.api.annotation;
+
+
+import com.supwisdom.dlpay.api.validator.StatusValidator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+@Constraint(validatedBy = {StatusValidator.class})
+@Documented
+@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UserStatus {
+  String message() default "不正确的状态 , 应该是 'open', 'closed', 'losed' 其中之一";
+
+  Class<?>[] groups() default {};
+
+  Class<? extends Payload>[] payload() default {};
+}
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/ModifyUserParam.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/ModifyUserParam.java
new file mode 100644
index 0000000..37a5b84
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/ModifyUserParam.java
@@ -0,0 +1,63 @@
+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 com.supwisdom.dlpay.api.util.Constants;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.validation.constraints.NotEmpty;
+
+@Getter
+@Setter
+public class ModifyUserParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "用户唯一号不能为空")
+  private String userid;
+  @Sign
+  private String uid;
+  @Sign
+  private String name;
+  @Sign
+  private String sex;
+  @Sign
+  private String idtype;
+  @Sign
+  private String idno;
+  @Sign
+  private String mobile;
+  @Sign
+  private String tel;
+  @Sign
+  private String email;
+  @Sign
+  private String address;
+  @Sign
+  private String zipcode;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    if (!StringUtils.isEmpty(sex) && !Constants.SEX_MALE.equals(sex) && !Constants.SEX_FEMALE.equals(sex)) {
+      throw new RequestParamCheckException("性别非法[male|female]");
+    }
+    if (!StringUtils.isEmpty(idtype)) {
+      throw new RequestParamCheckException("证件类型非法");
+    }
+    if (!StringUtils.isEmpty(idno) && !StringUtils.isAlphanumeric(idno)) {
+      throw new RequestParamCheckException("证件号不能为空,且仅支持数字和字母");
+    }
+    if (!StringUtils.isEmpty(idno) && StringUtils.isEmpty(idtype)) {
+      throw new RequestParamCheckException("证件号不能为空时,请指定证件类型");
+    }
+    if (!StringUtils.isEmpty(mobile) && !StringUtils.isNumeric(mobile)) {
+      throw new RequestParamCheckException("手机号格式错误");
+    }
+    if (!StringUtils.isEmpty(email)) {
+      throw new RequestParamCheckException("邮箱格式错误");
+    }
+    return true;
+  }
+}
+
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/NewUserCheck.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/NewUserCheck.java
new file mode 100644
index 0000000..08ec2f4
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/NewUserCheck.java
@@ -0,0 +1,4 @@
+package com.supwisdom.dlpay.api.bean;
+
+public interface NewUserCheck {
+}
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
new file mode 100644
index 0000000..ffbd2a6
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenShopParam.java
@@ -0,0 +1,47 @@
+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 com.supwisdom.dlpay.api.annotation.ShopType;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Getter
+@Setter
+public class OpenShopParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "商户唯一号不能为空")
+  private String shopUniqueId;
+  @Sign
+  @NotNull(message = "商户类型不能为空")
+  @ShopType
+  private Integer shoptype;
+  @Sign
+  private Integer fshopid;
+  @Sign
+  @NotEmpty(message = "商户名称不能为空")
+  private String shopname;
+  @Sign
+  private String contactman;
+  @Sign
+  private String idtype;
+  @Sign
+  private String idno;
+  @Sign
+  private String mobile;
+  @Sign
+  private String email;
+  @Sign
+  private String address;
+  @Sign
+  private String zipcode;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
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
new file mode 100644
index 0000000..d76fc80
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java
@@ -0,0 +1,60 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+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 lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotEmpty;
+
+@Setter
+@Getter
+public class OpenUserParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "用户唯一号不能为空")
+  private String uid;
+  @Sign
+  @NotEmpty(message = "姓名不能为空")
+  private String name;
+  @Sign
+  @Sex
+  private String sex;
+  @Sign
+  @NotEmpty(message = "证件类型非法")
+  private String idtype;
+  @Sign
+  @NotEmpty(message = "证件号不能为空,且仅支持数字和字母")
+  private String idno;
+  @Sign
+  @NotEmpty(message = "手机号格式错误")
+  private String mobile;
+  @Sign
+  private String tel;
+  @Sign
+  @Email
+  private String email;
+  @Sign
+  private String address;
+  @Sign
+  private String zipcode;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    if (!Constants.SEX_MALE.equals(sex) && !Constants.SEX_FEMALE.equals(sex)) {
+      throw new RequestParamCheckException("性别非法[male|female]");
+    }
+    if (StringUtils.isEmpty(idno) || !StringUtils.isAlphanumeric(idno)) {
+      throw new RequestParamCheckException("证件号不能为空,且仅支持数字和字母");
+    }
+    if (!StringUtils.isEmpty(mobile) && !StringUtils.isNumeric(mobile)) {
+      throw new RequestParamCheckException("手机号格式错误");
+    }
+    return true;
+  }
+}
+
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryShopParam.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryShopParam.java
new file mode 100644
index 0000000..6d1ee9a
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryShopParam.java
@@ -0,0 +1,26 @@
+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 org.apache.commons.lang3.StringUtils;
+
+@Getter
+@Setter
+public class QueryShopParam extends APIRequestParam {
+  @Sign
+  private Integer shopid;
+  @Sign
+  private String shopaccno;
+  @Sign
+  private String shopUniqueId;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    if (StringUtils.isEmpty(shopUniqueId) && null == shopid && StringUtils.isEmpty(shopaccno))
+      throw new RequestParamCheckException("商户唯一标志不能为空");
+    return true;
+  }
+}
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryUserParam.java b/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryUserParam.java
new file mode 100644
index 0000000..55a5dcf
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/bean/QueryUserParam.java
@@ -0,0 +1,26 @@
+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 org.apache.commons.lang3.StringUtils;
+
+
+@Getter
+@Setter
+public class QueryUserParam extends APIRequestParam {
+  @Sign
+  private String userid;
+  @Sign
+  private String uid;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    if (StringUtils.isEmpty(userid) && StringUtils.isEmpty(uid)) {
+      throw new RequestParamCheckException("用户唯一号不能为空");
+    }
+    return true;
+  }
+}
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
new file mode 100644
index 0000000..da6d48f
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/util/Constants.java
@@ -0,0 +1,6 @@
+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/validator/SexValidator.java b/common/src/main/java/com/supwisdom/dlpay/api/validator/SexValidator.java
new file mode 100644
index 0000000..5a38bb4
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/SexValidator.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.api.validator;
+
+
+import com.supwisdom.dlpay.api.annotation.Sex;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.Collections;
+
+
+public class SexValidator implements ConstraintValidator<Sex, String> {
+  private final String[] ALL_TYPE = {"male", "female", "unknown"};
+
+  @Override
+  public boolean isValid(String value, ConstraintValidatorContext context) {
+    return Collections.singletonList(ALL_TYPE).contains(value);
+  }
+
+  @Override
+  public void initialize(Sex constraintAnnotation) {
+  }
+}
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/validator/ShopTypeValidator.java b/common/src/main/java/com/supwisdom/dlpay/api/validator/ShopTypeValidator.java
new file mode 100644
index 0000000..cdb3491
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/ShopTypeValidator.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.api.validator;
+
+import com.supwisdom.dlpay.api.annotation.ShopType;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.Collections;
+
+public class ShopTypeValidator implements ConstraintValidator<ShopType, Integer> {
+  private final int[] ALL_TYPE = {1, 2};
+
+  @Override
+  public boolean isValid(Integer value, ConstraintValidatorContext context) {
+    return Collections.singletonList(ALL_TYPE).contains(value);
+  }
+
+  @Override
+  public void initialize(ShopType constraintAnnotation) {
+  }
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/supwisdom/dlpay/api/validator/StatusValidator.java b/common/src/main/java/com/supwisdom/dlpay/api/validator/StatusValidator.java
new file mode 100644
index 0000000..84b8e5b
--- /dev/null
+++ b/common/src/main/java/com/supwisdom/dlpay/api/validator/StatusValidator.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.api.validator;
+
+import com.supwisdom.dlpay.api.annotation.UserStatus;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.Arrays;
+
+public class StatusValidator implements ConstraintValidator<UserStatus, String> {
+  private final String[] ALL_STATUS = {"open", "closed", "losed"};
+
+  @Override
+  public boolean isValid(String value, ConstraintValidatorContext context) {
+    if (Arrays.asList(ALL_STATUS).contains(value))
+      return true;
+    return false;
+  }
+
+  @Override
+  public void initialize(UserStatus constraintAnnotation) {
+  }
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginHelper.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginHelper.java
index d095603..3bb233c 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginHelper.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginHelper.java
@@ -39,4 +39,12 @@
     }
     JwtContext.setJwt(login.getJwt());
   }
+
+  public void refresh() {
+    ApiLoginResponse response = apiLoginProxy.refresh();
+    if (response.getRetcode() != 0) {
+      throw new RuntimeException("刷新JWT错误: " + response.getRetcode() + ", " + response.getException());
+    }
+    JwtContext.setJwt(response.getJwt());
+  }
 }
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ShopResponse.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ShopResponse.java
new file mode 100644
index 0000000..f4cec8c
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ShopResponse.java
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.paysdk.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+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/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/UserResponse.java
new file mode 100644
index 0000000..a646aed
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/UserResponse.java
@@ -0,0 +1,18 @@
+package com.supwisdom.dlpay.paysdk.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class UserResponse extends ApiResponse {
+  private String userid;
+  private String uid;
+  private String name;
+  private String idtype;
+  private String idno;
+  private String mobile;
+  private String email;
+  private String status;
+  private Double balance;
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ApiLoginProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ApiLoginProxy.java
index f9e5a67..22d5427 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ApiLoginProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ApiLoginProxy.java
@@ -17,15 +17,15 @@
 
   @RequestMapping(value = "/api/auth/gettoken/{clientid}", method = RequestMethod.GET)
   ApiLoginInitResponse loginInitWithClientId(@RequestParam("appid") String appid,
-                                                            @PathVariable(value = "clientid") String clientid);
+                                             @PathVariable(value = "clientid") String clientid);
 
   @RequestMapping(value = "/api/auth/authentication", method = RequestMethod.GET)
   ApiLoginResponse login(@RequestParam("appid") String appid, @RequestParam("secret") String secret);
 
   @RequestMapping(value = "/api/auth/authentication/{clientid}", method = RequestMethod.GET)
   ApiLoginResponse loginWithClientId(@RequestParam("appid") String appid, @RequestParam("secret") String secret,
-                                                        @PathVariable(value = "clientid") String clientid);
+                                     @PathVariable(value = "clientid") String clientid);
 
   @RequestMapping(value = "/api/auth/refresh", method = RequestMethod.GET)
-  ApiLoginResponse refresh(HttpServletRequest request);
+  ApiLoginResponse refresh();
 }
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
new file mode 100644
index 0000000..e965ded
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ShopProxy.java
@@ -0,0 +1,18 @@
+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 org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(name = "shopProxy", url = "${payapi.url}")
+public interface ShopProxy {
+  @PostMapping("/open")
+  ShopResponse openAccount(@RequestBody OpenShopParam param);
+
+  @GetMapping("/query")
+  ShopResponse queryShop(@RequestBody QueryShopParam 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
new file mode 100644
index 0000000..3420e6c
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -0,0 +1,21 @@
+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 org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(value = "userProxy", url = "${payapi.url}")
+public interface UserProxy {
+  @PostMapping("/api/user/open")
+  UserResponse openAccount(@RequestBody OpenUserParam param);
+
+  @PostMapping("/api/user/query")
+  UserResponse queryAccount(@RequestBody QueryUserParam param);
+
+  @PostMapping("/api/user/modify")
+  UserResponse modifyAccount(@RequestBody ModifyUserParam param);
+}
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 4838929..a8ea0ab 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
@@ -16,6 +16,7 @@
 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;
@@ -31,6 +32,7 @@
     HttpMessageConvertersAutoConfiguration.class})
 @EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
 @ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
+@TestPropertySource()
 public class CitizenCardPayProxyTest {
   private final static String appid = "700001";
   private final static String secret = "5f788ce433ec44f299351cdf7f137e81";
diff --git a/libs/ojdbc6.jar b/payapi/libs/ojdbc6.jar
similarity index 100%
rename from libs/ojdbc6.jar
rename to payapi/libs/ojdbc6.jar
Binary files differ
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 87573a0..564689e 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
@@ -8,150 +8,6 @@
 import com.supwisdom.dlpay.util.ConstantUtil
 import com.supwisdom.dlpay.util.DESedeUtil
 
-// ============================ USER ============================ //
-class OpenUserParam : APIRequestParam() {
-    @Sign
-    var uid: String = ""    //第三方用户ID,必传
-    @Sign
-    var name: String = ""   //必传
-    @Sign
-    var sex: String? = null
-    @Sign
-    var idtype: String = "" //必传
-    @Sign
-    var idno: String = ""   //必传
-    @Sign
-    var mobile: String? = null
-    @Sign
-    var tel: String? = null
-    @Sign
-    var email: String? = null
-    @Sign
-    var address: String? = null
-    @Sign
-    var zipcode: String? = null
-
-    override fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(uid)) throw RequestParamCheckException("用户唯一号不能为空")
-        if (StringUtil.isEmpty(name)) throw RequestParamCheckException("姓名不能为空")
-        if (!StringUtil.isEmpty(sex) && ConstantUtil.SEX_MALE != sex && ConstantUtil.SEX_FEMALE != sex) throw RequestParamCheckException("性别非法[male|female]")
-        if (StringUtil.isEmpty(idtype) || !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException("证件类型非法")
-        if (StringUtil.isEmpty(idno) || !StringUtil.isCharAndNum(idno)) throw RequestParamCheckException("证件号不能为空,且仅支持数字和字母")
-        if (ConstantUtil.IDTYPE_IDENTITY == idtype && !StringUtil.isIdentity(idno)) throw RequestParamCheckException("身份证格式错误")
-        if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile)) throw RequestParamCheckException("手机号格式错误")
-        if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email)) throw RequestParamCheckException("邮箱格式错误")
-
-        return true
-    }
-}
-
-class QueryUserParam : APIRequestParam() {
-    @Sign
-    var userid: String? = null  // 用户ID二选一 (两者都传取userid)
-    @Sign
-    var uid: String? = null    // 用户ID二选一
-
-    override fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException("用户唯一号不能为空")
-
-        return true
-    }
-}
-
-class ModifyUserParam : APIRequestParam() {
-    @Sign
-    var userid: String? = null  // 用户ID二选一 (两者都传取userid)
-    @Sign
-    var uid: String? = null    // 用户ID二选一
-    @Sign
-    var name: String? = null
-    @Sign
-    var sex: String? = null
-    @Sign
-    var idtype: String? = null
-    @Sign
-    var idno: String? = null
-    @Sign
-    var mobile: String? = null
-    @Sign
-    var tel: String? = null
-    @Sign
-    var email: String? = null
-    @Sign
-    var address: String? = null
-    @Sign
-    var zipcode: String? = null
-
-    override fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException("用户唯一号不能为空")
-        if (!StringUtil.isEmpty(sex) && ConstantUtil.SEX_MALE != sex && ConstantUtil.SEX_FEMALE != sex) throw RequestParamCheckException("性别非法[male|female]")
-        if (!StringUtil.isEmpty(idtype) && !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException("证件类型非法")
-        if (!StringUtil.isEmpty(idno) && !StringUtil.isCharAndNum(idno)) throw RequestParamCheckException("证件号不能为空,且仅支持数字和字母")
-        if (!StringUtil.isEmpty(idno) && StringUtil.isEmpty(idtype)) throw RequestParamCheckException("证件号不能为空时,请指定证件类型")
-        if (!StringUtil.isEmpty(idno) && ConstantUtil.IDTYPE_IDENTITY == idtype && !StringUtil.isIdentity(idno)) throw RequestParamCheckException("身份证格式错误")
-        if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile)) throw RequestParamCheckException("手机号格式错误")
-        if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email)) throw RequestParamCheckException("邮箱格式错误")
-
-        return true
-    }
-}
-
-
-// ============================ SHOP ============================ //
-class OpenShopParam : APIRequestParam() {
-    @Sign
-    var shopUniqueId: String = "" //必传
-    @Sign
-    var shoptype: Int = 1
-    @Sign
-    var fshopid: Int? = null
-    @Sign
-    var shopname: String = "" //必传
-    @Sign
-    var contactman: String? = null
-    @Sign
-    var idtype: String? = null
-    @Sign
-    var idno: String? = null
-    @Sign
-    var mobile: String? = null
-    @Sign
-    var email: String? = null
-    @Sign
-    var address: String? = null
-    @Sign
-    var zipcode: String? = null
-
-    override fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(shopUniqueId)) throw RequestParamCheckException("商户唯一号不能为空")
-        if (ConstantUtil.SHOPTYPE_GROUP != shoptype && ConstantUtil.SHOPTYPE_LEAF != shoptype) throw RequestParamCheckException("请指定商户类型")
-        if (StringUtil.isEmpty(shopname)) throw RequestParamCheckException("商户名称不能为空")
-        if (!StringUtil.isEmpty(idtype) && !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException("证件类型非法")
-        if (!StringUtil.isEmpty(idno) && !StringUtil.isCharAndNum(idno)) throw RequestParamCheckException("证件号不能为空,且仅支持数字和字母")
-        if (!StringUtil.isEmpty(idno) && StringUtil.isEmpty(idtype)) throw RequestParamCheckException("证件号不能为空时,请指定证件类型")
-        if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile)) throw RequestParamCheckException("手机号格式错误")
-        if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email)) throw RequestParamCheckException("邮箱格式错误")
-
-        return true
-    }
-}
-
-class QueryShopParam : APIRequestParam() {
-    @Sign
-    var shopid: Int? = null  //注册时返回的shopid
-    @Sign
-    var shopaccno: String? = null  //注册时返回的shopaccno
-    @Sign
-    var shopUniqueId: String? = null //注册传的商户唯一号
-
-    override fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(shopUniqueId) && null == shopid && StringUtil.isEmpty(shopaccno)) throw RequestParamCheckException("商户唯一标志不能为空")
-
-        return true
-    }
-}
-
-
 class DaliDatasyncParam {
     var app_id: String = ""
     var data: String = ""
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
index 4cbb21e..48bff6e 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
@@ -24,12 +24,8 @@
     private lateinit var commonService: CommonService
 
     @PostMapping("/open")
-    fun openAccount(@RequestBody param: OpenShopParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+    fun openAccount(@RequestBody param: OpenShopParam): ResponseEntity<Any> {
         try {
-            if (!param.checkParam() || !param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
             shopService.findByThirdUniqueId(param.shopUniqueId)?.let {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(TradeErrorCode.BUSINESS_SHOP_EXISTS, "该商户唯一号[${param.shopUniqueId}]已经存在"))
@@ -54,13 +50,8 @@
     }
 
     @GetMapping("/query")
-    fun queryShop(@RequestBody param: QueryShopParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+    fun queryShop(@RequestBody param: QueryShopParam): ResponseEntity<Any> {
         try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
             shopService.findByShopBySearch(param.shopid, param.shopaccno, param.shopUniqueId)?.let {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .data("shop", it)
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 4d63b19..551b7c6 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
@@ -24,17 +24,10 @@
 class UserAPIController {
     @Autowired
     private lateinit var useService: UserService
-    @Autowired
-    private lateinit var commonService: CommonService
 
     @PostMapping("/open")
-    fun openAccount(@RequestBody param: OpenUserParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+    fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity<Any> {
         try {
-
-            if (!param.checkParam() || !param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
             useService.findByThirdUniqueIdenty(param.uid).let {
                 if (null != it) {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -60,13 +53,8 @@
     }
 
     @PostMapping("/query")
-    fun queryAccount(@RequestBody param: QueryUserParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+    fun queryAccount(@RequestBody param: QueryUserParam): ResponseEntity<Any> {
         try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
             useService.findByUseridOrThirdUniqueIdenty(param.userid, param.uid).let {
                 if (null != it) {
                     val account = useService.findAccountByUserid(it.userid, null)
@@ -109,12 +97,8 @@
     }
 
     @PostMapping("/modify")
-    fun modifyAccount(@RequestBody param: ModifyUserParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+    fun modifyAccount(@RequestBody param: ModifyUserParam): ResponseEntity<Any> {
         try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
             useService.findByUseridOrThirdUniqueIdenty(param.userid, param.uid)?.let {
                 param.name = param.name?.let { URLDecoder.decode(param.name, Charsets.UTF_8.toString()) } //解码
                 param.address = param.address?.let { URLDecoder.decode(param.address, Charsets.UTF_8.toString()) } //解码