增加了 payapi-sdk
diff --git a/common/build.gradle b/common/build.gradle
index c5ae67d..88e5750 100644
--- a/common/build.gradle
+++ b/common/build.gradle
@@ -6,6 +6,7 @@
     implementation 'org.slf4j:slf4j-parent:1.7.26'
     implementation 'org.slf4j:slf4j-api:1.7.26'
     implementation 'javax.validation:validation-api:2.0.1.Final'
+    implementation 'javax.servlet:javax.servlet-api:4.0.1'
 
     compileOnly 'org.projectlombok:lombok:1.18.8'
     annotationProcessor 'org.projectlombok:lombok:1.18.8'
diff --git a/config/application-devel-pg-local.properties b/config/application-devel-pg-local.properties
index fb8bfc2..6fa530b 100644
--- a/config/application-devel-pg-local.properties
+++ b/config/application-devel-pg-local.properties
@@ -12,7 +12,7 @@
 spring.datasource.password=123456
 database.dbtype=postgresql
 # Redis settings
-spring.redis.server=localhost
+spring.redis.host=localhost
 spring.redis.port=6379
 spring.redis.password=
 # jwt settings
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 14b0bfe..eb7aa87 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -11,7 +11,7 @@
 spring.datasource.continue-on-error=true
 #spring.datasource.initialization-mode=always
 # Redis settings
-spring.redis.server=172.28.201.101
+spring.redis.host=172.28.201.101
 spring.redis.port=16379
 spring.redis.password=kingstar
 # jwt settings
@@ -26,7 +26,6 @@
 ## quartz task scheduler
 shopbalance.updater.cron=-
 ##################多租户配置 end################################
-
 #############################################
 spring.cloud.consul.enabled=false
 spring.cloud.consul.host=172.28.201.70
diff --git a/gradle.properties b/gradle.properties
index 2e0dda4..acf8d17 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,2 +1,4 @@
 payapiVersion = 1.0
-jdkVersion = 1.8
\ No newline at end of file
+jdkVersion = 1.8
+nxUser=ecard
+nxPassword=Ecard4SUP
\ No newline at end of file
diff --git a/payapi-sdk/build.gradle b/payapi-sdk/build.gradle
index f77566a..1f3cc9c 100644
--- a/payapi-sdk/build.gradle
+++ b/payapi-sdk/build.gradle
@@ -1,5 +1,6 @@
 plugins {
     id 'java'
+    id 'maven-publish'
     id 'org.springframework.boot'
     id "com.palantir.git-version"
 }
@@ -7,6 +8,37 @@
 
 apply plugin: 'io.spring.dependency-management'
 
+sdkVersion = gitVersion()
+
+publishing {
+    publications {
+        mavenJava(MavenPublication) {
+            groupId = project.group
+            artifactId = 'payapi-sdk'
+            version = sdkVersion
+            from components.java
+        }
+    }
+    repositories {
+        maven {
+            // change URLs to point to your repos, e.g. http://my.org/repo
+            def releasesRepoUrl = "http://ykt-nx.supwisdom.com/repository/ecard-repo/"
+            def snapshotsRepoUrl = "http://ykt-nx.supwisdom.com/repository/ecard-repo/snapshot/"
+            url = version.endsWith('dirty') ? snapshotsRepoUrl : releasesRepoUrl
+            credentials(PasswordCredentials) {
+                username = nxUser
+                password = nxPassword
+            }
+        }
+    }
+}
+
+jar {
+    manifest {
+        attributes('Payapi-SDK-Version': sdkVersion)
+    }
+}
+
 dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
     implementation 'org.springframework.boot:spring-boot-starter-data-redis'
@@ -16,4 +48,12 @@
 
     implementation 'org.springframework.cloud:spring-cloud-dependencies:Finchley.SR3'
     implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:2.1.2.RELEASE'
+
+    implementation 'javax.servlet:javax.servlet-api:4.0.1'
+
+    testImplementation 'org.springframework:spring-test'
+    testImplementation 'org.springframework.boot:spring-boot-test'
+    testImplementation 'junit:junit:4.12'
+    testImplementation project(':common')
+
 }
