package ding import ( "fmt" "strings" "testing" "voucher/internal/biz/bo" "voucher/internal/biz/do" ) func TestSendTextMessage(t *testing.T) { webhookURL := "your_webhook_url" secret := "your_secret" client := NewDingTalkClient(webhookURL, secret) // 发送文本消息 content := "这是一条测试文本消息,@相关人员。" atMobiles := []string{"13800138000"} isAtAll := false err := client.SendTextMessage(content, atMobiles, isAtAll) if err != nil { fmt.Println("文本消息发送失败:", err) } else { fmt.Println("文本消息发送成功") } } func TestSendLinkMessage(t *testing.T) { title := "测试链接消息" text := "这是一条测试链接消息的详细内容,@相关人员。" messageURL := "https://example.com" picURL := "https://example.com/pic.jpg" webhookURL := "your_webhook_url" secret := "your_secret" atMobiles := []string{"13800138000"} client := NewDingTalkClient(webhookURL, secret) err := client.SendLinkMessage(title, text, messageURL, picURL, atMobiles, false) if err != nil { fmt.Println("链接消息发送失败:", err) } else { fmt.Println("链接消息发送成功") } } func TestSendMarkdownMessage(t *testing.T) { markdownTitle := "测试 Markdown 消息" //markdownText := "#

立减金发放平台报警通知

\n不好了,订单发放发生异常了,错误内容[批次号不存在]@相关人员。" markdownText := alarmText("批次号不存在") atMobiles := []string{"18666173766", "15102807142"} webhookURL := "https://oapi.dingtalk.com/robot/send?access_token=5f10c2213cbf8168985cb2d061ebb1a5f70bd1dd47ec7cef58fa6fe545d52588" secret := "SEC77b63d70a9e22317144e712b4538ce1e0013db885c65f7f9bae283e8958b39eb" client := NewDingTalkClient(webhookURL, secret) if err := client.SendMarkdownMessage(markdownTitle, markdownText, atMobiles, false); err != nil { fmt.Println("Markdown 消息发送失败:", err) } else { fmt.Println("Markdown 消息发送成功") } } func alarmText(errMsg string) string { remarks := fmt.Sprintf("订单号:%s,商品编号:%s,原因:%s", "123456", "001", errMsg) msg := "# " + "

立减金发放平台报警通知

" + "
\n" + "" + "不好了,订单发放发生异常了" + "[%s]请尽快处理@相关人员。" + "" return fmt.Sprintf(msg, remarks) } func TestSend(t *testing.T) { webhookURL := "your_webhook_url" secret := "your_secret" client := NewDingTalkClient(webhookURL, secret) // 发送文本消息 content := "这是一条测试文本消息,@相关人员。" atMobiles := []string{"13800138000"} err := client.SendTextMessage(content, atMobiles, false) if err != nil { fmt.Println("文本消息发送失败:", err) } else { fmt.Println("文本消息发送成功") } // 发送链接消息 title := "测试链接消息" text := "这是一条测试链接消息的详细内容,@相关人员。" messageURL := "https://example.com" picURL := "https://example.com/pic.jpg" err = client.SendLinkMessage(title, text, messageURL, picURL, atMobiles, false) if err != nil { fmt.Println("链接消息发送失败:", err) } else { fmt.Println("链接消息发送成功") } // 发送 Markdown 消息 markdownTitle := "测试 Markdown 消息" markdownText := "# 标题\n这是一条测试 Markdown 消息的详细内容,@13800138000。" err = client.SendMarkdownMessage(markdownTitle, markdownText, atMobiles, false) if err != nil { fmt.Println("Markdown 消息发送失败:", err) } else { fmt.Println("Markdown 消息发送成功") } } func TestWarningBudgetText(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, } str := formatAsCard(req) t.Log("\n" + str) markdownTitle := "批次预算预警" atMobiles := []string{"18666173766"} webhookURL := "https://oapi.dingtalk.com/robot/send?access_token=5f10c2213cbf8168985cb2d061ebb1a5f70bd1dd47ec7cef58fa6fe545d52588" secret := "SEC77b63d70a9e22317144e712b4538ce1e0013db885c65f7f9bae283e8958b39eb" client := NewDingTalkClient(webhookURL, secret) if err := client.SendMarkdownMessage(markdownTitle, str, atMobiles, false); err != nil { fmt.Println("Markdown 消息发送失败:", err) } else { fmt.Println("Markdown 消息发送成功") } } func formatAsCard(req do.WarningBudget) string { var card strings.Builder card.WriteString("### " + req.StockName + "\n\n") // 基本信息 card.WriteString("#### 🎫 基本信息\n") card.WriteString(fmt.Sprintf("- **批次号**: %s\n", req.StockId)) card.WriteString(fmt.Sprintf("- **活动号**: %s\n", req.StockNo)) card.WriteString(fmt.Sprintf("- **面额**: %d元\n", req.Amount)) card.WriteString(fmt.Sprintf("- **总预算**: %d元\n", req.AllBudget)) card.WriteString(fmt.Sprintf("- **总库存**: %d张\n", req.AllStock)) card.WriteString("\n") // 使用情况 card.WriteString("#### 📊 使用情况\n") card.WriteString(fmt.Sprintf("- **已发券数**: %d张\n", req.UsedStock)) card.WriteString(fmt.Sprintf("- **已发券金额**: %d元\n", req.UsedBudget)) card.WriteString(fmt.Sprintf("- **剩余库存**: %d张\n", req.AvailableStock)) card.WriteString(fmt.Sprintf("- **剩余预算**: %d元\n", req.RemainingBudget)) card.WriteString("\n") // 使用率 stockUsageRate := float64(req.UsedStock) / float64(req.AllStock) * 100 card.WriteString("#### 📈 使用率\n") card.WriteString(fmt.Sprintf("- **使用率**: %.1f%%\n", stockUsageRate)) return card.String() } func TestOrderFailSend(t *testing.T) { order := &bo.OrderBo{ OrderNo: "20231101001", OutBizNo: "CMB_20231101001", VoucherNo: "123456", ProductNo: "CMB202020", BatchNo: "202020", Account: "oUx7j0xxdcdergdaegasfcg", AppID: "app_123456gadabout", MerchantNo: "185585225542", } markdownText := alarmText2(order, "测试,券发放异常通知,Post https://api.mch.weixin.qq.com/v3/marketing/favor/users/oW97fjtVl8wHarrDpptBvQQKKu7Q/coupons: EOF") t.Logf("\n%s", markdownText) markdownTitle := "测试 Markdown 消息" atMobiles := []string{"18666173766"} webhookURL := "https://oapi.dingtalk.com/robot/send?access_token=5f10c2213cbf8168985cb2d061ebb1a5f70bd1dd47ec7cef58fa6fe545d52588" secret := "SEC77b63d70a9e22317144e712b4538ce1e0013db885c65f7f9bae283e8958b39eb" client := NewDingTalkClient(webhookURL, secret) if err := client.SendMarkdownMessage(markdownTitle, markdownText, atMobiles, false); err != nil { fmt.Println("Markdown 消息发送失败:", err) } else { fmt.Println("Markdown 消息发送成功") } } func alarmText2(order *bo.OrderBo, errMsg string) string { var card strings.Builder // 警示信息(简化版) card.WriteString("⚠️ **券发放异常** ⚠️\n\n") // 订单信息(通过引用和代码块模拟小字体) card.WriteString("> **订单信息:**\n\n") card.WriteString(fmt.Sprintf("> AppID: `%s`\n\n", order.AppID)) card.WriteString(fmt.Sprintf("> OpenID: `%s`\n\n", order.Account)) card.WriteString(fmt.Sprintf("> 批次号: `%s`\n\n", order.BatchNo)) card.WriteString(fmt.Sprintf("> 活动号: `%s`\n\n", order.ProductNo)) card.WriteString(fmt.Sprintf("> 订单号: `%s`\n\n", order.OrderNo)) card.WriteString(fmt.Sprintf("> 招行订单号: `%s`\n", order.OutBizNo)) card.WriteString("\n") // 报警原因(通过引用和代码块模拟小字体) card.WriteString("> **❗ 报警原因:**\n\n") card.WriteString(fmt.Sprintf("> `%s`\n", errMsg)) return card.String() }