zoukankan      html  css  js  c++  java
  • 微信开发(一)-配置环境并发送文本信息

    1.到万网申请免费主机

    01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    11

    12

    13

    14

    15

    16

    17

    2.登录微信公众平台

    image

    安装新手开发说明,一步一步看下去

    第一步:填写服务器配置,就是刚才从万网上申请来的

    Token自己随便取

    为了方便测试加密方式选择明文模式

    image

    第二步,验证服务器的地址的有效性

    image

    #region 1.0验证消息的真实性 - private void ValidateUrl()
    private void ValidateUrl()
    {
        #region 获取微信服务器Get发送过来的四个参数
        //开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
        HttpContext context = HttpContext.Current;
        //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
        string signature = context.Request.QueryString["signature"];
        //时间戳
        string timestamp = context.Request.QueryString["timestamp"];
        //随机数
        string nonce = context.Request.QueryString["nonce"];
        //随机字符串
        string echostr = context.Request.QueryString["echostr"];
        #endregion
    
        #region 加密/校验来自微信服务器的请求
        string token = "Kim2015";//必须跟公共账号上的一致
        //1. 将token、timestamp、nonce三个参数进行字典序排序
        string[] temp1 = { token, timestamp, nonce };
        Array.Sort(temp1);
    
        //2. 将三个参数字符串拼接成一个字符串进行sha1加密
        string temp2 = string.Join("", temp1);
        string temp3 = FormsAuthentication.HashPasswordForStoringInConfigFile(temp2,
            FormsAuthPasswordFormat.SHA1.ToString());
        //3. 若确认此次GET请求来自微信服务器,请原样返回echostr参数内容
        if (temp3.ToLower().Equals(signature))
        {
            context.Response.Write(echostr);
        }
        #endregion

    注意验证请求时,http发送的方式是get请求

    下面来试试接收文本消息的要求

    image

    以及回复文本消息的要求

    image

    #region 2.0接收并处理文本信息 - private void HandleTextMsg()
    private void HandleTextMsg()
    {
        #region 接收微信服务器POST发送过来的xml数据包
        /*
         <xml>
        <ToUserName><![CDATA[toUser]]></ToUserName>
        <FromUserName><![CDATA[fromUser]]></FromUserName> 
         <CreateTime>1348831860</CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[this is a test]]></Content>
        <MsgId>1234567890123456</MsgId>
         </xml>
         */
        HttpContext context = HttpContext.Current;
        //接收xml数据包
        Stream xmlStream = context.Request.InputStream;
        //构造xml对象
        XmlDocument doc = new XmlDocument();
        doc.Load(xmlStream);
        //获取根节点
        XmlElement rootElement = doc.DocumentElement;
        //解析xml数据
        string toUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
        string fromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
        string createTime = rootElement.SelectSingleNode("CreateTime").InnerText;
        string msgType = rootElement.SelectSingleNode("MsgType").InnerText;
        string content = rootElement.SelectSingleNode("Content").InnerText;
        string msgId = rootElement.SelectSingleNode("MsgId").InnerText;
        
        #endregion
    
        #region 解析xml数据包,并按照一定格式返回
        /*
         <xml>
        <ToUserName><![CDATA[toUser]]></ToUserName>
        <FromUserName><![CDATA[fromUser]]></FromUserName>
        <CreateTime>12345678</CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[你好]]></Content>
        </xml>
         */
    
        string xmlMsg = "<xml>" +
                        "<ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>" +
                        "<FromUserName><![CDATA[" + toUserName + "]]></FromUserName>" +
                        "<CreateTime>" + GetCreateTime() + "</CreateTime>" +
                        "<MsgType><![CDATA[text]]></MsgType>" +
                        "<Content><![CDATA[“很高兴认识你”]]></Content>" +
                        "</xml>";
        context.Response.Write(xmlMsg); 
        #endregion
    }
    #endregion

    该执行文件的PR方法如下:

    public void ProcessRequest(HttpContext context)
    {
        
        if (context.Request.HttpMethod.ToLower().Equals("get"))
        {
           context.Response.Write(msg);
            //校验
            ValidateUrl();
        }
        else
        {
            //当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上
            HandleTextMsg();
        }
    }
    开始发布该网站

    18

    19

    20

    2.配置微信服务器,配置好之后,按提交,然后按启动

    22

    开始测试,测试地址:http://debug.fangbei.org/

    image

    总结:其实微信服务器开发,就是在微信端发送到自己的服务器之间,都了一个微信服务器的步骤。处理过程,依旧和http请求一样。

    发送报文-处理报文-响应报文

    image

    更多精彩内容请看:http://www.cnblogs.com/2star
  • 相关阅读:
    数据库调优2
    数据库调优
    SQL优化
    支付宝/阿里面试题
    Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签 《转载》
    《转载》struts旅程《2》
    《转载》struts旅程《1》
    jsp 自定义标签
    body-content取值的意义
    jsp页面中jstl标签详解
  • 原文地址:https://www.cnblogs.com/kimisme/p/4389799.html
Copyright © 2011-2022 走看看