Web API实现微信公众平台开发-接收数据Post

介绍

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息。其中,某些事件推送在发生后,是允许开发者回复用户的,某些则不允许。

代码实现

1、接收参数。

var postModel = GetPostModel(request);

2、验证签名。

 if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)){return new HttpResponseMessage{Content = new StringContent("参数错误!")};}

3、数据处理。

   [HttpPost][ActionName("CallBack")]public HttpResponseMessage HandleMsgFromWeChat(HttpRequestMessage request){try{var postModel = GetPostModel(request);if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)){return new HttpResponseMessage{Content = new StringContent("参数错误!")};}string xmlContent = request.Content.ReadAsStringAsync().Result;string domain = BqoolWebSite.WebSiteMapping[BqoolWebSiteType.BigCRMWebService][CommonSetting.GetEnvironmentMode()];string url = domain + "/api/WeChat/ProcessXml";var data = new ProcessXmlParam(){Account = "WeChat",UpdateUser = "WeChat",Date = DateTime.UtcNow.ToUnixTimestamp(),Action = BaseRequestParam.ActionType.Add,xml = xmlContent};_nLogger.Info($"WeChat ProcessXml Call BigCRM Web - Url : {url}, data : {data.ToJsonString()}");var result = HttpTools.EncryptPost<ProcessXmlParam, ApiResult>(url, data);_nLogger.Info($"WeChat ProcessXml Call BigCRM Web Result - Url : {url}, result : {result.ToJsonString()}");if (result.Success && result.Data != null){return new HttpResponseMessage{Content = new StringContent(result.Data.ToString())};}return new HttpResponseMessage{Content = new StringContent("错误!")};}catch (Exception ex){_nLogger.Error(ex);return new HttpResponseMessage{Content = new StringContent("")};}}/// <summary>/// 验签参数/// </summary>/// <param name="content"></param>/// <returns></returns>private PostModel GetPostModel(HttpRequestMessage content){string signature = (from kvp in content.GetQueryNameValuePairs()where kvp.Key == "signature"select kvp.Value).FirstOrDefault();string timestamp = (from kvp in content.GetQueryNameValuePairs()where kvp.Key == "timestamp"select kvp.Value).FirstOrDefault();string nonce = (from kvp in content.GetQueryNameValuePairs()where kvp.Key == "nonce"select kvp.Value).FirstOrDefault();return new PostModel(){Signature = signature,Timestamp = timestamp,Nonce = nonce};}

总结

其实整个api过程是很简单的,主要的是自己业务逻辑的处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gbdt 算法比随机森林容易_随机森林与GBDT

Bagging策略1.总样本数量是n个&#xff0c;从样本中重采样(有放回的)选出n个样本 &#xff0c;会有约33.2%的样本不会被抽到2.在所有属性上对这n个样本建立分类器(比如决策树&#xff0c;svm&#xff0c;lr)3.重复步骤1和2m次&#xff0c;建立了m个分类器4.将数据放在这m个分类…

苏泊尔搭载华为鸿蒙系统,华为鸿蒙打算在一年内跨过生死线,拿下16%的市场份额...

原标题&#xff1a;华为鸿蒙打算在一年内跨过生死线&#xff0c;拿下16%的市场份额华为鸿蒙操作系统发布已经有一段时间了&#xff0c;这个操作系统直到上个月月底才开启了公测&#xff0c;很多用户都已经使用上了华为的这个鸿蒙操作系统。根据不少用户的反馈情况来看&#xff…

python获取系统时间函数_简单记录python的时间函数操作

1. time和datetime模块 import datetime,time 2. 获得当前时间 time.time() #获得当前时间&#xff0c;返回float型 time.localtime([float time]) #获得本地当前时间&#xff0c;返回time.struct_time类型 说明&#xff1a;struct_time是一个只读的9元组&#xff0c;其中参数命…

10个最佳的大数据处理编程语言

大数据的浪潮仍在继续。它渗透到了几乎所有的行业&#xff0c;信息像洪水一样地席卷企业&#xff0c;使得软件越发庞然大物&#xff0c;比如Excel看上去就变得越来越笨拙。数据处理不再无足轻重&#xff0c;并且对精密分析和强大又实时处理的需要变得前所未有的巨大。 那么&…

简单谈谈Server2008的NAP到底是什么

什么是NAP&#xff1f; NAP-Network Access Protection&#xff0c;网络访问保护。我觉得其实还不完整&#xff0c;我认为完整的应该叫做网络策略访问保护。他的作用是用策略来保护客户端对网络的访问&#xff0c;确保整个网络的访问过程是达到一定安全级别的。07年初前我开…

再记一次 应用服务器 CPU 暴高事故分析

一&#xff1a;背景 1. 前言大概有2个月没写博客了&#xff0c;不是不想写哈????&#xff0c;关注公号的朋友应该知道我这两个月一直都在翻译文章&#xff0c;前前后后大概100篇左右吧&#xff0c;前几天看公号的 常读用户 降了好几十&#xff0c;心疼哈&#xff0c;还得回…

request-promise 获取返回头信息_http返回的状态码 大全

00 Continue 继续。客户端应继续其请求101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议&#xff0c;例如&#xff0c;切换到HTTP的新版本协议200 OK 请求成功。一般用于GET与POST请求201 Created 已创建。成功请求并创建了新的资源…

android shell用户界面,shell界面下安装和卸载Android应用程序(apk包)

