58 lines
1.4 KiB
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,
|
|
})
|
|
}
|