| @ -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 | |||||
| } | |||||