以上是微信官方后台需要设置的,

以下是我们自己的程序页面对接配置的一些设置:

字段说明:

平台名称:看图片,关注公众号时显示的欢迎关注(平台名称)

APPID:这个必须和微信官网的一致

Appsecret:这个必须和微信官网的一致

Token:这个必须和微信官网的一致

授权域名:这个必须是微信官网设置的授权回调页面地址是一样的,

功能说明:这个就是关注公众号时显示的图文消息下的那几段话,

官方网址:这个就是点击关注公众号时显示的图文消息的跳转地址

关注时的图片:这个就是点击关注公众号时显示的图文消息的图片

处理方法:把字段信息保存到本地数据库,这里呢,我设置了两个,如果你关注了微信测试号本地测试时使用另外一个,真正的项目就切换到另外一个

设置好以后,还没有启用这个配置,只需点击一下设置默认(只是将状态更改为1而已)即可,随后,在页面调用的时候,调用微信服务类

代码如下:

  /// <summary>
/// 获取微信公众号的AppId
/// </summary>
public static string GetAppId()
{
//获取使用中的微信配置信息
WeChatConfigService wcf = new WeChatConfigService();
WeChatConfigInfo wcfInfo = wcf.GetWeChatConfigInfoByInUse();
if (wcfInfo != null)
{
return wcfInfo.wechat_AppId.ToString();
}
return null; ;
} /// <summary>
/// 获取微信公众号的AppSecret
/// </summary>
public static string GetAppSecret()
{
//获取使用中的微信配置信息
WeChatConfigService wcf = new WeChatConfigService();
WeChatConfigInfo wcfInfo = wcf.GetWeChatConfigInfoByInUse();
if (wcfInfo != null)
{
return wcfInfo.wechat_AppSecret.ToString();
}
return null; ;
} /// <summary>
/// 获取本地设置的Token
/// </summary>
public static string GetToken()
{
//获取使用中的微信配置信息
WeChatConfigService wcf = new WeChatConfigService();
WeChatConfigInfo wcfInfo = wcf.GetWeChatConfigInfoByInUse();
if (wcfInfo != null)
{
return wcfInfo.wechat_Token.ToString();
}
return null; ;
} /// <summary>
/// 获取网页授权域名
/// </summary>
public static string GetpostUrl()
{
//获取使用中的微信配置信息
WeChatConfigService wcf = new WeChatConfigService();
WeChatConfigInfo wcfInfo = wcf.GetWeChatConfigInfoByInUse();
if (wcfInfo != null)
{
return wcfInfo.wechat_PostUrl.ToString();
}
return null; ;
} /// <summary>
/// 获取通行证
/// </summary>
/// <returns></returns>
public string GetAccessToken()
{
//获取使用中的微信配置信息
WeChatConfigService wcf = new WeChatConfigService();
WeChatConfigInfo wcfInfo = wcf.GetWeChatConfigInfoByInUse();
string appid = "";
string secret = "";
if (wcfInfo != null)
{
//初始化微信配置信息
appid = wcfInfo.wechat_AppId.ToString();
secret = wcfInfo.wechat_AppSecret.ToString();
} string url_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret;
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
return content;
}

