diff --git a/business/jxcallback/auth/weixin/weixin.go b/business/jxcallback/auth/weixin/weixin.go new file mode 100644 index 000000000..8c04adea3 --- /dev/null +++ b/business/jxcallback/auth/weixin/weixin.go @@ -0,0 +1,25 @@ +package weixin + +import ( + "fmt" + + "git.rosy.net.cn/baseapi/platformapi/weixinsnsapi" + "git.rosy.net.cn/jx-callback/globals/api" +) + +var ( + StrStateIsWrong = "state:%s状态不对" +) + +func GetUserInfo(code string, state string) (token *weixinsnsapi.UserInfo, err error) { + if state == "" { + wxapi := weixinsnsapi.New(api.WeixinAPI.GetAppID(), api.WeixinAPI.GetSecret()) + token, err2 := wxapi.RefreshToken(code) + if err = err2; err == nil { + return wxapi.GetUserInfo(token.OpenID) + } + } else { + err = fmt.Errorf(StrStateIsWrong, state) + } + return nil, err +} diff --git a/controllers/wx_controller.go b/controllers/wx_controller.go new file mode 100644 index 000000000..afd767b0f --- /dev/null +++ b/controllers/wx_controller.go @@ -0,0 +1,54 @@ +package controllers + +import ( + "encoding/base64" + "fmt" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxcallback/auth/weixin" + "git.rosy.net.cn/jx-callback/globals" + "github.com/astaxie/beego" +) + +type WeinCallbackResult struct { + Code int `json:"code"` + Msg string `json:"msg"` + Data interface{} `json:data` +} + +// Operations about ELMOrder +type WeiXinController struct { + beego.Controller +} + +var ( + ErrParameterIsIllegal = "参数不全或不合法" +) + +// https://open.shop.ele.me/openapi/documents/httppushmethod +func (c *WeiXinController) GetUserInfo() { + retVal := &WeinCallbackResult{} + var err error + code := c.GetString("code") + block := c.GetString("block") + state := c.GetString("state") + str := "" + if block != "" { + if code != "" { + result, err2 := weixin.GetUserInfo(code, state) + if err = err2; err == nil { + retVal.Code = 1 + retVal.Msg = "微信登录成功" + retVal.Data = result + } else { + retVal.Msg = err.Error() + } + } else { + retVal.Msg = "code为空" + } + c.Ctx.Output.Header("Location", fmt.Sprintf("%s?info=%s", block, base64.StdEncoding.EncodeToString(utils.MustMarshal(retVal)))) + } else { + str = "没有block" + } + globals.SugarLogger.Debug(str) +} diff --git a/routers/router.go b/routers/router.go index ec0c4455b..7d9210739 100644 --- a/routers/router.go +++ b/routers/router.go @@ -29,6 +29,8 @@ func init() { beego.AutoRouter(&controllers.ElemeController{}) beego.AutoRouter(&controllers.DadaDeliveryController{}) + beego.AutoRouter(&controllers.WeiXinController{}) + beego.Any("/", func(ctx *beecontext.Context) { ctx.WriteString("pong\n") })