package xyshanghai import ( "context" "encoding/json" "fmt" "testing" "time" ) // 测试用的密钥和盐值(仅用于测试,生产环境需安全保管) var ( testSM4Key = []byte("1234567890abcdef") // 16 字节 testSM3Salt = []byte("test-salt") ) func newTestClient() *Client { return NewClient( WithBaseURL("http://localhost:8080"), WithTimeout(5*time.Second), WithSM4Key(testSM4Key), WithSM3Salt(testSM3Salt), ) } // TestCreateOrder 测试卡券/直充权益下单接口。 func TestCreateOrder(t *testing.T) { client := newTestClient() req := &CreateOrderRequest{ ActCode: "ACT001", GoodsCode: "123456", ActOrderNum: "00001", Account: "19912345678", CallbackURL: "https://example.com/notice", } resp, err := client.CreateOrder(context.Background(), req) if err != nil { t.Fatalf("CreateOrder failed: %v", err) } if resp.Code != 0 { t.Fatalf("unexpected code: %d, msg: %s", resp.Code, resp.Msg) } // 解密 data 并解析 var data CreateOrderResponseData if err := json.Unmarshal([]byte(resp.Data), &data); err != nil { t.Fatalf("unmarshal response data: %v", err) } fmt.Printf("OrderNo: %s, Status: %d\n", data.OrderNo, data.Status) } // TestQueryOrder 测试订单查询接口。 func TestQueryOrder(t *testing.T) { client := newTestClient() req := &QueryOrderRequest{ ActCode: "FBG6vdYqGE4mGX7EH/woEg==", OrderNo: "HM1757046717684000102707339840b23222", } resp, err := client.QueryOrder(context.Background(), req) if err != nil { t.Fatalf("QueryOrder failed: %v", err) } if resp.Code != 0 { t.Fatalf("unexpected code: %d, msg: %s", resp.Code, resp.Msg) } var data QueryOrderResponseData if err := json.Unmarshal([]byte(resp.Data), &data); err != nil { t.Fatalf("unmarshal response data: %v", err) } fmt.Printf("OrderNo: %s, Status: %d\n", data.OrderNo, data.Status) } // TestRechargeOrder 测试微信立减金充值接口。 func TestRechargeOrder(t *testing.T) { client := newTestClient() req := &RechargeOrderRequest{ ActCode: "FBG6vdYqGE4mGX7EH/woEg==", GoodsCode: "0001", ActOrderNum: "0001", OpenID: "0001", AppID: "00001", } resp, err := client.RechargeOrder(context.Background(), req) if err != nil { t.Fatalf("RechargeOrder failed: %v", err) } if resp.Code != 0 { t.Fatalf("unexpected code: %d, msg: %s", resp.Code, resp.Msg) } var data RechargeOrderResponseData if err := json.Unmarshal([]byte(resp.Data), &data); err != nil { t.Fatalf("unmarshal response data: %v", err) } fmt.Printf("OrderNo: %s, Status: %d, CouponID: %s\n", data.OrderNo, data.Status, data.CouponID) } // TestParseCallbackRequest 测试回调请求解析。 func TestParseCallbackRequest(t *testing.T) { client := newTestClient() // 模拟回调请求参数 bizData := CallbackBizData{ OrderNo: "HM202509291010001", ActOrderNum: "XY2025092910100001", Status: 3, Account: "19912345678", } bizJSON, _ := json.Marshal(bizData) encrypted, _ := SM4Encrypt(testSM4Key, bizJSON) timestamp := fmt.Sprintf("%d", time.Now().UnixMilli()) sign := SM3WithSalt(testSM3Salt, timestamp+string(encrypted)) // 解析 decrypted, err := client.ParseCallbackRequest(timestamp, sign, string(encrypted)) if err != nil { t.Fatalf("ParseCallbackRequest failed: %v", err) } var parsed CallbackBizData if err := json.Unmarshal([]byte(decrypted), &parsed); err != nil { t.Fatalf("unmarshal callback data: %v", err) } if parsed.OrderNo != "HM202509291010001" { t.Fatalf("unexpected orderNo: %s", parsed.OrderNo) } fmt.Printf("Callback parsed successfully: %+v\n", parsed) }