\ No newline at end of file
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
new file mode 100644
index 0000000..efb2afd
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/ApiLoginProxy.java
@@ -0,0 +1,31 @@
+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/CitizenCardPay.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/CitizenCardPay.java
deleted file mode 100644
index f815fe1..0000000
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/CitizenCardPay.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.supwisdom.dlpay.paysdk;
-
-import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam;
-import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-@FeignClient(value = "citizenCardPay", url = "${payapi.url}")
-public interface CitizenCardPay {
-  @PostMapping("/api/consume/citizencard/payinit")
-  ResponseEntity citizencardPayinit(@RequestBody CitizenCardPayinitParam param);
-
-  @PostMapping("/api/consume/citizencard/payfinish")
-  ResponseEntity citizencardPayinit(@RequestBody CitizenCardPayfinishParam param);
-}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/CitizenCardPayProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/CitizenCardPayProxy.java
new file mode 100644
index 0000000..c5e38b1
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/CitizenCardPayProxy.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.paysdk;
+
+import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam;
+import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam;
+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);
+
+  @RequestMapping(value = "/api/consume/citizencard/payfinish", method = RequestMethod.GET)
+  ResponseEntity<Map<String, String>> citizencardPayFinish(@RequestBody CitizenCardPayfinishParam param);
+}
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
new file mode 100644
index 0000000..305c665
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java
@@ -0,0 +1,18 @@
+package com.supwisdom.dlpay.paysdk;
+
+import com.supwisdom.dlpay.paysdk.utils.Constants;
+import feign.RequestInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PayAPIRequestInterceptor {
+  @Bean
+  public RequestInterceptor headerInterceptor() {
+    return requestTemplate -> {
+      // 小示例,没什么卵用
+      requestTemplate.header(Constants.HEADER_TENANT_ID, "{tenantid}");
+    };
+  }
+}
+
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayReverseProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayReverseProxy.java
new file mode 100644
index 0000000..fc2ad65
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayReverseProxy.java
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.paysdk;
+
+import com.supwisdom.dlpay.api.bean.ConsumePayCancelParam;
+import com.supwisdom.dlpay.api.bean.ConsumePayRefundParam;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.Map;
+
+@FeignClient(name = "payReverseProxy", url = "${payapi.url}")
+public interface PayReverseProxy {
+  @PostMapping("/api/consume/paycancel")
+  ResponseEntity<Map<String, String>> payCancel(@RequestBody ConsumePayCancelParam param);
+
+  @PostMapping("/api/consume/payrefund")
+  ResponseEntity<Map<String, String>> payRefund(@RequestBody ConsumePayRefundParam param);
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/YktPayProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/YktPayProxy.java
new file mode 100644
index 0000000..238b008
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/YktPayProxy.java
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.paysdk;
+
+import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam;
+import com.supwisdom.dlpay.api.bean.YktCardPayinitParam;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.Map;
+
+@FeignClient(name = "yktPayProxy", url = "${payapi.url}")
+public interface YktPayProxy {
+  @PostMapping("/api/consume/ykt/payinit")
+  ResponseEntity<Map<String, String>> yktPayInit(@RequestBody YktCardPayinitParam param);
+
+  @PostMapping("/api/consume/ykt/payfinish")
+  ResponseEntity<Map<String, String>> yktPayFinish(@RequestBody CitizenCardPayfinishParam param);
+}
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
new file mode 100644
index 0000000..ba565ee
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/utils/Constants.java
@@ -0,0 +1,5 @@
+package com.supwisdom.dlpay.paysdk.utils;
+
+public class Constants {
+  public static final String HEADER_TENANT_ID = "X-TENANT-ID";
+}
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
new file mode 100644
index 0000000..76407f5
--- /dev/null
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.paysdktest;
+
+
+import com.supwisdom.dlpay.paysdk.ApiLoginProxy;
+import com.supwisdom.dlpay.paysdk.CitizenCardPayProxy;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+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;
+
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(properties = {
+    "payapi.url=http://localhost:8080/payapi"},
+    classes = CitizenCardPayProxyTest.class)
+@ImportAutoConfiguration({RibbonAutoConfiguration.class,
+    FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class,
+    HttpMessageConvertersAutoConfiguration.class})
+@EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
+@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
+public class CitizenCardPayProxyTest {
+  private final static String appid = "700001";
+
+  private final static String tenantId = "{tenant_id}";
+
+  @Autowired
+  private ApiLoginProxy apiLoginProxy;
+
+  @Autowired
+  private CitizenCardPayProxy citizenCardPayProxy;
+
+  @org.junit.Test
+  public void citizencardPayinit() {
+    ResponseEntity loginInit = apiLoginProxy.loginInit(appid);
+    System.out.println("Data " + loginInit.getBody());
+  }
+
+  public static void main(String[] args) {
+
+  }
+}