diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
index 544a68e..14fc1d7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
@@ -60,8 +60,7 @@
     if (sign.equalsIgnoreCase(calcSign)) {
       return true;
     }
-//    return false;
-    return true;
+    return false;
   }
 
   public boolean checkSign(String key){
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
index fd18771..8da1f6c 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
@@ -240,7 +240,7 @@
     try {
       java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
       Date d = sdf.parse(datetime);
-      return true;
+      return datetime.trim().equals(sdf.format(d));
     } catch (Exception e) {
     }
     return false;
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index aab9a8d..c151b4b 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -297,7 +297,7 @@
     var billno: String? = null
 
     override fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(refno) || StringUtil.isEmpty(billno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "流水号不能为空")
+        if (StringUtil.isEmpty(refno) && StringUtil.isEmpty(billno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "流水号不能为空")
 
         return true
     }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
index 3141e6c..d66a927 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
@@ -45,11 +45,6 @@
      * */
     @PostMapping("/common/init")
     fun rechargeInit(@RequestBody param: CommonRechargeInitParam, authentication: Authentication): ResponseEntity<Any> {
-        if (!param.checkSign(commonService.getSecretByAppid(authentication.name))) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-        }
-
         if (chargeApiService.checkRechargeSourcetype(param.sourcetype)) {
             val person = userService.findOnePersonByUserid(param.userid)
             val account = accountUtilServcie.readAccount(person.userid)
@@ -113,12 +108,7 @@
     }
 
     @PostMapping("/common/confirm")
-    fun rechargeConfirm(@RequestBody param: CommonRechargeConfirmParam, authentication: Authentication): ResponseEntity<Any> {
-        if (!param.checkSign(commonService.getSecretByAppid(authentication.name))) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-        }
-
+    fun rechargeConfirm(@RequestBody param: CommonRechargeConfirmParam): ResponseEntity<Any> {
         transactionService.success(param.refno).let {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .data("refno", it.refno)
@@ -136,11 +126,6 @@
      * */
     @PostMapping("/queryresult")
     fun rechargeConfirm(@RequestBody param: CommonQueryRechargeResultParam, authentication: Authentication): ResponseEntity<Any> {
-        if (!param.checkSign(commonService.getSecretByAppid(authentication.name))) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-        }
-
         chargeApiService.getTransactionMainDtl(param.refno, param.billno, authentication.name).let {
             if (null == it) {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index d2cc60b..7be1e16 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -139,12 +139,7 @@
      * ============================================================================
      * */
     @PostMapping("/balance/pay")
-    fun balancePay(@RequestBody param: CitizenCardPayinitParam, authentication: Authentication): ResponseEntity<Any> {
-        if (!param.checkSign(commonService.getSecretByAppid(authentication.name))) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-        }
-
+    fun balancePay(@RequestBody param: CitizenCardPayinitParam): ResponseEntity<Any> {
         val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
         if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_BALANCE)) {
             val account = accountUtilServcie.readAccount(person.userid)
@@ -215,12 +210,7 @@
      * ============================================================================
      * */
     @PostMapping("/citizencard/payinit")
-    fun citizencardPayinit(@RequestBody param: CitizenCardPayinitParam, authenticateAction: Authentication): ResponseEntity<Any> {
-        if (!param.checkSign(commonService.getSecretByAppid(authenticateAction.name))) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-        }
-
+    fun citizencardPayinit(@RequestBody param: CitizenCardPayinitParam): ResponseEntity<Any> {
         val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
         if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_CITIZEN_CARD)) {
 
@@ -292,43 +282,29 @@
      * ============================================================================
      * */
     @PostMapping("/citizencard/payfinish")
-    fun citizencardPayinit(@RequestBody param: CitizenCardPayfinishParam, authentication: Authentication): ResponseEntity<Any> {
-        try {
-            if (param.checkParam() && param.checkSign(commonService.getSecretByAppid(authentication.name))) {
+    fun citizencardPayinit(@RequestBody param: CitizenCardPayfinishParam): ResponseEntity<Any> {
+        val code = transactionService.wip(param.refno).let {
+            CallService.CallCitizenCardPay(
+                    consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, it.shopDtl.shopaccno),
+                    it.shopDtl)
+        }
+        if (code.retcode == "0") {
+            transactionService.success(param.refno, "支付").let {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
+                        .data("refno", it.refno)
+                        .data("billno", it.outTradeNo)
+                        .data("amount", it.shopDtl.amount)
+                        .success("交易确认成功"))
             }
 
-            val code = transactionService.wip(param.refno).let {
-                CallService.CallCitizenCardPay(
-                        consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, it.shopDtl.shopaccno),
-                        it.shopDtl)
+        } else {
+            transactionService.fail(param.refno).let {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
             }
-            if (code.retcode == "0") {
-                transactionService.success(param.refno, "支付").let {
-                    return ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .data("refno", it.refno)
-                            .data("billno", it.outTradeNo)
-                            .success("交易确认成功"))
-                }
-
-
-            } else {
-                transactionService.fail(param.refno).let {
-                    return ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
-                }
-            }
-        } catch (ex: RequestParamCheckException) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
         }
     }
 
-
     /**
      * ============================================================================
      *                           一卡通支付【交易初始化】
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index e12d3cd..5be7f24 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -6,9 +6,8 @@
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
+import org.springframework.dao.DataAccessException
 import org.springframework.stereotype.Service
-import org.springframework.transaction.annotation.Propagation
 import org.springframework.transaction.annotation.Transactional
 
 interface TransactionService {
@@ -79,7 +78,8 @@
     fun init(builder: TransactionBuilder): TTransactionMain {
         try{
             return transactionService.init(builder)
-        }catch (ex:Exception){
+        }catch(ex: DataAccessException){
+            //其他SQL错误
             ex.javaClass.name.let {
                 val name = it.substringAfterLast('.')
 
