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.
126 lines
3.4 KiB
126 lines
3.4 KiB
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) |
|
}
|
|
|