package utils import ( "encoding/json" "fmt" "io" "io/ioutil" "net/http" "github.com/astaxie/beego" "github.com/zjxpcyc/request" ) type WxResult struct { Code int Message string Result interface{} } var wechatInited = false // WechatInit 微信初始化 func WechatInit() error { if wechatInited { return nil } wxconf, err := beego.AppConfig.GetSection("wechat") if err != nil { beego.Error("获取微信配置失败: ", err.Error()) return err } config := request.NewConfig(wxconf["service"] + "wx/register") config.AddParam("appid", wxconf["appid"]) config.AddParam("secret", wxconf["secret"]) config.AddParam("token", wxconf["token"]) config.AddParam("aeskey", wxconf["aeskey"]) config.Method = http.MethodPost _, err = Request(config) if err == nil { wechatInited = true } return err } // GetUserInfo 获取个人信息 func GetUserInfo(code string) (interface{}, error) { wxconf, err := beego.AppConfig.GetSection("wechat") if err != nil { beego.Error("获取微信配置失败: ", err.Error()) return nil, err } config := request.NewConfig(wxconf["service"] + "wx/userinfo") config.AddParam("appid", wxconf["appid"]) config.AddParam("code", code) config.Method = http.MethodGet return Request(config) } // GetJSTicket 获取分享 ticket func GetJSTicket(link string) (interface{}, error) { wxconf, err := beego.AppConfig.GetSection("wechat") if err != nil { beego.Error("获取微信配置失败: ", err.Error()) return nil, err } config := request.NewConfig(wxconf["service"] + "wx/jssdk") config.AddParam("appid", wxconf["appid"]) config.AddParam("url", link) config.Method = http.MethodGet return Request(config) } func Request(config *request.Config) (interface{}, error) { body, _, err := request.Do(config) if err != nil { beego.Error("请求微信服务失败: ", err.Error()) return nil, err } res, err := getResult(body) if err != nil { return nil, err } if res.Code != http.StatusOK { return nil, fmt.Errorf("请求微信服务失败: %s", res.Message) } return res.Result.(interface{}), nil } func getResult(body io.ReadCloser) (*WxResult, error) { defer body.Close() bs, err := ioutil.ReadAll(body) if err != nil { beego.Error("读取微信服务结果失败: ", err.Error()) return nil, err } res := WxResult{} if err := json.Unmarshal(bs, &res); err != nil { beego.Error("转换微信服务结果失败: ", err.Error()) return nil, err } return &res, nil }