1、概述

通过前面8篇关于微信开发相关文章的学习,我们已经对微信常用开发有了一个比较深入的了解。前面的文章都是基于某一特定公众号的,在现实业务中同一单位个体运营着不至一个公众号,此时就需要对多个公众号集中管理,随意切换。本篇文章主要介绍多公众号集中管理的方法、表设计、设置默认公众号、生成指定格式的URL资源服务器、刷新Access_Token等。

2、公众号集中管理的方法

我们知道操作微信公众号时微信服务器都会返回相应的信息到我们自己的中转服务器上,涉及多个微信公众号管理时,我们就需要知道是那个公众号返回的数据以及我们要操作的是那个公众号。我们通过集中设计一个公众号管理的界面就可以完成对多公众号的管理,下面我们介绍具体的方法供大家参考。

3、多公众号管理表设计

在进行表设计之前,我们先回忆一下我们在申请公众号时需要填写的必要信息,如下图所示 。

在上图中,我们可以看出界面上我们标记的5个数据项是必须的,分别为公众号(OFFICIAL_ID)、应用ID(APP_ID)、应用密钥(APP_SECRET)、服务器地址(API_URL)、令牌(TOKEN)。我们可以根据我们实际业务扩展其他的字段方便使用。公众号管理参考表设计如下图所示。

上面的表设计我们对申请各种类型公众号所需的字段都进行了处理。要做到多公众号管理,我们可以利用主键来切分公众号,这个主键ID就需要放到我们公众号接口配置信息中的URL中,如下图所示。

我们只需要在我们的微信开发服务端得到这个ID值就能知道当前操作的公众号信息,这是多公众号管理设计中的精髓。具体参考本文后面的生成指定格式的URL资源服务器的讲解。

4、默认公众号设置

默认公众号就是当前操作的公众号,所有涉及公众号的操作都以默认公众号为基础。在上一节我们的表设计中有一个IS_DEFAULT当前操作公众号的字段,只要设置为1就是默认公众号。特别注意的是所有操作公众号中只允许有一个默认公众号,设置为一个公众号为默认公众号后,其他的公众号都要取消默认公众号的设置。

要设置默认公众号只需要调用我们框架提供的接口:

RDIFrameworkService.Instance.WeixinBasicService.SetDefaultOfficialAccount(UserInfo userInfo, string id);

设置好默认公众号后,我们可以通过下面的接口得到当前操作的公众号:

RDIFrameworkService.Instance.WeixinBasicService.GetCurrentOfficialAccountEntity(UserInfo userInfo);

代码参考

/// <summary>
/// 设置当前公众号为默认操作公众号
/// </summary>
/// <param name="key">主键值</param>
/// <returns></returns>
[AjaxOnly]
[HttpPost]
[ManagerPermission(PermissionMode.Enforce)]
public virtual ActionResult SetDefault(string key)
{
int returnValue = 0;
try
{
if (!string.IsNullOrEmpty(key))
{
returnValue += RDIFrameworkService.Instance.WeixinBasicService.SetDefaultOfficialAccount(ManageProvider.Provider.Current(), key);
}
return Content(returnValue > 0
? new JsonMessage { Success = true, Data = "1", Type = ResultType.Success, Message = RDIFramework.Utilities.RDIFrameworkMessage.MSG3010 }.ToString()
: new JsonMessage { Success = false, Data = "0", Type = ResultType.Warning, Message = RDIFramework.Utilities.RDIFrameworkMessage.MSG3020 }.ToString());
}
catch (Exception ex)
{
return Content(new JsonMessage { Success = false, Data = "-1", Type = ResultType.Error, Message = RDIFramework.Utilities.RDIFrameworkMessage.MSG3020 + ex.Message }.ToString());
}
}

5、生成指定格式的URL资源服务器

在阅读本节之前,建议参考了解一下我们的微信公众号开发系列-2、微信公众平台接入指南对微信的接入有了一个比较全面的了解。接入服务器地址URL是开发者用来接收微信消息和事件的接口URL,是我们服务器的响应微信请求的地址。

假设我们自己的服务器域名是www.rdiframework.net,准备用/WeiXin/WeChat/来接收消息,就填写:

http://www.rdiframework.net/WeiXin/WeChat/

