You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.4 KiB
127 lines
3.4 KiB
|
2 weeks ago
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"crypto/md5"
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
"io"
|
||
|
|
"log"
|
||
|
|
"net/http"
|
||
|
|
"strings"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
const TIME_FORMAT = "2006-01-02 15:04:05"
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
var unitId string
|
||
|
|
|
||
|
|
fmt.Print("unitId账号数据输入 : ")
|
||
|
|
_, err := fmt.Scan(&unitId) // 读取输入并赋值给变量
|
||
|
|
if err != nil {
|
||
|
|
fmt.Println("输入错误:", err)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
var config string
|
||
|
|
|
||
|
|
fmt.Print("输入充值配置Id(101-106) : ")
|
||
|
|
_, err = fmt.Scan(&config) // 读取输入并赋值给变量
|
||
|
|
if err != nil {
|
||
|
|
fmt.Println("输入错误:", err)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
configs := map[string]string{
|
||
|
|
"101": "6",
|
||
|
|
"102": "30",
|
||
|
|
"103": "68",
|
||
|
|
"104": "198",
|
||
|
|
"105": "328",
|
||
|
|
"106": "648",
|
||
|
|
}
|
||
|
|
if configs[config] == "" {
|
||
|
|
fmt.Println("输入错误, 请输入(101-106)的id:")
|
||
|
|
_, err = fmt.Scan(&config) // 读取输入并赋值给变量
|
||
|
|
if err != nil {
|
||
|
|
fmt.Println("输入错误:", err)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
tradeNo := fmt.Sprintf("GM%v%v", config, time.Now().UnixMilli())
|
||
|
|
body := map[string]string{"unitId": unitId, "server": "1", "channel": "000000000000", "rechargeId": config,
|
||
|
|
"tradeStatus": "SUCCESS", "externalTradeNo": tradeNo, "totalAmount": configs[config], "tradeNo": tradeNo,
|
||
|
|
"buyerId": "", "createTime": time.Now().Format(TIME_FORMAT), "payedTime": time.Now().Format(TIME_FORMAT)}
|
||
|
|
sendToServer(body)
|
||
|
|
|
||
|
|
ticker := time.NewTicker(1 * time.Second)
|
||
|
|
defer ticker.Stop()
|
||
|
|
|
||
|
|
fmt.Println("操作完成... (输入 'ctrl-c' 退出)")
|
||
|
|
for {
|
||
|
|
select {
|
||
|
|
case <-ticker.C:
|
||
|
|
// 这里可以添加条件检查(如读取文件、网络请求等)
|
||
|
|
default:
|
||
|
|
// 非阻塞检查用户输入(需配合 goroutine)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func addServerMd5(body map[string]string) string {
|
||
|
|
data := body["unitId"] + body["server"] + body["channel"] + body["rechargeId"] +
|
||
|
|
body["tradeStatus"] + body["externalTradeNo"] + body["totalAmount"] + body["tradeNo"] + body["buyerId"] + body["createTime"] +
|
||
|
|
body["payedTime"] + "b93ac9c70a071c537542f6fe95cf4d67"
|
||
|
|
sign := fmt.Sprintf("%x", md5.Sum([]byte(data)))
|
||
|
|
log.Printf("data: %s, md5: %s", data, sign)
|
||
|
|
return fmt.Sprintf("%x", md5.Sum([]byte(data)))
|
||
|
|
}
|
||
|
|
|
||
|
|
type TradeRes struct {
|
||
|
|
T string `json:"_t"`
|
||
|
|
Error int `json:"Error"`
|
||
|
|
Message string `json:"Message"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func sendToServer(body map[string]string) string {
|
||
|
|
//url := "http://192.168.2.100:30300/Recharge"
|
||
|
|
url := "http://127.0.0.1:30300/Recharge"
|
||
|
|
|
||
|
|
log.Printf("notify========== url: %s", url)
|
||
|
|
body["sign"] = addServerMd5(body)
|
||
|
|
buf, err := json.Marshal(body)
|
||
|
|
if err != nil {
|
||
|
|
fmt.Println(err)
|
||
|
|
return err.Error()
|
||
|
|
}
|
||
|
|
reqBody := strings.NewReader(string(buf))
|
||
|
|
log.Printf("notify========== url: %s, reqBody: %v", url, reqBody)
|
||
|
|
reqt, _ := http.NewRequest("GET", url, reqBody)
|
||
|
|
|
||
|
|
response, err := http.DefaultClient.Do(reqt)
|
||
|
|
if err != nil {
|
||
|
|
log.Printf("notify========== server callback Error %s", err.Error())
|
||
|
|
return err.Error()
|
||
|
|
}
|
||
|
|
// 这里要格式化再输出,因为 ReadAll 返回的是字节切片
|
||
|
|
log.Printf("notify========== server callback StatusCode %d", response.StatusCode)
|
||
|
|
defer response.Body.Close()
|
||
|
|
bytes, err := io.ReadAll(response.Body)
|
||
|
|
if err != nil {
|
||
|
|
return err.Error()
|
||
|
|
}
|
||
|
|
// 这里要格式化再输出,因为 ReadAll 返回的是字节切片
|
||
|
|
log.Printf("notify========== server callback Body %s", bytes)
|
||
|
|
if response.StatusCode == 200 {
|
||
|
|
var tradeRes TradeRes
|
||
|
|
err = json.Unmarshal(bytes, &tradeRes)
|
||
|
|
if tradeRes.Error == 400000 {
|
||
|
|
return "SUCCESS"
|
||
|
|
} else {
|
||
|
|
return tradeRes.Message
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return fmt.Sprint(response.StatusCode)
|
||
|
|
}
|