开发工具:
文件大小: 247kb
下载次数: 0
上传时间: 2019-08-10
详细说明:NULL
博文链接:https://zzc1684.iteye.com/blog/2210478设置好这些后,检查通过后,我们就可以在自己微信应用服务器上进行消息的收发操作了
在回调的消息入口处,我们需要对P0Sˆ数据和普通的GET数据进行分开处理,GET数据是微信自身的验证处理,POST数据是微信消息、
的交互操作
//企业号回调信息接口。统一接收并处理信息的入口。
7/
public class corpapi : IhtTphandl
//处理企业号的信息
//// param
publicvoidprOcessrequest(httpcontexTcontext
上面我们定义了一个一般应用处理程序来对消息进行处理。
然后我们分开不同的消息类型(POST、GET方式),针对性的进行处理
if(httpcontexT.CurrentRequestHttpmethod.toUppero--"post")
g(Stream str
HlLpConilexu. Current Request. Inputstrear
Byte[] postBytes= new Byte[stream Length
stream Read (postBytes, 0,(Int32)stream Length)
postString= Encoding UTF8 GetString(postBytes
if(!string. IsNullOrEmpty(postString))
Execute(postString, account Info)
else
Auth(account Info)
2、微信回调消息的验证
下面是微信对于回调模式,验证URL的说明
验证URL有效性
当你提交以上信息时,企业号将发送GT请求到填写的URL上,GET请求携带四个参数,企业在获取时需要做 urldecode处理,否则
公验证不成功。
是否必
参数
描述
带
微信加密签名, msg signature结合了企业填写的 token、请求中的 timestamp
msg signature
nonce参数、加密的消息体
是
timestamp时间戳
是
nonce
随机数
是
加密的随机字符串,以 msg encrypt格式提供。需要解密并返回 echostr明文,首次校
echostr
解密后有 random、 msg_len、msg、 SCorpID四个字段,其中msg即为 echostr验时必
明文
带
仝业通过参数 msg signature对请求进行校验,如果确认此次GT请求来自全业号,那么企业应用对 echostr参数解密并原样返回
echostr明文(不能加引号),则接入验证生效,回调模式才能开启。
后续回调企业时都会在请求URL中带上以上参数( echose除外),校验方式与首次验证URL一致。
根据上面的说明,我们需要获取这些参数,然后调川微信提供的消息处理函数进行加解密处理
在验证RL的Auth( accounting);操作里面,我们可以看到核心的内容如下所示,就是获取到这些传递过来的参数信息,然后交给基
类处理消息的签名内容。
# region具体处理逻辑
string echostring= httPcontext. Current Request. Query String[ echostr ]
string signature= Ht tp Context. Current. Request. Querystring[" msg signature"];//企业号的
msg signature
stringtimestamp-httpcontext.CurrentRequestQuerystringltimeStamp"]
stringnonce=httpcontext.cUrrent.rEquest.Querystring["noncE"]
string decryptEchostring
if(new CorpBasicApi(. CheckSignature(token, signature, timestamp, nonce, corpId
encodingAESKey, echoString, ref decryptEchoString))
T'(!string Is NullOrEmpty(decryplEchoString))
Httpcontext. Current Response. Write(decryptechostring)
Httpcontext. Current Response Endo
fendregion
验证代码部门如下所小
///企业号配置的 Token< para
//< param name- SIgnature"签名内容 param>
/< param name=" times tamp")时间戳< param>
//< param name=" nonce"> nonce参数 param
/< param name- corpid">企业号ID标识 param>
//< param name=" encoding HeSKey">加密键内容字符串 pardon
//< param name=" retEchostr">返回的字符串 param>
////returns)
public bool CheckSignature(string token, string signature, string timestamp, string nonce, string corpId, string
encodingAESKey, string echostr, ref string retEchostr)
WXBizMsgCrypt wxcpt new WXBizMsgCrypt(token, encodingAESKey, corpid)
int result= wxcpt verifyuRl (signature, timestamp, nonce, echostr, ref retEchostr
if (result !0
LogTextHelper. Error( ERR: VerilyURL fail, reU
result)
return false
return true
3、企业号的消息处理
上面介绍了,微信企业号对URL的验证过程,还有另外一个消息处理过程,就是微信服务器把消息发送给我们自己的应用服务器进
行处理的过程,我们应用服务器需要在收到消息后,及时进行常规回复处理
也就是下面的代码逻辑。
if(httpconteXt.CurrentRequest.Httpmethod.TouppeRo==post")
using (stream stream Httpcontext. Current Request Inputstream)
Bytel postBytes-new Byte [stream Length
stream Read(postBytes, 0,(Int32)stream Length)
postString- Encoding UTF8 GetString(postBytes
if (!string Is NullOrEmpty (postString))
Execute(postString, accountInfo)
同样,我们给微信服务器回应消息的时候,我们也需要获得相应的参数,然后再行构造信息回答。
string echostring=httPcontext. Current Request. Querystringl echoStr1
stringsignature-httpcontext.cUrrent.Request.Querystring[msgsignature"];//1elkhlmsgsignature
stringtimestamp=httpcontext.cUrrent.Request.QUerystring["timEstamp"]
stringnonce=httpcontext.CurrentRequest.QUerystring["noncE"]
而另外一些参数信息,则是来源于我们企业号账号的配置参数。
//获取配置参数并对加解密函数初始化
string Corp Token=accountInfo. Token;
string AsKEy account Info. EncodingAeSkey
string CorpId= accounlInfo. CorplD;
然后使用微信提供的消息加解密类,就可以顺利对消息进行加解密的处理了。具体操作代码如下所示。
/根据参数信息,初始化微信对应的消息加密解密类
WXBizMsgCrypt wxcpt new WXBizMsgCrypt(CorpToken, AESKey, CorpId)
//对收到的密文进行解析处理
string sMsg="";//解析之后的明文
int flag= wxcpt DecryptMsg(signature, times tamp, nonce, postStr, ref sMsg)
if (flag == 0)
// LogTextHelper.Info("记录解密后的数据:")
// LogTextHelper.Info(sMsg);//记录解密后的数据
pApiDispatch dispatch= new CorpApiDispatcho)
string responseContent dispatch Execute(sMsg
//加密后并发送
//LogTextHelper Info(response Content)
string encryptResponse
timestamp- DateTime. Now DateTime(. ToString
wxcpt. EncryptMsg (response Content, timestamp, nonce, ref encryptResponse, ref signature)
Httpcontext. Current Response Content encoding = encodIng. Utf8
Httpcontext. Current Response. Write(encryptresponse)
se
LogTexthelper.Info("解密消息失败!");
最终,我们把解密完成的消息交给对应的封装类进行统一处理就可以了。
CorpapiDispatch dispatch new CorpApiDispatch()
string response Content=dispatch. Execute(sMsg
这样我们在企业号API的封装,就可以只需要关注消息如何应答的逻辑就可以了,其他的不用关心。
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.