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格式的,具体的每一个部分的含义,在官方文档 接收普通消息 有定义。

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

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

  • 相关阅读:
    UML类图几种关系的总结
    date long 互相转换
    tortoise更新后eclipse项目挂掉,报错找不到类
    eclipse快捷键
    ECLIPSE 环境变量配置,MAVEN本地仓库
    Android _关于fragment切换重新加载的解决分享给大家
    Java_反射机制详解
    Java_try,catch,finally return之间的执行顺序
    Java_单例模式
    Android_设置全屏的方法
  • 原文地址:https://www.cnblogs.com/Dennis-mi/p/12592231.html
Copyright © 2011-2022 走看看