在项目的根目录或者特定的文件夹内,创建一个ashx文件(一般处理程序文件),如图

 public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain"; string postString = string.Empty;
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
{
using (Stream stream = HttpContext.Current.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, , (Int32)stream.Length);
postString = Encoding.UTF8.GetString(postBytes);
} if (!string.IsNullOrEmpty(postString))
{
ResponseXML(postString);//返回给微信用户信息
}  ///加载自定义菜单
                StringBuilder sb = new StringBuilder();
                sb.Append("{");
                sb.Append("\"button\":[ ");
                sb.Append("{ ");
                sb.Append("\"name\":\"好好学习\",");
                sb.Append("\"sub_button\":[");
                sb.Append("{ ");
                sb.Append("\"type\":\"click\",");
                sb.Append("\"name\":\"微学堂\", ");
                sb.Append("\"key\":\"weixuetang\"");
                sb.Append("},");
                sb.Append("{ ");
                sb.Append("\"type\":\"click\",");
                sb.Append("\"name\":\"大咖说\", ");
                sb.Append("\"key\":\"dakashuo\"");
                sb.Append("},");
                sb.Append("{ ");
                sb.Append("\"type\":\"click\",");
                sb.Append("\"name\":\"好书推荐\", ");
                sb.Append("\"key\":\"haoshutuijian\"");
                sb.Append("},");
                sb.Append("{ ");
                sb.Append("\"type\":\"click\",");
                sb.Append("\"name\":\"讲师风采\", ");
                sb.Append("\"key\":\"jiangshifengcai\"");
                sb.Append("}]");
                sb.Append("},");
                sb.Append("{");
                sb.Append("\"name\":\"天天向上\", ");
                sb.Append("\"sub_button\":[");
                sb.Append("{ ");
                sb.Append("\"type\":\"click\",");
                sb.Append("\"name\":\"看见\", ");
                sb.Append("\"key\":\"kanjian\"");
                sb.Append("},");
                sb.Append("{ ");
                sb.Append("\"type\":\"click\",");
                sb.Append("\"name\":\"撩我\", ");
                sb.Append("\"key\":\"liaowo\"");
                sb.Append("},");
                sb.Append("{ ");
                sb.Append("\"type\":\"view\",");
                sb.Append("\"name\":\"文化UP\", ");
                sb.Append("\"url\":\"https://open.weixin.qq.com/connect/oauth2/authorize?appid="+WeiXinServer.GetAppId().ToString()+"&redirect_uri=" + HttpUtility.UrlEncode(""+WeiXinServer.GetpostUrl().ToString()+"/wenhuaup/wenhua_home.aspx") + "&response_type=code&scope=snsapi_base&state=" + new Random().Next(1000, 200000).ToString() + "#wechat_redirect\"");
                sb.Append("},");
                sb.Append("{ ");
                sb.Append("\"type\":\"click\",");
                sb.Append("\"name\":\"萝卜快来\", ");
                sb.Append("\"key\":\"luobokuailai\"");
                sb.Append("}]");
                sb.Append("},");
                sb.Append("{");
                sb.Append("\"name\":\"员工自助\",");
                sb.Append("\"sub_button\":[");
                sb.Append("{ ");
                sb.Append("\"type\":\"click\",");
                sb.Append("\"name\":\"我的薪资\", ");
                sb.Append("\"key\":\"mysalary\"");
                sb.Append("},");
                sb.Append("{ ");
                sb.Append("\"type\":\"view\",");
                sb.Append("\"name\":\"个人中心\", ");
                sb.Append("\"url\":\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WeiXinServer.GetAppId().ToString() + "&redirect_uri=" + HttpUtility.UrlEncode(""+WeiXinServer.GetpostUrl()+"/UserLogin.aspx") + "&response_type=code&scope=snsapi_base&state=" + new Random().Next(1000, 200000).ToString() + "#wechat_redirect\"");
                sb.Append("},");
                sb.Append("{ ");
                sb.Append("\"type\":\"view\",");
                sb.Append("\"name\":\"在线提问\", ");
                sb.Append("\"url\":\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WeiXinServer.GetAppId().ToString() + "&redirect_uri=" + HttpUtility.UrlEncode(""+WeiXinServer.GetpostUrl()+"/UserCenter/question/MyQuestion.aspx") + "&response_type=code&scope=snsapi_base&state=" + new Random().Next(1000, 200000).ToString() + "#wechat_redirect\"");
                sb.Append("}]");
                sb.Append("}]");
                sb.Append("}");                 //自定义菜单token的获取 是用 下面的两个参数 获取的 不能直接用 公众平台的token
                string to = GetAccessToken();
                //本人不喜欢 后台 json的操作 直接截取就可以了 得到的就是 token 或者 自己 获取 json的token
                to = to.Substring(17, to.Length - 37);
                //加载菜单
                string i = GetPage("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + to, sb.ToString());
}
else
{
Auth(); //微信接入的测试
} }  /// <summary>
        /// 获取通行证
        /// </summary>
        /// <returns></returns>
        public string GetAccessToken()
        {
            string url_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + WeiXinServer.GetAppId().ToString() + "&secret=" + WeiXinServer.GetAppSecret().ToString();
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);
            myRequest.Method = "GET";
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
            string content = reader.ReadToEnd();
            reader.Close();
            return content;
        }/// <summary>
