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