安装1.$ adb install apk文件名安装系统应用$ adb push apk文件名 /system/app卸载$ adb uninstall 包名Home->设置->应用程序->管理应用程序->选择某应用程序->卸载相关文件/system/app/apk文件2.第三方应用/data/data/包名4.dex文件是Android 虚拟机Dalvik 支…

乐高创意机器人moc_乐高MOC佳作欣赏丨机械之美机器人乐高作品集1

导语乐高似乎能搭建任何事物&#xff0c;即使是机器人&#xff0c;机甲也不丝毫逊色&#xff0c;巧妙地运用零件&#xff0c;打破常规组合模式&#xff0c;让乐高零件组合在一起竟能呈现充满未来科技感的机器人&#xff0c;它们有的形态奇特&#xff0c;面貌诡异&#xff0c;有…

”残酷“人生第一步

仔仔终于要面对人生中的第一次巨大困难&#xff1a;断奶了。恰逢夫人要出差几日&#xff0c;刚刚开始&#xff0c;我们都很犹豫。确实很怕他整夜哭闹。但是思考再三还是决定&#xff0c;让小家伙独自面对吧。于是&#xff0c;他的“残酷”人生第一步&#xff0c;就这样准备开始…

IdentityServer4之Authorization Code(授权码)相对更安全

前言接着授权模式聊&#xff0c;这次说说Authorization Code(授权码)模式&#xff0c;熟悉的微博接入、微信接入、QQ接入都是这种方式(这里说的是oauth2.0的授权码模式)&#xff0c;从用户体验上来看&#xff0c;交互方式和Implicit没啥改变&#xff0c;随便找个网站瞅瞅&#…

后端根据百度地图真实路径距离_导航软件哪家强?实测百度地图and高德地图哪个更靠谱...

随着社会的不断发展&#xff0c;人们的生活越来越离不开地图导航&#xff0c;无论是开车出行还是到去到陌生的地方&#xff0c;我们都会用到手机地图。然而在众多导航软件中&#xff0c;使用最为广泛的就要属百度地图和高德地图了。但别看都是导航软件&#xff0c;其中差别还真…

php用ajaxs上传图片_jquery+ajax+php 图片上传

最近在写“网上商城”的课程设计&#xff0c;用到了图片上传。我要实现的功能主要有&#xff1a;(1)能够上传多张图片&#xff0c;不过当然是有限制的&#xff0c;最多5张&#xff1b;(2)能够进行图片预览&#xff1b;(3)能够删除图片&#xff1b;(4)服务器能够获取上传的图片信…

一文读懂 KMP 算法

字符串匹配是计算机的基本任务之一。举例来说&#xff0c;有一个字符串"BBC ABCDAB ABCDABCDABDE"&#xff0c;我想知道&#xff0c;里面是否包含另一个字符串"ABCDABD"&#xff1f; 许多算法可以完成这个任务&#xff0c;Knuth-Morris-Pratt算法&#xff…

node.js require 自动执行脚本 并生成html,nodejs 执行脚本并实时输出

接到需求需要一个服务来执行shell脚本&#xff0c;要求可以实时打印shell脚本执行的过程&#xff0c;并看到脚本执行的结果。明确任务目标&#xff1a;这是一个web服务&#xff0c;需要执行shell脚本当一个脚本执行的时候&#xff0c;再次发送请求需要等待当前脚本执行完毕&…

128位加密SSL证书

SGC超真SSL(SGC ZhenSSL)属于 SGC Enabled High Assurance SSL&#xff0c; 是 WoSign 的增强型 SSL证书产品&#xff0c;支持 SGC 强制128位加密技术&#xff0c;即使用户的浏览器只支持 40 位( 如 IE4.X) 或 56 位 ( 如 IE5.X) 也能自动强制实现至少 128 位的高强度加密&…

eclipse连接mysql_专题一、flask构建mysql数据库正确姿势

每周壹总结&#xff0c;一起共同充电第121篇应用程序最核心的就是数据&#xff0c;每天我们写程序其实也是在处理数据的过程&#xff0c;那么很有必要系统性的讲讲和梳理python的flask框架是如何进行数据交互操作的。趁这3天假期&#xff0c;分4篇内容来系统的讲讲&#xff0c;…

C#多线程和异步(二)——Task和async/await详解

一、什么是异步同步和异步主要用于修饰方法。当一个方法被调用时&#xff0c;调用者需要等待该方法执行完毕并返回才能继续执行&#xff0c;我们称这个方法是同步方法&#xff1b;当一个方法被调用时立即返回&#xff0c;并获取一个线程执行该方法内部的业务&#xff0c;调用者…

从头到尾彻底理解傅里叶变换算法(上)

从头到尾彻底理解傅里叶变换算法&#xff08;上&#xff09; 前言 第一部分、 DFT 第一章、傅立叶变换的由来 第二章、实数形式离散傅立叶变换&#xff08;Real DFT&#xff09; 从头到尾彻底理解傅里叶变换算法、下 第三章、复数 第四章、复数形式离散傅立叶变换 前言&#x…

php sorcket_PHP: Sockets - Manual

socket_accept — Accepts a connection on a socketsocket_addrinfo_bind — Create and bind to a socket from a given addrinfosocket_addrinfo_connect — Create and connect to a socket from a given addrinfosocket_addrinfo_explain — Get information about addrin…