123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package dao
- import (
- "context"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "net/url"
- "strings"
- "go-common/app/job/main/passport-sns/model"
- "go-common/library/log"
- )
- const (
- _qqGetUnionidUrl = "https://graph.qq.com/oauth2.0/get_unionid"
- _respCodeSuccess = 0
- _respCodeInvalidOpenid = 100050
- _respCodeInvalidOpenidLength = 100058
- )
- // QQUnionID .
- func (d *Dao) QQUnionID(c context.Context, openID string) (unionID string, err error) {
- var (
- res *http.Response
- bs []byte
- params = url.Values{}
- )
- params.Set("client_id", model.OldAppID)
- params.Set("openid", openID)
- if res, err = http.Get(_qqGetUnionidUrl + "?" + params.Encode()); err != nil {
- log.Error("d.QQUnionID error(%+v) openID(%s)", err, openID)
- return "", err
- }
- defer res.Body.Close()
- if bs, err = ioutil.ReadAll(res.Body); err != nil {
- log.Error("ioutil.ReadAll() error(%+v) openID(%s)", err, openID)
- return "", err
- }
- respStr := string(bs)
- if strings.HasPrefix(respStr, "callback") {
- start := strings.Index(respStr, "{")
- end := strings.Index(respStr, "}")
- respStr = respStr[start : end+1]
- }
- unionRes := new(model.QQUnionIDResp)
- if err = json.Unmarshal([]byte(respStr), unionRes); err != nil {
- log.Error("json.Unmarshal() error(%+v) respStr(%s) openID(%s)", err, respStr, openID)
- return "", err
- }
- if unionRes.Code == _respCodeSuccess && unionRes.UnionID != "" {
- return unionRes.UnionID, nil
- }
- log.Error("request qq get_unionid failed with code(%d) desc(%s) openID(%s)", unionRes.Code, unionRes.Description, openID)
- if unionRes.Code == _respCodeInvalidOpenidLength || unionRes.Code == _respCodeInvalidOpenid {
- return "", nil
- }
- return "", fmt.Errorf("request qq get_unionid failed with code(%d) desc(%s) openID(%s)", unionRes.Code, unionRes.Description, openID)
- }
|