前记
最近在用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
纵有千古,横有八荒;前途似海,来日方长。