Files
kami_script/main.go
danial 5cf434370e chore(deps): 升级Go版本及第三方依赖库
- 将Go版本从1.20升级到1.23.0
- 添加resty客户端库github.com/go-resty/resty/v2 v2.17.0
- 升级go-nanoid库版本到v2.1.0
- 添加golang.org/x/net v0.43.0为间接依赖
- 升级testify测试库到v1.9.0
- 升级yaml.v3到v3.0.1版本

feat(main): 使用resty替代http客户端并提高请求并发

- 用resty库替代原始http.Client实现POST请求
- 修改支付网关和通知URL为测试环境地址
- 将并发请求数从10提升到100以增加负载
- 修正请求参数ProductCode为“玖隆”
- 调整请求发送及结果打印逻辑以兼容resty响应结构
2025-12-14 22:13:42 +08:00

119 lines
2.6 KiB
Go

package main
import (
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"kami_scripts/models"
"math"
"math/rand"
"sort"
"strconv"
"sync"
"time"
"github.com/go-resty/resty/v2"
gonanoid "github.com/matoous/go-nanoid/v2"
)
// SortMap 对map的key值进行排序
func SortMap(m map[string]string) []string {
var arr []string
for k := range m {
arr = append(arr, k)
}
sort.Strings(arr)
return arr
}
func GenRandomCardNo() string {
cardNo := "250306"
for i := 0; i < 10; i++ {
cardNo += strconv.Itoa(rand.Intn(10))
}
return cardNo
}
func GenRandomCardPass() string {
cardPass := "350610"
for i := 0; i < 10; i++ {
cardPass += strconv.Itoa(rand.Intn(10))
}
return cardPass
}
func genSign(data models.Data) string {
appSecret := "ssssc9kit6bimggos5kk0c9g"
params := map[string]string{}
exValue, _ := json.Marshal(data.ExValue)
params["exValue"] = string(exValue)
params["orderNo"] = data.OrderNo
params["orderPeriod"] = data.OrderPeriod
params["orderPrice"] = data.OrderPrice
params["notifyUrl"] = data.NotifyUrl
params["timestamp"] = data.TimeStamp
params["payKey"] = data.PayKey
params["ip"] = data.Ip
params["productCode"] = data.ProductCode
strArr := SortMap(params)
signStr := ""
for i := 0; i < len(strArr); i++ {
k := strArr[i]
if len(params[k]) == 0 {
signStr += k
} else {
signStr += k + params[k]
}
}
signStr += appSecret
h := md5.New()
h.Write([]byte(signStr))
return hex.EncodeToString(h.Sum(nil))
}
func randomRequest(count int, stop chan int, group *sync.WaitGroup) {
defer func() {
<-stop
group.Done()
if err := recover(); err != nil {
fmt.Println(err)
}
}()
id, _ := gonanoid.New()
formData := models.Data{
ExValue: models.ExValue{
Data: GenRandomCardPass(),
FaceType: "10",
CardNo: GenRandomCardNo(),
RecoveryType: "2",
},
OrderNo: id,
OrderPeriod: strconv.Itoa(rand.Intn(24)),
OrderPrice: "10",
ProductCode: "玖隆",
Ip: "127.0.0.1",
NotifyUrl: "http://kami_shop:12305/shop/notify",
PayKey: "kkkkc9kit6bimggos5kk0c90",
TimeStamp: strconv.FormatInt(time.Now().Unix(), 10),
Sign: "",
}
formData.Sign = genSign(formData)
client := resty.New()
resp, _ := client.R().SetFormDataFromValues(formData.Url()).Post("http://49.233.216.171:12309/gateway/scan")
fmt.Println(string(resp.Body()))
}
func main() {
group := sync.WaitGroup{}
startTime := time.Now()
stop := make(chan int, 50)
for i := 0; i < int(math.Pow10(2)); i++ {
group.Add(1)
stop <- 1
go randomRequest(i, stop, &group)
}
group.Wait()
fmt.Println("总耗时", time.Since(startTime).Seconds())
}