This commit is contained in:
li 2022-11-22 15:42:48 +08:00
parent 564c9a5341
commit 649d240561
5 changed files with 227 additions and 191 deletions

View File

@ -497,20 +497,20 @@ func RentCardOrderCreate(c *gin.Context) {
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return return
} }
//webPay, err := wxpay.WebPay(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl) webPay, err := wxpay.WebPay(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
if err != nil { if err != nil {
logger.Error(errors.New("WebPay err")) logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return return
} }
//webPay, err := wxpay.HmJsPayUnifiedOrder(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
//num, err := model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater(). //num, err := model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().
// SetOutTradeNo(webPay.NonceStr).SetMchid(config.AppConfig.WxMchID).UpdateNum() // SetOutTradeNo(webPay.NonceStr).SetMchid(config.AppConfig.WxMchID).UpdateNum()
//if err != nil { //if err != nil {

View File

@ -326,6 +326,13 @@ func OpenMember(c *gin.Context) {
return return
} }
//webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
RespOK(c, webPay) RespOK(c, webPay)
} }

View File

@ -960,9 +960,9 @@ func newHttpClient(certFile, keyFile string) (*http.Client, error) {
type HmPayPublicPara struct { type HmPayPublicPara struct {
AppId string `json:"app_id"` AppId string `json:"app_id"`
//SubAppId string `json:"sub_app_id"` //SubAppId string `json:"sub_app_id"`
Method string `json:"method"` Method string `json:"method"`
Charset string `json:"charset"` //Charset string `json:"charset"`
//SignType string `json:"sign_type"` SignType string `json:"sign_type"`
Sign string `json:"sign"` Sign string `json:"sign"`
Timestamp string `json:"timestamp"` Timestamp string `json:"timestamp"`
Nonce string `json:"nonce"` Nonce string `json:"nonce"`
@ -972,41 +972,78 @@ type HmPayPublicPara struct {
} }
type HmJsPayUnifiedOrderReq struct { type HmJsPayUnifiedOrderReq struct {
CreateIp string `json:"create_ip"`
CreateTime string `json:"create_time"`
//ExpireTime string `json:"expire_time"`
//BankWay string `json:"bank_way"`
PayWay string `json:"pay_way"`
PayType string `json:"pay_type"`
MerAppId string `json:"mer_app_id"`
MerBuyerId string `json:"mer_buyer_id"`
//BuyerId string `json:"buyer_id"`
TotalAmount float64 `json:"total_amount"`
OutOrderNo string `json:"out_order_no"`
//scene_info
Body string `json:"body"`
StoreId string `json:"store_id"`
//TerminalId string `json:"terminal_id"`
//OperatorId string `json:"operator_id"`
NotifyUrl string `json:"notify_url"`
//RedirectUrl string `json:"redirect_url"`
//LimitPay string `json:"limit_pay"`
//ReqReserved string `json:"req_reserved"`
//extend_params
//discount_info
//goods_details
//device_info
//ext_user_info
HmPayPublicPara HmPayPublicPara
} }
type HmPayBizContent struct {
Body string `json:"body"`
BuyerId string `json:"buyer_id"`
CreateIp string `json:"create_ip"`
CreateTime string `json:"create_time"`
DiscountInfo struct {
DiscountableAmount float64 `json:"discountable_amount"`
} `json:"discount_info"`
ExpireTime string `json:"expire_time"`
ExtendParams struct {
AccessPartyCode string `json:"access_party_code"`
} `json:"extend_params"`
GoodsDetails []HmPayGoodsDetails `json:"goods_details"`
LimitPay string `json:"limit_pay"`
NotifyUrl string `json:"notify_url"`
//OperatorId string `json:"operator_id"`
OutOrderNo string `json:"out_order_no"`
PayType string `json:"pay_type"`
PayWay string `json:"pay_way"`
StoreId string `json:"store_id"`
//TerminalId string `json:"terminal_id"`
TotalAmount float64 `json:"total_amount"`
}
type HmPayGoodsDetails struct {
Body string `json:"body"`
GoodsId string `json:"goods_id"`
GoodsName string `json:"goods_name"`
Price float64 `json:"price"`
Quantity int `json:"quantity"`
ShowUrl string `json:"show_url"`
}
type HmPayUnifiedOrderDetail struct {
BankOrderNo string `json:"bank_order_no"`
BankTrxNo string `json:"bank_trx_no"`
BankWay string `json:"bank_way"`
OutOrderNo string `json:"out_order_no"`
PayData string `json:"pay_data"`
PlatTrxNo string `json:"plat_trx_no"`
PrepayId string `json:"prepay_id"`
SubCode string `json:"sub_code"`
SubMsg string `json:"sub_msg"`
}
type HmPayUnifiedOrderPayData struct {
TimeStamp string `json:"timeStamp"`
Package string `json:"package"`
PaySign string `json:"paySign"`
AppId string `json:"appId"`
SignType string `json:"signType"`
NonceStr string `json:"nonceStr"`
}
type HmPayUnifiedOrderRsp struct {
Code string `json:"code"`
Msg string `json:"msg"`
Data string `json:"data"`
Sign string `json:"sign"`
}
//hm 微信支付 //hm 微信支付
func HmJsPayUnifiedOrder(orderId string, totalFee uint32, openId, profitSharing, attach, notifyUrl string) (*Sextuple, error) { func HmJsPayUnifiedOrder(orderId string, totalFee uint32, openId, profitSharing, attach, notifyUrl string) (*HmPayUnifiedOrderPayData, error) {
now := time.Now().Local() now := time.Now().Local()
strTime := fmt.Sprintf("%04d%02d%02d%02d%02d%02d", now.Year(), now.Month(), now.Day(), now.Hour(), strTime := fmt.Sprintf("%04d%02d%02d%02d%02d%02d", now.Year(), now.Month(), now.Day(), now.Hour(),
now.Minute(), now.Second()) now.Minute(), now.Second())
expireTime := now.Add(time.Hour * 3)
strExpireTime := fmt.Sprintf("%04d%02d%02d%02d%02d%02d", expireTime.Year(), expireTime.Month(),
expireTime.Day(), expireTime.Hour(), expireTime.Minute(), expireTime.Second())
nonce := utils.GenRandStr(NonceStringLength) nonce := utils.GenRandStr(NonceStringLength)
if notifyUrl == "" { if notifyUrl == "" {
@ -1014,74 +1051,63 @@ func HmJsPayUnifiedOrder(orderId string, totalFee uint32, openId, profitSharing,
return nil, errors.New("NotifyUrl is null") return nil, errors.New("NotifyUrl is null")
} }
logger.Info("MchId:", config.AppConfig.WxMchID) //logger.Info("MchId:", config.AppConfig.WxMchID)
logger.Info("AppId:", config.AppConfig.WxAppId) //logger.Info("AppId:", config.AppConfig.WxAppId)
logger.Info("MchSecret:", config.AppConfig.WxMchSecret) //logger.Info("MchSecret:", config.AppConfig.WxMchSecret)
//unifiedOrderReq := UnifiedOrderReq{ unifiedOrderReq := HmJsPayUnifiedOrderReq{}
// DeviceInfo: "WEB",
// NonceStr: nonce,
// Sign: "",
// SignType: "MD5",
// Body: "创建订单",
// OutTradeNo: orderId,
// FeeType: "CNY",
// TotalFee: strconv.Itoa(int(totalFee)),
// //SpbillCreateIp: config.AppConfig.IP,
// SpbillCreateIp: clientIp,
// //NotifyUrl: "https://" + config.AppConfig.Domain + config.AppConfig.WxPayNotifyUrl,
// //NotifyUrl: "https://" + domain + wxPayNotifyUrl,
// //NotifyUrl: configInfo.NotifyUrl,
// NotifyUrl: notifyUrl,
//
// TradeType: "JSAPI",
// MchId: config.AppConfig.WxMchID,
// AppId: config.AppConfig.WxAppId,
// OpenId: openId,
// TimeStart: strTime,
// ProfitSharing: profitSharing,
// Attach: attach,
//}
unifiedOrderReq := HmJsPayUnifiedOrderReq{
CreateIp: clientIp,
CreateTime: strTime,
//ExpireTime: "",
//BankWay: "",
PayWay: "WECHAT",
PayType: "JSAPI",
MerAppId: config.AppConfig.WxAppId,
MerBuyerId: openId,
//BuyerId: "",
TotalAmount: float64(totalFee) / 100,
OutOrderNo: orderId,
Body: "会员",
StoreId: "100001",
//TerminalId: "",
//OperatorId: "",
NotifyUrl: notifyUrl,
//RedirectUrl: "",
//LimitPay: "",
//ReqReserved: "",
}
publicPara := HmPayPublicPara{ publicPara := HmPayPublicPara{
AppId: HmPayMerchantId, AppId: HmPayMerchantId,
//SubAppId: HmWxSubMerchantId, //SubAppId: HmWxSubMerchantId,
Method: "trade.create", Method: "trade.create",
Charset: "UTF-8", //Charset: "UTF-8",
//SignType: "", SignType: "RSA",
Sign: "", Sign: "",
Timestamp: now.Format(TimeFormat), Timestamp: now.Format(TimeFormat),
Nonce: nonce, Nonce: nonce,
//Version: "", //Nonce: fmt.Sprintf("%d", time.Now().UnixNano()),
//Format: "", //Version: "1.0.0",
BizContent: fmt.Sprintf(`{"attach":"%s"}`, attach), //Format: "JSON",
}
biz := HmPayBizContent{
Body: "会员费",
BuyerId: openId,
CreateIp: clientIp,
CreateTime: strTime,
DiscountInfo: struct {
DiscountableAmount float64 `json:"discountable_amount"`
}{},
ExpireTime: strExpireTime,
ExtendParams: struct {
AccessPartyCode string `json:"access_party_code"`
}{},
GoodsDetails: []HmPayGoodsDetails{
{
Body: "会员",
GoodsId: "1",
GoodsName: "会员服务",
Price: 399,
Quantity: 1,
ShowUrl: "",
},
},
LimitPay: "NO_CREDIT",
NotifyUrl: notifyUrl,
OutOrderNo: orderId,
PayType: "JSAPI",
PayWay: "WECHAT",
StoreId: "100001",
TotalAmount: float64(totalFee) / 100,
} }
unifiedOrderReq.HmPayPublicPara = publicPara unifiedOrderReq.HmPayPublicPara = publicPara
//fmt.Println("OutTradeNo:", unifiedOrderReq.OutTradeNo) bizString, err := json.Marshal(&biz)
fmt.Println("OutOrderNo:", unifiedOrderReq.OutOrderNo) if err != nil {
logger.Error("marshal biz err:", err)
return nil, err
}
unifiedOrderReq.HmPayPublicPara.BizContent = string(bizString)
m, err := struct2Map(unifiedOrderReq) m, err := struct2Map(unifiedOrderReq)
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
@ -1096,7 +1122,6 @@ func HmJsPayUnifiedOrder(orderId string, totalFee uint32, openId, profitSharing,
logger.Error(err) logger.Error(err)
return nil, err return nil, err
} }
//unifiedOrderReq.Sign = strings.ToUpper(sign)
unifiedOrderReq.Sign = sign unifiedOrderReq.Sign = sign
//unifiedOrderReqJson, _ := json.Marshal(&unifiedOrderReq) //unifiedOrderReqJson, _ := json.Marshal(&unifiedOrderReq)
@ -1107,59 +1132,26 @@ func HmJsPayUnifiedOrder(orderId string, totalFee uint32, openId, profitSharing,
logger.Errorf("WxUnifiedOrder unified order error %#v", err) logger.Errorf("WxUnifiedOrder unified order error %#v", err)
return nil, err return nil, err
} }
//fmt.Println("unifiedOrderResp:", unifiedOrderResp.Data)
var sextuple Sextuple var hmPayDetail HmPayUnifiedOrderDetail
sextuple.NonceStr = unifiedOrderResp.NonceStr err = json.Unmarshal([]byte(unifiedOrderResp.Data), &hmPayDetail)
sextuple.AppId = unifiedOrderResp.AppId
sextuple.Timestamp = fmt.Sprintf("%d", now.Unix())
sextuple.Package = "prepay_id=" + unifiedOrderResp.PrepayId
sextuple.SignType = "MD5"
//logger.Debugf("unified order sextuple: %#v", sextuple)
m, err = struct2Map(sextuple)
if err != nil { if err != nil {
logger.Errorf("struct to map error %#v", err) logger.Errorf("hm pay unified order pay data unmarshal error %#v", err)
return nil, err
}
//fmt.Println("hmPayDetail:", hmPayDetail)
var hmPayData HmPayUnifiedOrderPayData
err = json.Unmarshal([]byte(hmPayDetail.PayData), &hmPayData)
if err != nil {
logger.Errorf("hm pay unified order pay data unmarshal error %#v", err)
return nil, err return nil, err
} }
sextuple.PaySign, err = GenWxPaySign(m, config.AppConfig.WxMchSecret) //fmt.Println("hmPayData:", hmPayData)
if err != nil { return &hmPayData, nil
logger.Errorf("GenWxPaySign gen response sign error: %#v", err)
return nil, err
}
return &sextuple, nil
} }
//func RsaSign(signContent string, privateKey string, hash crypto.Hash) string {
// shaNew := hash.New()
// shaNew.Write([]byte(signContent))
// hashed := shaNew.Sum(nil)
// priKey, err := ParsePrivateKey(privateKey)
// if err != nil {
// panic(err)
// }
//
// signature, err := rsa.SignPKCS1v15(rand.Reader, priKey, hash, hashed)
// if err != nil {
// panic(err)
// }
// return base64.StdEncoding.EncodeToString(signature)
//digest := sha256.Sum256(data)
//
//signature, signErr := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, digest[:])
//
//if signErr != nil {
//t.Errorf("Could not sign message:%s", signErr.Error())
//}
//
//// just to check that we can survive to and from b64
//b64sig := base64.StdEncoding.EncodeToString(signature)
//
//decodedSignature, _ := base64.StdEncoding.DecodeString(b64sig)
//}
func GenHmPaySign(m map[string]string) (string, error) { func GenHmPaySign(m map[string]string) (string, error) {
delete(m, "sign") delete(m, "sign")
var signData []string var signData []string
@ -1167,34 +1159,23 @@ func GenHmPaySign(m map[string]string) (string, error) {
if k == "openid" { if k == "openid" {
fmt.Println(k, ":", v) fmt.Println(k, ":", v)
} }
//fmt.Println("k:", k)
//fmt.Println("v:", v)
if v != "" && v != "0" { if v != "" && v != "0" {
signData = append(signData, fmt.Sprintf("%s=%s", k, v)) signData = append(signData, fmt.Sprintf("%s=%s", k, v))
} }
} }
signDataJson, _ := json.MarshalIndent(&signData, "", " ") //signDataJson, _ := json.MarshalIndent(&signData, "", " ")
fmt.Println("signDataJson1", string(signDataJson)) //fmt.Println("signDataJson1", string(signDataJson))
sort.Strings(signData) sort.Strings(signData)
signDataJson2, _ := json.MarshalIndent(&signData, "", " ") //signDataJson2, _ := json.MarshalIndent(&signData, "", " ")
fmt.Println("signDataJson2", string(signDataJson2)) //fmt.Println("signDataJson2", string(signDataJson2))
signStr := strings.Join(signData, "&") signStr := strings.Join(signData, "&")
//signStr = signStr + "&key=" + payKey //signStr = signStr + "&key=" + payKey
logger.Info("签字符串1 :", signStr) logger.Info("签字符串1 :", signStr)
//c := md5.New()
//_, err := c.Write([]byte(signStr)) signature, err := Sha1withRsa(signStr)
//if err != nil {
// logger.Error(err)
// return "", err
//}
//
//signByte := c.Sum(nil)
//
//return fmt.Sprintf("%x", signByte), nil
signature, err := Sha256withRsa(signStr)
if err != nil { if err != nil {
logger.Error("signature err:", err) logger.Error("signature err:", err)
return "", err return "", err
@ -1202,8 +1183,8 @@ func GenHmPaySign(m map[string]string) (string, error) {
return signature, nil return signature, nil
} }
func Sha256withRsa(signContent string) (string, error) { func Sha1withRsa(signContent string) (string, error) {
hash := crypto.SHA256 hash := crypto.SHA1
shaNew := hash.New() shaNew := hash.New()
shaNew.Write([]byte(signContent)) shaNew.Write([]byte(signContent))
hashed := shaNew.Sum(nil) hashed := shaNew.Sum(nil)
@ -1260,7 +1241,7 @@ func FormatPrivateKey(privateKey string) string {
return privateKey return privateKey
} }
func VerifySha256Rsa(signContent, signBase string) error { func VerifySha1Rsa(signContent, signBase string) error {
fp := "/Users/li/mh/mh_server/pack/configs/hm_pay/public_key.pme" fp := "/Users/li/mh/mh_server/pack/configs/hm_pay/public_key.pme"
publicKeyString, err := ioutil.ReadFile(fp) publicKeyString, err := ioutil.ReadFile(fp)
if err != nil { if err != nil {
@ -1279,7 +1260,7 @@ func VerifySha256Rsa(signContent, signBase string) error {
fmt.Println("public key nil:") fmt.Println("public key nil:")
return err return err
} }
hash := crypto.SHA256 hash := crypto.SHA1
shaNew := hash.New() shaNew := hash.New()
shaNew.Write([]byte(signContent)) shaNew.Write([]byte(signContent))
hashed := shaNew.Sum(nil) hashed := shaNew.Sum(nil)
@ -1290,7 +1271,7 @@ func VerifySha256Rsa(signContent, signBase string) error {
return err return err
} }
err = rsa.VerifyPKCS1v15(publicKey.(*rsa.PublicKey), crypto.SHA256, hashed, sign) err = rsa.VerifyPKCS1v15(publicKey.(*rsa.PublicKey), hash, hashed, sign)
if err != nil { if err != nil {
fmt.Println("verify err:", err) fmt.Println("verify err:", err)
return err return err
@ -1300,48 +1281,77 @@ func VerifySha256Rsa(signContent, signBase string) error {
return nil return nil
} }
func HmPayUnifiedOrder(r HmJsPayUnifiedOrderReq) (UnifiedOrderResp, error) { func HmPayUnifiedOrder(r HmJsPayUnifiedOrderReq) (HmPayUnifiedOrderRsp, error) {
var payResp UnifiedOrderResp var hmPayUnifiedOrderRsp HmPayUnifiedOrderRsp
data, err := json.Marshal(r) data, err := json.Marshal(r)
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
return payResp, err return hmPayUnifiedOrderRsp, err
} }
fmt.Println("data json:", string(data)) fmt.Println("data json:", string(data))
client := http.Client{} client := http.Client{}
req, err := http.NewRequest("POST", HmPayUnifiedOrderUrl, bytes.NewBuffer(data)) req, err := http.NewRequest("POST", HmPayUnifiedOrderUrl, bytes.NewBuffer(data))
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
return payResp, err return hmPayUnifiedOrderRsp, err
} }
//req.Header.Set("Content-Type", "application/json; charset=utf-8") req.Header.Set("Content-Type", "application/json; charset=utf-8")
req.Header.Set("Content-Type", "application/json") //req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
return payResp, err return hmPayUnifiedOrderRsp, err
} }
body, err := ioutil.ReadAll(resp.Body) body, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
return payResp, err return hmPayUnifiedOrderRsp, err
} }
fmt.Println("body:", string(body)) fmt.Println("body:", string(body))
defer resp.Body.Close() defer resp.Body.Close()
//err = xml.Unmarshal(body, &payResp) err = json.Unmarshal(body, &hmPayUnifiedOrderRsp)
//if err != nil { if err != nil {
// logger.Error(err) logger.Error("hmPayUnifiedOrderRsp err:", err)
// return payResp, err return hmPayUnifiedOrderRsp, err
//} }
// if hmPayUnifiedOrderRsp.Code != "200" {
//if payResp.ReturnCode != "SUCCESS" { return hmPayUnifiedOrderRsp, errors.New(hmPayUnifiedOrderRsp.Msg)
// return payResp, errors.New(payResp.ReturnMsg) }
//}
return payResp, nil return hmPayUnifiedOrderRsp, nil
} }
//func RsaSign(signContent string, privateKey string, hash crypto.Hash) string {
// shaNew := hash.New()
// shaNew.Write([]byte(signContent))
// hashed := shaNew.Sum(nil)
// priKey, err := ParsePrivateKey(privateKey)
// if err != nil {
// panic(err)
// }
//
// signature, err := rsa.SignPKCS1v15(rand.Reader, priKey, hash, hashed)
// if err != nil {
// panic(err)
// }
// return base64.StdEncoding.EncodeToString(signature)
//
// digest := sha256.Sum256(data)
//
// signature, signErr := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, digest[:])
//
// if signErr != nil {
// t.Errorf("Could not sign message:%s", signErr.Error())
// }
//
// // just to check that we can survive to and from b64
// b64sig := base64.StdEncoding.EncodeToString(signature)
//
// decodedSignature, _ := base64.StdEncoding.DecodeString(b64sig)
//}

