/// <summary> /// 加密消息 /// </summary> /// <param name="token"></param> /// <param name="encodingAESKey"></param> /// <param name="corpId"></param> /// <param name="replyMsg"></param> /// <param name="timeStamp"></param> /// <param name="nonce"></param> /// <returns></returns> public static string EncryptMsg(string token, string encodingAESKey, string corpId, string replyMsg, string timeStamp, string nonce) { WXBizMsgCrypt crypt = new WXBizMsgCrypt(token, encodingAESKey, corpId); string encryptMsg = null; var result = crypt.EncryptMsg(replyMsg, timeStamp, nonce, ref encryptMsg); return(encryptMsg); }
/// <summary> /// 检查签名 /// </summary> /// <param name="token"></param> /// <param name="encodingAESKey"></param> /// <param name="corpId"></param> /// <param name="msgSignature">签名串,对应URL参数的msg_signature</param> /// <param name="timeStamp">时间戳,对应URL参数的timestamp</param> /// <param name="nonce">随机串,对应URL参数的nonce</param> /// <param name="echoStr">随机串,对应URL参数的echostr</param> /// <returns></returns> public static string VerifyURL(string token, string encodingAESKey, string corpId, string msgSignature, string timeStamp, string nonce, string echoStr) { WXBizMsgCrypt crypt = new WXBizMsgCrypt(token, encodingAESKey, corpId); string replyEchoStr = null; var result = crypt.VerifyURL(msgSignature, timeStamp, nonce, echoStr, ref replyEchoStr); if (result == 0) { //验证成功,比较随机字符串 return(replyEchoStr); } else { //验证错误,这里可以分析具体的错误信息 return(null); } }
private void Execute(string postStr) { var echoString = HttpContext.Current.Request.QueryString["echoStr"]; var msgSignature = HttpContext.Current.Request.QueryString["msg_signature"];//企业号的 msg_signature var timestamp = HttpContext.Current.Request.QueryString["timestamp"]; var nonce = HttpContext.Current.Request.QueryString["nonce"]; //根据参数信息,初始化微信对应的消息加密解密类 var wxcpt = new WXBizMsgCrypt(Signature.Token, Signature.EncodingAESKey, Signature.CorpId); var sMsg = ""; // 解析之后的明文 var flag = wxcpt.DecryptMsg(msgSignature, timestamp, nonce, postStr, ref sMsg); if (flag == 0) { //LogTextHelper.Info("记录解密后的数据:"); DataSubmit("0DDD001", "解密", "解密:" + sMsg); try { var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(sMsg); var rootElement = xmlDoc.DocumentElement; if (rootElement == null) { return; } var selectSingleNode = rootElement.SelectSingleNode("ToUserName"); if (selectSingleNode != null) { var toUserName = selectSingleNode.InnerText; var fromUserName = rootElement.SelectSingleNode("FromUserName").InnerText; var eventKey = rootElement.SelectSingleNode("EventKey").InnerText; #region scan_store_1 if (eventKey.Equals("scan_store_1")) { var psa = new ProStoreAdapter(); var storesummary = psa.GetProStoreSummary(); var xmlMsg = @"<xml><ToUserName><![CDATA[" + fromUserName + @"]]></ToUserName> <FromUserName><![CDATA[" + toUserName + @"]]></FromUserName> <CreateTime>1441848212</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[" + storesummary + @"]]></Content> <MsgId>4385226390207725595</MsgId> <AgentID>1</AgentID> </xml>"; DataSubmit("0DDD001", "发送", "发送:" + xmlMsg); //加密后并发送 //LogTextHelper.Info(responseContent); string encryptResponse = ""; wxcpt.EncryptMsg(xmlMsg, timestamp, nonce, ref encryptResponse); HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.Write(encryptResponse); DataSubmit("0DDD002", "发送", "发送:" + encryptResponse); } #endregion #region scan_store_0 else if (eventKey.Equals("scan_store_0")) { var sResult = rootElement.SelectSingleNode("ScanCodeInfo").ChildNodes[1].InnerText; if (sResult.Contains(",")) { sResult = sResult.Substring(sResult.IndexOf(',') + 1, sResult.Length - sResult.IndexOf(',') - 1); } var psa = new ProStoreAdapter(); var gR = psa.AddProStore(sResult, fromUserName); var xmlMsg = @"<xml><ToUserName><![CDATA[" + fromUserName + @"]]></ToUserName> <FromUserName><![CDATA[" + toUserName + @"]]></FromUserName> <CreateTime>1441848212</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[" + gR + @"]]></Content> <MsgId>4385226390207725595</MsgId> <AgentID>1</AgentID> </xml>"; DataSubmit("0DDD001", "发送", "发送:" + xmlMsg); //加密后并发送 //LogTextHelper.Info(responseContent); string encryptResponse = ""; wxcpt.EncryptMsg(xmlMsg, timestamp, nonce, ref encryptResponse); HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.Write(encryptResponse); DataSubmit("0DDD002", "发送", "发送:" + encryptResponse); } #endregion #region scan_delivery_1 if (eventKey.Equals("scan_delivery_1")) { var pda = new ProDeliveryAdapter(); var deliverysummary = pda.GetProDeliverySummary(); var xmlMsg = @"<xml><ToUserName><![CDATA[" + fromUserName + @"]]></ToUserName> <FromUserName><![CDATA[" + toUserName + @"]]></FromUserName> <CreateTime>1441848212</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[" + deliverysummary + @"]]></Content> <MsgId>4385226390207725595</MsgId> <AgentID>1</AgentID> </xml>"; DataSubmit("0DDD001", "发送", "发送:" + xmlMsg); //加密后并发送 //LogTextHelper.Info(responseContent); string encryptResponse = ""; wxcpt.EncryptMsg(xmlMsg, timestamp, nonce, ref encryptResponse); HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.Write(encryptResponse); DataSubmit("0DDD002", "发送", "发送:" + encryptResponse); } #endregion #region scan_delivery_0 else if (eventKey.Equals("scan_delivery_0")) { var sResult = rootElement.SelectSingleNode("ScanCodeInfo").ChildNodes[1].InnerText; if (sResult.Contains(",")) { sResult = sResult.Substring(sResult.IndexOf(',') + 1, sResult.Length - sResult.IndexOf(',') - 1); } var psa = new ProDeliveryAdapter(); var gR = psa.AddProDelivery(sResult, fromUserName); var xmlMsg = @"<xml><ToUserName><![CDATA[" + fromUserName + @"]]></ToUserName> <FromUserName><![CDATA[" + toUserName + @"]]></FromUserName> <CreateTime>1441848212</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[" + gR + @"]]></Content> <MsgId>4385226390207725595</MsgId> <AgentID>1</AgentID> </xml>"; DataSubmit("0DDD001", "发送", "发送:" + xmlMsg); //加密后并发送 //LogTextHelper.Info(responseContent); string encryptResponse = ""; wxcpt.EncryptMsg(xmlMsg, timestamp, nonce, ref encryptResponse); HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.Write(encryptResponse); DataSubmit("0DDD002", "发送", "发送:" + encryptResponse); } #endregion } } catch (Exception ex) { DataSubmit("04", "发送", "发送消息失败!"); } } else { DataSubmit("05", "解密", "解密消息失败!"); } }