66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package card
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"gitea.cdlsxd.cn/sdk/plugin/dctw/v1/api"
|
|
"gitea.cdlsxd.cn/sdk/plugin/dctw/v1/core"
|
|
"io/ioutil"
|
|
"net/http"
|
|
)
|
|
|
|
type Card api.Service
|
|
|
|
const (
|
|
orderPath = "/internal/v1/card/order"
|
|
queryPath = "/internal/v1/card/query"
|
|
)
|
|
|
|
func (c *Card) Order(ctx context.Context, request *Order) (*OrderResp, error) {
|
|
result, err := c.Request(ctx, request, orderPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var response *OrderResp
|
|
if err = json.Unmarshal(result, &response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return response, nil
|
|
}
|
|
|
|
func (c *Card) Query(ctx context.Context, request *Query) (*QueryResp, *CardCode, error) {
|
|
result, err := c.Request(ctx, request, queryPath)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var response *QueryResp
|
|
if err = json.Unmarshal(result, &response); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
cardCode, err := response.Decode(c.Config.AppKey)
|
|
|
|
return response, cardCode, nil
|
|
}
|
|
|
|
func (c *Card) Notify(_ context.Context, httpRequest *http.Request) (*Notify, *CardCode, error) {
|
|
body, err := ioutil.ReadAll(httpRequest.Body)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
if err = c.VerifyDctW(httpRequest.Header.Get(core.SignKeyName), body); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var response *Notify
|
|
if err = json.Unmarshal(body, &response); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
cardCode, err := response.Decode(c.Config.AppKey)
|
|
|
|
return response, cardCode, err
|
|
}
|