上面的这个地址针对一个公众号时可以,但如果对多公众号管理来说就不能这样用了,我们可以指定一个ID来区分公众号的来源:

http://www.rdiframework.net/WeiXin/WeChat/?id=********

在我们的的微信服务端接入代码中加上对这个ID的处理即可。

处理Get请求代码参考如下:

[HttpGet]
[ActionName("Index")]
public Task<ActionResult> Get(string signature, string timestamp, string nonce, string echostr)
{
string currentOfficialId = Request["id"];
return Task.Factory.StartNew(() =>
{
if (string.IsNullOrEmpty(currentOfficialId))
{
return "非法路径请求!";
} WeixinOfficialAccountEntity weixinOfficialAccountEntity = RDIFrameworkService.Instance.WeixinBasicService.GetOfficialAccountEntity(currentOfficialId); if (CheckSignature.Check(signature, timestamp, nonce, weixinOfficialAccountEntity.Token))
{
return echostr; //返回随机字符串则表示验证通过
}
else
{
return "failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, weixinOfficialAccountEntity.Token) + "。" + "如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。";
}
}).ContinueWith<ActionResult>(task => Content(task.Result));
}

处理Post请求代码参考如下:

/// <summary>
/// 最简化的处理流程
/// </summary>
[HttpPost]
[ActionName("Index")]
public Task<ActionResult> Post(PostModel postModel)
{
string currentOfficialId = Request["id"]; return Task.Factory.StartNew<ActionResult>(() =>
{ //没有参数,带有id才能知道是访问哪个公众号
if (string.IsNullOrEmpty(currentOfficialId))
{
return new WeixinResult("非法路径请求!");
} WeixinOfficialAccountEntity weixinOfficialAccountEntity = RDIFrameworkService.Instance.WeixinBasicService.GetOfficialAccountEntity(currentOfficialId);
if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, weixinOfficialAccountEntity.Token))
{
return new WeixinResult("参数错误!");
}
postModel.Token = weixinOfficialAccountEntity.Token;
postModel.EncodingAESKey = weixinOfficialAccountEntity.OfficialKey; //根据自己后台的设置保持一致
postModel.AppId = weixinOfficialAccountEntity.AppId; //根据自己后台的设置保持一致 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel, currentOfficialId, 10); messageHandler.Execute(); //执行微信处理过程 return new FixWeixinBugWeixinResult(messageHandler); }).ContinueWith<ActionResult>(task => task.Result);
}

6、刷新Access_Token

由于Access Token有效期只有7200秒,而每天调用获取的次数只有2000次,所以需要将Access Token进行缓存来保证不触发超过最大调用次数。另外在微信公众平台中,绝大多数高级接口都需要Access Token授权才能进行调用,开发者需要使用中控服务器统一进行缓存与更新,以避免各自刷新而混乱。

获得Token:我们可以直接使用Senparc.WeiXin SDK的方法。

Senparc.Weixin.MP.CommonAPIs.CommonApi.GetToken(model.AppId, model.AppSecret).access_token;

通过传入AppId和Appsecret,微信服务器将给你一个可访问的Token。

虽然他帮我们封装了,但是不用他的方法,我们也可以直接调用微信的接口方法:

var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", grant_type.AsUrlData(), appid.AsUrlData(), secret.AsUrlData());
AccessTokenResult result = Get.GetJson<AccessTokenResult>(url);
return result;

这个接口,只有几个参数,具体参数可以查看帮助文档 传送门 成功返回:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

7、微信公众号管理相关界面参考

参考文章

微信公众平台技术文档-官方

Senparc.Weixin SDK + 官网示例源代码

RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

RDIFramework.NET代码生成器全新V3.5版本发布-重大升级


一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。

RDIFramework.NET官方网站:http://www.rdiframework.net/

RDIFramework.NET官方博客:http://blog.rdiframework.net/

同时需要说明的,以后的所有技术文章以官方网站为准,欢迎大家收藏!

RDIFramework.NET框架由专业团队长期打造、一直在更新、一直在升级,请放心使用!

欢迎关注RDIFramework.net框架官方公众微信(微信号:guosisoft),及时了解最新动态。

扫描二维码立即关注

