diff --git a/app/build.gradle b/app/build.gradle
index 7e3ad3d..e9986f9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -57,7 +57,8 @@
     androidTestImplementation 'com.android.support.test:runner:1.0.2'
     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
 
-    compile 'com.alibaba:fastjson:1.1.70.android'
+//    compile 'com.alibaba:fastjson:1.1.70.android'
+    compile 'com.google.code.gson:gson:2.8.5'
     compile 'com.nineoldandroids:parent:2.4.0'
     compile 'com.squareup.okhttp3:okhttp:3.10.0'
     compile 'net.java.dev.jna:jna:4.5.0@aar'
diff --git a/app/src/main/java/com/supwisdom/activities/YktSession.kt b/app/src/main/java/com/supwisdom/activities/YktSession.kt
index 5119798..0d01687 100644
--- a/app/src/main/java/com/supwisdom/activities/YktSession.kt
+++ b/app/src/main/java/com/supwisdom/activities/YktSession.kt
@@ -58,9 +58,6 @@
         val temp = signdata.replace("null".toRegex(), "")
         val mysign = calcSignForCardPay(temp, timestamp)
         params.setParameter("sign", mysign)
-//            .setParameter("sign_method", PublicDef.signMethod)
-//            .setParameter("term_id", mSession.getTermId())
-//            .setParameter("app_id", mSession.getAppId())
             .setParameter("timestamp", timestamp)
         val url = mSession!!.getEpayurl() + uri
         return NetworkHandler.getInstance().post(url, params)
@@ -71,9 +68,6 @@
         val temp = signdata.replace("null".toRegex(), "")
         val mysign = calcSignForCardPay(temp, timestamp)
         params.setParameter("sign", mysign)
-//            .setParameter("sign_method", PublicDef.signMethod)
-//            .setParameter("term_id", mSession.getTermId())
-//            .setParameter("app_id", mSession.getAppId())
             .setParameter("timestamp", timestamp)
         val url = mSession!!.getEpayurl() + uri
         return NetworkHandler.getInstance().longPost(url, params)
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
index fc520a8..f64c8cb 100644
--- a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
@@ -79,7 +79,7 @@
 
     private fun refresh() {
         AuxScreenController.getInstance().refreshTitle("卡库初始化")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(listOf("加载硬件驱动", "请稍等..."))
     }
 
@@ -95,7 +95,7 @@
             vResult!!.text = msg
             vResult!!.visibility = View.VISIBLE
             AuxScreenController.getInstance().refreshTitle("卡库初始化")
-            AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+            AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
             AuxScreenController.getInstance().refreshContent(listOf("请联系管理员", "加载驱动失败", "原因:", msg))
         }
         isLoading = false
diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
index 59a7439..5bc4f48 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -230,7 +230,7 @@
         vShopname.text = shopname
 
         refreshLinkStatus(SPApplication.getInstance().isOnline())
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate().substring(0, 16))
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime().substring(0, 16))
         AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
 
         val record = SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_FIXAMT)
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index cdef86f..96e3032 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -19,6 +19,7 @@
 import com.supwisdom.utils.GsonUtil
 import com.supwisdom.utils.PublicDef
 import org.apache.http.HttpStatus
