From 70307748ac4110e3272b2ff06045bdb12babca1e Mon Sep 17 00:00:00 2001 From: blusewang Date: Tue, 24 Nov 2020 02:52:10 +0800 Subject: [PATCH] fixed bug --- mch_api/structs.go | 23 +++++++++++++---------- mch_req.go | 41 ++++++++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/mch_api/structs.go b/mch_api/structs.go index f9b1106..1744f6e 100644 --- a/mch_api/structs.go +++ b/mch_api/structs.go @@ -270,16 +270,19 @@ type RedPackInfoRes struct { } type TransferData struct { - MchBase - MchId string `xml:"mchid"` - MchAppId string `xml:"mch_appid"` - PartnerTradeNo string `xml:"partner_trade_no"` - OpenId string `xml:"openid"` - CheckName string `xml:"check_name"` - ReUserName string `xml:"re_user_name"` - Amount int `xml:"amount"` - Desc string `xml:"desc"` - SpBillCreateIp string `xml:"spbill_create_ip"` + XMLName xml.Name `xml:"xml"` + NonceStr string `xml:"nonce_str"` + Sign string `xml:"sign"` + SignType string `xml:"sign_type,omitempty"` + MchId string `xml:"mchid"` + MchAppId string `xml:"mch_appid"` + PartnerTradeNo string `xml:"partner_trade_no"` + OpenId string `xml:"openid"` + CheckName string `xml:"check_name"` + ReUserName string `xml:"re_user_name"` + Amount int `xml:"amount"` + Desc string `xml:"desc"` + SpBillCreateIp string `xml:"spbill_create_ip"` } type TransferRes struct { diff --git a/mch_req.go b/mch_req.go index 25913f6..83c23f2 100644 --- a/mch_req.go +++ b/mch_req.go @@ -101,23 +101,38 @@ func (mr *mchReq) sign() (err error) { return errors.New("the data to be sign is not set") } - if reflect.ValueOf(mr.sendData).Kind() != reflect.Ptr { + vf := reflect.ValueOf(mr.sendData) + if vf.Kind() != reflect.Ptr { return errors.New("the send data must be ptr") } - var base = reflect.ValueOf(mr.sendData).Elem().FieldByName("MchBase") - base.FieldByName("MchId").SetString(mr.account.MchId) - base.FieldByName("AppId").SetString(mr.appId) - base.FieldByName("NonceStr").SetString(NewRandStr(32)) + if vf.Elem().FieldByName("MchBase").IsValid() { + var base = vf.Elem().FieldByName("MchBase") + base.FieldByName("MchId").SetString(mr.account.MchId) + base.FieldByName("AppId").SetString(mr.appId) + base.FieldByName("NonceStr").SetString(NewRandStr(32)) - var sign string - //base.FieldByName("SignType").SetString(mch_api.MchSignTypeMD5) - if mr.isHmacSign { - base.FieldByName("SignType").SetString(mch_api.MchSignTypeHMACSHA256) - sign = mr.account.signHmacSha256(mr.sendData) - } else { - sign = mr.account.signMd5(mr.sendData) + var sign string + if mr.isHmacSign { + base.FieldByName("SignType").SetString(mch_api.MchSignTypeHMACSHA256) + sign = mr.account.signHmacSha256(mr.sendData) + } else { + sign = mr.account.signMd5(mr.sendData) + } + base.FieldByName("Sign").SetString(sign) + } else if vf.Elem().FieldByName("Sign").IsValid() && vf.Elem().FieldByName("NonceStr").IsValid() { + vf.Elem().FieldByName("NonceStr").SetString(NewRandStr(32)) + var sign string + if mr.isHmacSign { + if vf.Elem().FieldByName("SignType").IsValid() { + vf.Elem().FieldByName("SignType").SetString(mch_api.MchSignTypeHMACSHA256) + sign = mr.account.signHmacSha256(mr.sendData) + } + } else { + sign = mr.account.signMd5(mr.sendData) + } + vf.Elem().FieldByName("Sign").SetString(sign) } - base.FieldByName("Sign").SetString(sign) + return }