微信公众号开发C#系列-9、多公众号集中管理的更多相关文章

  1. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

  2. 微信公众号开发C#系列-7、消息管理-接收事件推送

    1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...

  3. 微信公众号开发C#系列-1、微信公众平台注册

    微信公众号简介 微信公众号分为服务号.订阅号.企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以. 我们所说的微信公众号开发主要指的是公众号的账号类型,公众号的账号类型分为订阅号.服务号.企 ...

  4. 微信公众号开发C#系列-12、微信前端开发利器:WeUI

    1.前言 通过前面系列文章的学习与讲解,相信大家已经对微信的开发有了一个全新的认识.后端基本能够基于盛派的第三方sdk搞定大部分事宜,剩下的就是前端了.关于手机端的浏览器的兼容性问题相信一直是开发者们 ...

  5. 微信公众号开发C#系列-5、用户和用户组管理-支持同步

    1.概述 眼前时下流行的经济有个叫粉丝经济,粉丝带动收益.一个好运营良好的公众号肯定会有一大批的粉丝团,如何挖掘粉丝来产生效益,是微信营销的关键.微信公众号后台本身提供了粉丝(用户)与用户分组的管理, ...

  6. 微信公众号开发C#系列-6、消息管理-普通消息接受处理

    1.概述 通过前面章节的学习,我们已经对微信的开发有了基本的掌握与熟悉,基本可以上手做复杂的应用了.本篇我们将详细讲解微信消息管理中普通消息的接收与处理.当普通微信用户向公众账号发消息时,微信服务器将 ...

  7. 微信公众号开发C#系列-4、获取接口调用凭证

    概述 获取接口调用凭证实质就是获取access_token.在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒 ...

  8. 微信公众号开发C#系列-2、微信公众平台接入指南

    概述 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微信服务器将接收到的消息post到用户接入时填写的url中,在url处理程序中,首先 ...

  9. 微信公众号开发C#系列-10、长链接转短链接

    1.概述 短网址的好处众多,便于记忆,占用字符少等,现在市面上出现了众多的将长网址转变为短网址的方法,但是由于他们都是小的公司在幕后运营,所以很不靠谱,面对随时关闭服务的可能,这样也导致我们将转换好了 ...

随机推荐

  1. linux文件的基本属性

    Linux 文件基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规 ...

  2. centos7 安装qt

    /出现can't find lGL,安装下面的库: yum install libGL yum install libGL-devel ​

  3. java 泛型的类型擦除与桥方法

    泛型类 --代码参考:java核心技术 卷1 第十版 public class Pair<T> { private T first; private T second; //构造器 pub ...

  4. kolla 多节点部署 openstack

    kolla 介绍 简介 kolla 的使命是为 openstack 云平台提供生产级别的.开箱即用的交付能力.kolla 的基本思想是一切皆容器,将所有服务基于 Docker 运行,并且保证一个容器只 ...

  5. 【重学计算机】操作系统D3章:存储管理

    1. 存储管理的基本概念 逻辑地址:用户地址,从零开始编号 一维逻辑地址:(地址) 二维逻辑地址:(段号: 段内地址) 主存储器的复用方式 按分区:主存划分为多个固定/可变分区,一个程序占一个分区 按 ...

  6. Docker入门学习

    Python爬虫 最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Pyt ...

  7. Redis学习——详解Redis配置文件(三)

    一.Redis脚本简介 在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server .redis-cli .redis-benchmark ...

  8. TiDB之mac上搭建及调试技巧

    此文目的 由于本人最近已经成为TiDB的粉丝,所以就开始各种研究TiDB的源码,研究源码这个事情,首先就需要在自己电脑上不断的调试及修改.TiDB本身的代码是非常容易编译和调试的,但是要把PD.TiK ...

  9. Win10+RTX2080深度学习环境搭建:tensorflow、mxnet、pytorch、caffe

    目录 准备工作 设置conda国内镜像源 conda 深度学习环境 tensorflow.mxnet.pytorch安装 tensorflow mxnet pytorch Caffe安装 配置文件修改 ...

  10. Springboot 系列(六)Spring Boot web 开发之拦截器和三大组件

    1. 拦截器 Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分.并没有本质的不同,都是通过实现 HandlerInterceptor ...