WebApi后端框架服务端框架开发微信小程序订阅消息接口
WebApi后端框架服务端框架开发微信小程序订阅消息接口
PS:关于微信小程序是否支持极光推送信息?
推送消息是系统级别的,小程序包裹在微信里,微信又被包裹在系统中,目前是不支持的,除非微信推出相应的接口,那是不可能的!微信不会这么做,不能做,估计永远不会做,不然的话微信内部的一套消息通知就废了。
微信本身就是既时通讯社交工具,极光推送作为细分领域的竞争对手,怎么可能植入对手的功能到自己的系统呢?所以,我们只能采用微信自己的规则,就是微信小程序的通知方案,即服务通知或者模板消息。
微信小程序前端页面订阅消息弹窗确认,勾选
“总是保持以上选择,不再询问”,点击【允许】。

但是!!! 点击一次订阅,只能推送一次消息!!!然而系统需要频繁推送消息的!!!
为了解决这个问题,必须在微信小程序某个节点触发下一次订阅,形成一个无限订阅消息的循环,比如打开某个界面,触发某个事件开始订阅。
获取微信小程序token:
C# Code:
//获取微信token
string geturl = $"https://api.weixin.qq.com/cgi-bin/token&grant_type=client_credential&appid={WXAPP.appid}&secret={WXAPP.secret}";
string json = WebApiTools.Get(geturl, "");
ModelWXGetTokenResponse re = JsonConvertEx.ToObject<ModelWXGetTokenResponse>(json);
//获取微信token
string geturl = $"https://api.weixin.qq.com/cgi-bin/token&grant_type=client_credential&appid={WXAPP.appid}&secret={WXAPP.secret}";
string json = WebApiTools.Get(geturl, "");
ModelWXGetTokenResponse re = JsonConvertEx.ToObject<ModelWXGetTokenResponse>(json);
返回token模型:
C# Code:
public class ModelWXGetTokenResponse
{
public string access_token { get; set; }// string 获取到的凭证
public Int32 expires_in { get; set; }// 凭证有效时间,单位:秒。目前是7200秒之内的值。
public string errcode { get; set; }// number 错误码
public string errmsg { get; set; }// string 错误信息
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
public class ModelWXGetTokenResponse
{
public string access_token { get; set; }// string 获取到的凭证
public Int32 expires_in { get; set; }// 凭证有效时间,单位:秒。目前是7200秒之内的值。
public string errcode { get; set; }// number 错误码
public string errmsg { get; set; }// string 错误信息
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
服务端业务逻辑处理:
1. 根据微信小程序消息模板创建订阅消息相关对象实例,参数根据模板自定义,比如thing1,thing2。
2. 调用微信小程序消息订阅接口开始推送消息。
C# Code:
//消息模板内容
ModelWXSubscribeMessageTemplate data = new ModelWXSubscribeMessageTemplate
{
thing1 = new ModelWXSubscribeMessageParam { value = "【" + goods.CityFromName + "】-->【" + goods.CityToName + "】" },
thing2 = new ModelWXSubscribeMessageParam { value = goods.GoodsName + " " + goods.WV + " " + goods.Unit }
};
//调用微信后台,订阅消息接口的请求参数
ModelWXSubscribeMessage subscribe = new ModelWXSubscribeMessage
{
access_token = re.access_token,
data = data,
page = pageParam,
template_id = "nYSABmQjT2Dr1UyLXq5pUYSfPLob4Ejtig7ZtkxOkoo",
touser = goods.WXOpenId//openid
};
string dataMsg = JsonConvertEx.ToJson(subscribe);//转成JSON
//提交微信后台,URL
string posturl = $"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={re.access_token}";
string result = WebApiTools.Post(posturl, dataMsg);
//转换对象
ModelWXPostResult postResult = JsonConvertEx.ToObject<ModelWXPostResult>(result);
if (postResult.errcode != 0) LogManager.Log.Write("PushWxMessage", "发布货源推送微信订阅消息失败!", goods.GoodsID);
//来源:C/S框架网(www.csframework.com) QQ:23404761
//消息模板内容
ModelWXSubscribeMessageTemplate data = new ModelWXSubscribeMessageTemplate
{
thing1 = new ModelWXSubscribeMessageParam { value = "【" + goods.CityFromName + "】-->【" + goods.CityToName + "】" },
thing2 = new ModelWXSubscribeMessageParam { value = goods.GoodsName + " " + goods.WV + " " + goods.Unit }
};
//调用微信后台,订阅消息接口的请求参数
ModelWXSubscribeMessage subscribe = new ModelWXSubscribeMessage
{
access_token = re.access_token,
data = data,
page = pageParam,
template_id = "nYSABmQjT2Dr1UyLXq5pUYSfPLob4Ejtig7ZtkxOkoo",
touser = goods.WXOpenId//openid
};
string dataMsg = JsonConvertEx.ToJson(subscribe);//转成JSON
//提交微信后台,URL
string posturl = $"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={re.access_token}";
string result = WebApiTools.Post(posturl, dataMsg);
//转换对象
ModelWXPostResult postResult = JsonConvertEx.ToObject<ModelWXPostResult>(result);
if (postResult.errcode != 0) LogManager.Log.Write("PushWxMessage", "发布货源推送微信订阅消息失败!", goods.GoodsID);
//来源:C/S框架网(www.csframework.com) QQ:23404761
微信小程序消息订阅请求接口参数模型:
C# Code:
/// <summary>
/// 微信小程序消息订阅请求接口参数
/// </summary>
public class ModelWXSubscribeMessage
{
public string access_token { get; set; }// string 是 接口调用凭证
public string touser { get; set; }// string 是 接收者(用户)的 openid
public string template_id { get; set; }//string 是 所需下发的订阅模板id
public string page { get; set; }// string 否 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index? foo = bar)。该字段不填则模板无跳转。
public ModelWXSubscribeMessageTemplate data { get; set; }//Object 是 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any} }
}
//data对象
public class ModelWXSubscribeMessageTemplate
{
public ModelWXSubscribeMessageParam thing1 { get; set; }
public ModelWXSubscribeMessageParam thing2 { get; set; }
}
//参数对象
public class ModelWXSubscribeMessageParam
{
public string value { get; set; }
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
/// <summary>
/// 微信小程序消息订阅请求接口参数
/// </summary>
public class ModelWXSubscribeMessage
{
public string access_token { get; set; }// string 是 接口调用凭证
public string touser { get; set; }// string 是 接收者(用户)的 openid
public string template_id { get; set; }//string 是 所需下发的订阅模板id
public string page { get; set; }// string 否 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index? foo = bar)。该字段不填则模板无跳转。
public ModelWXSubscribeMessageTemplate data { get; set; }//Object 是 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any} }
}
//data对象
public class ModelWXSubscribeMessageTemplate
{
public ModelWXSubscribeMessageParam thing1 { get; set; }
public ModelWXSubscribeMessageParam thing2 { get; set; }
}
//参数对象
public class ModelWXSubscribeMessageParam
{
public string value { get; set; }
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
微信小程序订阅消息开发指南:
小程序订阅消息指南:
小程序订阅消息接口:
服务端调用API说明:
客户端测试程序:
C# Code:
ModelWXPushMessage model = new ModelWXPushMessage()
{
CityFrom = 440608,
CityTo = 420116,
CityFromName = "上海",
CityToName = "武汉",
GoodsID = "1100000022222",
GoodsName = "瓷砖胶+涂料",
Unit = "吨",
WV = 11,
WXOpenId = "oDKo4495z9v_FL0tm0rjND0vLl7k"//郑总
};
ModelRequestAction request = new ModelRequestAction();
request.Action = 68112; //接口
request.ApiKey = API_KEY; //密钥
request.Data = JsonConvert.SerializeObject(model);
request.Operation = "PushWxMessage";
request.Sign = CryptoHelper.ToMD5(API_KEY + request.Data + SECRET_KEY);//数字签名
string url = BASE_URL + "/api/do/post";//url地址
string param = JsonConvert.SerializeObject(request);//序列化实体对象
//post请求返回结果
string result = WebApiTools.Post(url, param, "application/json;charset=UTF-8");
//来源:C/S框架网(www.csframework.com) QQ:23404761
ModelWXPushMessage model = new ModelWXPushMessage()
{
CityFrom = 440608,
CityTo = 420116,
CityFromName = "上海",
CityToName = "武汉",
GoodsID = "1100000022222",
GoodsName = "瓷砖胶+涂料",
Unit = "吨",
WV = 11,
WXOpenId = "oDKo4495z9v_FL0tm0rjND0vLl7k"//郑总
};
ModelRequestAction request = new ModelRequestAction();
request.Action = 68112; //接口
request.ApiKey = API_KEY; //密钥
request.Data = JsonConvert.SerializeObject(model);
request.Operation = "PushWxMessage";
request.Sign = CryptoHelper.ToMD5(API_KEY + request.Data + SECRET_KEY);//数字签名
string url = BASE_URL + "/api/do/post";//url地址
string param = JsonConvert.SerializeObject(request);//序列化实体对象
//post请求返回结果
string result = WebApiTools.Post(url, param, "application/json;charset=UTF-8");
//来源:C/S框架网(www.csframework.com) QQ:23404761

若OpenID没有订阅消息,会报43101错误。

.NET WebApi开发框架|MVC框架|后端框架|服务端框架-标准版V1.0
适用开发:快速构建支持多种客户端的服务端程序,支持APP、B/S、C/S跨平台移动终端等。
运行平台:Windows + .NET Framework 4.5
开发工具:Visual Studio 2015+,C#语言
数据库:Microsoft SQLServer 2008R2+(支持多数据库:Oracle/MySql):


参考文档:
CSFramework WebApi开发框架集成PostgreSql数据库及测试报告|C/S开发框架
CS软件授权注册系统|WebApi服务器介绍|C/S开发框架
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
CSFrameworkV6.1前端+WebApiV3后端测试报告(前后端分离)|C/S开发框架
C/S开发框架两种后台连接:直连模式与WebApi模式(ADODirect与WebApi)|C/S开发框架
CSFramework.WebApi框架提供两种登录接口(PC端登录、APP登录)|C/S开发框架
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
.NETCore WebApi后端开发框架+达梦数据库测试报告|C/S开发框架
Postman工具设置Bearer Token与调试WebApi接口|C/S开发框架
.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架
代码生成器:直连模式+WebApi生成的源码集成到VS解决方案|C/S开发框架
CSFramework.WebapiV3(.NET7/NetCore) 系统安全及Token令牌介绍|C/S开发框架
.NETCore WebApi框架request/response模型介绍(req_XXX/res_XXX)|C/S开发框架
.NETCore WebApi框架:从appsettings.json 读取参数配置|C/S开发框架
CSFramework.WebApi V3.0 WebApi开发框架(.NETCore+EFCore)
.NET5 启动WebApi服务完成事件|C/S开发框架
CSFramework WebApi开发框架集成PostgreSql数据库及测试报告|C/S开发框架
CS软件授权注册系统|WebApi服务器介绍|C/S开发框架
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
CSFrameworkV6.1前端+WebApiV3后端测试报告(前后端分离)|C/S开发框架
C/S开发框架两种后台连接:直连模式与WebApi模式(ADODirect与WebApi)|C/S开发框架
CSFramework.WebApi框架提供两种登录接口(PC端登录、APP登录)|C/S开发框架
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
.NETCore WebApi后端开发框架+达梦数据库测试报告|C/S开发框架
Postman工具设置Bearer Token与调试WebApi接口|C/S开发框架
.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架
代码生成器:直连模式+WebApi生成的源码集成到VS解决方案|C/S开发框架
CSFramework.WebapiV3(.NET7/NetCore) 系统安全及Token令牌介绍|C/S开发框架
.NETCore WebApi框架request/response模型介绍(req_XXX/res_XXX)|C/S开发框架
.NETCore WebApi框架:从appsettings.json 读取参数配置|C/S开发框架
CSFramework.WebApi V3.0 WebApi开发框架(.NETCore+EFCore)
.NET5 启动WebApi服务完成事件|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服

