48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package okapi
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
type Request struct {
|
|
AppKey string
|
|
ApiName string
|
|
ApiVersion string
|
|
Body RequestBody
|
|
}
|
|
|
|
type RequestBody struct {
|
|
OaSessionID string `json:"oa-session-id,omitempty"`
|
|
OaAppMarketID string `json:"oa-app-market-id,omitempty"`
|
|
OaAppVersion string `json:"oa-app-version,omitempty"`
|
|
OaDeviceID string `json:"oa-device-id,omitempty"`
|
|
OaSign string `json:"oa-sign,omitempty"`
|
|
Timestamp string `json:"timestamp,omitempty"`
|
|
Params map[string]interface{} `json:"params,omitempty"`
|
|
}
|
|
|
|
func (req *Request) Decode(r *http.Request) error {
|
|
reqBody, err := io.ReadAll(r.Body)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Restore the io.ReadCloser to its original state
|
|
r.Body = io.NopCloser(bytes.NewBuffer(reqBody))
|
|
if err = r.ParseForm(); err != nil {
|
|
return err
|
|
}
|
|
|
|
req.AppKey = r.Form.Get("appkey")
|
|
req.ApiName = r.Form.Get("api")
|
|
req.ApiVersion = r.Form.Get("version")
|
|
err = json.Unmarshal(reqBody, &req.Body)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|