C # Taobao mercancía Desarrollo de asistente de reembolso WeChat- (8) acoplamiento WeChat

Una serie de tutoriales: el principio del asistente de reembolso

Serie 2 de la serie de tutoriales: Asistente de reembolso Documentos abiertos y dirección de solicitud de cuenta

Tres directorios en la serie de tutoriales: Desarrollo del asistente de reembolso (1) Introducción a la API

Cuatro directorios en la serie de tutoriales: Desarrollo de asistente de reembolso (2) Cómo obtener la contraseña de Taobao para el contenido compartido por Taobao

Cinco directorios en la serie de tutoriales: Desarrollo de asistente de reembolso (3) Cómo convertir contraseñas a enlaces a través de API

Serie 6 de la serie de tutoriales: Desarrollo del asistente de reembolso (4) Si obtiene información de reembolso a través de la dirección resuelta por la contraseña de Taobao

Siete directorios en la serie de tutoriales: Desarrollo del asistente de reembolso (5) Cómo convertir la dirección del cupón en una contraseña Amoy

Ocho cursos en serie: acoplamiento de WeChat

Una serie de tutoriales de nueve directorios: escriba una página vue para copiar la contraseña

La
cuenta pública de WeChat se divide en un número de suscripción y un número público. Después de la prueba de blogger, si no hay información para solicitar el número público, la persona puede solicitar el número de suscripción en lugar del número de
suscripción. La interfaz se puede utilizar para responder automáticamente, pero el número de suscripción no se envía por sobres rojos, para obtener información del usuario, el número público Permisos para funciones como menús

Primero debemos obtener el APPID y APPSecrest de la cuenta pública WeChat desarrollada por WeChat
APPID y Secrest

También debe habilitar la configuración del servidor. La dirección del servidor es la dirección de la interfaz que acopla para recibir mensajes y procesos de WeChat. El
token es su contraseña personalizada. Cuando WeChat accede a su interfaz, debe devolver el token configurado aquí. La verificación de WeChat solo se ejecutará después de un acceso exitoso
Codificación La clave de cifrado AESKey WeChat se genera automáticamente después de abrir
Inserte la descripción de la imagen aquí

Luego se desarrolló en el programa, porque utilicé el proceso dll de Shengpai WeChat por conveniencia de la siguiente manera:
Instalar Shengpai dll

La cuenta pública de WeChat devuelve automáticamente no solo el APPID y APPsecret
sino también los siguientes parámetros
"Token": "Configure una contraseña personalizada usted mismo",
"EncodingAESKey": "Get on WeChat",
"AppId": "Get on WeChat",
" Appsecrest ":" Sube a WeChat "