View File

@ -2096,17 +2096,17 @@ func TestPasKey(t *testing.T) {
fmt.Println("key:", encodeToString) fmt.Println("key:", encodeToString)
} }
func TestSha256withRsa(t *testing.T) { func TestSha1withRsa(t *testing.T) {
d := `{"hm":10}` d := `{"hm":10}`
withRsa, err := wxpay.Sha256withRsa(d) withRsa, err := wxpay.Sha1withRsa(d)
if err != nil { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
} }
fmt.Println("sign:", withRsa) fmt.Println("sign:", withRsa)
err = wxpay.VerifySha256Rsa(d, withRsa) err = wxpay.VerifySha1Rsa(d, withRsa)
if err != nil { if err != nil {
logger.Error("verify rsa err:", err) logger.Error("verify rsa err:", err)
} }
@ -2121,3 +2121,15 @@ func TestHmJsPayUnifiedOrder(t *testing.T) {
fmt.Println("order:", order) fmt.Println("order:", order)
} }
func TestUnicode(t *testing.T) {
str := `{"msg":"\u8be5\u5355\u53f7\u6682\u65e0\u7269\u6d41\u8fdb\u5c55\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff0c\u6216\u68c0\u67e5\u516c\u53f8\u548c\u5355\u53f7\u662f\u5426\u6709\u8bef\u3002","status":"-3","error_code":"13","data":{"info":{"status":"0","msg":"\u8be5\u5355\u53f7\u6682\u65e0\u7269\u6d41\u8fdb\u5c55\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff0c\u6216\u68c0\u67e5\u516c\u53f8\u548c\u5355\u53f7\u662f\u5426\u6709\u8bef\u3002","_source_com":""},"com":"zhongtong","company":{"url":"http:\/\/www.zto.com\/?from=openv","fullname":"\u4e2d\u901a\u5feb\u9012","shortname":"\u4e2d\u901a","icon":{"id":"29","smallurl":"https:\/\/ss0.baidu.com\/6ONWsjip0QIZ8tyhnq\/it\/u=3682653099,2524883494&fm=58","smallpos":"0,496","middleurl":"https:\/\/ss2.baidu.com\/6ONYsjip0QIZ8tyhnq\/it\/u=1078213688,3146076104&fm=58","middlepos":"0,324","normal":"https:\/\/ss0.baidu.com\/6ONWsjip0QIZ8tyhnq\/it\/u=1022514261,1855787563&fm=58"},"website":{"title":"www.zto.com","url":"http:\/\/www.zto.com"},"tel":"95311","auxiliary":[{"title":"\u7f51\u70b9\u67e5\u8be2","url":"http:\/\/www.zto.com\/GuestService\/SiteQuery"},{"title":"\u7f51\u4e0a\u5bc4\u4ef6","url":"http:\/\/my.zto.com\/order"},{"title":"\u4ef7\u683c\u67e5\u8be2","url":"http:\/\/www.zto.com\/GuestService\/PriceQuery"},{"title":"\u4e2d\u901a\u4f18\u9009","url":"http:\/\/www.ztbest.com"}]},"source":{"logo":"https:\/\/ss2.baidu.com\/6ONYsjip0QIZ8tyhnq\/it\/u=1429564979,1787167512&fm=58","title":"\u6570\u636e\u6765\u81ea\u5feb\u9012100","url":"http:\/\/www.kuaidi100.com\/?from=baidu_ala","name":"\u5feb\u9012100","showName":"\u5feb\u9012100"}}}`
data := make(map[string]interface{})
json.Unmarshal([]byte(str), &data)
newStr, err := json.Marshal(data)
if err != nil {
panic(err)
}
fmt.Println("===", string(newStr))
}

