Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
        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", "解密", "解密消息失败!");
            }
        }