前记
最近在用 gin
开发一款小程序后端需要用到小程序登陆授权,看看如何实现
小程序登陆流程图
核心代码
核心代码实现,这里主要是利用了 silenceper/wechat
包
InitWechat
函数主要是初始化 Wechat
同时去设置缓存
MiniProgramLogin
函数主要是去调用 Code2Session
进行授权,同时将 code
换成 session
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package utils
import ( "github.com/gin-gonic/gin" "github.com/silenceper/wechat/v2" "github.com/silenceper/wechat/v2/cache" miniConfig "github.com/silenceper/wechat/v2/miniprogram/config" )
func InitWechat(c *gin.Context) *wechat.Wechat { wc := wechat.NewWechat() redisOpts := &cache.RedisOpts{ Host: "127.0.0.1:3306", Database: 0, MaxActive: 10, MaxIdle: 10, IdleTimeout: 60,
} redisCache := cache.NewRedis(c, redisOpts) wc.SetCache(redisCache) return wc }
func MiniProgramLogin(c *gin.Context, code string) (map[string]interface{}, error) { wc := InitWechat(c) cfg := &miniConfig.Config{ AppID: "APPID", AppSecret: "APPSECRET", } miniprogram := wc.GetMiniProgram(cfg) auth := miniprogram.GetAuth() session, err := auth.Code2Session(code)
result := map[string]interface{}{} if err != nil { return result, err } result["openid"] = session.OpenID result["session_key"] = session.SessionKey result["unionid"] = session.UnionID return result, nil }
|
小程序
小程序需要调用 wx.login
获取到 code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| App({ globalData: {}, onLaunch: function () { var token = wx.getStorageSync('token'); if (!token) { wx.login({ success: function (_a) { var code = _a.code; if (code) { console.log(code); } } }); return; } } });
|
调用
1
| utils.MiniProgramLogin(c, code)
|
c
为 gin
上下文对象 *gin.Context
code
为前端传入小程序 wx.login
获取到的 code
纵有千古,横有八荒;前途似海,来日方长。