【微信公眾號】將微信公眾號消息里的FromUserName即OpenID轉成UnionID


最近在調試微信公眾號開發者模式,處理公眾號消息,收到如下回調消息內容

<xml><ToUserName><![CDATA[gh_29********21]]></ToUserName>
<FromUserName><![CDATA[o*****4-7Z**************s]]></FromUserName>
<CreateTime>1481769005</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[李建華測試]]></Content>
<MsgId>6364149417119100008</MsgId>
</xml>

轉成對象如下

{
    "ToUserName":"gh_29********1",
    "FromUserName":"oy****j4-7Z**********ys",
    "CreateTime":"1481769005",
    "MsgType":"text",
    "Content":"李建華測試",
    "MsgId":"6364149417119100008"
}

因為以前的網站分享業務使用的是另一套AppID,同一個用戶在不同的AppID里獲取到的OpenID是不同的,但是為了業務上的統一,准備都全部采用UnionID來作為用戶唯一標識,所以需要將消息體中的FromUserName,也就是OpenID轉成UnionID存儲記錄。以下是操作步驟:

1、獲取Access_Token

                    var url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + 
              AirwayKeeperModel.MPAppID + "&secret=" + AirwayKeeperModel.MPAppSecret; var getToken = KTHttpRequest._Get(url); var access_token = Newtonsoft.Json.JsonConvert.DeserializeObject<WxAccessTokenModel>(getToken); if (access_token == null) throw new JSJException("獲取token返回null"); if (access_token.Errcode != 0) throw new JSJException("獲取token異常,錯誤碼:" + access_token.Errcode + ",錯誤信息:" + access_token.Errmsg);

2、拉取用戶信息

                    url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token.AccessToken +
                           "&openid=" + req.OpenID.Trim() + "&lang=zh_CN";
                    var wxUserInfoJson = KTHttpRequest._Get(url);
                    var wxUserInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<WxUserModel>(wxUserInfoJson);
                    if (null == wxUserInfo)
                        throw new JSJException("拉取用戶微信信息返回null");

                    if (0 != wxUserInfo.Errcode)
                        throw new JSJException("拉取用戶微信信息異常,錯誤碼:" + wxUserInfo.Errcode + ",錯誤信息:" + wxUserInfo.Errmsg);

                    if (wxUserInfo.Subscribe != 1)
                    {
                        resp.ViewType = 1;
                        throw new JSJException("您還沒有關注空鐵管家<i>長按識別關注,即可領取</i>");
                    }

最終獲取到了如下數據

{"subscribe":1,"openid":"oeQDZt0n4VCZ70wykBlGpANiXqdM","nickname":"背上吉他去旅行","sex":1,"language":"zh_CN","city":"昌平",

"province":"北京","country":"中國",

"headimgurl":"http:\/\/wx.qlogo.cn\/mmopen\/kBwGJuwqK95jdsBeGnNrSn9GVUib491JqY8zlzEOLa920YACUUkJXLLDpVYlpMouRl2RA6vv9ibVUEpgFE90LH3b3uj7AYRjZP\/0",

"subscribe_time":1474964999,"unionid":"oGCG8t5SeisHItMA6sMUO0jPQTPw","remark":"","groupid":0,"tagid_list":[]}

直觀查看如下:

這里我們就取到了想要的UnionID,但是回復公眾號消息的時候還是需要用OpenID去回復的,所以需要將對應關系記錄在數據庫里,以便下次快速獲取。

 搞定!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM