| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package svc
- import (
- "fmt"
- "path"
- "time"
- "git.i2edu.net/i2/go-zero/core/stores/sqlx"
- "git.i2edu.net/i2/go-zero/zrpc"
- "git.i2edu.net/i2/i2-bill-api/internal/config"
- "git.i2edu.net/i2/i2-bill-api/internal/utils"
- "git.i2edu.net/i2/i2-bill-api/model"
- "git.i2edu.net/i2/i2-bill-erp/transformclient"
- )
- const cacheWechatTokenPrefix = "cache:wechat:token:"
- // RdCli defined
- type RdCli interface {
- SetCache(key string, v interface{}) error
- GetCache(key string, v interface{}) error
- SetWithExpire(key string, v interface{}, expire time.Duration) error
- }
- // Wechat defined
- type Wechat struct {
- RdCli RdCli
- c config.Config
- }
- // GetAccessToken defined
- func (wc *Wechat) GetAccessToken() (string, error) {
- token := ""
- err := wc.RdCli.GetCache(cacheWechatTokenPrefix, &token)
- if err == model.ErrRdsNotFound {
- req := utils.Get("https://api.weixin.qq.com/cgi-bin/token")
- req.Param("grant_type", "client_credential")
- req.Param("secret", wc.c.Weixin.Secret)
- req.Param("appid", wc.c.Weixin.Appid)
- var res = struct {
- AccessToken string `json:"access_token"`
- ExpiresIn int `json:"expires_in"`
- }{}
- err = req.ToJSON(&res)
- fmt.Println("---66", err)
- if err != nil {
- return "", err
- }
- fmt.Println(res)
- token = res.AccessToken
- err := wc.RdCli.SetWithExpire(cacheWechatTokenPrefix, res.AccessToken, time.Duration((res.ExpiresIn-60*2))*time.Second)
- if err != nil {
- return "", err
- }
- }
- return token, nil
- }
- // GetAccessToken defined
- func (wc *Wechat) GetQrCode(scene, page string) (string, error) {
- token, err := wc.GetAccessToken()
- if err != nil {
- return "", err
- }
- req := utils.Post("https://api.weixin.qq.com/wxa/getwxacodeunlimit")
- req.Param("access_token", token)
- ph := path.Join("asserts", "qrcode", scene+".png")
- err = req.ToFile(ph)
- if err != nil {
- return "", err
- }
- return ph, err
- }
- type ServiceContext struct {
- Config config.Config
- UserModel model.UserModel
- RdCli RdCli
- Wechat *Wechat
- Transformer transformclient.Transform
- }
- func NewServiceContext(c config.Config) *ServiceContext {
- svc := &ServiceContext{
- Config: c,
- Transformer: transformclient.NewTransform(zrpc.MustNewClient(c.Transform)),
- UserModel: model.NewUserModel(sqlx.NewMysql(c.DataSource), c.Cache),
- }
- svc.RdCli = svc.UserModel.CacheStorage()
- svc.Wechat = &Wechat{
- RdCli: svc.RdCli,
- c: c,
- }
- return svc
- }
|