diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/APIRequestParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/APIRequestParam.java
index 8631571..5c89d17 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/APIRequestParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/APIRequestParam.java
@@ -129,14 +129,12 @@
     if ("MD5".equalsIgnoreCase(signType)) {
       calcSign = md5(signdata + key); //默认MD5
     }
-
     if (sign.equalsIgnoreCase(calcSign)) {
       return true;
     }
     return false;
   }
-
-  public boolean checkSign(String key) {
+  private Map getParam(){
     Class clazz = this.getClass();
     Map<String, String> paramMap = new HashMap<>();
     Method[] allGetter = clazz.getMethods();
@@ -167,7 +165,16 @@
         }
       }
     }
-    return calcSignAndCheck(paramMap, key);
+    return  paramMap;
+  }
+
+  public boolean checkSign(String key) {
+    return calcSignAndCheck(getParam(), key);
+  }
+  public void generalSign(String key){
+    String signdata =   createLinkString(paraFilter(getParam()));
+    String sign = md5(signdata + key);
+    this.sign = sign;
   }
 
   public abstract boolean checkParam() throws RequestParamCheckException;
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java
index 1cf44f7..e24a632 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/OpenUserParam.java
@@ -50,7 +50,7 @@
 
   @Override
   public boolean checkParam() throws RequestParamCheckException {
-    if (!Constants.SEX_MALE.equals(sex) && !Constants.SEX_FEMALE.equals(sex)) {
+    if (!StringUtils.isEmpty(sex)&&!Constants.SEX_MALE.equals(sex) && !Constants.SEX_FEMALE.equals(sex)) {
       throw new RequestParamCheckException("性别非法[male|female]");
     }
     if (StringUtils.isEmpty(idno) || !StringUtils.isAlphanumeric(idno)) {
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 8a720d3..0ae4a62 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
@@ -3,10 +3,7 @@
 
 import com.supwisdom.dlpay.api.bean.*;
 import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
-import com.supwisdom.dlpay.paysdk.proxy.ApiCommonProxy;
-import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
-import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy;
-import com.supwisdom.dlpay.paysdk.proxy.ShopProxy;
+import com.supwisdom.dlpay.paysdk.proxy.*;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -50,6 +47,8 @@
 
   @Autowired
   private ShopProxy shopProxy;
+  @Autowired
+  private UserProxy userProxy;
 
   @org.junit.Test
   public void citizencardPayinit() {
@@ -109,6 +108,27 @@
     assertThat("shop open " + response.getRetmsg() + response.getException(),
             response.getRetcode(), equalTo(0));
   }
+  @Test
+  public void openUserAccount(){
+
+    ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+    helper.login(appid, secret);
+    ApiVersionResponse version = apiCommonProxy.apiVersion();
+
+    assertThat("get version error " + version.getException(),
+            version.getVersion(), notNullValue());
+    OpenUserParam param = new OpenUserParam();
+    param.setUid("testuid1");
+    param.setIdtype("student_idcard");
+    param.setIdno("100016");
+    param.setName("100016");
+    param.setTenantid("default");
+    param.generalSign(secret);
+    System.out.println(param.getSign());
+    UserResponse response = userProxy.openAccount(param);
+    assertThat("user open " + response.getRetmsg() + response.getException(),
+            response.getRetcode(), equalTo(0));
+  }
 
   public static void main(String[] args) {
 
