第二步获取componet_access_token
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
private static ResponseComponentToken GetComponentToken( string appid, string appsecret, string verifyticket) { var urlFormat = "https://api.weixin.qq.com/cgi-bin/component/api_component_token" ; object data = null ; data = new { component_appid = appid, component_appsecret = appsecret, component_verify_ticket = verifyticket }; return CommonJsonSend.Send<ResponseComponentToken>( "" , urlFormat, data); } |
OK。这里pre_auth_code就不罗列了,可以用程序调,也可以用postman调用。
到这里,拿到pre_auth_code就可以点击上面的授权地址生成二维码,扫码。授权结束。有点费劲!!!
代公众号网页授权
对接第三方平台后,网页授权还是分为两种方式,静默方式只能拿到openid、需要用户授权的可以拿到更多的用户信息。实现方式相比公众号略有不同:
这里做开发时我用senparc SDK, 参数包括公众号appid、第三方平台appid、第三方平台accesstoken。
1
|
OAuthAccessTokenResult result = OAuthApi.GetAccessToken(appid, compAppid, compAccessToken, code); |
代公众号处理消息和事件
创建第三方平台时填写了消息和事件接收url。第三方平台会把用户和微信互动的消息和事件转发到次url。也就是在这里你可以处理具体的消息和事件,比如关注、取消关注、发送文本消息、图片消息。 这里和公众号处理消息不同的地方在于回复用户的消息全部要加密。加密方式同verify_ticket获取。
这里不需要再自己封装互动的消息和事件。直接用senparcSDK的CustomerMessageHandler处理即可。 最后回复用户消息时需要用到加密消息:FinalResponseDocument。可以参考senparcSDK demo。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
if (Request.HttpMethod.ToLower() == "post" ) { var postModel = new PostModel() { Signature = Request.QueryString[ "signature" ], Msg_Signature = Request.QueryString[ "msg_signature" ], Timestamp = Request.QueryString[ "timestamp" ], Nonce = Request.QueryString[ "nonce" ], EncodingAESKey = sEncodingAESKey, Token = sToken, AppId = sAppID }; var maxRecordCount = 10; var messageHandler = new CustomMessageHandler(Request.InputStream, postModel, maxRecordCount); try { //messageHandler.RequestDocument.Save( // Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Request_" + // messageHandler.RequestMessage.FromUserName + ".txt")); messageHandler.Execute(); //执行微信处理过程(关键) //messageHandler.ResponseDocument.Save( // Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Response_" + // messageHandler.ResponseMessage.ToUserName + ".txt")); Response.Output.Write(messageHandler.FinalResponseDocument.ToString()); //Response.Write("success"); return ; } catch (Exception ex) { LogHelper.Error(ex.Message,ex); } finally { Response.End(); } } |
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式