博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web API实现微信公众平台开发-接收数据Post
阅读量:4036 次
发布时间:2019-05-24

本文共 3524 字,大约阅读时间需要 11 分钟。

介绍

当普通微信用户向公众账号发消息时,微信服务器将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
(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("") }; } } ///
/// 验签参数 /// ///
///
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://qpudi.baihongyu.com/

你可能感兴趣的文章
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux dump_backtrace
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
snprintf 函数用法
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
flex中设置Label标签文字的自动换行
查看>>
Flex 中的元数据标签
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-11. 数据类型之间的转换
查看>>