package app import ( "net/http" "github.com/gin-gonic/gin" "github.com/prometheus/common/log" "github.com/silenceper/wechat" "github.com/silenceper/wechat/cache" "github.com/silenceper/wechat/miniprogram" "yyjishu.com/rubbish-class/user" ) var ( wxa *miniprogram.MiniProgram ) func init() { mem := cache.NewMemory() appConfig := &wechat.Config{ AppID: "wx49cced01eec31847", AppSecret: "0090134e4a137554a271133d7f73e633", Cache: mem, } wx := wechat.NewWechat(appConfig) wxa = wx.GetMiniProgram() } //Code2SessionHandler 登录凭证校验,通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。 //GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code func Code2SessionHandler(c *gin.Context) { jscode := c.Param("jscode") result, err := wxa.Code2Session(jscode) if err != nil { log.Warn(err) c.AbortWithStatusJSON(http.StatusBadRequest, err.Error()) return } if result.ErrCode != 0 { c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "err": result.ErrMsg, }) return } u := &user.UserSession{ //ID: uuid.Must(uuid.NewV4(), nil).String(), OpenID: result.OpenID, SessionKey: result.SessionKey, UnionID: result.UnionID, } us := user.NewService() us.SaveSession(u) c.JSON(http.StatusOK, gin.H{ "token": result.OpenID, "expireat": 7200, }) }