C#微信公众号关注二维码生成、密文方式
文章说明:是公众号使用自己服务器的处理的其中一篇关注二维码信息处理
1、流程
1.1 需知
全局返回码:这个必须要哦。不然调试的时候接口出的错误怎么处理呢。
(闲话:博客的随笔只能添加也给超链呀,🤦。不过找到办法了,麻烦了点)
设置公众号的处理服务器(这里指的是你自己的服务器)
服务器接收需要域名哦。不能用ip
1.2 获取基本信息
appid:开发者ID
secret:开发者密码(AppSecret)
EncodingAESKey:解密的时候需要用到的
access_token:接口调用凭证,有效期为2小时,也就是7200秒。
获取方式:根据appid和secret获取的临时token。调用方式如 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}
expires_time:调用凭证有效期。诺,就上面是7200秒
获取方式:诺,上面这个链接返回的信息
1.3 搭建
-----------------前端begin--------------------------------------------------------------------------------------------------
一、先获取access_token。保存下,7200秒后刷新,代码在别的文章中贴入
二、生成关注的二维码。使用https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}
三、qrcode/create 返回的信息,
错误信息:{"errcode":40001,"errmsg":"invalid credential, access_token is inv..}
正确信息:{”ticket“:"gQHZ7zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbO9xLzAyZZJpZUji3YNhdV8xcnBiN2h2MVkAAgSBiUdfAwRYAgAA"} //一大串
四、拿到ticket后使用链接拼接参数直接得到图片。 https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=一大串。
五、页面<img src="四中的链接">得到图片,就可以扫描关注公众号了。
-----------------前端end--------------------------------------------------------------------------------------------------
-----------------后端begin--------------------------------------------------------------------------------------------------
前言:微信公众号返回的信息是用post方式返回xml
写这玩意,postman的这种接口工具还是得有吧。
一、本帝是用ashx接收的。这玩意必须得每一步加日志,不然贼坑。代码别的文章贴
二、开始解说代码。获取请求类型HttpContext.Current.Request.HttpMethod,做个初步筛选。
加个日志,log+="\r\n请求类型:post";log+="\r\n请求时间:"+datetime.now.tostring()
三、获取下传输类型(这个地方不做类型筛选也行,做了筛选感觉安全点,哈哈)
log += "传输类型:" + context.Request.ContentType;
//微信用的传输类型是text/xml postman工具用的是application/xml
(闲话:这里贼坑哥哥我一点时间,giao,还好我写上日志测)
四、读取数据
Stream stream = context.Request.InputStream读取就不说了
log += "读到密文了:" +postdata;
(密文的格式xml:两个节点。ToUserName和Encrypt
ToUserName:自个的appid
Encrypt:这个当然是密文啦)
五、密文解析。在后面的这个链接中 我是密文示例链接 搜索示例下载。可以下载官方解密示例(包括 PHP、Java、C++、Python、C#)
解密示例:要用到token(自己设置的那个)、appid、EncodingAESKey(这个老哥终于有用处了)
调用c#示例(其他语言示例我不知道)中的WXBizMsgCrypt。
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sAppID);
int ret = wxcpt.DecryptMsg(密文, ref sMsg);
sMsg就是解密后的明文啦。(明文不是铭文,王者中毒的可以回过神来了)
加个日志;log+="/r/n明文:"+sMsg;
六、得到明文后,还是xml嘛——>解析成类嘛——>类的结构参照后面链接,或者xml的明文结构。得到,看下链接中的文档中关注/取消关注事件,我是事件链接
Event参数。判断是关注的,还是未关注。然后就是业务处理
七、我是信息返回文档链接 。信息返回。如果不想返回任何信息的话,直接HttpContext.Current.Response.Write("");
有信息的话。
注意事项:①先拼接xml,最好拼接,拼接,因为快速便捷。避免了xml的转换自带头信息,xml头信息处理了也行。
②回复的ToUserName和FromUserName和接收的ToUserName、FromUserName不一样。翻译下就是:ToUserName(接收者)、FromUserName(发送者)
接收的ToUserName:自个的appid
接收的FromUserName:用户的openid
回复的ToUserName:要回复给谁的,用户的openid
回复的FromUserName:自个的appid
-----------------后端end--------------------------------------------------------------------------------------------------
作者:博客园-兮去