125 lines
3.5 KiB
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)
|
|
} |