微信小程序模板消息接口下线了,不用慌,调用统一服务消息接口来实现相同功能

简介: 做过微信开发的应该都有一点感触,就是他的开发文档不是一成不变的,接口有时候会被下线,但也不是一下子就不能用了,一般会兼容旧接口,然后提醒你使用新接口有更多好处。如果接口真的直接下线了,也会提供另一种能够实现相同功能的接口给你替换。所以有天你以为代码都写好了,没有bug了,悠哉悠哉的时候,忽然产品经理说微信的哪个接口不能用了,快去改一下,不要惊讶,老老实实去改就对了哈。

做过微信开发的应该都有一点感触,就是他的开发文档不是一成不变的,接口有时候会被下线,但也不是一下子就不能用了,一般会兼容旧接口,然后提醒你使用新接口有更多好处。如果接口真的直接下线了,也会提供另一种能够实现相同功能的接口给你替换。所以有天你以为代码都写好了,没有bug了,悠哉悠哉的时候,忽然产品经理说微信的哪个接口不能用了,快去改一下,不要惊讶,老老实实去改就对了哈。

这不,微信将小程序的模板消息接口下线了,之前用formid来调这个接口的功能都就用不了了。

image.png

看官方文档提示,是提供了订阅消息的功能来替换,顾名思义,要用户主动订阅了才可以发送成功,像下面这样:

image.png

除了这种订阅消息外,还有没有其他方法来实现同等效果呢,答案是of course。

翻阅小程序开发文档发现,官方还提供了一个统一服务消息的接口。为便于开发者对用户进行服务消息触达,简化小程序和公众号模板消息下发流程,小程序提供统一的服务消息下发接口。就是在小程序里发送公众号模板消息,这个好处就是不需要formid的,文档地址:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html

要注意:以下几类消息是目前不允许发的模板消息

1、模板内容与服务场景(含标题、关键词)不一致的模板

2、涉嫌广告营销类消息模板

3、发送频率过高,有骚扰用户倾向类消息模板

4、涉及红包、卡券、优惠券、代金券、会员卡、积分类消息模板

image.png

接下来我们就来实现下。

1、准备

调用这个接口的前提是公众号和小程序有绑定且是同主体的,这个好办,登录公众号后台 -> 小程序 -> 小程序管理 -> 添加即可绑定小程序

image.png

因为实质上还是发的公众号模板消息,所以还是要在公众号后台添加消息模板获取模板id

image.png

2、开发

好了,做好以上两个准备就可以开发了,主要代码如下面:

     * 在小程序里使用同主体的关联公众号发送模板消息
     * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html
     * @param vo
     * @return   {"errcode":0,"errmsg":"ok"}   向没有关注公众号的用户发送会返回{"errcode":43004,"errmsg":"require subscribe hint: [LGcpYa05528672]"}
     */
    public static JSONObject uniformSend(SendVo vo){
        boolean flag = false;
        JSONObject object = new JSONObject();
        JSONObject mpTemplateMsg = new JSONObject();
        JSONObject miniprogram = new JSONObject();
        String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token="+vo.getToken();
        object.put("touser", vo.getToUser());
        mpTemplateMsg.put("appid", vo.getPublicAppId());
        mpTemplateMsg.put("url", vo.getUrl());
        mpTemplateMsg.put("template_id", vo.getTemplateId());
        miniprogram.put("appid",vo.getMiniAppId());
        miniprogram.put("pagepath",vo.getPagePath());
        mpTemplateMsg.put("miniprogram",miniprogram);
        List<String> list = vo.getValue();
        JSONObject jsonObject = null;
        if (list != null && list.size() > 0) {
            int size = list.size();
            JSONObject data = new JSONObject();
            for (int i = 0; i < size; i++) {
                if (i == 0) {
                    JSONObject first = new JSONObject();
                    first.put("value",list.get(0));
                    first.put("color",vo.getColor());
                    data.put("first",first);
                } else if (i == size-1) {
                    JSONObject remark = new JSONObject();
                    remark.put("value",list.get(0));
                    remark.put("color",vo.getColor());
                    data.put("remark",remark);
                } else {
                    JSONObject keyword = new JSONObject();
                    keyword.put("value",list.get(i));
                    keyword.put("color",vo.getColor());
                    data.put("keyword"+i,keyword);
                }
            }
            mpTemplateMsg.put("data",data);
            object.put("mp_template_msg",mpTemplateMsg);
            jsonObject = CommonUtil.httpsRequestJson(url, "POST", object.toJSONString());
            logger.info("统一消息推送模板json======{}",jsonObject);
        }
        return jsonObject;
    }

针对入参要说下mpTemplateMsg.put("data",data)里面的data这个参数,它是first.DATA,

(keyword1.DATA,keyword2.DATA。。。),remark.DATA组成的,所以for循环里面

拼接数据的时候要分三个,分别对应first.DATA,(keyword1.DATA,keyword2.DATA。。。),remark.DATA的字段值。

3、效果

image.png

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

上一篇:实现微信扫描二维码关注公众号,直接注册登录网站

相关文章
|
6月前
|
小程序 Java 关系型数据库
基于微信小程序的智慧养老服务系统
本系统基于Java、MySQL和Spring Boot技术,构建高效、安全的养老院管理系统,提升信息处理速度与管理规范性,实现数据自动化备份与网络化管理,助力养老机构信息化升级。
|
7月前
|
算法 iOS开发 CDN
“企业微信iPad协议”第 0x04 天:当朋友圈接口在凌晨 2:14 突然返回 404
新品上线紧急任务:300位经销商朋友圈同步海报。突破官方限制,利用企业微信iPad协议私有接口,自动化上传发布。凌晨遭遇404,迅速定位并修复算法版本问题,最终高效完成推送,点赞超4200。技术在文档之外,也在边界之内。
308 0
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
7月前
|
iOS开发
“企业微信iPad协议”第0x0B次编译:当朋友圈接口在凌晨悄然返回空数组
新品海报发布失败,排查发现企业微信iPad端因本地时间偏差超60秒,导致`ext_ticket`校验失败。NTP校准后恢复正常。问题根源:独立加签逻辑对时间敏感,且错误不提示。精准时间成合规关键。
372 0
|
人工智能 JavaScript 定位技术
微信的接口都有哪些?
【10月更文挑战第17天】微信的接口都有哪些?
1241 43
|
JSON 小程序 应用服务中间件
微信的接口wxLogin()的返回值都有什么?
【10月更文挑战第4天】微信的接口wxLogin()的返回值都有什么?
1578 1
|
小程序 测试技术 数据安全/隐私保护
微信公众号接口测试实战指南
微信公众号接口测试是确保系统稳定性和功能完整性的重要环节。本文详细介绍了测试全流程,包括准备、工具选择(如Postman、JMeter)、用例设计与执行,以及常见问题的解决方法。通过全面测试,可以提前发现潜在问题,优化用户体验,确保公众号上线后稳定运行。内容涵盖基础接口、高级接口、微信支付和数据统计接口的测试,强调了功能验证、性能优化、安全保护及用户体验的重要性。未来,随着微信生态的发展,接口测试将面临更多挑战和机遇,如小程序融合、AI应用和国际化拓展。
|
JSON 前端开发 API
使用微信JS-SDK调用发票接口的完整开发指南
本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
746 2
|
7月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
8月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
426 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记

热门文章

最新文章