/// 加载菜单项
/// </summary>
/// <param name="p"></param>
/// <param name="postData"></param>
/// <returns></returns>
private string GetPage(string p, string postData)
{
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
request = WebRequest.Create(p) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
outstream = request.GetRequestStream();
outstream.Write(data, , data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
string err = ex.Message;
return string.Empty;
}
} /// <summary>
/// 获取参数进行认证
/// </summary>
private void Auth()
{
  string token = WeiXinServer.GetToken().ToString();//你申请的时候填写的Token,必须和微信上的保持一致 string echoString = HttpContext.Current.Request.QueryString["echoStr"];
string signature = HttpContext.Current.Request.QueryString["signature"];
string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
string nonce = HttpContext.Current.Request.QueryString["nonce"]; if (CheckSignature(token, signature, timestamp, nonce))
{
if (!string.IsNullOrEmpty(echoString))
{
HttpContext.Current.Response.Write(echoString);
HttpContext.Current.Response.End();
}
} }
/// <summary>
/// 对微信传入参数进行封装到数组,拼接字符串,进行加密操作
/// </summary>
/// <param name="token"></param>
/// <param name="signature"></param>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <returns></returns>
private bool CheckSignature(string token, string signature, string timestamp, string nonce)
{
string[] ArrTmp = { token, timestamp, nonce };//将参数放进数组 Array.Sort(ArrTmp);//对数组进行排序
string tmpStr = string.Join("", ArrTmp);//将数组进行拼接
///对拼接后的字符串进行加密操作
tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
//转换成小写形式
tmpStr = tmpStr.ToLower();
//比对成功返回
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
}  /// <summary>
        /// 点击关注平台后,主动发送给用户关注后的消息推送
        /// </summary>
        /// <param name="requestXML"></param>
        private void SendWelComeMsg(RequestXML requestXML)
        {
            String responseContent = String.Empty;             string newdate = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString();             string PUrlfileName = "";
            string companyName = "";
            string description = "";
            string companywebsite = "";             //获取使用中的微信配置信息
            WeChatConfigService wcf = new WeChatConfigService();
            WeChatConfigInfo wcfInfo = wcf.GetWeChatConfigInfoByInUse();
            if (wcfInfo != null)
            {
                //初始化微信配置信息
                PUrlfileName = WeiXinServer.GetpostUrl().ToString() + "/img/focus/" + wcfInfo.focus_Image.ToString();
                companyName = wcfInfo.wechat_Name.ToString();
                description = wcfInfo.description.ToString();
                companywebsite = wcfInfo.company_website.ToString();
            }             responseContent = string.Format(Message_News_Main, requestXML.FromUserName, requestXML.ToUserName, newdate, "1",
                string.Format(Message_News_Item, "欢迎关注" + companyName, description, PUrlfileName, companywebsite));             HttpContext.Current.Response.ContentType = "text/xml";
            HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
            HttpContext.Current.Response.Write(responseContent);
        }

