ymt/api/v1/key/key_test.go

219 lines
5.5 KiB
Go

package key
import (
"bytes"
"context"
"encoding/json"
"gitee.com/lansexiongdi/ymt/core"
"io"
"net/http"
"testing"
)
var (
appId = ""
privateKey = ""
publicKey = ""
key = ""
baseURL = ""
signType = core.SignRSA
)
func newCore() *Key {
c, _ := core.NewCore(&core.Config{
AppID: appId,
PrivateKey: privateKey,
PublicKey: publicKey,
Key: key,
SignType: signType,
BaseURL: baseURL,
})
k := Key{c}
return &k
}
func TestGetRequestBody(t *testing.T) {
c := newCore()
request := &NotifyData{
NotifyId: "1111",
OutBizNo: "1111",
TradeNo: "1111",
Key: "1111",
UsableNum: 1,
UsageNum: 1,
Status: 1,
Url: "1",
Amount: 0,
PayAmount: 0,
PayTime: "1",
SettlementPrice: 0,
ValidBeginTime: "1",
ValidEndTime: "1",
UsageTime: "1",
DiscardTime: "1",
Account: "1",
OrderInfo: OrderInfo{
OrderNo: "1",
Account: "1",
},
}
_, b, err := c.GetRequestBody(context.Background(), request)
if err != nil {
t.Error(err)
return
}
t.Logf("data=%s", string(b))
var p core.Params
if err = json.Unmarshal(b, &p); err != nil {
t.Error(err)
return
}
ok := c.Verify(p.Timestamp, p.Ciphertext, p.Sign)
t.Log("verify result:", ok)
}
func TestOrder(t *testing.T) {
c := newCore()
h, _, r, err := c.Order(context.Background(), &OrderRequest{
OutBizNo: "cs002",
ActivityNo: "lzmcs",
Number: 1,
NotifyUrl: "",
Account: "",
Extra: "",
})
if err != nil {
t.Error(err)
return
}
if !r.IsSuccess() {
t.Errorf("获取key失败:%s", r.Message)
return
}
t.Logf("data=%s", string(r.Data))
t.Logf("headers=%+v", h)
}
func TestQuery(t *testing.T) {
c := newCore()
h, _, r, err := c.Query(context.Background(), &QueryRequest{
OutBizNo: "cs001",
TradeNo: "",
})
if err != nil {
t.Error(err)
return
}
if !r.IsSuccess() {
t.Errorf("查询失败:%s", r.Message)
return
}
t.Logf("data=%s", string(r.Data))
t.Logf("headers=%+v", h)
//t.Log(result.Status.IsNormal())
}
func TestDiscard(t *testing.T) {
c := newCore()
h, _, r, err := c.Discard(context.Background(), &DiscardRequest{
OutBizNo: "N123456003",
TradeNo: "",
Reason: "正常作废",
})
if err != nil {
t.Error(err)
return
}
if !r.IsSuccess() {
t.Errorf(r.Message)
return
}
t.Logf("headers=%+v", h)
t.Logf("respons=%+v", r)
}
func TestResponse(t *testing.T) {
jsonBytes := []byte(`{"code":200,"data":{},"message":"成功"}`)
resp, err := core.BuildResponse(jsonBytes)
if err != nil {
t.Error(err)
return
}
result, err := ConvertData(resp.Data)
if err != nil {
t.Error(err)
return
}
t.Logf("%+v", result)
}
func TestNotify(t *testing.T) {
client := newCore()
reqStr := `{"data": {"url": "https://market.86698.cn/dpK5jqYvPNdAdX0W", "status": 2, "trade_no": "753998793059999745", "notify_id": "845594378564157441", "usage_num": 1, "out_biz_no": "CT2025032321122150383448", "usable_num": 1, "usage_time": "2025-11-19 09:30:10", "valid_end_time": "2025-05-31 23:59:59", "settlement_price": 1.7, "valid_begin_time": "2025-02-19 14:39:15"}, "sign": "EYkEtc7OXkjoHxVrH0PNdRSzWCEB+PmpAi5opgeqqlpdNg0CXoIDkdHEKRtdIanuHNAEHutlIfIODsS+ZWZfCd6wGoDpCxCdzUW2OdHrMAq4TVzqdSxn9e4WBy+B4UWKgXyqgcLMn4/gBZpF3o12qtO06t/xZwNmMMSGtGocJybr6yMBWDAu2gQ5gFKPsVPIwF3DiIeg5nS09HW1St6UZtqUv5T7g8s+tVwsWtsnyplIeqTnyrrZel8rRYP/UHzkl32cWa4aToeyl5eO0uhAexf4GjuqC95pUumU7vde0iwOZSc6FqwQgWVO/AMhOGf4eYFMBU2Iomriidyo8Sn1qA==", "app_id": "UTBoBcAgWSRQ", "sign_type": "RSA", "timestamp": "2025-11-19 09:30:10"}`
req := &Notify{}
err := json.Unmarshal([]byte(reqStr), req)
if err != nil {
t.Error(err)
}
if err = req.Validate(); err != nil {
t.Error(err)
}
rsp, err := client.Notify(context.Background(), req)
if err != nil {
t.Error(err)
}
t.Log(rsp)
}
func TestCallBack(t *testing.T) {
reqStr := `{"data": {"url": "https://market.86698.cn/dpK5jqYvPNdAdX0W", "status": 2, "trade_no": "753998793059999745", "notify_id": "845594378564157441", "usage_num": 1, "out_biz_no": "CT2025032321122150383448", "usable_num": 1, "usage_time": "2025-11-19 09:30:10", "valid_end_time": "2025-05-31 23:59:59", "settlement_price": 1.7, "valid_begin_time": "2025-02-19 14:39:15"}, "sign": "EYkEtc7OXkjoHxVrH0PNdRSzWCEB+PmpAi5opgeqqlpdNg0CXoIDkdHEKRtdIanuHNAEHutlIfIODsS+ZWZfCd6wGoDpCxCdzUW2OdHrMAq4TVzqdSxn9e4WBy+B4UWKgXyqgcLMn4/gBZpF3o12qtO06t/xZwNmMMSGtGocJybr6yMBWDAu2gQ5gFKPsVPIwF3DiIeg5nS09HW1St6UZtqUv5T7g8s+tVwsWtsnyplIeqTnyrrZel8rRYP/UHzkl32cWa4aToeyl5eO0uhAexf4GjuqC95pUumU7vde0iwOZSc6FqwQgWVO/AMhOGf4eYFMBU2Iomriidyo8Sn1qA==", "app_id": "UTBoBcAgWSRQ", "sign_type": "RSA", "timestamp": "2025-11-19 09:30:10"}`
headerStr := `{"Sign": ["ty0dtWdEFMWOXv6sIMABmN4XKcgSqq1sBlKG2ovQz6zBERWVKgbks7mFkvIcB6ZisZDRiDTVc5k/qTtj712k+0VtPleSHxat8VrOOG/G/geRpKz+Gg/bJXWVhGM0iJeIE5cwcz+XdZFi7kY4UPu9eDIF0v8BUwYkIORUunMP8QvVnB3jf/W32VNvS3kmfB8+9mhNvIoxrvTfQ01E+PP4tms/ZQAcsr7n66A5YA82yPxVeciZnxDjHipxFyldpZlRUrH4Dy+903k6n4dXS1aohpxK4xkNu54dl9qobSkkHKodQy4ToV7ZetUKIqXV63PUHY9t2W40uSQ307oNcLvSDQ=="], "Appid": ["UTBoBcAgWSRQ"], "Version": ["1.0"], "Sign-Type": ["RSA"], "Timestamp": ["2025-11-19 09:30:10"], "Content-Type": ["application/json"]}`
var headers http.Header
if err := json.Unmarshal([]byte(headerStr), &headers); err != nil {
t.Error(err)
return
}
c := newCore()
request := &http.Request{
Header: headers,
Body: io.NopCloser(bytes.NewBuffer([]byte(reqStr))),
}
r, err := c.CallBack(context.Background(), request)
if err != nil {
t.Error(err)
return
}
t.Logf("response=%+v", r)
}