httplib_usercenter_service.go
3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package serviceGateway
import (
"bytes"
"crypto/sha1"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"time"
"gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/constant"
)
type UCenterCommonMsg struct {
Code int `json:"code"`
Msg string `json:"msg"`
}
func (msg UCenterCommonMsg) IsOK() error {
if msg.Code != 0 {
return fmt.Errorf("统一用户中心响应数据异常,code:%d,msg:%s", msg.Code, msg.Msg)
}
return nil
}
type MmmUserCenterServiceGateway struct {
baseURL string
}
func NewMmmUserCenterServiceGateway() *MmmUserCenterServiceGateway {
return &MmmUserCenterServiceGateway{
baseURL: constant.UCENTER_HOST,
}
}
func (gateway MmmUserCenterServiceGateway) buildHeader() http.Header {
var h = http.Header{}
nowTime := fmt.Sprint(time.Now().Unix())
str := fmt.Sprintf("%s%s%s", nowTime, constant.UCENTER_SECRET, constant.UCENTER_CHECK_ALT)
bt := sha1.Sum([]byte(str))
checksum := fmt.Sprintf("%x", bt)
h.Set("Content-Type", "application/json")
h.Set("appKey", constant.UCENTER_APP_KEY)
h.Set("nonce", "")
h.Set("curTime", nowTime)
h.Set("checkSum", checksum)
h.Set("Accept", "application/json")
return h
}
func (gateway MmmUserCenterServiceGateway) httpDo(reqURL string, mathod string, bodyData interface{}) ([]byte, error) {
httpclient := http.Client{
Timeout: 60 * time.Second, //请求超时时间60秒
}
bt := &bytes.Buffer{}
if bodyData != nil {
enc := json.NewEncoder(bt)
enc.Encode(bodyData)
}
req, err := http.NewRequest(mathod, reqURL, bt)
if err != nil {
return nil, err
}
req.Header = gateway.buildHeader()
resp, err := httpclient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return body, nil
}
type ResponseLogin struct {
UCenterCommonMsg
Data struct {
Id int64 `json:"id"` //统一用户中心的id,对应本系统中users表的open_id
Phone string `json:"phone"` //手机号 ,账号
NickName string `json:"nickname"` //昵称
Avatar string `json:"avatar"` //头像
Imtoken string `json:"imtoken"` //网易云imtoken
Accid int64 `json:"accid"` //网易云id
CustomerAccount int64 `json:"customerAccount"` //客服id
CompanyId int64 `json:"companyId"` //总后台的公司id
Muid int64 `json:"muid"` //企业平台的用户id,对应本系统中users表的id
} `json:"data"`
}
//RequestUCenterLoginBySecret 使用密钥方式登录统一用户中心
func (gateway MmmUserCenterServiceGateway) RequestUCenterLoginBySecret(secret string) (*ResponseLogin, error) {
param := map[string]interface{}{
"type": 3, //登录方式 固定值
"secret": url.QueryEscape(secret), //必要的转换
}
url := constant.UCENTER_HOST + "/auth/serverLogin"
byteData, err := gateway.httpDo(url, "post", param)
if err != nil {
return nil, err
}
respData := &ResponseLogin{}
err = json.Unmarshal(byteData, respData)
if err != nil {
return nil, fmt.Errorf("body data %s; err:%s", string(byteData), err)
}
return respData, nil
}