You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
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) |
|
}
|
|
|