+import java.lang.Exception
 
 /**
  ** create by zzq on 2019/7/25
@@ -82,6 +83,7 @@
             while (!isExist) {
                 if (iConsumeView.isBackRuning()) {
                     CommonUtil.doSleep(1000)
+                    doClear()
                     continue
                 }
                 CommonUtil.doSleep(100)
@@ -126,6 +128,9 @@
                 } catch (ex: CardNotFoundError) {
                     ex.printStackTrace()
                     doClear()
+                } catch (ex: Exception) {
+                    ex.printStackTrace()
+                    doClear()
                 }
             }
         }
@@ -343,7 +348,7 @@
                 curtime - lastShowTime > 1000
             ) {
                 lastShowTime = curtime
-                sendMsg(PublicDef.MSG_USER_INFO_CLEAR, DateUtil.getNowDate())
+                sendMsg(PublicDef.MSG_USER_INFO_CLEAR, DateUtil.getNowDateTime())
                 showLinkStatus()
             }
         }
diff --git a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
index 2ad9a6f..d7f5e32 100644
--- a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
@@ -140,7 +140,7 @@
 
     private fun refreshToCheckPasswd() {
         AuxScreenController.getInstance().refreshTitle("消费模式设置")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请输入商户密码:", " "))
     }
 
diff --git a/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt b/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
index 452db49..1d773f5 100644
--- a/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
@@ -149,7 +149,7 @@
 
     private fun refresh() {
         AuxScreenController.getInstance().refreshTitle("通讯参数设置")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(Arrays.asList("设备第一次使用", "请联系管理员", "在大屏配置参数"))
     }
 
diff --git a/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt b/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
index 13d527e..0b46818 100644
--- a/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
@@ -60,8 +60,8 @@
 
         val dyRecord = DynamicParaRecord()
         dyRecord.cardverno = "000000000000"
-//        dyRecord.setAppId(PublicDef.APP_ID)
-//        dyRecord.setAppSecret(PublicDef.APP_SECRET)
+        dyRecord.appid = PublicDef.APP_ID
+        dyRecord.appsecret = PublicDef.APP_SECRET
         pos.replaceDynamicPara(dyRecord)
 
         YktSession.getInstance().setWebAPISession(
diff --git a/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt b/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
index b05cea5..1e71cf2 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
@@ -42,7 +42,7 @@
         procontent.setLength(0)
         auxList.clear()
         AuxScreenController.getInstance().refreshTitle("设备参数加载")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(auxList)
     }
 
diff --git a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
index 1bcbc99..f6d0578 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
@@ -81,7 +81,6 @@
             }
 
             // 设置通讯参数
-//            YktSession.getInstance().setSessionKey(pos.getDynamicPara().getSessionKey())
             val apiInterface = EpayApiImpl()
             try {
                 sendMessage(LOAD_PROGRESS, "加载系统参数...")
diff --git a/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt b/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
index f5749c1..ec4b7be 100644
--- a/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
@@ -124,7 +124,7 @@
         flag = false
         isRunning = false
         AuxScreenController.getInstance().refreshTitle("设备管理界面")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(
             Arrays.asList(
                 getString(R.string.consume_menu_shop_passwd),
diff --git a/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
index 22daf3a..4c92368 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
@@ -138,7 +138,7 @@
             vReverse.visibility = View.GONE
         }
         AuxScreenController.getInstance().refreshTitle("设备管理界面")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(secList)
     }
 
diff --git a/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt b/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
index f22e796..a288b3f 100644
--- a/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
@@ -138,7 +138,7 @@
         tmpPwd = ""
         passwdHint = "输入原密码"
         AuxScreenController.getInstance().refreshTitle("商户密码修改")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
     }
 
diff --git a/app/src/main/java/com/supwisdom/activities/splash/SplashActivity.kt b/app/src/main/java/com/supwisdom/activities/splash/SplashActivity.kt
index 6e53f15..fd80a3a 100644
--- a/app/src/main/java/com/supwisdom/activities/splash/SplashActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/splash/SplashActivity.kt
@@ -39,7 +39,7 @@
 
     private fun refresh() {
         AuxScreenController.getInstance().refreshTitle("新开普智能设备")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(listOf<String>("欢迎使用智能设备"))
     }
 
diff --git a/app/src/main/java/com/supwisdom/activities/unregister/UnregisterActivity.kt b/app/src/main/java/com/supwisdom/activities/unregister/UnregisterActivity.kt
index 9ce56b4..14e8c6f 100644
--- a/app/src/main/java/com/supwisdom/activities/unregister/UnregisterActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/unregister/UnregisterActivity.kt
@@ -49,7 +49,7 @@
 
     private fun refresh(errmsg: String) {
         AuxScreenController.getInstance().refreshTitle("设备注册状态")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(listOf("设备未注册", errmsg))
     }
 
diff --git a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
index 5e7b4c8..0640dc4 100644
--- a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
@@ -88,7 +88,7 @@
     private fun refresh() {
         isUpgrading = false
         AuxScreenController.getInstance().refreshTitle("应用在线升级")
-        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(
             Arrays.asList(
                 "当前版本>>", CommonUtil.getVersionName(applicationContext),
diff --git a/app/src/main/java/com/supwisdom/bean/WhiteListRetBean.kt b/app/src/main/java/com/supwisdom/bean/WhiteListRetBean.kt
index 3ce0ec9..d0a4d63 100644
--- a/app/src/main/java/com/supwisdom/bean/WhiteListRetBean.kt
+++ b/app/src/main/java/com/supwisdom/bean/WhiteListRetBean.kt
@@ -6,6 +6,6 @@
  **/
 class WhiteListRetBean : BaseResp() {
     var cardverno: String? = null
-    var maxcount: Int = 0
+    var count: Int = 0
     var whitelist: List<WhiteListItemBean>? = null
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/epaycard/CardBaseInfoBean.kt b/app/src/main/java/com/supwisdom/epaycard/CardBaseInfoBean.kt
index 855b57c..c43d6d8 100644
--- a/app/src/main/java/com/supwisdom/epaycard/CardBaseInfoBean.kt
+++ b/app/src/main/java/com/supwisdom/epaycard/CardBaseInfoBean.kt
@@ -9,7 +9,7 @@
 class CardBaseInfoBean constructor(val data: ByteArray) {
     val cardNo: String
         get() {
-            return data.copyOfRange(31, 42).decodeBCD()
+            return data.copyOfRange(39, 42).decodeBCD()
         }
     val idCard: String
         get() {
diff --git a/app/src/main/java/com/supwisdom/epaycard/EpayCardlib.kt b/app/src/main/java/com/supwisdom/epaycard/EpayCardlib.kt
index 65c313d..86f0b47 100644
--- a/app/src/main/java/com/supwisdom/epaycard/EpayCardlib.kt
+++ b/app/src/main/java/com/supwisdom/epaycard/EpayCardlib.kt
@@ -40,7 +40,7 @@
     }
 
     private fun readBaseInfo(): CardBaseInfoBean {
-        val res = reader.cpuApdu("00B09500".decodeHex())
+        val res = reader.cpuApdu("00B0950047".decodeHex())
         if (!res.isOK()) {
             throw CardlibValueError("读基本信息错误:${res.swToString()}")
         }
diff --git a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
index 7ce9650..bf93d9b 100644
--- a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.okhttp
 
+import android.text.TextUtils
 import okhttp3.*
 import java.io.IOException
 import java.io.UnsupportedEncodingException
@@ -35,8 +36,8 @@
     private val JSON = MediaType.parse("application/json; charset=utf-8")
     private val FORM_ENCODE = MediaType.parse("application/x-www-form-urlencoded;charset=utf-8")
     private var commTime = 2
-    private var clientId = "clientId"
-    private var jwt = "jwt"
+    private var clientId: String? = null
+    private var jwt: String? = null
 
     init {
         client = OkHttpClient()
@@ -75,12 +76,16 @@
         }
     }
 
-    fun setClientId(clientId: String) {
+    fun setClientId(clientId: String?) {
         this.clientId = clientId
     }
 
-    fun setJwt(jwt: String) {
-        this.jwt = jwt
+    fun setJwt(jwt: String?) {
+        if (TextUtils.isEmpty(jwt)) {
+            this.jwt = jwt
+        } else {
+            this.jwt = "Bearer $jwt"
+        }
     }
 
     private class TrustAllCerts : X509TrustManager {
@@ -115,27 +120,30 @@
         return ssfFactory
     }
 
+    private fun addExtentHeader(request: Request.Builder): Request.Builder {
+        if (!TextUtils.isEmpty(clientId)) {
+            request.addHeader("X-TENANT-ID", clientId)
+        }
+        if (!TextUtils.isEmpty(jwt)) {
+            request.addHeader("Authorization", jwt)
+        }
+        return request
+    }
 
     fun get(url: String, params: WebParams?): TransResp? {
         val request = Request.Builder()
             .url(geturl(url, params))
             .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("X-TENANT-ID", clientId)
-            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
-            .build()
-        return getTransResp(request)
+        return getTransResp(addExtentHeader(request).build())
     }
 
     fun get(url: String, params: WebParams, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
         val request = Request.Builder()
             .url(geturl(url, params))
             .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("X-TENANT-ID", clientId)
-            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
-            .build()
-        client!!.newCall(request).enqueue(object : Callback {
+        client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
             override fun onFailure(call: Call, e: IOException) {
                 callback.callback(null)
             }
@@ -165,12 +173,9 @@
         val request = Request.Builder()
             .url(url)
             .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("X-TENANT-ID", clientId)
-            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .post(builder.build())
-            .build()
-        return getTransResp(request)
+        return getTransResp(addExtentHeader(request).build())
     }
 
     fun longPost(url: String, params: WebParams): TransResp? {
@@ -181,12 +186,9 @@
         val request = Request.Builder()
             .url(url)
             .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("X-TENANT-ID", clientId)
-            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .post(builder.build())
-            .build()
-        return getLongTransResp(request)
+        return getLongTransResp(addExtentHeader(request).build())
     }
 
     fun post(url: String, json: String): TransResp? {
@@ -194,12 +196,9 @@
         val request = Request.Builder()
             .url(url)
             .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("X-TENANT-ID", clientId)
-            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .post(body)
-            .build()
-        return getTransResp(request)
+        return getTransResp(addExtentHeader(request).build())
     }
 
     fun post(url: String, json: String, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
@@ -207,12 +206,9 @@
         val request = Request.Builder()
             .url(url)
             .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("X-TENANT-ID", clientId)
-            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .post(body)
-            .build()
-        client!!.newCall(request).enqueue(object : Callback {
+        client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
             override fun onFailure(call: Call, e: IOException) {
                 callback.callback(null)
             }
diff --git a/app/src/main/java/com/supwisdom/okhttp/WebParams.kt b/app/src/main/java/com/supwisdom/okhttp/WebParams.kt
index 8a6beb7..559123b 100644
--- a/app/src/main/java/com/supwisdom/okhttp/WebParams.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/WebParams.kt
@@ -16,12 +16,12 @@
     }
 
     fun setParameter(name: String, value: Int?): WebParams {
-        mParameters[name] = value
+        mParameters[name] = value?.toString()
         return this
     }
 
     fun setParameter(name: String, value: Float?): WebParams {
-        mParameters[name] = value
+        mParameters[name] = value?.toString()
         return this
     }
 
diff --git a/app/src/main/java/com/supwisdom/service/AuthEpay.kt b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
index 29549fd..fc252ae 100644
--- a/app/src/main/java/com/supwisdom/service/AuthEpay.kt
+++ b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
@@ -35,13 +35,17 @@
         val url = StringBuilder()
         url.append(record!!.epayIP).append(":").append(record.epayPort)
             .append("/").append(record.epayUri)
-            .append("/api/auth/refresh/").append(record.devphyid)
+            .append("/api/auth/refresh/").append(record.devphyid).append("?")
         val resp = NetworkHandler.getInstance().get(url.toString(), null)
             ?: throw AuthEpayError("jwt刷新请求超时")
         if (resp.retcode != HttpStatus.SC_OK) {
             throw AuthEpayError("jwt刷新错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthJwtRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, AuthJwtRetBean::class.java)
+        } catch (ex: Exception) {
+            throw AuthEpayError("jwt json异常:${ex.message}")
+        }
         dealSession(retBean)
     }
 
@@ -50,16 +54,23 @@
         val url = StringBuilder()
         url.append(record!!.epayIP).append(":").append(record.epayPort)
             .append("/").append(record.epayUri)
-            .append("/api/auth/gettoken/").append(record.devphyid)
+            .append("/api/auth/gettoken/").append(record.devphyid).append("?")
+        val params = WebParams()
+        params.setParameter("appid", pos.getDynamicPara()!!.appid)
 
         NetworkHandler.getInstance().setClientId(record.devphyid!!)
+        NetworkHandler.getInstance().setJwt(null)
 
-        val resp = NetworkHandler.getInstance().get(url.toString(), null)
+        val resp = NetworkHandler.getInstance().get(url.toString(), params)
             ?: throw AuthEpayError("token请求超时")
         if (resp.retcode != HttpStatus.SC_OK) {
             throw AuthEpayError("token错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthTokenRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, AuthTokenRetBean::class.java)
+        } catch (ex: Exception) {
+            throw AuthEpayError("token json异常:${ex.message}")
+        }
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw AuthEpayError(retBean.retmsg!!)
         }
@@ -74,19 +85,23 @@
         val url = StringBuilder()
         url.append(record!!.epayIP).append(":").append(record.epayPort)
             .append("/").append(record.epayUri)
-            .append("/api/auth/authentication/").append(record.devphyid)
+            .append("/api/auth/authentication/").append(record.devphyid).append("?")
 
-        val secret = CryptUtil.HMACSHA256(token, pos.getDynamicPara()!!.appsecret!!)
+        val secret = CryptUtil.HMACSHA256(pos.getDynamicPara()!!.appsecret!!, token)
         val params = WebParams()
         params.setParameter("appid", pos.getDynamicPara()!!.appid)
-            .setParameter("app_secret", secret)
+            .setParameter("secret", secret)
 
         val resp = NetworkHandler.getInstance().get(url.toString(), params)
             ?: throw AuthEpayError("jwt请求超时")
         if (resp.retcode != HttpStatus.SC_OK) {
             throw AuthEpayError("jwt错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthJwtRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, AuthJwtRetBean::class.java)
+        } catch (ex: Exception) {
+            throw AuthEpayError("jwt json异常:${ex.message}")
+        }
         dealSession(retBean)
     }
 
@@ -105,7 +120,11 @@
         if (resp.retcode != HttpStatus.SC_OK) {
             throw AuthEpayError("错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, AuthRetBean::class.java)
+        } catch (ex: Exception) {
+            throw AuthEpayError("json异常:${ex.message}")
+        }
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw AuthEpayError(retBean.retmsg!!)
         }
@@ -123,7 +142,6 @@
 
         val dyRecord = pos.getDynamicPara()
         dyRecord!!.jwt = bean.jwt
-        //TODO
         dyRecord.jwtExpire = DateUtil.utcToLocal(bean.expiredAt!!)
         if (!pos.replaceDynamicPara(dyRecord)) {
             throw AuthEpayError("保存参数失败")
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index 446fab4..517819d 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -40,7 +40,11 @@
         if (resp.retcode != HttpStatus.SC_OK) {
             throw HeartBeatError("错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, HeartBeatRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, HeartBeatRetBean::class.java)
+        } catch (ex: Exception) {
+            throw HeartBeatError("json异常:${ex.message}")
+        }
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw HeartBeatError(retBean.retmsg!!)
         }
@@ -82,21 +86,26 @@
         if (resp.retcode != HttpStatus.SC_OK) {
             throw SysParaError("错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, SystemParaRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, SystemParaRetBean::class.java)
+        } catch (ex: Exception) {
+            throw SysParaError("json异常:${ex.message}")
+        }
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw SysParaError(retBean.retmsg!!)
         }
         val record = pos.getSysPara() ?: SysParaRecord()
         retBean.syspara?.forEach {
             when {
-                it.paraname == "heartbeat" -> record.heatBeat = it.paraval!!.toInt()
-                it.paraname == "returnFlag" -> record.returnFlag = it.paraval!!.toInt()
-                it.paraname == "sucShowtime" -> record.sucShowtime = it.paraval!!.toInt()
-                it.paraname == "failShowtime" -> record.failShowtime = it.paraval!!.toInt()
-                it.paraname == "fixpayGap" -> record.fixpayGap = it.paraval!!.toInt()
-                it.paraname == "mngPasswd" -> record.mngPasswd = it.paraval
-                it.paraname == "offlineEnable" -> record.offlineEnable = it.paraval == "true"
-                it.paraname == "maxOfflineDays" -> record.maxOfflineDays = it.paraval!!.toInt()
+                it.paraname == "heat_beat" -> record.heatBeat = it.paraval!!.toInt()
+                it.paraname == "return_flag" -> record.returnFlag = it.paraval!!.toInt()
+                it.paraname == "consume_show_time" -> record.sucShowtime = it.paraval!!.toInt()
+                it.paraname == "consume_fail_show_time" -> record.failShowtime = it.paraval!!.toInt()
+                it.paraname == "fixpay_consume_gap" -> record.fixpayGap = it.paraval!!.toInt()
+                it.paraname == "manage_passwd" -> record.mngPasswd = it.paraval
+                it.paraname == "offline_flag" -> record.offlineEnable = it.paraval == "1"
+                it.paraname == "max_offline_days" -> record.maxOfflineDays = it.paraval!!.toInt()
+                it.paraname == "communicate_time" -> record.commTime = it.paraval!!.toInt()
             }
         }
         if (!pos.replaceSysPara(record)) {
@@ -106,22 +115,29 @@
 
     @Throws(WhiteListError::class)
     override fun downloadWhitelist(maxCardverno: String) {
-        val count = 20
+        val maxcount = 20
         do {
             val params = WebParams()
             params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
                 .setParameter("cardverno", pos.getDynamicPara()!!.cardverno)
-                .setParameter("maxcount", count)
+                .setParameter("maxcount", maxcount)
 
             val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/whitelist", "", params)
                 ?: throw WhiteListError("请求超时")
             if (resp.retcode != HttpStatus.SC_OK) {
                 throw WhiteListError("错误码=${resp.retcode}")
             }
-            val retBean = GsonUtil.GsonToBean(resp.retjson!!, WhiteListRetBean::class.java)
+            val retBean = try {
+                GsonUtil.GsonToBean(resp.retjson!!, WhiteListRetBean::class.java)
+            } catch (ex: Exception) {
+                throw WhiteListError("json异常:${ex.message}")
+            }
             if (retBean.retcode != PublicDef.SUCCESS) {
                 throw WhiteListError(retBean.retmsg!!)
             }
+            if (retBean.count != retBean.whitelist?.size) {
+                throw WhiteListError("白名单数量不对[${retBean.count},${retBean.whitelist?.size}]")
+            }
             val list = ArrayList<WhiteListRecord>()
             retBean.whitelist?.forEach {
                 val record = WhiteListRecord()
@@ -139,7 +155,7 @@
             if (!pos.replaceDynamicPara(dyRecord)) {
                 throw WhiteListError("保存参数失败")
             }
-        } while (retBean.maxcount == count)
+        } while (retBean.count == maxcount)
     }
 
     @Throws(TransdtlUploadError::class)
@@ -172,7 +188,11 @@
         if (resp.retcode != HttpStatus.SC_OK) {
             throw TransdtlUploadError("错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, TransdtlRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, TransdtlRetBean::class.java)
+        } catch (ex: Exception) {
+            throw TransdtlUploadError("json异常:${ex.message}")
+        }
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw TransdtlUploadError(retBean.retmsg!!)
         }
@@ -210,7 +230,11 @@
         if (resp.retcode != HttpStatus.SC_OK) {
             throw TransdtlUploadError("错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, TransdtlRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, TransdtlRetBean::class.java)
+        } catch (ex: Exception) {
+            throw TransdtlUploadError("json异常:${ex.message}")
+        }
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw TransdtlUploadError(retBean.retmsg!!)
         }
diff --git a/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt b/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
index 53eafa3..2a8ca33 100644
--- a/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
+++ b/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
@@ -2,7 +2,6 @@
 
 import android.os.Handler
 import android.os.Message
-import com.alibaba.fastjson.JSONObject
 import com.koushikdutta.async.callback.CompletedCallback
 import com.koushikdutta.async.future.Future
 import com.koushikdutta.async.http.AsyncHttpClient
@@ -10,10 +9,7 @@
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.db.Pos
 import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.LogUtil
-import com.supwisdom.utils.PublicDef
-import java.util.*
 
 /**
  ** create by zzq on 2019/7/23
diff --git a/app/src/main/java/com/supwisdom/utils/DateUtil.kt b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
index a134bac..c93d962 100644
--- a/app/src/main/java/com/supwisdom/utils/DateUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -133,17 +133,17 @@
 
     fun utcToLocal(utctime: String): String {
         val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
-        sdf.timeZone = TimeZone.getTimeZone("TUC")
-        try {
+        sdf.timeZone = TimeZone.getTimeZone("UTC")
+        return try {
             val utcDate = sdf.parse(utctime)
             sdf.timeZone = TimeZone.getDefault()
             val localTime = sdf.format(utcDate.time)
             val localDate = sdf.parse(localTime)
-            System.out.println("test")
+            FORMAT_yyyyMMddHHmmss.format(localDate.time)
         } catch (ex: ParseException) {
             ex.printStackTrace()
+            ""
         }
-        return ""
     }
 
 
@@ -240,6 +240,13 @@
     }
 
     /**
+     * @return yyyy-MM-dd HH:mm:ss
+     */
+    fun getNowDateTime(): String {
+        return FORMAT_yyyy_MM_dd_HH_mm_ss.format(Date())
+    }
+
+    /**
      * @return yyyy-MM-dd
      */
     fun getNowDate(): String {
@@ -247,22 +254,10 @@
     }
 
     /**
-     * @return yyyy-MM-dd
-     */
-    fun getNowDate2(date: Date): String? {
-        try {
-            return FORMAT_yyyy_MM_dd.format(date)
-        } catch (e: Exception) {
-            e.printStackTrace()
-        }
-        return null
-    }
-
-    /**
      * @param dateStr yyyy-MM-dd
      * @return
      */
-    fun getNowDate(dateStr: String): Date? {
+    fun getNowDateTime(dateStr: String): Date? {
         try {
             return FORMAT_yyyy_MM_dd.parse(dateStr)
         } catch (e: ParseException) {
diff --git a/app/src/main/java/com/supwisdom/utils/GsonUtil.kt b/app/src/main/java/com/supwisdom/utils/GsonUtil.kt
index 2c6d722..12e9209 100644
--- a/app/src/main/java/com/supwisdom/utils/GsonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/GsonUtil.kt
@@ -1,12 +1,14 @@
 package com.supwisdom.utils
 
-import com.alibaba.fastjson.JSON
+import com.google.gson.Gson
 
 /**
  ** create by zzq on 2019/7/24
  ** @desc
  **/
 object GsonUtil {
+    private val gson = Gson()
+
     /**
      * 转成json
      *
@@ -14,7 +16,8 @@
      * @return
      */
     fun GsonString(obj: Any): String {
-        return JSON.toJSONString(obj)
+        return gson.toJson(obj)
+//        return JSON.toJSONString(obj)
     }
 
     /**
@@ -25,6 +28,7 @@
      * @return
      */
     fun <T> GsonToBean(gsonString: String, cls: Class<T>): T {
-        return JSON.parseObject(gsonString, cls)
+        return gson.fromJson(gsonString, cls)
+//        return JSON.parseObject(gsonString, cls)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/LogUtil.kt b/app/src/main/java/com/supwisdom/utils/LogUtil.kt
index 75b8079..210fbd1 100644
--- a/app/src/main/java/com/supwisdom/utils/LogUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/LogUtil.kt
@@ -33,7 +33,7 @@
     }
 
     private fun writeLog(tag: String, msg: String) {
-        val time = DateUtil.getNowDate() + "--"
+        val time = DateUtil.getNowDateTime() + "--"
         FileUtil.writeLogFile("$tag:$time--$msg")
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index 0ac5f89..b67e05b 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -83,4 +83,9 @@
      * 消费冲正时限
      */
     const val REVERSE_MS_GAP = 600000
+    /**
+     *
+     */
+    const val APP_ID = "3000004"
+    const val APP_SECRET = "c9ae5b4fe5014b5b9eb19e1a0797a3a3"
 }
\ No newline at end of file
