From d2d31280940dabe7bd1a8a4d3767ec0ea3a06342 Mon Sep 17 00:00:00 2001 From: guzeng Date: Tue, 6 Apr 2021 15:53:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E8=B4=A6=E5=8F=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common.go | 13 ++++++- third.client.go | 93 ++++++++++++++++++++++++++++++++++++++++++++ third.client_test.go | 3 +- user.pb.go | 4 ++ user.proto | 1 + 5 files changed, 111 insertions(+), 3 deletions(-) diff --git a/common.go b/common.go index c810f24..413547a 100644 --- a/common.go +++ b/common.go @@ -7,8 +7,7 @@ type Req struct { Dbname string } -type BindThirdReq struct { - Req +type Third struct { Userid string Platform string Openid string @@ -18,6 +17,16 @@ type BindThirdReq struct { Mobile string } +type BindThirdReq struct { + Req + Third +} + +type GetThirdReq struct { + Req + Userid string + Platform string +} type Res struct { Errcode int Errmsg string diff --git a/third.client.go b/third.client.go index fffe39e..23c8850 100644 --- a/third.client.go +++ b/third.client.go @@ -2,6 +2,7 @@ package userrpc import ( "encoding/json" + "errors" "strconv" "time" @@ -62,3 +63,95 @@ func BindThird(site_id, dbname, platform, user_id, openid, openname, unionid, av return HandleRes(res) } + +/** + * 查找第三方平台openid + * 2021/04/06 + * gz + */ +func GetThird(site_id, dbname, platform, user_id string, url ...string) (*Third, error) { + + conn, err := rpc_server_conn(url...) + if err != nil { + return nil, err + } + defer conn.Close() + + data := GetThirdReq{} + data.SiteId = site_id + data.Dbname = dbname + data.Platform = platform + data.Userid = user_id + + 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.GetThird(req, res) + + if err != nil { + return nil, err + } + + return HandleGetThirdRes(res) +} + +/** + * 处理返回结果 + */ +func HandleGetThirdRes(res *Response) (*Third, error) { + + res_data := res.GetData() + + if res_data == "" { + + return nil, errors.New("未收到收据") + } + + time_int64, err := strconv.ParseInt(res.GetTime(), 10, 64) + if err != nil { + return nil, err + } + + now_int64 := time.Now().Unix() + + if now_int64-time_int64 > 10 || time_int64-now_int64 > 10 { + //时间误差前后10秒,返回 + return nil, errors.New("返回时间错误") + } + + check_sign := CheckSign(res.GetSign(), res_data, res.GetTime()) + if !check_sign { + return nil, errors.New("返回数据签名错误") + } + + //解密 + res_data_de := crypter.DesDe(res_data, DES_KEY) + + var res_arr Third + + err = json.Unmarshal([]byte(res_data_de), &res_arr) + + if err != nil { + return nil, err + } + + return &res_arr, nil +} diff --git a/third.client_test.go b/third.client_test.go index cf3a94a..7ac4655 100644 --- a/third.client_test.go +++ b/third.client_test.go @@ -12,7 +12,8 @@ func Test_BindThird(t *testing.T) { openid := "CasfoieFsdfsdfiDiodf_df" openname := "测试中" avatar := "https://ssss.ttt.ddd/sfsd" - res, err := BindThird(site_id, dbname, platform, user_id, openid, openname, "", avatar) + mobile := "1234456456" + res, err := BindThird(site_id, dbname, platform, user_id, openid, openname, "", avatar, mobile) t.Log(res) t.Log(err) diff --git a/user.pb.go b/user.pb.go index b42beec..1c4df8d 100644 --- a/user.pb.go +++ b/user.pb.go @@ -451,6 +451,7 @@ type UserService interface { GetByUsername(in *UserInfoByUsername, out *UserResponse) error GetByUsercode(in *UserInfoByUsercode, out *UserResponse) error BindThird(in *Request, out *Response) error + GetThird(in *Request, out *Response) error } // AcceptUserServiceClient accepts connections on the listener and serves requests @@ -537,6 +538,9 @@ func (c *UserServiceClient) GetByUsercode(in *UserInfoByUsercode, out *UserRespo func (c *UserServiceClient) BindThird(in *Request, out *Response) error { return c.Call("UserService.BindThird", in, out) } +func (c *UserServiceClient) GetThird(in *Request, out *Response) error { + return c.Call("UserService.GetThird", in, out) +} // DialUserService connects to an UserService at the specified network address. func DialUserService(network, addr string) (*UserServiceClient, *rpc.Client, error) { diff --git a/user.proto b/user.proto index 9de9437..729b243 100644 --- a/user.proto +++ b/user.proto @@ -82,4 +82,5 @@ service UserService { rpc getByUsername (UserInfoByUsername) returns (UserResponse); // 使用username查询用户 rpc getByUsercode (UserInfoByUsercode) returns (UserResponse); // 使用usercode查询用户 rpc bindThird (Request) returns (Response); // 绑定第三方账号 + rpc getThird(Request) returns (Response); // 查询第三方账号 } \ No newline at end of file