xy-shanghai-20260721-171915/xy-shanghai/example_test.go

125 lines
3.5 KiB
Go

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)
}