架构师_程序员

查看: 1540|回复: 0

[WebAPI] ASP.NET WEB API 响应微信请求

[复制链接]
发表于 2018-11-24 15:59:26 | 显示全部楼层
微信token验证

GET返回

1.微信公众平台的接入方法,无非4个参数(signature, timestamp, nonce, echostr)加1个Token(两边对应)

2.Token, timestamp, nonce字典排序后,按照字符串“SHA1”加密。得出一串字符串 tmpStr(转化为小写)

3.然后比对 tmpStr 是否等于 signature,如果相等,则表示此次请求是来自于微信。


4.确定请求来自于微信,则已经完成一大步了。剩下一个,将echostr参数传出给微信公众平台的工作了。

我签名验证成功了,微信还是返回token失败,原因是我返回了带有xml格式的字符串,如下:

QQ截图20181124155329.jpg

解决方案:

  1. //返回字符串调用方法:
  2. public static HttpResponseMessage ToHttpMsgForWeChat(string strMsg) { HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(strMsg, Encoding.GetEncoding("UTF-8"), "application/x-www-form-urlencoded") }; return result; }

  3. [HttpGet]
  4. public HttpResponseMessage Get(string signature, string timestamp, string nonce,string echostr)
  5. {
  6.         if (CheckSignature(signature, timestamp, nonce, weixin_token))
  7.         {
  8.                 return ToHttpMsgForWeChat(echostr);
  9.         }
  10.         else {
  11.                 return ToHttpMsgForWeChat("no");
  12.         }
  13. }
复制代码


此处要强调一下,参照PHP的 echo $echoStr , WebFrom 的 Response.Write(echoStr)等。
一次次的调试判断出微信的接受方式,只会以 "application/x-www-form-urlencoded" 来接受,所以我用HttpResponseMessage来指定其输出方式。最后测试成功!


但是,我个人感觉并不是上面一句话是错误的,但是懒的测试了,相应类型设置"text/plain"应该是可以的。

POST返回

最近开发微信小程序中用到了微信支付功能,接口开发用的ASP.NET WEB API;

在支付成功后,接口接受到微信服务器的支付通知结果,处理完数据,接口返回给微信服务数据时出现了问题。

微信服务器识别不到返回的数据,导致重复通知。

最终解决代码如下:


  1.         protected virtual HttpResponseMessage RetMessage(object msg)
  2.         {
  3.             return new HttpResponseMessage
  4.             {
  5.                 Content =  new StringContent(msg.ToString(),new UTF8Encoding(false)
  6.                   , "text/plain")
  7.             };

  8.         }
复制代码
  1.         [HttpPost]
  2.         public HttpResponseMessage Wx_Notify()
  3.         {
  4.                     //业务处理代码,以下为返回
  5.                     WxPayData res = new WxPayData();
  6.                     res.SetValue("return_code", "SUCCESS");
  7.                     res.SetValue("return_msg", "OK");
  8.                     return RetMessage(res.ToXml());
  9.          }
复制代码






上一篇:知识 分享收藏的知乎live
下一篇:齐白石全集,pdf
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-9-26 00:40

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表