From f01e9ca1fdc85f776d1689d434e30a5d15dd06a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 16 Jun 2020 17:52:24 +0800 Subject: [PATCH] =?UTF-8?q?mtps=E6=A0=A1=E9=AA=8C=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/delivery/mtps/waybill.go | 29 ++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 091b5f737..275810dfd 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -1,9 +1,12 @@ package mtps import ( + "crypto/sha1" "errors" "fmt" "net/http" + "net/url" + "sort" "strings" "time" @@ -115,7 +118,7 @@ func (c *DeliveryHandler) pushToGy(waybill *model.Waybill, msg *mtpsapi.Callback params["mt_peisong_id"] = msg.MtPeisongID params["courier_name"] = msg.CourierName params["delivery_id"] = msg.DeliveryID - params["sign"] = "ec61c8d88a1f864cc2cb1b875177fe1fb1402f05" + // params["sign"] = "ec61c8d88a1f864cc2cb1b875177fe1fb1402f05" params["appkey"] = msg.AppKey params["order_id"] = msg.OrderID params["courier_phone"] = msg.CourierPhone @@ -123,6 +126,9 @@ func (c *DeliveryHandler) pushToGy(waybill *model.Waybill, msg *mtpsapi.Callback params["timestamp"] = msg.Timestamp params["cancel_reason_id"] = msg.CancelReasonId params["cancel_reason"] = msg.CancelReason + urls := utils.Map2URLValues(params) + sign := signParams(urls) + params["sign"] = sign request, err := http.NewRequest(http.MethodPost, "http://callback-jxgy.jxc4.com/mtps/status", strings.NewReader(utils.Map2URLValues(params).Encode())) if err != nil { return @@ -132,6 +138,27 @@ func (c *DeliveryHandler) pushToGy(waybill *model.Waybill, msg *mtpsapi.Callback } } +func signParams(params url.Values) string { + keys := make([]string, 0) + for k := range params { + if k != "sign" { + keys = append(keys, k) + } + } + + sort.Strings(keys) + finalStr := "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE" + for _, key := range keys { + valStr := strings.Join(params[key], "") + if valStr != "" { + finalStr += key + valStr + } + } + + // baseapi.SugarLogger.Debug(finalStr) + return fmt.Sprintf("%x", sha1.Sum([]byte(finalStr))) +} + func (c *DeliveryHandler) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (retVal *model.Waybill) { retVal = &model.Waybill{ VendorWaybillID: msg.MtPeisongID,