添加文件: example_test.go

This commit is contained in:
renzhiyuan 2026-07-21 18:16:25 +08:00
parent 54d4cba9e0
commit 1fdcab92e9
1 changed files with 105 additions and 0 deletions

105
example_test.go Normal file
View File

@ -0,0 +1,105 @@
package xyshanghai
import (
"context"
"encoding/hex"
"encoding/json"
"testing"
"time"
)
// 测试用的密钥和盐值(实际使用时需替换为双方约定的值)
var (
testSM4Key, _ = hex.DecodeString("0123456789abcdef0123456789abcdef") // 16字节
testSM3Salt = []byte("test-salt")
)
func TestCreateOrder(t *testing.T) {
apiKey := NewAPIKey(testSM4Key, testSM3Salt)
client := NewClient(apiKey, WithBaseURL("https://api.example.com"), WithTimeout(10*time.Second))
req := &CreateOrderRequest{
ActCode: "ACT001",
GoodsCode: "123456",
ActOrderNum: "00001",
Account: "19912345678",
CallbackURL: "https://xxx/notice",
}
resp, err := client.CreateOrder(context.Background(), req)
if err != nil {
t.Logf("CreateOrder error: %v", err)
// 实际测试中可能因为网络原因失败,这里仅验证逻辑
return
}
t.Logf("CreateOrder response: %+v", resp)
}
func TestQueryOrder(t *testing.T) {
apiKey := NewAPIKey(testSM4Key, testSM3Salt)
client := NewClient(apiKey, WithBaseURL("https://api.example.com"))
req := &QueryOrderRequest{
ActCode: "FBG6vdYqGE4mGX7EH/woEg==",
OrderNo: "HM1757046717684000102707339840b23222",
}
resp, err := client.QueryOrder(context.Background(), req)
if err != nil {
t.Logf("QueryOrder error: %v", err)
return
}
t.Logf("QueryOrder response: %+v", resp)
}
func TestRechargeOrder(t *testing.T) {
apiKey := NewAPIKey(testSM4Key, testSM3Salt)
client := NewClient(apiKey, WithBaseURL("https://api.example.com"))
req := &RechargeOrderRequest{
ActCode: "FBG6vdYqGE4mGX7EH/woEg==",
GoodsCode: "0001",
ActOrderNum: "0001",
OpenID: "0001",
AppID: "00001",
}
resp, err := client.RechargeOrder(context.Background(), req)
if err != nil {
t.Logf("RechargeOrder error: %v", err)
return
}
t.Logf("RechargeOrder response: %+v", resp)
}
func TestParseCallbackRequest(t *testing.T) {
// 模拟回调请求的构造和解析
apiKey := NewAPIKey(testSM4Key, testSM3Salt)
client := NewClient(apiKey)
// 构造回调业务数据
callbackReq := &CallbackRequest{
OrderNo: "HM202509291010001",
ActOrderNum: "XY2025092910100001",
Status: 3,
Account: "19912345678",
}
// 加密
plaintext, _ := json.Marshal(callbackReq)
encryptedData, _ := SM4Encrypt(apiKey.SM4Key, plaintext)
timestamp := "1700000000000"
sign := SM3Sign(apiKey.SM3Salt, timestamp+encryptedData)
// 构造HTTP请求简化实际测试需使用httptest
// 这里仅验证加密解密和签名逻辑
t.Logf("Encrypted data: %s", encryptedData)
t.Logf("Sign: %s", sign)
// 验证解密
decrypted, err := SM4Decrypt(apiKey.SM4Key, encryptedData)
if err != nil {
t.Fatalf("decrypt error: %v", err)
}
t.Logf("Decrypted: %s", string(decrypted))
}