同步音频和图片
This commit is contained in:
78
service/tencent/oauth_service.go
Normal file
78
service/tencent/oauth_service.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package tencent
|
||||
|
||||
import (
|
||||
"context"
|
||||
dto "dataengine/model/dto/tencent"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
type oauthService struct{}
|
||||
|
||||
var OauthService = new(oauthService)
|
||||
|
||||
// RefreshToken 刷新腾讯广告Token
|
||||
func (s *oauthService) RefreshToken(ctx context.Context, req *dto.RefreshTokenReq) (res *dto.RefreshTokenRes, err error) {
|
||||
// 如果请求中没有提供参数,则从配置文件读取
|
||||
clientID := req.ClientID
|
||||
clientSecret := req.ClientSecret
|
||||
refreshToken := req.RefreshToken
|
||||
|
||||
if clientID == "" || clientSecret == "" || refreshToken == "" {
|
||||
clientID = g.Cfg().MustGet(ctx, "tencent.oauth.client_id").String()
|
||||
clientSecret = g.Cfg().MustGet(ctx, "tencent.oauth.client_secret").String()
|
||||
refreshToken = g.Cfg().MustGet(ctx, "tencent.oauth.refresh_token").String()
|
||||
}
|
||||
|
||||
url := fmt.Sprintf("https://api.e.qq.com/oauth/refresh_token?client_id=%s&client_secret=%s&refresh_token=%s",
|
||||
clientID, clientSecret, refreshToken)
|
||||
|
||||
httpReq, err := http.NewRequestWithContext(ctx, "GET", url, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("创建请求失败: %w", err)
|
||||
}
|
||||
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(httpReq)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("请求失败: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("读取响应失败: %w", err)
|
||||
}
|
||||
|
||||
var result struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Data struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
RefreshToken string `json:"refresh_token"`
|
||||
AccessTokenExpiresIn int64 `json:"access_token_expires_in"`
|
||||
RefreshTokenExpiresIn int64 `json:"refresh_token_expires_in"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(body, &result); err != nil {
|
||||
return nil, fmt.Errorf("解析响应失败: %w", err)
|
||||
}
|
||||
|
||||
if result.Code != 0 {
|
||||
return nil, fmt.Errorf("API错误: code=%d, message=%s", result.Code, result.Message)
|
||||
}
|
||||
|
||||
res = &dto.RefreshTokenRes{
|
||||
AccessToken: result.Data.AccessToken,
|
||||
RefreshToken: result.Data.RefreshToken,
|
||||
AccessTokenExpiresIn: result.Data.AccessTokenExpiresIn,
|
||||
RefreshTokenExpiresIn: result.Data.RefreshTokenExpiresIn,
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
Reference in New Issue
Block a user