Una vez completada la configuración, desarrollamos la
primera verificación de WeChat, porque solo la verificación de WeChat es exitosa y nos enviará el mensaje. El
código es el siguiente:

     public static readonly string Token = SiteConfig.GetSite("Token");//与微信公众账号后台的Token设置保持一致,区分大小写。
     public static readonly string EncodingAESKey = SiteConfig.GetSite("EncodingAESKey");//与微信公众账号后台的EncodingAESKey设置保持一致,区分大小写。
     public static readonly string AppId = SiteConfig.GetSite("AppId");//与微信公众账号后台的AppId设置保持一致,区分大小写。



        private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(WeixinController));
        /// <summary>
        /// 微信后台验证地址(使用Get),微信后台的“接口配置信息”的Url填写如:http://sdk.weixin.senparc.com/weixin
        /// </summary>
        [HttpGet]

        public object Get(string signature, string timestamp, string nonce, string echostr)
        {

            bool istrue = CheckSignature(signature, timestamp, nonce);
            if (istrue)
            {

                return echostr; //返回随机字符串则表示验证通过
            }
            else
            {
                log.Info("如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");
                return Content("如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。"); //返回随机字符串则表示验证不通过
            }
        }





        #region

        /// <summary>
        /// 验证微信签名
        /// </summary>
        /// <returns></returns>
        /// * 将token、timestamp、nonce三个参数进行字典序排序
        /// * 将三个参数字符串拼接成一个字符串进行sha1加密
        /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
        private bool CheckSignature(string signature, string timestamp, string nonce)
        {
            string access_token = Token;
            string[] ArrTmp = { access_token, timestamp, nonce };
            Array.Sort(ArrTmp);     //字典排序
            string tmpStr = string.Join("", ArrTmp);

            tmpStr = MD5Util.SHA1(tmpStr);
            if (tmpStr.ToLower() == signature)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        #endregion

Después de escribir la verificación de WeChat, es la interfaz para procesar los mensajes de WeChat: de la
siguiente manera:

   /// <summary>
        /// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML
        /// PS:此方法为常规switch判断方法,从v0.3.3版本起,此Demo不再更新
        /// </summary>
        [HttpPost]
        public object Post(string signature, string timestamp, string nonce, string echostr)
        {


            if (!CheckSignature(signature, timestamp, nonce))
            {
                return Content("参数错误!");
            }
            XDocument requestDoc = null;
            try
            {
                var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
                if (syncIOFeature != null)
                {
                    syncIOFeature.AllowSynchronousIO = true;
                }

                requestDoc = XDocument.Load(Request.Body);
                var requestMessage = RequestMessageFactory.GetRequestEntity(new DefaultMpMessageContext(), requestDoc);
                requestDoc.Save(ServerUtility.ContentRootMapPath("~/App_Data/" + SystemTime.Now.Ticks + "_Request_" + requestMessage.FromUserName + ".txt"));//测试时可开启,帮助跟踪数据
                ResponseMessageBase responseMessage = null;
                switch (requestMessage.MsgType)
                {
                    case RequestMsgType.Text://文字
                        {

                            var strongRequestMessage = requestMessage as RequestMessageText;
                            Dictionary<string, string> dic = new Dictionary<string, string>();
                            string resultmessage = "";
                            resultmessage = strongRequestMessage.Content;
                            if (resultmessage.Length <= 12)
                            {
                              
                                    var strongresponseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
                                    strongresponseMessage.Content = string.Format("你发送的消息是{0}", strongRequestMessage.Content);
                                    responseMessage = strongresponseMessage;

                                


                            }
                            else (resultmessage.Length >= 12)
                            {

                                try
                                {
                                 //返利信息处理查询代码
                                }
                                catch (Exception e)
                                {
                                    log.Info("Message"+e.Message);
                                    log.Info("InnerException" + e.InnerException.Message);
                                    var strongresponseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
                                    strongresponseMessage.Content = string.Format("此商品暂无优惠", strongRequestMessage.Content);
                                    responseMessage = strongresponseMessage;
                                }
                            }
                            //TODO:交给Service处理具体信息,参考/Service/EventSercice.cs 及 /Service/LocationSercice.cs
                            break;
                        }
                    case RequestMsgType.Location://位置
                        {
                            var strongRequestMessage = requestMessage as RequestMessageText;
                            var strongresponseMessage =
                                ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
                            strongresponseMessage.Content =
                                string.Format(
                                    "您刚才发送了位置信息,暂不支持位置信息",
                                    strongRequestMessage.Content);
                            responseMessage = strongresponseMessage;
                            break;
                        }
                    case RequestMsgType.Image://图片
                        {
                            //TODO:交给Service处理具体信息
                            var strongRequestMessage = requestMessage as RequestMessageImage;
                            var strongresponseMessage =
                                ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage);
                            strongresponseMessage.Articles.Add(new Article()
                            {
                                Title = "您刚才发送了图片信息",
                                Description = "您刚才发送了图片信息",
                                PicUrl = strongRequestMessage.PicUrl,
                                Url = "http://www.baidu.com"
                            });
                            responseMessage = strongresponseMessage;
                            break;
                        }
                    case RequestMsgType.Voice://语音
                        {
                            //TODO:交给Service处理具体信息
                            var strongRequestMessage = requestMessage as RequestMessageVoice;
                            var strongresponseMessage =
                               ResponseMessageBase.CreateFromRequestMessage<ResponseMessageMusic>(requestMessage);
                            strongresponseMessage.Music.MusicUrl = "http://sdk.weixin.senparc.com/Content/music1.mp3";
                            responseMessage = strongresponseMessage;
                            break;
                        }
                    case RequestMsgType.Event://事件
                        {
                            var strongRequestMessage = requestMessage as RequestMessageEvent;
                            var strongresponseMessage =
                                    ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
                            log.Info(JsonConvert.SerializeObject(strongRequestMessage));
                            switch (strongRequestMessage.EventName)
                            {
                                //关注
                                case "subscribe":
                                    strongresponseMessage.Content =
                                string.Format("感谢你关注我的微信号");
                                    responseMessage = strongresponseMessage;
                                    break;

                                //取消关注
                                case "unsubscribe":
                                    strongresponseMessage.Content =
                              string.Format("如果你有那些建议,请及时返回,我争取做得更好");
                                    responseMessage = strongresponseMessage;
                                    break;


                                //默认事件
                                default:
                                    break;
                            }
                            
                            break;
                        }
                    default:
                        throw new ArgumentOutOfRangeException();
                }
                var responseDoc = Senparc.NeuChar.Helpers.EntityHelper.ConvertEntityToXml(responseMessage);
                responseDoc.Save(ServerUtility.ContentRootMapPath("~/App_Data/" + SystemTime.Now.Ticks + "_Response_" + responseMessage.ToUserName + ".txt"));//测试时可开启,帮助跟踪数据

                return Content(responseDoc.ToString());
                //如果不需要记录responseDoc,只需要:
                //return Content(responseMessage.ConvertEntityToXmlString());
            }
            catch (Exception ex)
            {

                log.Info("Message:" + ex.Message);
                log.Info("InnerException:" + ex.InnerException.Message);
                return Content("");
            }
        }


Podemos ver que el evento de respuesta WeChat contiene información de texto, información de voz, información de imagen, información de ubicación e información de evento

La información del evento se divide en eventos de seguimiento, eventos de dejar de seguir, y los usuarios con menús personalizados también pueden tener eventos de clic de menú

Analizamos y procesamos diferentes tipos de información juzgando diferentes tipos de mensajes

Después de llegar aquí, solo necesita publicar en el servidor y configurarlo. La cuenta pública de WeChat responderá automáticamente de acuerdo con el código que escribió.

Publicado 29 artículos originales · Me gusta 11 · Visitas 10,000+

Supongo que te gusta

Origin blog.csdn.net/u010840685/article/details/105609723
Recomendado
Clasificación