Bladeren bron

feat: add mpservice

Your Name 3 jaren geleden
bovenliggende
commit
315fad3d4a
3 gewijzigde bestanden met toevoegingen van 78 en 3 verwijderingen
  1. 45
    0
      api/mp/webpage/webpage.go
  2. 32
    2
      mp.go
  3. 1
    1
      utils/request/request.go

+ 45
- 0
api/mp/webpage/webpage.go Bestand weergeven

@@ -80,3 +80,48 @@ func GetOAuthAccessToken(appID, code string) (*MpOAuthAccessTokenResult, error)
80 80
 
81 81
 	return &result, nil
82 82
 }
83
+
84
+// SnsApiUserInfo 网页授权, 用户信息
85
+type SnsApiUserInfo struct {
86
+	errors.Error
87
+	OpenID     string   `json:"openid"`
88
+	NickName   string   `json:"nickname"`
89
+	Sex        string   `json:"sex"`
90
+	Province   string   `json:"province"`
91
+	City       string   `json:"city"`
92
+	Country    string   `json:"country"`
93
+	HeadImgURL string   `json:"headimgurl"`
94
+	Privilege  []string `json:"privilege"`
95
+	UnionID    string   `json:"unionid"`
96
+}
97
+
98
+const apiSnsUserInfo = "https://api.weixin.qq.com/sns/userinfo"
99
+
100
+// GetSnsApiUserInfo 网页授权, 获取用户信息
101
+func GetSnsApiUserInfo(accessToken, openID, lang string) (*SnsApiUserInfo, error) {
102
+	if accessToken == "" || openID == "" {
103
+		return nil, errors.New("获取网页授权用户信息 accessToken 或者 openID 不能为空")
104
+	}
105
+
106
+	langStr := lang
107
+	if langStr == "" {
108
+		langStr = "zh_CN"
109
+	}
110
+
111
+	param := url.Values{}
112
+	param.Set("access_token", accessToken)
113
+	param.Set("openid", openID)
114
+	param.Set("lang", langStr)
115
+
116
+	resp, e2 := request.GetJSON(apiOAuthAccessToken, &param)
117
+	if e2 != nil {
118
+		return nil, e2
119
+	}
120
+
121
+	result := SnsApiUserInfo{}
122
+	if err := json.Unmarshal(resp, &result); err != nil {
123
+		return nil, err
124
+	}
125
+
126
+	return &result, nil
127
+}

+ 32
- 2
mp.go Bestand weergeven

@@ -5,9 +5,19 @@ import (
5 5
 	"gitee.com/yansen_zh/wxcomponent/config"
6 6
 )
7 7
 
8
+// 代公众号服务
9
+type MPService struct {
10
+	appID string
11
+}
12
+
13
+// GetMpService 获取代公众号服务
14
+func GetMpService(appID string) *MPService {
15
+	return &MPService{appID: appID}
16
+}
17
+
8 18
 // JsapiTicket 代公众号使用js sdk
9
-func JsapiTicket(appID, url string) (*webpage.JsapiSignature, error) {
10
-	ticket, err := webpage.GetJSTicket(config.GetAuthorizer().GetAccessToken(appID))
19
+func (t *MPService) JsapiTicket(url string) (*webpage.JsapiSignature, error) {
20
+	ticket, err := webpage.GetJSTicket(config.GetAuthorizer().GetAccessToken(t.appID))
11 21
 	if err != nil {
12 22
 		return nil, err
13 23
 	}
@@ -15,3 +25,23 @@ func JsapiTicket(appID, url string) (*webpage.JsapiSignature, error) {
15 25
 	signature := webpage.GetJSAPISignature(ticket.Ticket, url)
16 26
 	return signature, nil
17 27
 }
28
+
29
+// GetOpenID 网页授权 code 换取 OpenID
30
+func (t *MPService) GetOpenID(code string) (string, error) {
31
+	token, err := webpage.GetOAuthAccessToken(t.appID, code)
32
+	if err != nil {
33
+		return "", err
34
+	}
35
+
36
+	return token.OpenID, nil
37
+}
38
+
39
+// GetSnsUserInfo 网页授权, 获取用户信息
40
+func (t *MPService) GetSnsUserInfo(code string) (*webpage.SnsApiUserInfo, error) {
41
+	token, err := webpage.GetOAuthAccessToken(t.appID, code)
42
+	if err != nil {
43
+		return nil, err
44
+	}
45
+
46
+	return webpage.GetSnsApiUserInfo(token.AccessToken, token.OpenID, "")
47
+}

+ 1
- 1
utils/request/request.go Bestand weergeven

@@ -84,7 +84,7 @@ func PostJSON(addr string, query *url.Values, body interface{}) ([]byte, error)
84 84
 	}
85 85
 
86 86
 	if e3.Code != 0 {
87
-		return nil, e3
87
+		return nil, &e3
88 88
 	}
89 89
 
90 90
 	return resp, nil