asp.net微信开发第一篇----开发者接入的更多相关文章

  1. asp.net微信开发第二篇----消息应答

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上. 请注意: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接 ...

  2. asp.net微信开发第九篇----模板消息的使用

    微信平台的模板消息,使用起来非常好,效果如下: 和平时我们微信中关注信用卡官方微信,如果消费了,信用卡官方微信就返回一个模板消息给我们告知,余额还有多少,消费了多少. 使用的步骤,我只简单介绍了怎么使 ...

  3. iOS开发——高级技术精选&底层开发之越狱开发第一篇

    底层开发之越狱开发第一篇 做越狱开发也有一些时间了,有很多东西想总结一下,希望给他人一些借鉴,也是自己对过去开发经历的一些总结.个人不推荐使用盗版,这里主要以技术介绍为主. 这个系列里面主要介绍怎样进 ...

  4. 微信支付 第一篇 JSAPI 支付配置与获取 OpenID

    开通微信支付支付产品 首先要在微信支付申请成为 微信支付商户. 选择开通具体的支付产品 成为微信支付商户后在管理后台选择微信支付中的具体支付产品并申请开通如 JSAPI . 将支付商户与公众号关联 这 ...

  5. 使用delphi+intraweb进行微信开发1--微信平台接入

    示例代码已经放出!请移步使用delphi+intraweb进行微信开发1~4代码示例进行下载,虽为示例代码但是是从我项目中移出来的,封装很完备适于自行扩展和修改. iw14.0.50来了,在新的版本中 ...

  6. Android百度地图开发-第一篇:申请、搭建百度地图

    一.前言 这是第一篇关于Android使用百度地图的学习记录,主要记录: 1.在百度地图开发者平台上申请API Key. 2.在自己的应用中加入百度地图的Android版SDK. 3.在自己的应用中显 ...

  7. ASP.NET MVC3开发-数据库篇之CodeFisrt开发(一)

    本文讲述了在ASP.NET MVC3开发中M层使用Code Fisrt如何进行开发,由于作者对ASP.NET MVC3的学习不是很深,所以写的都是些基本的内容(写的如有不正确的地方请评论指正),适合初 ...

  8. asp.net 微信开发(二)

    本节我们主要讲解微信的调试: 前言:平时我们开发项目都是在本地就能进行项目的开发调试,但是在微信上就有难度了,因为微信的数据需要从微信服务器上面拿,所以就需要直接在网站上调试了,接下来就相关的一些个人 ...

  9. asp.net微信开发第五篇----用户分组管理

    上一篇已讲解到新建用户分组,移动用户到分组的功能,这一章主要讲解修改分组名称和删除分组 开发者可以使用接口,对公众平台的分组进行查询.创建.修改.删除等操作,也可以使用接口在需要时移动用户到某个分组. ...

随机推荐

  1. python中函数的默认参数陷阱问题

    其实也不能说是陷阱,只是一个不容易注意到的地方,尤其是有其他java/c++类编程语言经验的人员,这里涉及到python的一个特点,所以笔者说是陷阱只是一个噱头而已. def test(item, b ...

  2. iOS App转让流程

    说法一: (1)选择转让APP (2)进入转让界面       点击Continue进入下一步   (3)输入对方的APP ID和Team ID     Apple ID 和 Team ID 可以在m ...

  3. 谈谈依赖注入DI

    控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入 ...

  4. 转:一些MongoDB限制

    文章来自于:http://www.infoq.com/cn/news/2013/11/mongodb-things 消耗磁盘空间 这是我的第一个困惑:MongoDB会消耗太多的磁盘空间了.当然了,这与 ...

  5. 程序自动生成Dump文件()

    前言:通过drwtsn32.NTSD.CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD.CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD.CDB等调试工具.了解了 ...

  6. Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0

    如果遇到这个问题,首先考虑以下原因: 你是否在setText()方法中设置了一个int型变量,比如setText(10). 这样Android系统就会主动去资源文件当中寻找, 但是它不是一个资源文件I ...

  7. POJ2632 Crashing Robots(模拟)

    题目链接. 分析: 虽说是简单的模拟,却调试了很长时间. 调试这么长时间总结来的经验: 1.坐标系要和题目建的一样,要不就会有各种麻烦. 2.在向前移动过程中碰到其他的机器人也不行,这个题目说啦:a ...

  8. Spark RDD Union

    示例   Spark多个RDD(数据格式相同)“组合”为一个RDD   代码   from pyspark import SparkConf, SparkContext conf = SparkCon ...

  9. WCF默认实例的解读

    一:图片 IService1.cs是定义的接口,包含对Service.方法和方法用的类的声明的声明 Service1.cs是对接口的实现,包含实现的方法 代码注释: using System; usi ...

  10. GruntJs安装及使用入门(自定义grunt任务,合并压缩js、css)

    一.Grunt.js简介(实现自动化) 1)简要说明: 1.GruntJs是基于node的javascript命令行工具,可以自动化构建.测试.生成文档的项目管理工具: 2.使用GruntJs可以自动 ...