1、在main中init函数实现config配置文件
data, _ := ioutil.ReadFile("config.yml")
在config中配置数据库、redis和一些全局配置,如
mysql:
host: rm-bp13p3c6om21314o.mysql.rds.aliyuncs.com:3306
username: xb_root
password: B19f63ec50761
dbname: fund
redis:
addr: 192.168.1.:679
password: m
assetsideUrl: "http://192.68.1.6:8080"
ucUrl: "http://192.16.1.14:8081
2、在main函数
初始化路由router
r := routers.InitRouter()
3、路由中实现
r := gin.New()
r.Use(Logger())
r.Use(gin.Recovery())
gin.SetMode(gin.ReleaseMode)
xydGroup := r.Group(BASE_PATH + XIAOYUDIAN + VERSION1)
/*base.Use(gin.BasicAuth(account))*/
{
//调用接口
xydGroup.POST("/pushWholeOrder", xyd.PushWholeOrderControl)
xydGroup.POST("/findLoanCalculate", xyd.FindLoanCalculateControl)
4、接口的实现
首先编写数据源结构体,如金额试算接口
package formTaoche
type FindLoanCalculateForm struct {
//渠道号 Y
Vendor string `json:"vendor" binding:"required"`
//金额 Y
RequestAmount string `json:"requestAmount" binding:"required"`
//期数
TotalPeriod int `json:"totalPeriod" binding:"required"`
//生成随机外部订单号
OutOrderNumber string `json:"outOrderNumber"`
//渠道号标识
FundSideVendor string `json:"fundSideVendor"`
FundSideUrl string `json:"fundSideUrl" binding:"required"`
}
函数实现详情
func FindLoanCalculateControl(c *gin.Context) {
var findLoanCalculateForm formTaoche.FindLoanCalculateForm//结构体
if err := c.BindJSON(&findLoanCalculateForm); err != nil {//解析参数
log.Error("findLoanCalculateForm BindJSON err: ", err)
return
}
maps := common.StructToMap(findLoanCalculateForm) //结构体转换成map
code, result := FindLoanCalculate(findLoanCalculateForm.FundSideUrl, maps)//内部实现
if code == util.ResultSuccess {
common.OkMsgResult(c, result)
} else {
common.ErrorMsgResult(c, result)
}
}
内部实现
func FindLoanCalculate(fundSideUrl string, paramMap map[string]string) (string, interface{}) {
requestAmount := paramMap["requestAmount"]
if requestAmount == "" {
requestAmount = "60000"
}
totalPeriod := paramMap["totalPeriod"]
if totalPeriod == "" {
totalPeriod = "3"
}
postMap := map[string]interface{}{
"vendor": paramMap["vendor"],
"requestAmount": util.StringToInt64Val(requestAmount),
"outOrderNumber": paramMap["outOrderNumber"],
"totalPeriod": util.StringToInt(totalPeriod),
}
jsonByte, err := json.Marshal(postMap)//map转json
if err != nil {
log.Error(" FindLoanCalculate: err: ", err)
return util.ResultFail, ""
}
paramJson, reqId := common.BuildAesSignedParamJson(jsonByte)//加密请求
code, dat, str := common.RpcPostJson(fundSideUrl+"/api/dumiao/trial/amount",
paramJson)
common.SaveLog(paramMap["outOrderNumber"], reqId, str, "taoche: FindLoanCalculate", paramMap["vendor"], common.FUND_SIDE_VENDOR_TAOCHE, util.Response)//解密保存起来
return code, dat
}
到这里一个接口算是结束了,在postman就可以调用咯
比如
url:http://localhost:8080/fund/taoche/v1/findLoanCalculate
参数:{
"requestAmount": "50000",
"totalPeriod": 6,
"outOrderNumber": "",
"vendor": "123456",
"fundSideVendor": "cc",
"fundSideUrl": "http://test.com/api"
}
可成功调用了
👏
新手的理解,可能也有偏差,不喜勿喷,仅供参考
下面可看可不看
结构体转map
func StructToMap(obj interface{}) map[string]string {
obj1 := reflect.TypeOf(obj)
obj2 := reflect.ValueOf(obj)
log.Info("common: StructToMap: obj1.Kind(): ", obj1.Kind().String())
if obj1.Kind().String() == "ptr" {
obj1 = obj1.Elem()
obj2 = obj2.Elem()
}
var data = make(map[string]string)
for i := 0; i < obj1.NumField(); i++ {
nameStr := obj1.Field(i).Name
value := obj2.Field(i).Interface()
var valueStr string
switch value.(type) {
case string:
valueStr = value.(string)
case int64:
valueStr = util.Int64ToString(value.(int64))
}
if nameStr != "FundSideVendor" && nameStr != "FundSideUrl" {
data[(strings.ToLower(nameStr[0:1]) + nameStr[1:])] = valueStr
}
}
log.Info("routers: StructToMap: maps:", data)
return data
}
网友评论