forked from JointCloud/pcm-coordinator
92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package ai
|
||
|
||
import (
|
||
"bytes"
|
||
"context"
|
||
"crypto/tls"
|
||
"encoding/json"
|
||
"github.com/go-resty/resty/v2"
|
||
"github.com/pkg/errors"
|
||
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils/hws"
|
||
"net/http"
|
||
|
||
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc"
|
||
"gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types"
|
||
|
||
"github.com/zeromicro/go-zero/core/logx"
|
||
)
|
||
|
||
type ProxyApiLogic struct {
|
||
logx.Logger
|
||
ctx context.Context
|
||
svcCtx *svc.ServiceContext
|
||
}
|
||
|
||
func NewProxyApiLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ProxyApiLogic {
|
||
return &ProxyApiLogic{
|
||
Logger: logx.WithContext(ctx),
|
||
ctx: ctx,
|
||
svcCtx: svcCtx,
|
||
}
|
||
}
|
||
|
||
const (
|
||
XProjectID = "d18190e28e3f45a281ef0b0696ec9d52"
|
||
XStage = "RELEASE"
|
||
ContentType = "application/json"
|
||
)
|
||
|
||
func (l *ProxyApiLogic) ProxyApi(req *types.ChatReq) (resp *types.ChatResult, err error) {
|
||
logx.Infof("【开始处理请求,目标URL: %s】", req.ApiUrl)
|
||
|
||
jsonBytes, err := json.Marshal(&req.ReqData)
|
||
if err != nil {
|
||
logx.Errorf("【序列化请求数据失败: %v】", err)
|
||
return nil, errors.New("请求数据序列化失败")
|
||
}
|
||
|
||
resp = &types.ChatResult{}
|
||
|
||
// 构建 HTTP 请求
|
||
request, err := http.NewRequest("POST", req.ApiUrl, bytes.NewBuffer(jsonBytes))
|
||
if err != nil {
|
||
logx.Errorf("【构建 HTTP 请求失败: %v】", err)
|
||
return nil, errors.New("网络错误,请稍后重试")
|
||
}
|
||
|
||
signer := &hws.Signer{
|
||
Key: "UNEHPHO4Z7YSNPKRXFE4",
|
||
Secret: "JWXCE9qcYbc7RjpSRIWt4WgG3ZKF6Q4lPzkJReX9",
|
||
}
|
||
|
||
if err := signer.Sign(request); err != nil {
|
||
logx.Errorf("【接口签名错误: %v】", err)
|
||
return nil, errors.New("网络错误,请稍后重试")
|
||
}
|
||
|
||
client := resty.New().SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
|
||
|
||
response, err := client.R().
|
||
SetHeader("X-Project-Id", XProjectID).
|
||
SetHeader("x-stage", XStage).
|
||
SetHeader("Content-Type", ContentType).
|
||
SetHeader("Authorization", request.Header.Get(hws.HeaderXAuthorization)).
|
||
SetHeader("X-Sdk-Date", request.Header.Get(hws.HeaderXDateTime)).
|
||
SetBody(jsonBytes).
|
||
SetResult(&resp).
|
||
Post(req.ApiUrl)
|
||
|
||
if err != nil {
|
||
logx.Errorf("【远程调用接口URL:%s, 返回错误: %s】", req.ApiUrl, err.Error())
|
||
return nil, errors.New("网络错误,请稍后重试")
|
||
}
|
||
|
||
if response.StatusCode() != 200 {
|
||
logx.Errorf("【远程调用接口URL:%s, 返回错误: %s】", req.ApiUrl, response.Body())
|
||
return nil, errors.New("网络错误,请稍后重试")
|
||
}
|
||
|
||
logx.Infof("【请求处理成功,目标URL: %s】", req.ApiUrl)
|
||
return resp, nil
|
||
}
|