1. 踩坑经历

最近做了个需求,需要往公司微信公众号推送一个模板消息,并且点击该消息需要跳转到公司小程序的某个页面。

1.1 拿到模板id

既然是发送模板消息,第一步就需要登录微信公众号后台新建模板消息,拿到模板id。

登录地址:https://mp.weixin.qq.com

新建模板消息的方法如下所示:

1)在左侧“广告与服务”菜单下找到“模板消息”菜单

2)点击”从历史模板库中添加“按钮

3)找到合适的模板后,点击”详情”,打开模板详情页

4)在模板详情页点击”添加“按钮,将模板添加到自己的公众号中

5)添加完成后,就可以拿到模板id

1.2 调用发送模板消息接口

模板消息接口文档:

https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html

发送模板消息接口:

https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=

按照接口文档要求,最终调用接口的请求报文大致如下所示:

{
"template_id":"RJr0LvTwWtwKNNeorUtfBF-ClwCRCB9GAfO55H6DjtE",
"touser":"oYLSx0S7Oci-kbNIrPA461q9g1iE",
"data":{
"first":{
"color":"",
"value":"尊敬的客户,感谢您选择****,\n以下为*****交易风险提示"
},
"keyword1":{
"color":"",
"value":"沪C88V88"
},
"keyword2":{
"color":"",
"value":"2023年03月28日 15:56"
},
"keyword3":{
"color":"",
"value":"*****交易风险提示\n为保障您的财产安全,谨防法律风险,***提醒您,请遵循平台交易流程,切勿与任何非平台第三方单独/私下交易,\n如您遇到有****买家或员工向您表示想私下交易的,可向平台进行举报,经查证属实可获奖励 800 元/单。\n"
},
"remark":{
"color":"#fe2d46",
"value":"如需举报,请点击本条消息 >>>"
}
},
"miniprogram":{
"appid":"wx356234er34567dv",
"pagepath":"pages/order/detail?id=23"
}
}

说明:

1)如果模板消息中的内容需要换行,如上面的first里的内容,可以使用换行符\n。

2)如果模板消息中的内容需要自定义字体颜色,如上面的remark里的内容,可以给color赋值为自定义的颜色。

提测后,测试反馈一直收不到微信模板消息,查看日志后,发现调用发送模板消息接口后,一直返回40165这个错误码,消息未发送成功。

响应报文如下所示:

{
"errcode":40165,
"errmsg":"invalid weapp pagepath rid: 64229d9f-2e863b15-2db557df"
}

2. 原因分析

看到40165这个错误码,想先去微信接口文档中查找下这个错误码的说明,结果文档中并没有找到,

然后根据errmsg的提示猜测可能是小程序的跳转地址,微信识别不了,所以代码先把跳转小程序的部分注释了,再次发送,

发现消息发送成功了,证实消息发送失败确实是因为小程序跳转地址导致的。

和前端沟通后,得知这个跳转地址,是本次需求新加的,处于小程序的开发版中,小程序正式版中暂时没有该地址,

所以导致发送微信模板消息一直报这个错。

3. 解决方案

经过证实,不管小程序是开发版,还是体验版,只要不是正式版,新加的这个页面地址,发送微信模板消息就是识别不了,

一直返回40165这个错误码,直到小程序审核通过成为正式版后,这个地址才被识别,发送消息终于成功了:

{
"errcode":0,
"errmsg":"ok",
"msgid":2868541260507217920
}

说点别的,因为发送微信模板消息跳转小程序有上面的这个问题,所以在做这种需求时,业务系统最好加个配置开关,上线时,先关闭该

开关,等小程序审核通过成为正式版后,再打开开关,不然在这之前的推送会全部失败。

文章持续更新,欢迎关注微信公众号「申城异乡人」第一时间阅读!

【踩坑系列】发送微信模板消息返回40165 invalid weapp pagepath的更多相关文章

  1. 应用jfinal发送微信模板消息的一个bug

    严格来讲,这不是一个bug,只是我们应用的方式不对.微信发送模板消息的方法是: HttpUtils.post(sendApiUrl + AccessTokenApi.getAccessTokenStr ...

  2. ThinkPHP3.2.3发送微信模板消息

    一.开通模板消息功能 所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限:需要选择公众账号服务所处的2个行业,每月可 ...

  3. php 实现发送微信模板消息(转)

    <?php namespace Org\Weixin; /** * Created by PhpStorm. * User: StandOpen * Date: 15-1-7 * Time: 9 ...

  4. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  5. C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信 ...

  6. 前后端分离djangorestframework—— 接入微信模板消息推送

    微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...

  7. java开发微信模板消息推送

    发布时间:2018-12-12   技术:springboot+maven   概述 该demo主要涉及微信模板消息推送功能, 详细 代码下载:http://www.demodashi.com/dem ...

  8. 5分钟连续出现某现象+微信模板消息提醒 PHP

    需求场景:用电插座电流连续出现5次电流过高(大于 3A)后停止用电服务,前四次发送电流过高提醒,最后一次发送结束用电服务提醒 思路: Redis  key 设为:插座编号+user户编号  value ...

  9. jmeter踩坑系列

    1.踩坑系列一: 抓包出来有host的字段,放到jmeter里面一起请求就报错了,去掉就请求正常了 1.踩坑系列二: 从花瓶复制过去 的values 前面有空格,肉眼看起来没有

  10. WebGL 踩坑系列-3

    WebGL 踩坑系列-3 绘制球体 在 WebGL 中绘制物体时需要的顶点是以直角坐标表示的, 当然了,gl_Position 是一个四维的向量,一般将顶点赋值给 gl_Position 时,最后一维 ...

随机推荐

  1. 5、MySQL中的锁

    1.6. MySQL中的锁 InnoDB中锁非常多,总的来说,可以如下分类: 这些锁都是做什么的?具体含义是什么?我们现在来一一学习. 1.6.1.解决并发事务问题 我们已经知道事务并发执行时可能带来 ...

  2. Jetpack compose学习笔记之ConstraintLayout(布局)

    一,简介 Jetpack compose中没有提供ConstraintLayout支持,所以需要添加下面的依赖来导入. // build.gradle implementation "and ...

  3. MySQL8.0使用GROUP BY的问题

    当使用group by的语句中,select后面跟的列,在group by后面没有时,会报以下错误: Expression #2 of SELECT list is not in GROUP BY c ...

  4. AutoCAD2018

    「AutoCAD_2018_SC.exe」https://www.aliyundrive.com/s/GvpR9yg6TWg 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线 ...

  5. 20181224《网络攻防技术》Exp 8 Web综合

    20181224<网络攻防技术>Exp 8 Web综合 目录 20181224<网络攻防技术>Exp 8 Web综合 相关知识点总结 web前端 web后端 数据库编程 实验内 ...

  6. 模拟实现call,apply,bind方法,以及三者区别

    // 模拟实现call方法 Function.prototype.call2 = function (context) { var context = context || window; conte ...

  7. RabbitMQ管理控制台的使用

    RabbitMQ管理控制台的使用 添加一个用户 添加一个Virtual Hosts 把虚拟机和用户绑定 点击创建的虚拟机 配置 rabbitmq.config cp rabbitmq.config.e ...

  8. jsp第4个作业(2)

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  9. css 多行文本展开收起

    <template> <div class="content"> <div :class="[isOpen ? 'text' : 'text ...

  10. java学习笔记(五)运算符

    ++ --   自增自减 a++ 执行完这行代码后,先给b赋值,再自增 ++a 执行完这行代码前,先自增,再给b赋值 Math类