Browse Source

加入公众号获取openid方法

master
listen 3 years ago
parent
commit
e2def3228e
2 changed files with 116 additions and 0 deletions
  1. +36
    -0
      common.go
  2. +80
    -0
      mp_open_id.client.go

+ 36
- 0
common.go View File

@ -67,6 +67,42 @@ type MiniAppOpenidRes struct {
WxApiRes
}
/**
* 获取公众号openid返回参数
*/
type MpOpenidRes struct {
AccessToken string
ExpiresIn string
RefreshToken string
Openid string
Scope string
}
/**
* 获取公众号用户信息请求参数
*/
type MpUserInfoReq struct {
AccessToken string
Openid string
Lang string
}
/**
* 根据用户access_token换取用户信息返回参数
*/
type MpUserInfoRes struct {
Openid string
Nickname string
Sex string
Province string
City string
Country string
Headimgurl string
Privilege string
Unionid string
}
func rpc_server_conn(url ...string) (*WeixinRpcServiceClient, error) {
var wx_rpc_url string = "127.0.0.1:7969"


+ 80
- 0
mp_open_id.client.go View File

@ -0,0 +1,80 @@
package weixinrpc
import (
"encoding/json"
"log"
"strconv"
"time"
"git.tetele.net/tgo/crypter"
"github.com/golang/protobuf/proto"
)
func GetMpOpenId(appid, secret, js_code string, url ...string) (*MpOpenidRes, error) {
conn, err := rpc_server_conn(url...)
if err != nil {
return nil, err
}
defer conn.Close()
data := MiniAppOpenidReq{}
data.Appid = appid
data.Secret = secret
data.JsCode = js_code
data_json, err := json.Marshal(data)
if err != nil {
return nil, err
}
encryData := crypter.DesEn(string(data_json), DES_KEY)
now_int64 := time.Now().Unix()
now := strconv.FormatInt(now_int64, 10)
sign := Sign(encryData, now)
req := &Request{
proto.String(encryData),
proto.String(now),
proto.String(sign),
nil}
res := &Response{}
err = conn.GetMiniAppOpenid(req, res)
if err != nil {
return nil, err
}
return HandleMpOpenid(res)
}
/**
* 处理返回结果
*/
func HandleMpOpenid(res *Response) (*MpOpenidRes, error) {
//解密
res_data_de, err := GetOrgData(res)
if err != nil {
return nil, err
}
var res_arr MpOpenidRes
err = json.Unmarshal([]byte(res_data_de), &res_arr)
if err != nil {
log.Println(err, res_data_de)
return nil, err
}
return &res_arr, nil
}

Loading…
Cancel
Save