package sms import ( "context" "encoding/json" "fmt" "strconv" "testing" "voucher/internal/biz/do" ) var config = Config{ AccessKeyID: "LTAI5tM1X4HuqUwT8D74qXAH", AccessKeySecret: "gxsC1QK12NSKH1HkCqKR1EnMdAy3ad", Endpoint: "dysmsapi.aliyuncs.com", SignName: "蓝色兄弟", RetryTimes: 0, Timeout: 15, } func TestSendSMS(t *testing.T) { smsService, err := NewService(config) if err != nil { t.Errorf("创建短信服务失败: %v", err) return } phoneNumber := "" // 替换为实际手机号 templateCode := "SMS_274900579" // 替换为实际模板ID params := map[string]string{ "code": "123456", } err = smsService.SendSMS(context.Background(), []string{phoneNumber}, templateCode, params) if err != nil { t.Errorf("发送短信失败: %v", err) return } t.Logf("已发送至 %s\n", phoneNumber) } func TestWarningSend(t *testing.T) { req := do.WarningBudget{ StockName: "招行2元立减金", StockId: "20627186", StockNo: "CMB20627186", Amount: 2, AllBudget: 70010, AllStock: 35005, UsedStock: 9390, UsedBudget: 18780, AvailableStock: 25615, RemainingBudget: 51230, StockUsageRate: 20, } params := buildTemplateParams(&req) js, _ := json.Marshal(params) t.Log(string(js)) smsService, err := NewService(config) if err != nil { t.Errorf("创建短信服务失败: %v", err) return } err = smsService.SendSMS(context.Background(), []string{"18666173766"}, "", params) if err != nil { t.Errorf("发送短信失败: %v", err) return } } func buildTemplateParams(req *do.WarningBudget) map[string]string { return map[string]string{ "stock_name": req.StockName, "stock_no": req.StockNo, "amount": strconv.Itoa(int(req.Amount)), "all_budget": strconv.Itoa(int(req.AllBudget)), "all_stock": strconv.Itoa(int(req.AllStock)), "used_stock": strconv.Itoa(int(req.UsedStock)), "used_budget": strconv.Itoa(int(req.UsedBudget)), "remaining_budget": strconv.Itoa(int(req.RemainingBudget)), "remaining_stock": strconv.Itoa(int(req.AvailableStock)), "budget_usage_rate": fmt.Sprintf("%.1f", req.StockUsageRate), } }