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 0184e91..adb2b3c 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
@@ -7,8 +7,10 @@
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
 
 @FeignClient(name = "shopProxy", url = "${payapi.url}")
+@RequestMapping("/api/shop")
 public interface ShopProxy {
   @PostMapping("/open")
   ShopResponse openAccount(@RequestBody OpenShopParam 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 812930d..8a720d3 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
@@ -1,13 +1,14 @@
 package com.supwisdom.dlpay.paysdktest;
 
 
-import com.supwisdom.dlpay.api.bean.ApiVersionResponse;
-import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam;
-import com.supwisdom.dlpay.api.bean.CitizenPayResponse;
+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 org.junit.Assert;
+import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
@@ -27,7 +28,7 @@
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(properties = {
-    "payapi.url=http://localhost:8080/payapi"},
+    "payapi.url=http://localhost:8099/payapi"},
     classes = CitizenCardPayProxyTest.class)
 @ImportAutoConfiguration({RibbonAutoConfiguration.class,
     FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class,
@@ -47,6 +48,9 @@
   @Autowired
   private ApiCommonProxy apiCommonProxy;
 
+  @Autowired
+  private ShopProxy shopProxy;
+
   @org.junit.Test
   public void citizencardPayinit() {
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
@@ -70,6 +74,41 @@
     assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(),
         payInit.getRetcode(), equalTo(0));
   }
+  @Test
+  public void openShopAccount(){
+    /*
+    *
+    * shopUniqueId = "35315266"
+shoptype = "normal"
+fshopid = null
+shopname = "test1"
+contactman = null
+idtype = null
+idno = null
+mobile = null
+email = null
+address = null
+zipcode = null
+sign = "23AE31C973EA8CC79A82B03C6DF48F9C"
+    * */
+
+    ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+    helper.login(appid, secret);
+    ApiVersionResponse version = apiCommonProxy.apiVersion();
+
+    assertThat("get version error " + version.getException(),
+            version.getVersion(), notNullValue());
+    OpenShopParam param = new OpenShopParam();
+    param.setShopUniqueId("35315266");
+    param.setShoptype("normal");
+    param.setShopname("test1");
+    param.setFshopid(1);
+    param.setSign("130FE09F73123638337F34DAAE4DF2DF");
+    param.setTenantid("default");
+    ShopResponse response = shopProxy.openAccount(param);
+    assertThat("shop open " + response.getRetmsg() + response.getException(),
+            response.getRetcode(), equalTo(0));
+  }
 
   public static void main(String[] args) {
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
index d13ffdb..a8f8dd5 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.framework.tenant;
 
+import com.supwisdom.dlpay.framework.util.StringUtil;
 import org.hibernate.HibernateException;
 import org.hibernate.engine.jdbc.connections.spi.AbstractDataSourceBasedMultiTenantConnectionProviderImpl;
 import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
@@ -33,7 +34,7 @@
     String tenantIdentifier = TenantContext.getTenantSchema();
     final Connection connection = getAnyConnection();
     try {
-      if (tenantIdentifier != null) {
+      if (!StringUtil.isEmpty(tenantIdentifier)) {
         connection.createStatement().execute("SET search_path = \"" + tenantIdentifier + "\", public");
       } else {
         connection.createStatement().execute("SET search_path =  public");
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
index 0908b84..50a80d1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
@@ -62,6 +62,7 @@
             zipcode = param.zipcode
             opendate = systemdatetime.hostdate
             thirdUniqueIdenty = param.shopUniqueId
+            tenantId = param.tenantid
         })
         if (shoptypeCheck.isInEnums(shop.shoptype, ShopTypes.NORMAL)) {
             //非商户组要创建账号
@@ -73,6 +74,7 @@
                 this.subjno = Subject.SUBJNO_MACHANT_INCOME
                 this.status = TradeDict.STATUS_NORMAL
                 this.opendate = shop.opendate
+                this.tenantId = param.tenantid
             })
             shop.shopaccno = shopaccno
             shopDao.save(shop) //更新账号
