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