82 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package alicloud
 | ||
| 
 | ||
| import (
 | ||
| 	"errors"
 | ||
| 	"fmt"
 | ||
| 	"io"
 | ||
| 	"net/http"
 | ||
| 	"net/url"
 | ||
| 	"strings"
 | ||
| )
 | ||
| 
 | ||
| var (
 | ||
| 	ErrDatasource = errors.New("数据源异常")
 | ||
| 	ErrSystem     = errors.New("系统异常")
 | ||
| )
 | ||
| 
 | ||
| // AlicloudConfig 阿里云配置
 | ||
| type AlicloudConfig struct {
 | ||
| 	Host    string
 | ||
| 	AppCode string
 | ||
| }
 | ||
| 
 | ||
| // AlicloudService 阿里云服务
 | ||
| type AlicloudService struct {
 | ||
| 	config AlicloudConfig
 | ||
| }
 | ||
| 
 | ||
| // NewAlicloudService 创建阿里云服务实例
 | ||
| func NewAlicloudService(host, appCode string) *AlicloudService {
 | ||
| 	return &AlicloudService{
 | ||
| 		config: AlicloudConfig{
 | ||
| 			Host:    host,
 | ||
| 			AppCode: appCode,
 | ||
| 		},
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| // CallAPI 调用阿里云API的通用方法
 | ||
| // path: API路径(如 "api-mall/api/id_card/check")
 | ||
| // params: 请求参数
 | ||
| func (a *AlicloudService) CallAPI(path string, params map[string]interface{}) (respBytes []byte, err error) {
 | ||
| 	// 构建请求URL
 | ||
| 	reqURL := a.config.Host + "/" + path
 | ||
| 
 | ||
| 	// 构建请求参数
 | ||
| 	formData := url.Values{}
 | ||
| 	for key, value := range params {
 | ||
| 		formData.Set(key, fmt.Sprintf("%v", value))
 | ||
| 	}
 | ||
| 
 | ||
| 	// 创建HTTP请求
 | ||
| 	req, err := http.NewRequest("POST", reqURL, strings.NewReader(formData.Encode()))
 | ||
| 	if err != nil {
 | ||
| 		return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error())
 | ||
| 	}
 | ||
| 
 | ||
| 	// 设置请求头
 | ||
| 	req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
 | ||
| 	req.Header.Set("Authorization", "APPCODE "+a.config.AppCode)
 | ||
| 
 | ||
| 	// 发送请求
 | ||
| 	client := &http.Client{}
 | ||
| 	resp, err := client.Do(req)
 | ||
| 	if err != nil {
 | ||
| 		return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error())
 | ||
| 	}
 | ||
| 	defer resp.Body.Close()
 | ||
| 
 | ||
| 	// 读取响应体
 | ||
| 	body, err := io.ReadAll(resp.Body)
 | ||
| 	if err != nil {
 | ||
| 		return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error())
 | ||
| 	}
 | ||
| 
 | ||
| 	// 直接返回原始响应body,让调用方自己处理
 | ||
| 	return body, nil
 | ||
| }
 | ||
| 
 | ||
| // GetConfig 获取配置信息
 | ||
| func (a *AlicloudService) GetConfig() AlicloudConfig {
 | ||
| 	return a.config
 | ||
| }  |