瀏覽代碼

微信参数接口防抖

kobe6258 4 天之前
父節點
當前提交
a8dce304f9

+ 11 - 6
common/utils/payment/payment_utils.go

@@ -31,13 +31,13 @@ type PaymentToken struct {
 
 // PaymentParam 支付参数结构
 type PaymentParam struct {
-	ProductOrderNo string `json:"product_order_no" mapStruct:"ProductOrderNo"`
-	PayOrderNo     string `json:"pay_order_no" mapStruct:"PayOrderNo"`
-	PrepayId       string `json:"prepay_id" mapStruct:"PrepayId"`
+	ProductOrderNo string `json:"productOrderNo" mapStruct:"ProductOrderNo"`
+	PayOrderNo     string `json:"payOrderNo" mapStruct:"PayOrderNo"`
+	Package        string `json:"package" mapStruct:"Package"`
 	Timestamp      string `json:"timestamp" mapStruct:"Timestamp"`
-	NonceStr       string `json:"nonce_str" mapStruct:"NonceStr"`
-	PaySign        string `json:"pay_sign" mapStruct:"PaySign"`
-	SignType       string `json:"sign_type" mapStruct:"SignType"`
+	NonceStr       string `json:"nonceStr" mapStruct:"NonceStr"`
+	PaySign        string `json:"paySign" mapStruct:"PaySign"`
+	SignType       string `json:"signType" mapStruct:"SignType"`
 	Status         string `json:"status"  mapStruct:"Status"`
 }
 
@@ -112,3 +112,8 @@ func Ready(token string, param PaymentParam) (err error) {
 	paramMap, _ := StructToMap(param)
 	return rdb.UpdateHSetNoExpire(token, paramMap)
 }
+func Used(token string, param PaymentParam) (err error) {
+	param.Status = USED
+	paramMap, _ := StructToMap(param)
+	return rdb.UpdateHSetNoExpire(token, paramMap)
+}

+ 1 - 0
controllers/payment/payment_controller.go

@@ -160,6 +160,7 @@ func (pc *PaymentController) PayOrderStatus(token string) {
 		}
 		if paymentParams.Status == payUtils.READY {
 			//查询到就绪之后将token状态重置为已用
+			err = payUtils.Used(redis.GenerateWechatOrderToken(token), paymentParams)
 			pc.SuccessResult("支付订单创建成功", paymentParams, result)
 			return
 		}

+ 6 - 1
service/payment/payment_service.go

@@ -66,7 +66,12 @@ func DealWechatSDKParams(sdk WechatSDKParams) (err error) {
 			continue
 		}
 		if paymentParam.PayOrderNo == sdk.OrderNo {
-			paymentParam.PrepayId = sdk.PrepayId
+			if paymentParam.Status != payment.PENDING {
+				logger.Error("重复的推送消息")
+				err = fmt.Errorf("当前订单正在处理中,请勿重复推送")
+				return
+			}
+			paymentParam.Package = fmt.Sprintf("prepay_id=%s", sdk.PrepayId)
 			paymentParam.Timestamp = sdk.Timestamp
 			paymentParam.NonceStr = sdk.NonceStr
 			paymentParam.PaySign = sdk.PaySign