123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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
- }
|