zoukankan      html  css  js  c++  java
  • 微信公众号开发(二)---验证服务与回复消息

    经过第一个阶段的工作,公众号服务器方面的配置已经完成,接下来就是开发环境的搭建了。

    准备工作请看上一篇文章:

    0. 消息的传递路径

    1. 启动XShell,开启端口转发

    按照上一篇文章对XShell进行配置,启动到服务器的连接以后,端口转发也就在工作了,这样就可以将请求到服务器的操作转发到本地来。

    2. 启动HTTP服务,接受公众号服务器发送过来的请求

    在本地开启一个HTTP服务,端口要和第一步配置的本地接收端口一致。在点击公众号服务器验证的时候,公众号官方会发送一个GET请求过来,相关的参数如下。

    1、signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
    2、timestamp 时间戳
    3、nonce 随机数
    4、echostr 验证成功后,返回的字符串。
    5、token 为在公众号设置的token。
    在收到GET请求以后,从GET请求中解析出这四个参数。经过如下步骤的运算来完成。

    验证流程图

    C++的代码示例如下

    void CHttpServer::Get_Chat(std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request) {
    		std::string strSignature = GetHttpParamValue(request, "signature");
    		std::string strTimeStamp = GetHttpParamValue(request, "timestamp");
    		std::string strNonce = GetHttpParamValue(request, "nonce");
    		std::string strEchoStr = GetHttpParamValue(request, "echostr");
    		{
    			std::vector<std::string> strArray;
    			strArray.push_back(strTimeStamp);
    			strArray.push_back(strNonce);
    			strArray.push_back(g_strTOKEN);
    			std::sort(strArray.begin(), strArray.end());
    
    			std::string strSHA1Src = strArray[0] + strArray[1] + strArray[2];
    
    			SHA1Util util;
    			util.update(strSHA1Src);
    			std::string strSha1 = util.final();
    			if (strSha1 == strSignature)
    			{
    				LOG_INFO(ms_loger, "My Base64:{} Org Base 64:{}", strSha1, strSignature);
    			}
    			else
    			{
    				LOG_ERR(ms_loger, "My Base64:{} Org Base 64:{}", strSha1, strSignature);
    			}
    
    		}
    		*response << "HTTP/1.1 200 OK
    Content-Length: " << strEchoStr.length() << "
    
    "
    			<< strEchoStr;
    	}
    

    至此,验证流程结束。

    3. 文本消息的收发

    公众号的消息收发采用同一个URL不同请求方式的形式。

    比如上一步的验证URL是 https://www.dennisthink.com/WeChat, 请求方式为GET。那么接收消息的URL也是 https://www.dennisthink.com/WeChat, 只是请求方式变成了POST。

    从POST接收到的消息是XML格式的,具体的每一个部分的含义,在官方文档 接收普通消息 有定义。

    收到消息以后,可以根据 官方文档的被动回复消息 进行消息的回复。

    对于订阅号已经支持这样的功能了,如果您有什么问题,欢迎给我留言交流。

  • 相关阅读:
    Excel 如何在程序运行期间提示信息“正在运行中。。。请稍候 38云淡淡
    EXT学习笔记第一课
    java学习日志1
    C语言基础知识
    js所学知识点
    javascript 取最大值和最小值!
    html常用标签
    javascript4位随机数(字体都有颜色)
    marginpadding区别及bug
    数独的优化回朔算法(四)
  • 原文地址:https://www.cnblogs.com/Dennis-mi/p/12592231.html
Copyright © 2011-2022 走看看