View File

@ -542,6 +542,7 @@ type UserInviteListReq struct {
PageSize int `json:"page_size"` PageSize int `json:"page_size"`
Uid uint32 `json:"uid"` Uid uint32 `json:"uid"`
MemberType int `json:"member_type"` // 0-全部 1-普通用户 2-会员 MemberType int `json:"member_type"` // 0-全部 1-普通用户 2-会员
SpendType uint32 `json:"spend_type"` // 2-开通会员 3-续费
StartTime string `json:"start_time"` // 开始时间 StartTime string `json:"start_time"` // 开始时间
EndTime string `json:"end_time"` // 结束时间 EndTime string `json:"end_time"` // 结束时间
} }
@ -583,13 +584,19 @@ func (m *UserInviteListReq) InviteUserList() (*UserInviteListResp, error) {
//qs = qs.SpendTypeEq(2) //qs = qs.SpendTypeEq(2)
//qs = qs.SpendTypeNotIn([]uint32{3, 4}...) //qs = qs.SpendTypeNotIn([]uint32{3, 4}...)
if user.CooperativeBusinessId == 1 { if user.CooperativeBusinessId == 1 {
qs = qs.SpendTypeIn([]uint32{2, 3}...) if m.SpendType != 0 {
qs = qs.SpendTypeEq(m.SpendType)
} else {
qs = qs.SpendTypeIn([]uint32{2, 3}...)
}
} else { } else {
qs = qs.SpendTypeNotIn([]uint32{3, 4}...) qs = qs.SpendTypeNotIn([]uint32{3, 4}...)
} }
} }
} }
if m.MemberType == 0 && m.SpendType != 0 {
qs = qs.SpendTypeEq(m.SpendType)
}
if m.StartTime != "" { if m.StartTime != "" {
parse, err := time.Parse(DateTimeFormat, m.StartTime) parse, err := time.Parse(DateTimeFormat, m.StartTime)
if err != nil { if err != nil {