冲突处理

This commit is contained in:
苏尹岚
2020-02-04 17:18:28 +08:00
4 changed files with 31 additions and 13 deletions

View File

@@ -6,15 +6,17 @@ import (
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
) )
func (a *API) FakeOrderQuery(jdParams map[string]interface{}) (retVal []interface{}, totalCount int, err error) { func (a *API) FakeOrderQuery(jdParams map[string]interface{}) (retVal []*OrderInfo, totalCount int, err error) {
retVal, totalCount, err = a.AccessAPIHavePage("order/orderQuery", jdParams, nil, nil, nil) orderList, totalCount, err := a.AccessAPIHavePage("order/orderQuery", jdParams, nil, nil, nil)
if err == nil {
err = JdMap2StructByJson(orderList, &retVal, true)
}
return retVal, totalCount, err return retVal, totalCount, err
} }
func (a *API) FakeQuerySingleOrder(orderId, deliveryStationNo string) (map[string]interface{}, error) { func (a *API) FakeQuerySingleOrder(orderId string) (*OrderInfo, error) {
jdParams := make(map[string]interface{}) jdParams := make(map[string]interface{})
jdParams["orderId"] = orderId jdParams["orderId"] = orderId
jdParams["deliveryStationNo "] = deliveryStationNo
result, _, err := a.FakeOrderQuery(jdParams) result, _, err := a.FakeOrderQuery(jdParams)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -22,7 +24,7 @@ func (a *API) FakeQuerySingleOrder(orderId, deliveryStationNo string) (map[strin
if len(result) == 0 { if len(result) == 0 {
return nil, ErrCanNotFindOrder return nil, ErrCanNotFindOrder
} }
return result[0].(map[string]interface{}), nil return result[0], nil
} }
func (a *API) FakeBatchUpdateCurrentQtys(trackInfo, outStationNo, stationNo string, skuStockList []*SkuStock, userPin string) (responseList []*StoreSkuBatchUpdateResponse, err error) { func (a *API) FakeBatchUpdateCurrentQtys(trackInfo, outStationNo, stationNo string, skuStockList []*SkuStock, userPin string) (responseList []*StoreSkuBatchUpdateResponse, err error) {

View File

@@ -10,7 +10,7 @@ import (
func TestFakeOrderQuery(t *testing.T) { func TestFakeOrderQuery(t *testing.T) {
api := NewFakeJD("ndslkv9asl@djf_n7askdjfk$", "http://test.jxc4.com/qqqq") api := NewFakeJD("ndslkv9asl@djf_n7askdjfk$", "http://test.jxc4.com/qqqq")
retVal, err := api.FakeQuerySingleOrder("2000483691000741", "11866256") retVal, err := api.FakeQuerySingleOrder("2002984074001021")
t.Log(utils.Format4Output(retVal, false)) t.Log(utils.Format4Output(retVal, false))
if err != nil { if err != nil {
t.Error(err) t.Error(err)

View File

@@ -171,8 +171,9 @@ func (a *API) getCallbackMsg(msgBody string) (msg *CallbackMsg, callbackResponse
reqInfo := utils.Interface2String(mapData["req_info"]) reqInfo := utils.Interface2String(mapData["req_info"])
transactionID := utils.Interface2String(mapData["transaction_id"]) transactionID := utils.Interface2String(mapData["transaction_id"])
if reqInfo == "" && transactionID != "" { // 对于支付结果通知进行签名验证(退款结果通知不支持验证) if reqInfo == "" && transactionID != "" { // 对于支付结果通知进行签名验证(退款结果通知不支持验证)
sigType := utils.Interface2String(mapData[sigTypeKey])
sign := utils.Interface2String(mapData[sigKey]) sign := utils.Interface2String(mapData[sigKey])
desiredSign := a.signParam(mapData) desiredSign := a.signParam(sigType, mapData)
if desiredSign != sign { if desiredSign != sign {
return nil, Err2CallbackResponse(fmt.Errorf("desiredSign:%s <> sign:%s", desiredSign, sign), "") return nil, Err2CallbackResponse(fmt.Errorf("desiredSign:%s <> sign:%s", desiredSign, sign), "")
} }

View File

@@ -2,6 +2,8 @@ package wxpayapi
import ( import (
"bytes" "bytes"
"crypto/hmac"
"crypto/md5"
"crypto/sha256" "crypto/sha256"
"crypto/tls" "crypto/tls"
"encoding/xml" "encoding/xml"
@@ -26,9 +28,10 @@ const (
ResponseCodeSuccess = "SUCCESS" ResponseCodeSuccess = "SUCCESS"
ResponseCodeFail = "FAIL" ResponseCodeFail = "FAIL"
sigKey = "sign" sigKey = "sign"
sigTypeKey = "sign_type" sigTypeKey = "sign_type"
sigType = "HMAC-SHA256" sigTypeMd5 = "MD5"
sigTypeSha256 = "HMAC-SHA256"
) )
const ( const (
@@ -328,7 +331,7 @@ func (a *API) GetMchID() string {
return a.mchID 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 var valueList []string
for k, v := range params { for k, v := range params {
if k != sigKey { if k != sigKey {
@@ -340,7 +343,17 @@ func (a *API) signParam(params map[string]interface{}) (sig string) {
sort.Sort(sort.StringSlice(valueList)) sort.Sort(sort.StringSlice(valueList))
valueList = append(valueList, fmt.Sprintf("key=%s", a.appKey)) valueList = append(valueList, fmt.Sprintf("key=%s", a.appKey))
sig = strings.Join(valueList, "&") 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 return sig
} }
@@ -356,8 +369,10 @@ func (a *API) AccessAPI(action string, requestParam IRequestBase) (retVal map[st
requestParam.SetAppID(a.appID) requestParam.SetAppID(a.appID)
requestParam.SetMchID(a.mchID) requestParam.SetMchID(a.mchID)
requestParam.SetNonceStr(utils.GetUUID()) requestParam.SetNonceStr(utils.GetUUID())
sigType := sigTypeSha256
// sigType := sigTypeMd5
requestParam.SetSignType(sigType) requestParam.SetSignType(sigType)
signStr := a.signParam(utils.Struct2FlatMap(requestParam)) signStr := a.signParam(sigType, utils.Struct2FlatMap(requestParam))
requestParam.SetSign(signStr) requestParam.SetSign(signStr)
fullURL := utils.GenerateGetURL(prodURL, action, nil) fullURL := utils.GenerateGetURL(prodURL, action, nil)