冲突处理
This commit is contained in:
@@ -171,8 +171,9 @@ func (a *API) getCallbackMsg(msgBody string) (msg *CallbackMsg, callbackResponse
|
||||
reqInfo := utils.Interface2String(mapData["req_info"])
|
||||
transactionID := utils.Interface2String(mapData["transaction_id"])
|
||||
if reqInfo == "" && transactionID != "" { // 对于支付结果通知进行签名验证(退款结果通知不支持验证)
|
||||
sigType := utils.Interface2String(mapData[sigTypeKey])
|
||||
sign := utils.Interface2String(mapData[sigKey])
|
||||
desiredSign := a.signParam(mapData)
|
||||
desiredSign := a.signParam(sigType, mapData)
|
||||
if desiredSign != sign {
|
||||
return nil, Err2CallbackResponse(fmt.Errorf("desiredSign:%s <> sign:%s", desiredSign, sign), "")
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package wxpayapi
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/hmac"
|
||||
"crypto/md5"
|
||||
"crypto/sha256"
|
||||
"crypto/tls"
|
||||
"encoding/xml"
|
||||
@@ -26,9 +28,10 @@ const (
|
||||
ResponseCodeSuccess = "SUCCESS"
|
||||
ResponseCodeFail = "FAIL"
|
||||
|
||||
sigKey = "sign"
|
||||
sigTypeKey = "sign_type"
|
||||
sigType = "HMAC-SHA256"
|
||||
sigKey = "sign"
|
||||
sigTypeKey = "sign_type"
|
||||
sigTypeMd5 = "MD5"
|
||||
sigTypeSha256 = "HMAC-SHA256"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -328,7 +331,7 @@ func (a *API) GetMchID() string {
|
||||
return a.mchID
|
||||
}
|
||||
|
||||
func (a *API) signParam(params map[string]interface{}) (sig string) {
|
||||
func (a *API) signParam(signType string, params map[string]interface{}) (sig string) {
|
||||
var valueList []string
|
||||
for k, v := range params {
|
||||
if k != sigKey {
|
||||
@@ -340,7 +343,17 @@ func (a *API) signParam(params map[string]interface{}) (sig string) {
|
||||
sort.Sort(sort.StringSlice(valueList))
|
||||
valueList = append(valueList, fmt.Sprintf("key=%s", a.appKey))
|
||||
sig = strings.Join(valueList, "&")
|
||||
sig = fmt.Sprintf("%X", sha256.Sum256([]byte(sig)))
|
||||
var binSig []byte
|
||||
if signType == sigTypeMd5 {
|
||||
binSig2 := md5.Sum([]byte(sig))
|
||||
binSig = binSig2[:]
|
||||
} else if signType == sigTypeSha256 {
|
||||
mac := hmac.New(sha256.New, []byte(a.appKey))
|
||||
mac.Write([]byte(sig))
|
||||
binSig = mac.Sum(nil)
|
||||
}
|
||||
sig = fmt.Sprintf("%X", binSig)
|
||||
// baseapi.SugarLogger.Debug(sig)
|
||||
return sig
|
||||
}
|
||||
|
||||
@@ -356,8 +369,10 @@ func (a *API) AccessAPI(action string, requestParam IRequestBase) (retVal map[st
|
||||
requestParam.SetAppID(a.appID)
|
||||
requestParam.SetMchID(a.mchID)
|
||||
requestParam.SetNonceStr(utils.GetUUID())
|
||||
sigType := sigTypeSha256
|
||||
// sigType := sigTypeMd5
|
||||
requestParam.SetSignType(sigType)
|
||||
signStr := a.signParam(utils.Struct2FlatMap(requestParam))
|
||||
signStr := a.signParam(sigType, utils.Struct2FlatMap(requestParam))
|
||||
requestParam.SetSign(signStr)
|
||||
|
||||
fullURL := utils.GenerateGetURL(prodURL, action, nil)
|
||||
|
||||
Reference in New Issue
Block a user