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()) } //解码
