ASP.NET CORE 开发微信公众号(一、测试号管理)
一、注册账号
百度微信公众平台,点击进入。
二、公众平台测试账号
点击进入平台后居然是小程序,我也很费解。以前是找到开发->开发者工具->公众平台测试账号,现在毛都没有了。
不过可以点击这里调转。
三、进入公众平台。
这里好像要微信扫码登录。
上面的接口配置信息是给接口服务器端使用,下面的JS接口安全域名是给前端调用。
这里的坑还是多,而且官方文档含糊其辞,这点差评。
首先就是为何要有这个域名。说的直白一点,就是你要想和微信第三方接口通讯,必须要有一个能被外网访问的接口暴露出去供第三方调用。所以你需要有一个服务器和域名。
这里需要注意:
1、服务器随便搞。我的是阿里云的云服务器。
2、域名,这里必须要用域名,不然会配置失败。
3、必须是http的80端口或者https的443默认端口。
4、URL的方法是GET请求,方法名随意。
5、必须把服务器ip添加到白名单。
添加到白名单在微信公众平台添加。
四、现在来测试一下。
js同样的这样就可以了。
五、微信在线测试接口
https://mp.weixin.qq.com/debug
六、代码
6.1、接口方法
1 /// <summary>
2 /// 检测接口
3 /// 作用:在注册微信公众号的测试号管理界面,提供接口配置信息。接收微信接入验证请求,并给与响应。
4 /// </summary>
5 /// <param name="signature">微信加密签名</param>
6 /// <param name="timestamp">时间戳</param>
7 /// <param name="nonce">随机数</param>
8 /// <param name="echostr">随机字符串</param>
9 /// <returns></returns>
10 [HttpGet("CheckWeChat")]
11 public string CheckWeChat(string signature, string timestamp, string nonce, string echostr)
12 {
13 log.Debug("微信端成功请求到接口!");
14 log.Debug($"signature:{signature},timestamp:{timestamp},nonce:{nonce},echostr:{echostr}");
15
16 if (!string.IsNullOrWhiteSpace(signature) && !string.IsNullOrWhiteSpace(timestamp) && !string.IsNullOrWhiteSpace(nonce) && !string.IsNullOrWhiteSpace(echostr))
17 {
18 log.Debug("进入验证内部");
19
20 //读取配置Token,需要和你填写的一样
21 var token = JsonFileHelper.Read("WeChat_TestToken");
22
23 if (!string.IsNullOrWhiteSpace(token) && WeChatHelper.VerificationSignature(echostr, nonce, signature, timestamp, token))
24 {
25 log.Debug("成功!");
26 //如果调用成功,返回随机字符串
27 return echostr;
28 }
29 }
30 return "false";
31 }
6.2、帮助类
1 public static string GetSha1Hash(string str)
2 {
3 var inputBytes = Encoding.Default.GetBytes(str);
4
5 SHA1 sha = new SHA1CryptoServiceProvider();
6
7 var result = sha.ComputeHash(inputBytes);
8
9 var sBuilder = new StringBuilder();
10
11 for (var i = 0; i < result.Length; i++)
12 {
13 sBuilder.Append(result[i].ToString("x2"));
14 }
15
16 return sBuilder.ToString();
17 }
1 /// <summary>
2 /// 签名验证
3 /// </summary>
4 /// <param name="echostr">随机字符串</param>
5 /// <param name="nonce">随机数</param>
6 /// <param name="signature">微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。</param>
7 /// <param name="timestamp">时间戳</param>
8 /// <param name="token">用户签名</param>
9 /// <returns></returns>
10 public static bool VerificationSignature(string echostr, string nonce, string signature, string timestamp,string token)
11 {
12 string[] StrArray = { token, timestamp, nonce };
13 Array.Sort(StrArray);
14 var ArrayString = new StringBuilder();
15 for (var i = 0; i < StrArray.Length; i++)
16 ArrayString.Append(StrArray[i]);
17 var strHash = GetSha1Hash(ArrayString.ToString());
18 return signature == strHash;
19 }
6.3、截图
七、远程服务器代码发布
想要源码的可以联系我。希望对大家有帮助。
ASP.NET CORE 开发微信公众号(一、测试号管理)的更多相关文章
- spring-boot-route(二十三)开发微信公众号
在讲微信公众号开发之前,先来大概了解一下微信公众号.微信公众号大体上可以分为服务号和订阅号,订阅号和服务号的区别如下: 服务号可以申请微信支付功能. 服务号只能由企业申请,订阅号可以有企业或个人申请. ...
- Java开发微信公众号(五)---微信开发中如何获取access_token以及缓存access_token
获取access_token是微信api最重要的一个部分,因为调用其他api很多都需要用到access_token.比如自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等在请求的时候 ...
- Java开发微信公众号(三)---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装
在前面几篇文章我们讲了微信公众号环境的配置 和微信公众号服务的接入,接下来我们来说一下微信服务器请求消息,响应消息以及事件消息的相关内容,首先我们来分析一下消息类型和返回xml格式及实体类的封装. ( ...
- 小机器人自动回复(python,可扩展开发微信公众号的小机器人)
api来之图灵机器人.我们都知道微信公众号可以有自动回复,我们先用python脚本编写一个简单的自动回复的脚本,利用图灵机器人的api. http://www.tuling123.com/help/h ...
- vue+node.js+webpack开发微信公众号功能填坑——v -for循环
页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...
- vue+node.js+webpack开发微信公众号功能填坑——组件按需引入
初次开发微信公众号,整体框架是经理搭建,小喽喽只是实现部分功能,整体页面效果 整个页面使用两个组件:布局 FlexBox,搜索框 Search,demo文档 http://vue.ydui.org/d ...
- PHP开发微信公众号
PHP开发微信公众号:配置和部署服务器及Token认证 https://zhuanlan.zhihu.com/p/28259840
- 使用vue开发微信公众号下SPA站点的填坑之旅
原文发表于本人博客,点击进入使用vue开发微信公众号下SPA站点的填坑之旅 本文为我创业过程中,开发项目的填坑之旅.作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱^ ...
- PHP开发微信公众号(一)二维码的获取
要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sa ...
随机推荐
- (转)CrudRepository JpaRepository PagingAndSortingRepository之间的区别
1. 简介 本文介绍三种不同的Spring Data repository和它们的功能,包含以下三种: CrudRepository PagingAndSortingRepository JpaRep ...
- 浅谈c++(一)
本人为菜鸟一枚,如有错误,欢迎指正. 由于上半年学了C语言,为了更好的过渡到C++,我将在未来展示一下两者的不同以及优缺点.在c++中,不得不谈到类.这是C++中最重要的语法特征.我们可以通过它,定义 ...
- 栈帧的内部结构--局部变量表(Local Variables)
每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返 ...
- 几个超级实用但很少人知道的 VS 技巧[更新]
大家好,今天分享一些实用的 VS 技巧,而这些技巧我发现很多人都不知道.因为我经常在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS "骚"操作,他们 ...
- hexo博客添加gitalk评论系统
经过了一天的折腾,我终于为自己的博客添加上了评论系统.坦率的讲,为什么网上那么多方案我还要自己写一篇博客,那就是因为他们说的都有bug,所以我要自己总结一下. 我选用的是gitalk评论系统, ...
- shiro安全框架和spring整合
上干货......... 整合spring的配置文件 <?xml version="1.0" encoding="UTF-8"?><beans ...
- Python-类属性查询协议-__getattr__ __getattribute__
__getattr__ 查找不到类属性的时候调用 class BeiMenChuiXue: def __init__(self, name): self.name = name def __getat ...
- 玩命学JVM(二)—类加载机制
前言 Java程序运行图: 上一篇玩命学JVM(一)-认识JVM和字节码文件我们简单认识了 JVM 和字节码文件.那JVM是如何使用字节码文件的呢?从上图清晰地可以看到,JVM 通过类加载器完成了这一 ...
- Java知识日常收集整理001Java获取变量的数据类型的实现方法
一.具体情况区分 对于简单类型变量,是无法直接获得变量类型的:要想获取,必须自定义函数进行返回. 对于包装类型变量,是可以直接获得的,变量名称.getClass().getName(); 二.代码实现 ...
- C++指针delete后还要置为null
非常好的一篇说明: 转载:https://blog.csdn.net/qq_36570733/article/details/80043321 众所周知,最开始我们用new来创建一个指针,那么等我们用 ...