Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+149
View File
@@ -0,0 +1,149 @@
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
}