public void EncryptRequestMsgTest() { var xml = @"<xml> <MsgType>Text</MsgType> <Content><![CDATA[123]]></Content> <bizmsgmenuid><![CDATA[]]></bizmsgmenuid> <MsgId>637058302725818000</MsgId> <Encrypt><![CDATA[]]></Encrypt> <ToUserName><![CDATA[ToUserNameValue]]></ToUserName> <FromUserName><![CDATA[FromUserName(OpenId)]]></FromUserName> <CreateTime>1570204886</CreateTime> </xml>"; var token = "weixin"; var encodingAESKey = "YTJkZmVjMzQ5NDU5NDY3MDhiZWI0NTdiMjFiY2I5MmU"; var appId = "wx669ef95216eef885"; var timeStamp = SystemTime.NowTicks.ToString(); var nonce = (SystemTime.NowTicks * 2).ToString(); WXBizMsgCrypt msgCrype = new WXBizMsgCrypt(token, encodingAESKey, appId); var toUserName = "******"; string finalResponseXml = null, msgSigature = null; var ret = msgCrype.EncryptRequestMsg(xml, timeStamp, nonce, toUserName, ref finalResponseXml, ref msgSigature); Assert.AreEqual(0, ret); Console.WriteLine(finalResponseXml); Console.WriteLine(msgSigature); Console.WriteLine(); //进行解密 string decryptXml = null; ret = msgCrype.DecryptMsg(msgSigature, timeStamp, nonce, finalResponseXml, ref decryptXml); Assert.AreEqual(0, ret); Console.WriteLine(decryptXml); }
public ActionResult Index(string url, string token, RequestMsgType requestType, Event?eventType, bool testConcurrence, int testConcurrenceCount, bool testEncrypt, string encodingAESKey, string appId) { using (MemoryStream ms = new MemoryStream()) { var requestMessaageDoc = GetrequestMessaageDoc(/*url, token,*/ requestType, eventType); requestMessaageDoc.Save(ms); ms.Seek(0, SeekOrigin.Begin); string msgSigature = null; var timeStamp = SystemTime.NowTicks.ToString(); var nonce = (SystemTime.NowTicks * 2).ToString(); string encryptTypeAll = null; string openIdAll = null; //对请求消息进行加密 if (testEncrypt) { try { var openId = requestMessaageDoc.Root.Element("FromUserName").Value; var toUserName = requestMessaageDoc.Root.Element("ToUserName").Value; WXBizMsgCrypt msgCrype = new WXBizMsgCrypt(token, encodingAESKey, appId); string finalResponseXml = null; var ret = msgCrype.EncryptRequestMsg(requestMessaageDoc.ToString(), timeStamp, nonce, toUserName, ref finalResponseXml, ref msgSigature); if (ret == 0) { requestMessaageDoc = XDocument.Parse(finalResponseXml);//赋值最新的加密信息 openIdAll = $"openid={openId}"; encryptTypeAll = "&encrypt_type=aes"; } } catch (Exception ex) { var data = new { Success = false, LoadTime = "N/A", Result = "发生错误:" + ex.ToString() }; return(Json(data, new JsonSerializerSettings() { ContractResolver = new DefaultContractResolver() })); throw; } //Senparc.CO2NET.Trace.SenparcTrace.SendCustomLog("模拟测试-加密消息:", requestMessaageDoc?.ToString()); } var sigature = CheckSignature.GetSignature(timeStamp, nonce, token); url += url.Contains("?") ? "&" : "?"; url += $"signature={sigature}&timeStamp={timeStamp}&nonce={nonce}&msg_signature={msgSigature}{encryptTypeAll}{openIdAll}"; //参数如:signature=330ed3b64e363dc876f35e54a79e59b48739f567×tamp=1570075722&nonce=863153744&openid=olPjZjsXuQPJoV0HlruZkNzKc91E&encrypt_type=aes&msg_signature=71dc359205a4660bc3b3046b643452c994b5897d var dt1 = SystemTime.Now; try { dt1 = SystemTime.Now; if (testConcurrence) { //异步方法 testConcurrenceCount = testConcurrenceCount > 30 ? 30 : testConcurrenceCount;//设定最高限额 //模拟并发请求 List <Task <string> > taskList = new List <Task <string> >(); for (int i = 0; i < testConcurrenceCount; i++) { var task = TestAsyncTask(url, token, requestMessaageDoc, autoFillUrlParameters: false, index: i, sleepMillionSeconds: 0); taskList.Add(task); } Task.WaitAll(taskList.ToArray(), 1500 * 10); } else { //同步方法,立即发送 _responseMessageXml = MessageAgent.RequestXml(null, url, token, requestMessaageDoc.ToString(), autoFillUrlParameters: false); } if (string.IsNullOrEmpty(_responseMessageXml)) { _responseMessageXml = "返回消息为空,可能已经被去重。\r\nMsgId相同的连续消息将被自动去重。"; } var cache = CacheStrategyFactory.GetObjectCacheStrategyInstance(); var data = new { Success = true, LoadTime = SystemTime.DiffTotalMS(dt1, "f4"), Result = _responseMessageXml, CacheType = cache.GetType().Name, ConcurrenceCount = testConcurrenceCount }; return(Json(data, new JsonSerializerSettings() { ContractResolver = new DefaultContractResolver() })); } catch (Exception ex) { var msg = string.Format("{0}\r\n{1}\r\n{2}", ex.Message, null, ex.InnerException != null ? ex.InnerException.Message : null); return(Json(new { Success = false, Result = msg }, new JsonSerializerSettings() { ContractResolver = new DefaultContractResolver() })); } } }