zoukankan      html  css  js  c++  java
  • 微信是个坑货1-接入

    代码逻辑

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.Security;
    using wxPlatForm;
    using System.IO;
    using System.Text;
    using System.Xml;
    using wxPlatForm.models;
    using wxPlatForm.enums;
    
    
    namespace wxweb
    {
        /// <summary>
        /// API 的摘要说明
        /// </summary>
        public class API : IHttpHandler, IRequiresSessionState
        {
            const string access_token = "Wuyx201801";
            public void ProcessRequest(HttpContext context)
            {          
                context.Response.ContentType = "text/plain";
                if (context.Request.HttpMethod.ToLower() == "post")
                {
                    //回复消息的时候也需要验证消息,这个很多开发者没有注意这个,存在安全隐患  
                    //微信中 谁都可以获取信息 所以 关系不大 对于普通用户 但是对于某些涉及到验证信息的开发非常有必要
                    if (wxPlatForm.wxtoken.checkWX.CheckSignature(access_token))
                    {
                        //接收消息
                        ReceiveXml();
                    }
                    else
                    {
                        HttpContext.Current.Response.Write("消息并非来自微信");
                        HttpContext.Current.Response.End();
                    }
                }
                else
                {
                    wxPlatForm.wxtoken.checkWX.CheckWechat(access_token);
                }
            }
    
            #region 接收消息
            /// <summary>
            /// 接收微信发送的XML消息并且解析
            /// </summary>
            private void ReceiveXml()
            {
                try
                {
                    //BaseMessage bm = wxPlatForm.WxRequest.Load(new EnterParam { IsAes = false, token = "", appid = "", EncodingAESKey = "" });
    
                    Stream requestStream = System.Web.HttpContext.Current.Request.InputStream;
                    byte[] requestByte = new byte[requestStream.Length];
                    requestStream.Read(requestByte, 0, (int)requestStream.Length);
                    string requestStr = Encoding.UTF8.GetString(requestByte);
                  //至此已经获取到微信服务器发送到当前公众号的信息,下面的操作将根据个人需求继续展开
                
                }
                catch (Exception ex) {
                    common.CommonMethod.WriteTxt(ex.Message);//记录错误信息
                }
            }
            #endregion
    
          
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    微信接入文件
     /// <summary>
            /// 返回随机数表示验证成功
            /// </summary>
            public static void CheckWechat(string access_token)
            {
                if (string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["echoStr"]))
                {
                    HttpContext.Current.Response.Write("消息并非来自微信");
                    HttpContext.Current.Response.End();
                }
                string echoStr = HttpContext.Current.Request.QueryString["echoStr"];
                if (CheckSignature(access_token))
                {
                    HttpContext.Current.Response.Write(echoStr);
                    HttpContext.Current.Response.End();
                }
            }
    
            /// <summary>
            /// 验证微信签名
            /// </summary>
            /// <returns></returns>
            /// * 将token、timestamp、nonce三个参数进行字典序排序
            /// * 将三个参数字符串拼接成一个字符串进行sha1加密
            /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
            public static bool CheckSignature(string access_token)
            {
    
    
                string signature = HttpContext.Current.Request.QueryString["signature"].ToString();
                string timestamp = HttpContext.Current.Request.QueryString["timestamp"].ToString();
                string nonce = HttpContext.Current.Request.QueryString["nonce"].ToString();
                string[] ArrTmp = { access_token, timestamp, nonce };
                Array.Sort(ArrTmp);     //字典排序
                string tmpStr = string.Join("", ArrTmp);
                tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
    
                if (tmpStr.ToLower() == signature)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    微信接入文件-调用

    公众号后台配置

    服务器配置:填写已发布的项目路径

    令牌:即API.ashx页面中的access_token参数,两个需要一致

    密匙:随机产生

    消息加密方式:暂时可以使用“明文模式”

    服务器配置

    1.如果有已经备案过的域名并且可以访问的服务器,那是最好不过的了,直接将程序发布到指定域名下就可以了。

    2.个人测试的话,需要借助第三方的工具来进行测试了,个人选用的花生壳。

      花生壳开通内网穿透功能,并且与自己的电脑进行绑定。

  • 相关阅读:
    新男人八题---AStringGame
    hihocoder1457
    SPOJ
    后缀自动机
    牛客练习赛13D
    Educational Codeforces Round 38
    Binary Differences
    laravel 带条件的分页查询
    url添加时间戳
    安卓无法上传照片
  • 原文地址:https://www.cnblogs.com/eye-like/p/9275062.html
Copyright © 2011-2022 走看看