rubbishclass-srv/app/app-handler.go

58 lines
1.4 KiB
Go

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