【微信公众号】将微信公众号消息里的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":"",
"MsgType":"text",
"Content":"李建华测试",
"MsgId":""
}
因为以前的网站分享业务使用的是另一套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 != )
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 ( != wxUserInfo.Errcode)
throw new JSJException("拉取用户微信信息异常,错误码:" + wxUserInfo.Errcode + ",错误信息:" + wxUserInfo.Errmsg); if (wxUserInfo.Subscribe != )
{
resp.ViewType = ;
throw new JSJException("您还没有关注空铁管家<i>长按识别关注,即可领取</i>");
}
最终获取到了如下数据
{"subscribe":,"openid":"oeQDZt0n4VCZ70wykBlGpANiXqdM","nickname":"背上吉他去旅行","sex":,"language":"zh_CN","city":"昌平",
"province":"北京","country":"中国",
"headimgurl":"http:\/\/wx.qlogo.cn\/mmopen\/kBwGJuwqK95jdsBeGnNrSn9GVUib491JqY8zlzEOLa920YACUUkJXLLDpVYlpMouRl2RA6vv9ibVUEpgFE90LH3b3uj7AYRjZP\/0",
"subscribe_time":,"unionid":"oGCG8t5SeisHItMA6sMUO0jPQTPw","remark":"","groupid":,"tagid_list":[]}
直观查看如下:

这里我们就取到了想要的UnionID,但是回复公众号消息的时候还是需要用OpenID去回复的,所以需要将对应关系记录在数据库里,以便下次快速获取。
搞定!
【微信公众号】将微信公众号消息里的FromUserName即OpenID转成UnionID的更多相关文章
- C#开发微信门户及应用(27)-公众号模板消息管理
通过模板消息接口,公众号能向关注其账号的用户发送预设模板的消息.模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消 ...
- C#开发微信公众号.NET平台MVC微信开发Demo解决收不到消息的问题
不得不说现在微信非常火,微信开放平台可以自己写程序跟用户交互,节省了前台开发成本,免去用户装客户端的烦恼.于是今天兴致来潮,想做一个试试. 首先找到了开发者文档,看了看,蛮简单的.(公众号早已申请,有 ...
- 使用flask搭建微信公众号:接收与回复消息
token验证的意义 在看了别人的代码之后对token加密有了些理解了.但又觉得很鸡肋.第一次验证服务器的时候我在那弄了半天的验证其实不写也可以验证成功,只要直接返回echostr这个字段就行了.微信 ...
- 微信公众号实现无限制推送模板消息!可向指定openID群发
微信认证的服务号才有推送模板消息接口所以本文需要在认证服务号的情况下学习 以上就是模板消息,只有文字和跳转链接,没有封面图.在服务号的后台添加功能插件-模板消息即可. 模板消息,都是在后台选择一个群发 ...
- 微信小程序结合微信公众号进行消息发送
微信小程序结合微信公众号进行消息发送 由于小程序的模板消息已经废弃了,官方让使用订阅消息功能.而订阅消息的使用限制比较大,用户必须得订阅.需要获取用户同意接收消息的权限.用户必须得和小程序有交互的时候 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...
- C#开发微信门户及应用(26)-公众号微信素材管理
微信公众号最新修改了素材的管理模式,提供了两类素材的管理:临时素材和永久素材的管理,原先的素材管理就是临时素材管理,永久素材可以永久保留在微信服务器上,微信素材可以在上传后,进行图片文件或者图文消息的 ...
- [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- 微信硬件平台(一) 公众号 ESP8266 Arduino LED
微信硬件平台 本文目的,使用微信公众号控制ESP8266的LED开和关.进一步使用微信当遥控器(避免写APP或者IOS或者小程序),控制一切设备.给两个关键的总教程参考. 官网教程 微信硬件平台 微 ...
随机推荐
- 最新xgboost python32位下安装xgboost
网上很多windows python下安装xgboost都是很简单的几步无非是visual studio2013以上版本编译,安装.但现在最新的xgboost已经移除了c++工程文件,找到旧版本的也多 ...
- 完美让IE兼容input placeholder属性的jquery实现
调用时直接引用jquery与下面的js就行了,相对网上的大多数例子来说,这个是比较完美的方案. /* * 球到西山沟 * http://www.cnzj5u.com * 2014/11/26 12:1 ...
- spring + maven +testng 测试常见依赖包问题
java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource解决方法:添加缺少的jar包:commons-coll ...
- 设置session的生命周期(php)
PHP中,Session变量保存在服务器端(默认以文件格式保存),而Session ID以cookie形式保存在客户端. 销毁session的方法有2种 第一种是通过程序 session_destor ...
- wndows常用命令
1. 远程桌面 mstsc (Microsoft terminal services client)
- TC2.0中怎样调用汇编程序
转载于: TC2.0中怎样调用汇编程序 一.概述 TC是美国BORLAND 公司在IBM PC机上开发的一个高效.优化的C编译程序,它自带高效的全屏幕编辑程序,在集成开发环境下可支持编辑.编译.连接调 ...
- iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加 ...
- 发送邮件(E-mail)方法整理合集
在IOS开发中,有时候我们会需要用到邮件发送的功能.比如,接收用户反馈和程序崩溃通知等等.其实这个功能是很常用的,因为我目前就有发送邮件的开发需求,所以顺便整理下IOS发送邮件的方法. IOS原生自带 ...
- ubuntu wubi安装注意事项
从这个镜像下载 http://mirrors.163.com/ubuntu-releases/12.10/ ubuntu-12.10-desktop-amd64.iso 和 wubi.exe然后放到同 ...
- Java吸收换行符
今天做题遇到的-- 由于读入的字符串可能包含空格,所以采用nextLine. int n = sc.nextInt(); for(int i=0; i<n; i+ ...