Files
junhong_cmp_fiber/pkg/sms/http_client.go
huang 9c6d4a3bd4 实现个人客户微信认证和短信验证功能
- 添加个人客户微信登录和手机验证码登录接口
- 实现个人客户设备、ICCID、手机号关联管理
- 添加短信发送服务(HTTP 客户端)
- 添加微信认证服务(含 mock 实现)
- 添加 JWT Token 生成和验证工具
- 创建数据库迁移脚本(personal_customer 关联表)
- 修复测试文件中的路由注册参数错误
- 重构 scripts 目录结构(分离独立脚本到子目录)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-10 11:42:38 +08:00

52 lines
1.2 KiB
Go

package sms
import (
"bytes"
"context"
"fmt"
"io"
"net/http"
)
// StandardHTTPClient 标准 HTTP 客户端实现
type StandardHTTPClient struct {
client *http.Client
}
// NewStandardHTTPClient 创建标准 HTTP 客户端
func NewStandardHTTPClient(timeout int) *StandardHTTPClient {
return &StandardHTTPClient{
client: &http.Client{
Timeout: 0, // 使用 context 控制超时
},
}
}
// Post 发送 POST 请求
func (s *StandardHTTPClient) Post(ctx context.Context, url string, body []byte) ([]byte, error) {
req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(body))
if err != nil {
return nil, fmt.Errorf("创建 HTTP 请求失败: %w", err)
}
req.Header.Set("Content-Type", "application/json;charset=utf-8")
req.Header.Set("Accept", "application/json")
resp, err := s.client.Do(req)
if err != nil {
return nil, fmt.Errorf("发送 HTTP 请求失败: %w", err)
}
defer resp.Body.Close()
respBody, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("读取响应失败: %w", err)
}
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("HTTP 状态码异常: %d, 响应: %s", resp.StatusCode, string(respBody))
}
return respBody, nil
}