Files
jx-callback/controllers/api_controller.go
2021-06-25 15:00:20 +08:00

136 lines
3.5 KiB
Go

package controllers
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/server/web"
"net/url"
"reflect"
)
type ApiController struct {
web.Controller
}
var (
routerMap map[string]reflect.Value
)
func Init() {
routerMap = make(map[string]reflect.Value)
var ruTest ApiController
vf := reflect.ValueOf(&ruTest)
vft := vf.Type()
//读取方法数量
mNum := vf.NumMethod()
fmt.Println("mNum", mNum)
//遍历路由器的方法,并将其存入控制器映射变量中
for i := 0; i < mNum; i++ {
mName := vft.Method(i).Name
routerMap[mName] = vf.Method(i)
}
}
// @Title api调用入口
// @Description api调用入口
// @Param app_id formData string false "应用ID"
// @Param timestamp formData int64 false "unix时间戳"
// @Param sign formData string false "签名"
// @Param method formData string false "接口名"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /CallOpenAPI [post]
func (c *ApiController) CallOpenAPI() {
var (
err error
errCode = model.ErrCodeGeneralFailed
callResult = &CallResult{}
accessID = utils.GetUUID()
requireParams []string
dataMap = make(map[string]interface{})
//now = time.Now().Unix()
parms, result []reflect.Value
urls url.Values
)
var (
appID, sign, method string
//timestamp int64
)
//判断必传参数是否传入begin
if appID = c.GetString("app_id"); appID == "" {
requireParams = append(requireParams, "app_id")
}
if method = c.GetString("method"); method == "" {
requireParams = append(requireParams, "method")
}
if sign = c.GetString("sign"); sign == "" {
requireParams = append(requireParams, "sign")
}
//if timestamp, err = c.GetInt64("timestamp"); err != nil {
// requireParams = append(requireParams, "timestamp")
//}
if len(requireParams) > 0 {
err = buildParamRequiredErr(requireParams)
}
//判断必传参数是否传入end
if err != nil {
goto end
}
//判断timestamp传入是否正确begin
//if len(utils.Int64ToStr(timestamp)) != len(utils.Int64ToStr(now)) {
// err = buildTimestampParamErr()
// errCode = model.ErrCodeOpenAPIParamErrTimeStamp
//}
//if now-timestamp < 5 {
// err = buildTimestampParamErr()
// errCode = model.ErrCodeOpenAPIParamErrTimeStamp
//}
//判断timestamp传入是否正确end
if err != nil {
goto end
}
//判断app_id和sign匹配begin
//判断app_id和sign匹配end
//call
urls, _ = c.Input()
dataMap = utils.URLValues2Map(urls)
delete(dataMap, "app_id")
delete(dataMap, "method")
delete(dataMap, "timestamp")
parms = []reflect.Value{reflect.ValueOf(dataMap)}
if routerMap[method] == reflect.ValueOf(nil) {
errCode = model.ErrCodeOpenAPIParamErrMethod
err = buildMethodParamErr()
}
globals.SugarLogger.Debugf("Begin API CallOpenAPI Method: %s, accessUUID:%s, sign:%s\n", method, accessID, sign)
if err == nil {
result = routerMap[method].Call(parms)
fmt.Println("routerMap[method].Call(parms)", result)
goto success
} else {
callResult.Code = errCode
callResult.Desc = err.Error()
}
end:
{
callResult.Code = errCode
callResult.Desc = err.Error()
c.Data["json"] = callResult
c.ServeJSON()
}
success:
{
callResult.Code = model.ErrCodeSuccess
callResult.Data = ""
c.Data["json"] = callResult
c.ServeJSON()
}
}
func (c *ApiController) AddPrint(dataMap map[string]interface{}) (data interface{}, err error) {
return fmt.Println("call AddPrint success ...", dataMap)
}