diff --git a/payapi-sdk/build.gradle b/payapi-sdk/build.gradle
index af9e76f..3523c69 100644
--- a/payapi-sdk/build.gradle
+++ b/payapi-sdk/build.gradle
@@ -57,10 +57,15 @@
     implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:2.1.2.RELEASE'
 
     implementation 'javax.servlet:javax.servlet-api:4.0.1'
+    compileOnly 'org.projectlombok:lombok:1.18.8'
+    annotationProcessor 'org.projectlombok:lombok:1.18.8'
 
     testImplementation 'org.springframework:spring-test'
     testImplementation 'org.springframework.boot:spring-boot-test'
     testImplementation 'junit:junit:4.12'
+    testAnnotationProcessor 'org.projectlombok:lombok:1.18.8'
+    testCompileOnly 'org.projectlombok:lombok:1.18.8'
+    testImplementation 'org.hamcrest:hamcrest:2.1'
     testImplementation project(':common')
 
 }
\ No newline at end of file
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
new file mode 100644
index 0000000..d095603
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginHelper.java
@@ -0,0 +1,42 @@
+package com.supwisdom.dlpay.paysdk;
+
+import com.supwisdom.dlpay.paysdk.bean.ApiLoginInitResponse;
+import com.supwisdom.dlpay.paysdk.bean.ApiLoginResponse;
+import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
+import com.supwisdom.dlpay.paysdk.utils.JwtContext;
+import com.supwisdom.dlpay.paysdk.utils.Utils;
+
+public class ApiLoginHelper {
+  private ApiLoginProxy apiLoginProxy;
+
+  public ApiLoginHelper(ApiLoginProxy apiLoginProxy) {
+    this.apiLoginProxy = apiLoginProxy;
+  }
+
+  public void login(String appid, String secret) {
+    loginWithClientId(appid, null, secret);
+  }
+
+  public void loginWithClientId(String appid, String clientId, String secret) {
+    ApiLoginInitResponse loginInit;
+    if (clientId != null) {
+      loginInit = apiLoginProxy.loginInitWithClientId(appid, clientId);
+    } else {
+      loginInit = apiLoginProxy.loginInit(appid);
+    }
+    if (loginInit.getRetcode() != 0) {
+      throw new RuntimeException("登录初始化错误: " + loginInit.getRetcode() + ", " + loginInit.getException());
+    }
+    String token = Utils.sha256HMAC(loginInit.getToken(), secret);
+    ApiLoginResponse login;
+    if (clientId != null) {
+      login = apiLoginProxy.loginWithClientId(appid, token, clientId);
+    } else {
+      login = apiLoginProxy.login(appid, token);
+    }
+    if (login.getRetcode() != 0) {
+      throw new RuntimeException("登录错误: " + loginInit.getRetcode() + ", " + loginInit.getException());
+    }
+    JwtContext.setJwt(login.getJwt());
+  }
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginProxy.java
deleted file mode 100644
index efb2afd..0000000
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginProxy.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.supwisdom.dlpay.paysdk;
-
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Map;
-
-@FeignClient(value = "apiLoginProxy", url = "${payapi.url}")
-public interface ApiLoginProxy {
-  @RequestMapping(value = "/api/auth/gettoken", method = RequestMethod.GET)
-  ResponseEntity<Map<String, String>> loginInit(@RequestParam("appid") String appid);
-
-  @RequestMapping(value = "/api/auth/gettoken/{clientid}", method = RequestMethod.GET)
-  ResponseEntity<Map<String, String>> loginInitWithClientId(@RequestParam("appid") String appid,
-                                       @PathVariable(value = "clientid") String clientid);
-
-  @RequestMapping(value = "/api/auth/authentication", method = RequestMethod.GET)
-  ResponseEntity<Map<String, String>> login(@RequestParam("appid") String appid, @RequestParam("secret") String secret);
-
-  @RequestMapping(value = "/api/auth/authentication/{clientid}", method = RequestMethod.GET)
-  ResponseEntity<Map<String, String>> loginWithClientId(@RequestParam("appid") String appid, @RequestParam("secret") String secret,
-                                   @PathVariable(value = "clientid") String clientid);
-
-  @RequestMapping(value = "/api/auth/refresh", method = RequestMethod.GET)
-  ResponseEntity<Map<String, String>> refresh(HttpServletRequest request);
-}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java
index 305c665..1002d52 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.paysdk;
 
 import com.supwisdom.dlpay.paysdk.utils.Constants;
+import com.supwisdom.dlpay.paysdk.utils.JwtContext;
 import feign.RequestInterceptor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;
@@ -12,6 +13,10 @@
     return requestTemplate -> {
       // 小示例，没什么卵用
       requestTemplate.header(Constants.HEADER_TENANT_ID, "{tenantid}");
+      String jwt = JwtContext.getJwt();
+      if (jwt != null) {
+        requestTemplate.header(Constants.JWT_HEADER, "Bearer " + jwt);
+      }
     };
   }
 }
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginInitResponse.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginInitResponse.java
new file mode 100644
index 0000000..405d4ae
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginInitResponse.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.paysdk.bean;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+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/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginResponse.java
new file mode 100644
index 0000000..787fe90
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiLoginResponse.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.paysdk.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ApiLoginResponse extends ApiResponse {
+  private String jwt;
+  private String appid;
+  private String expiredAt;
+
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiResponse.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiResponse.java
new file mode 100644
index 0000000..4b18413
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/ApiResponse.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.paysdk.bean;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ApiResponse {
+  private Integer retcode;
+  private String retmsg;
+  private String exception;
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/CitizenPayInitResponse.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/CitizenPayInitResponse.java
new file mode 100644
index 0000000..cf28b8b
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/bean/CitizenPayInitResponse.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.paysdk.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class CitizenPayInitResponse extends ApiResponse {
+  private String refno;
+  private String billno;
+  private Double amount;
+}
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
new file mode 100644
index 0000000..f9e5a67
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/ApiLoginProxy.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.paysdk.proxy;
+
+import com.supwisdom.dlpay.paysdk.bean.ApiLoginInitResponse;
+import com.supwisdom.dlpay.paysdk.bean.ApiLoginResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.servlet.http.HttpServletRequest;
+
+@FeignClient(value = "apiLoginProxy", url = "${payapi.url}")
+public interface ApiLoginProxy {
+  @RequestMapping(value = "/api/auth/gettoken", method = RequestMethod.GET)
+  ApiLoginInitResponse loginInit(@RequestParam("appid") String appid);
+
+  @RequestMapping(value = "/api/auth/gettoken/{clientid}", method = RequestMethod.GET)
+  ApiLoginInitResponse loginInitWithClientId(@RequestParam("appid") String appid,
+                                                            @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);
+
+  @RequestMapping(value = "/api/auth/refresh", method = RequestMethod.GET)
+  ApiLoginResponse refresh(HttpServletRequest request);
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/CitizenCardPayProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/CitizenCardPayProxy.java
similarity index 67%
rename from payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/CitizenCardPayProxy.java
rename to payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/CitizenCardPayProxy.java
index c5e38b1..d2e758f 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/CitizenCardPayProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/CitizenCardPayProxy.java
@@ -1,20 +1,18 @@
-package com.supwisdom.dlpay.paysdk;
+package com.supwisdom.dlpay.paysdk.proxy;
 
 import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam;
 import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam;
+import com.supwisdom.dlpay.paysdk.bean.CitizenPayInitResponse;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import java.util.Map;
-
 @FeignClient(value = "citizenCardPay", url = "${payapi.url}")
 public interface CitizenCardPayProxy {
   @RequestMapping(value = "/api/consume/citizencard/payinit", method = RequestMethod.GET)
-  ResponseEntity<Map<String, String>> citizencardPayinit(@RequestBody CitizenCardPayinitParam param);
+  CitizenPayInitResponse citizencardPayinit(@RequestBody CitizenCardPayinitParam param);
 
   @RequestMapping(value = "/api/consume/citizencard/payfinish", method = RequestMethod.GET)
-  ResponseEntity<Map<String, String>> citizencardPayFinish(@RequestBody CitizenCardPayfinishParam param);
+  CitizenPayInitResponse citizencardPayFinish(@RequestBody CitizenCardPayfinishParam param);
 }
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayReverseProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/PayReverseProxy.java
similarity index 94%
rename from payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayReverseProxy.java
rename to payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/PayReverseProxy.java
index fc2ad65..827e685 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayReverseProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/PayReverseProxy.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.paysdk;
+package com.supwisdom.dlpay.paysdk.proxy;
 
 import com.supwisdom.dlpay.api.bean.ConsumePayCancelParam;
 import com.supwisdom.dlpay.api.bean.ConsumePayRefundParam;
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/YktPayProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/YktPayProxy.java
similarity index 94%
rename from payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/YktPayProxy.java
rename to payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/YktPayProxy.java
index 238b008..46d967c 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/YktPayProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/YktPayProxy.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.paysdk;
+package com.supwisdom.dlpay.paysdk.proxy;
 
 import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam;
 import com.supwisdom.dlpay.api.bean.YktCardPayinitParam;
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/Constants.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/Constants.java
index ba565ee..f3dae03 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/Constants.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/Constants.java
@@ -2,4 +2,5 @@
 
 public class Constants {
   public static final String HEADER_TENANT_ID = "X-TENANT-ID";
+  public static final String JWT_HEADER = "Authorization";
 }
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/JwtContext.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/JwtContext.java
new file mode 100644
index 0000000..0bd07ef
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/JwtContext.java
@@ -0,0 +1,17 @@
+package com.supwisdom.dlpay.paysdk.utils;
+
+public class JwtContext {
+  private static String jwt;
+
+  public static String getJwt() {
+    synchronized (JwtContext.class) {
+      return jwt;
+    }
+  }
+
+  public static void setJwt(String j) {
+    synchronized (JwtContext.class) {
+      jwt = j;
+    }
+  }
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/Utils.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/Utils.java
new file mode 100644
index 0000000..791850d
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/Utils.java
@@ -0,0 +1,29 @@
+package com.supwisdom.dlpay.paysdk.utils;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+public class Utils {
+  public static String sha256HMAC(String message, String secret) {
+    String hash = "";
+    try {
+      Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
+      SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
+      sha256_HMAC.init(secret_key);
+      byte[] bytes = sha256_HMAC.doFinal(message.getBytes());
+      hash = byteArrayToHexString(bytes);
+      System.out.println(hash);
+    } catch (Exception e) {
+      System.out.println("Error HmacSHA256 ===========" + e.getMessage());
+    }
+    return hash;
+  }
+
+  private static String byteArrayToHexString(byte[] bytes) {
+    StringBuilder builder = new StringBuilder();
+    for (byte b : bytes) {
+      builder.append(String.format("%02x", ((int) b) & 0xFF));
+    }
+    return builder.toString();
+  }
+}
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 76407f5..4838929 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,8 +1,11 @@
 package com.supwisdom.dlpay.paysdktest;
 
 
-import com.supwisdom.dlpay.paysdk.ApiLoginProxy;
-import com.supwisdom.dlpay.paysdk.CitizenCardPayProxy;
+import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam;
+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;
@@ -13,9 +16,11 @@
 import org.springframework.cloud.openfeign.FeignAutoConfiguration;
 import org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration;
 import org.springframework.context.annotation.ComponentScan;
-import org.springframework.http.ResponseEntity;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(properties = {
@@ -28,8 +33,7 @@
 @ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
 public class CitizenCardPayProxyTest {
   private final static String appid = "700001";
-
-  private final static String tenantId = "{tenant_id}";
+  private final static String secret = "5f788ce433ec44f299351cdf7f137e81";
 
   @Autowired
   private ApiLoginProxy apiLoginProxy;
@@ -39,8 +43,18 @@
 
   @org.junit.Test
   public void citizencardPayinit() {
-    ResponseEntity loginInit = apiLoginProxy.loginInit(appid);
-    System.out.println("Data " + loginInit.getBody());
+    ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+    helper.login(appid, secret);
+
+    CitizenCardPayinitParam initParam = new CitizenCardPayinitParam();
+    initParam.setBillno("20190708172756000001");
+    initParam.setCardNo("1231231213");
+    initParam.setAmount(100);
+    initParam.setTransdate("20190708");
+    initParam.setTranstime("172713");
+    CitizenPayInitResponse payInit = citizenCardPayProxy.citizencardPayinit(initParam);
+    assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(),
+        payInit.getRetcode(), equalTo(0));
   }
 
   public static void main(String[] args) {
