| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package main
- import (
- "bytes"
- "encoding/json"
- "flag"
- "fmt"
- "io"
- "net/http"
- "strings"
- "time"
- )
- type envelope struct {
- Result int `json:"Result"`
- Token string `json:"Token"`
- Data json.RawMessage `json:"Data"`
- ReMark string `json:"ReMark"`
- }
- func post(client *http.Client, baseURL, path string, payload interface{}) (envelope, error) {
- var result envelope
- body, err := json.Marshal(payload)
- if err != nil {
- return result, err
- }
- response, err := client.Post(strings.TrimRight(baseURL, "/")+path, "application/json", bytes.NewReader(body))
- if err != nil {
- return result, err
- }
- defer response.Body.Close()
- data, err := io.ReadAll(response.Body)
- if err != nil {
- return result, err
- }
- fmt.Printf("%s\n%s\n", path, string(data))
- if response.StatusCode != http.StatusOK {
- return result, fmt.Errorf("HTTP %d", response.StatusCode)
- }
- if err := json.Unmarshal(data, &result); err != nil {
- return result, fmt.Errorf("响应不是合法 POF JSON: %w", err)
- }
- if result.Result != 1 {
- return result, fmt.Errorf("%s", result.ReMark)
- }
- return result, nil
- }
- func main() {
- baseURL := flag.String("base-url", "http://127.0.0.1:8888", "Smart Parking server URL")
- username := flag.String("username", "pof-sim", "POF device username")
- password := flag.String("password", "pof-sim-123", "POF device password")
- plate := flag.String("plate", "粤A12345", "plate number of an active parking session")
- payType := flag.Int("pay-type", 0, "0=cash, 1=POS")
- noPay := flag.Bool("no-pay", false, "only login, query price and heartbeat")
- flag.Parse()
- client := &http.Client{Timeout: 10 * time.Second}
- login, err := post(client, *baseURL, "/api/login", map[string]string{"UserName": *username, "Password": *password})
- if err != nil {
- panic(err)
- }
- query, err := post(client, *baseURL, "/api/queryprice", map[string]interface{}{
- "Token": login.Token,
- "Data": map[string]string{"CarNo": *plate, "QueryTime": time.Now().Format("2006-01-02 15:04:05")},
- })
- if err != nil {
- panic(err)
- }
- var price struct {
- OrderID string `json:"OrderId"`
- CarNo string `json:"CarNo"`
- Price string `json:"Price"`
- }
- if err := json.Unmarshal(query.Data, &price); err != nil {
- panic(err)
- }
- if !*noPay {
- _, err = post(client, *baseURL, "/api/paysuccess", map[string]interface{}{
- "Token": login.Token,
- "Data": map[string]interface{}{
- "OrderId": price.OrderID, "CarNo": price.CarNo, "Money": price.Price,
- "PayTime": time.Now().Format("2006-01-02 15:04:05"), "PayType": *payType,
- "PayDev": 2, "DevId": "POF-SIM-01", "ReMark": "POF simulator",
- },
- })
- if err != nil {
- panic(err)
- }
- }
- if _, err := post(client, *baseURL, "/api/heartbeat", map[string]string{"Token": login.Token}); err != nil {
- panic(err)
- }
- }
|