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,