150 lines
4.9 KiB
Go
150 lines
4.9 KiB
Go
package daichong
|
|
|
|
import (
|
|
"context"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"net/url"
|
|
"reflect"
|
|
"strconv"
|
|
"time"
|
|
|
|
"91porn-server/app/appg"
|
|
"91porn-server/common"
|
|
"91porn-server/common/crypt"
|
|
"91porn-server/common/httputil"
|
|
"91porn-server/common/log"
|
|
"91porn-server/models/commod"
|
|
)
|
|
|
|
// 发起聊天
|
|
func TakeChat(req ChatReq, domian string) (chatResp ChatResp, err error) {
|
|
var code int
|
|
param, _ := common.ToJsonM(req)
|
|
c, cancle := context.WithTimeout(context.Background(), time.Duration(appg.Conf.HttpOptions.DcCtxTimeOut)*time.Second)
|
|
defer cancle()
|
|
code, err = httputil.DefaultClientPostJsonWithResp(&chatResp, common.BindUrl(domian, takeChat), nil, param)
|
|
common.Go(func() {
|
|
<-c.Done()
|
|
fmt.Print("current http method takeChat", c.Err())
|
|
})
|
|
log.Info("http method TakeChat response code ==>", log.Any("statusCode", code), log.Any("respCode", chatResp.Code))
|
|
if err != nil {
|
|
log.Error("TakeChat failed", log.E(err))
|
|
}
|
|
return
|
|
}
|
|
|
|
// 获取订单信息
|
|
func GetOrder(req CommonReq, domian string) (orderResp OrderResp, err error) {
|
|
param, _ := common.ToJsonM(req)
|
|
code, err := httputil.DefaultClientPostJsonWithResp(&orderResp, common.BindUrl(domian, getOrder), nil, param)
|
|
log.Info("http method GetOrder response code ==>", log.Any("statusCode", code), log.Any("respCode", orderResp.Code))
|
|
if err != nil {
|
|
log.Error("GetOrder failed", log.E(err))
|
|
}
|
|
return
|
|
}
|
|
|
|
// 上分通知
|
|
func OrderCallBack(ctx context.Context, req CommonReq, domian string) (resp commod.Resp, err error) {
|
|
param, _ := common.ToJsonM(req)
|
|
code, err := httputil.DefaultClientPostJsonWithResp(&resp, common.BindUrl(domian, orderCallBack), nil, param)
|
|
log.InfoX(ctx, "http method OrderCallBack response code ==>", log.Any("statusCode", code),
|
|
log.Any("respCode", resp.Code))
|
|
if err != nil {
|
|
log.ErrorX(ctx, "OrderCallBack failed", log.E(err))
|
|
}
|
|
return
|
|
}
|
|
|
|
// 上传图片
|
|
func UploadFile(req UploadFileReq, domian string) (resp commod.Resp, err error) {
|
|
header := map[string]string{
|
|
"Authorization": req.UserID + "&" + req.SessionId,
|
|
}
|
|
data := map[string]interface{}{
|
|
"file": req.File,
|
|
}
|
|
code, err := httputil.DefaultClientPostJsonWithResp(&resp, common.BindUrl(domian, uploadFile, req.FileName), header, data)
|
|
log.Info("http method UploadFile response code ==>", log.Any("statusCode", code), log.Any("respCode", resp.Code))
|
|
if err != nil {
|
|
log.Error("UploadFile failed", log.E(err))
|
|
}
|
|
return
|
|
}
|
|
|
|
// 根据订单ID获取聊天记录
|
|
func GetChatRecordsByOrderId(req CommonReq, domian string) (resp RecordResp, err error) {
|
|
code, err := httputil.DefaultClientPostJsonWithResp(&resp, common.BindUrl(domian, getChatRecordsByOrderId), nil, req)
|
|
log.Info("http method GetChatRecordsByOrderId response code ==>", log.Any("statusCode", code), log.Any("respCode", resp.Code))
|
|
if err != nil {
|
|
log.Error("GetChatRecordsByOrderId failed", log.E(err))
|
|
}
|
|
return
|
|
}
|
|
|
|
// 获取商人支付信息
|
|
func GetTraderPayInfo(req CommonReq, domian string) (resp PayInfoResp, err error) {
|
|
code, err := httputil.DefaultClientPostJsonWithResp(&resp, common.BindUrl(domian, getTraderPayInfo), nil, req)
|
|
log.Info("http method GetTraderPayInfo response code ==>", log.Any("statusCode", code), log.Any("respCode", resp.Code))
|
|
if err != nil {
|
|
log.Error("GetTraderPayInfo failed", log.E(err))
|
|
}
|
|
return
|
|
}
|
|
|
|
// 结构体转换为加密的16进制字符串
|
|
func Convert2Sign(obj interface{}, appSecret string) (string, error) {
|
|
urlParam, err := crypt.Strcut2UrlValue(obj)
|
|
if err != nil {
|
|
log.Warn("chat sign struct convert to url values wrong", log.Any("urlParam", urlParam), log.Any("warn", err))
|
|
return "", err
|
|
}
|
|
log.Info("covert obj to urlParam ==>", log.Any("obj", obj), log.Any("urlParam", urlParam))
|
|
sign, err := crypt.AesEncrypt(urlParam, appSecret)
|
|
if err != nil {
|
|
log.Warn("create sign data wrong", log.Any("warn", err))
|
|
return "", err
|
|
}
|
|
cryptdata := hex.EncodeToString(sign)
|
|
return cryptdata, nil
|
|
}
|
|
|
|
// 加密的16进制字符串转为结构体
|
|
func Sign2Struct(obj interface{}, sign, appSecret string) error {
|
|
cryptdata, err := hex.DecodeString(sign)
|
|
if err != nil {
|
|
log.Warn("hex decode string occour error", log.Any("warn", err))
|
|
return err
|
|
}
|
|
origin, err := crypt.CoreAesDecrypt(cryptdata, appSecret)
|
|
if err != nil {
|
|
log.Warn("core aes decrypt sign data wrong", log.Any("warn", err))
|
|
return err
|
|
}
|
|
t := reflect.TypeOf(obj)
|
|
m := make(map[string]interface{})
|
|
u, err := url.ParseQuery(origin)
|
|
if err == nil {
|
|
for k, v := range u {
|
|
s, _ := t.Elem().FieldByName(common.Ucfirst(k))
|
|
typ := s.Type.Kind()
|
|
switch typ {
|
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
rv, _ := strconv.ParseInt(v[0], 10, 64)
|
|
m[k] = rv
|
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
|
rv, _ := strconv.ParseUint(v[0], 10, 64)
|
|
m[k] = rv
|
|
default:
|
|
m[k] = v[0]
|
|
}
|
|
}
|
|
}
|
|
if len(m) > 0 {
|
|
return common.Map2JSONStruct(obj, m)
|
|
}
|
|
return nil
|
|
}
|