微信小程序模板消息实现(PHP+小程序)

article/2025/9/11 4:33:04

参考官方文档和部分资料,总结小程序模板消息推送以及相关注意事项,楼主踩过的坑,特来与大家分享。

一、开发准备:

1. 在微信公众平台 - 小程序的模板中心申请消息模板

Laravel

Laravel

 二、实现原理:

文档示例:小程序 + 接口(PHP)

小程序部分:

话不多说,先上效果图:

Laravel

 示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<form bindsubmit="formSubmit" report-submit='true' >

  <view class="btn-area"><button formType="submit">Submit</button></view>

</form>

formSubmit: function (e) {

  console.log('form发生了submit事件,formId为:', e.detail)

  var that = this;

  wx.request({

        url: 'https://api.XXX.com/sendTemplateMessage.api',

        data: {

              uid: uid,

              formId: e.detail.formId

        },

        method: 'post',

        header: {'content-type''application/x-www-form-urlencoded'}, //使用这种方式后台才能实现获取到数据

        success: function (res) {

          console.log("发送模板:" + res.data)

        }

  })

  

注意事项:

小程序通 submit 点击事件获 formid 在安卓和 IOS 是不一样的,安卓系统中为 13 位时间戳,而 IOS 系统中为 32 位字符串,在做接口请求时,不需要做额外处理。

                       安卓系统                                                                      

Laravel

                    IOS系统 

 

Laravel

PHP 接口部分:
1. 根据微信公众平台 --  设置  --  消息推送 -- URL (服务器地址),在 PHP 项目配置入口文件,实现请求分发。
2. 验证入口文件,传递 token 令牌(消息推送的 token),进行 Signature 签名有效性验证,完成之后才能进行消息模板的服务器 URL 地址配置。

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

<?php

    define('SS_START_TIME', microtime(true));

    define('RUN_SS', true);

    require '../ss/ss.php';

    $ss new ss('xcx');

    $ss->execute('xcx''valid''xcx');

?>

<?php

    // 小程序验证入口文件

    public  function xcx(){

        $type $token;    //Token(令牌)

        if ($this->checkSignature($type) && isset($_GET['echostr'])){

            echo $_GET['echostr'];

            exit();

        }

    }  

    /**

     * 校验微信加密签名

     * [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) bool

     */

    private function checkSignature($type ''){

        // 微信服务器配置Token

        $token $type;

        // 1.将timestamp,token,nonce按字典序排序

        $timestamp $_GET['timestamp'];

        $nonce $_GET['nonce'];

        $signature $_GET['signature'];

        $arr array($timestamp$token$nonce);

        sort($arr, SORT_STRING);

        // 2.拼接为字符串并sha1加密

        $tmpStr = implode($arr);

        $tmpStr = sha1($tmpStr);

        // 3.与signature对比判断是否来自微信服务器

        if ($tmpStr == $signature){

            return true;

        }else{

            return false;

        }

    }    

?>

  

可在 https://mp.weixin.qq.com/debug/ 调试获取 access_token

Laravel

3. 微信公众平台 - 设置 - 开发设置配置消息推送(需要先将入口文件上传服务器)

Laravel

4. 在微信公众平台获取相关参数:
AppID (小程序 ID)、AppSecret (小程序密钥)、Token (令牌)、TemplateId(模板 id)、EncodingAESKey (消息加密密钥)

4.1  小程序模板接口

复制代码

/**小程序模板消息*@param uid 用户id*$param template_id 模板id*@param form_id 表单提交场景下formId(只能用一次)*@param emphasis_keyword 消息加密密钥*/public function sendTemplateMessage($uid,$form_id,$template_id){// 检验uid合法性 防止非法越界$nickname = "nickname";  // 用户昵称// 此openid为小程序的openid切勿与微信自动登录的openid混淆$xcx_open['openid'] = "用户openid";// openid可以通过PHP接口或者小程序获取if ($xcx_open['openid']) {$temp_msg = array('touser' => "{$xcx_open['openid']}",'template_id' => "{$template_id}",'page' => "/pages/index/index",'form_id' => "{$form_id}",'data' => array('keyword1' => array('value' => "{$nickname}",),'keyword2' => array('value' => date('Y-m-d H:i:s', time()),),'keyword3' => array('value' => "好友已完成测试,快去看看吧!",),'keyword4' => array('value' => "你收到1封新信件,快去看看吧~",),),'emphasis_keyword'=> "{$emphasis_keyword}");$res = $this->sendXcxTemplateMsg(json_encode($temp_msg));echo "<pre>";var_dump($res);exit;}}

复制代码

4.2 发送小程序模板消息

复制代码

  /*** 发送小程序模板消息* @param $data* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) array*/public function sendXcxTemplateMsg($data,$appid = "",$appsecret = ""){// 具体模板格式参考公众平台申请的template_idif (!$appid || !$appsecret){$appid        = '';    //小程序id$appsecret    = '';    //小程序秘钥 }$access_token = $this->getXcxAccessToken($appid,$appsecret);$url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token={$access_token}";return $this->http_request($url, $data);}

复制代码

请求数据格式如下:

复制代码

{"touser": "OPENID","template_id": "TEMPLATE_ID","page": "index","form_id": "FORMID","data": {"keyword1": {"value": "339208499"},"keyword2": {"value": "2015年01月05日 12:30"},"keyword3": {"value": "腾讯微信总部"} ,"keyword4": {"value": "广州市海珠区新港中路397号"}},"emphasis_keyword": "keyword1.DATA"
}

复制代码

4.3 获取 access_token

复制代码

/*** 获取微信接口调用凭证* @param string $appid* @param string $appsecret* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) mixed*/public function getXcxAccessToken($appid = '', $appsecret = ''){if (!$appid || !$appsecret){$appid        = '';$appsecret    = '';}// 缓存获取$cache = &factory::cache();if (!$cache->get($appid.'xcx_access_token')){$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";$res = $this->http_request($url);// access_token设置到缓存中$cache->set($appid.'xcx_access_token', $res['access_token'], 7000);return $res['access_token'];}return $cache->get($appid.'xcx_access_token');}

复制代码

4.4 CURL 模拟 HTTP 请求(POST)`

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

/**

    * curl模拟http请求GET/POST

    * @param $url

    * @param null $data

    * [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) array

    */

   public function http_request($url$data = null)

   {

       $ch = curl_init();

       curl_setopt($ch, CURLOPT_URL, $url);

       // 以文件流形式返回

       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

       if (!empty($data))

       {

           // POST请求

           curl_setopt($ch, CURLOPT_POST, 1);

           curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

       }

       $output = curl_exec($ch);

       curl_close($ch);

       // 返回数组

       return json_decode($output, true);

   }

  

传递参数:根据定义接口传递相关参数,用户 uid  通过 uid 获取 openid,此 openid 为小程序的 openid, formId 为表单提交场景下,为 submit 事件带上的 formId,formid 在安卓和 ios 下的数据格式和长度不一致,而且小程序获取 formid 只支持真机调试。

接口调试:errcode 的合法值
值 说明
40037 template_id 不正确
41028 form_id 不正确,或者过期
41029 form_id 已被使用
41030 page 不正确
45009 接口调用超过限额(目前默认每个帐号日调用限额为 100 万)
请求成功:

1

2

3

4

5

6

7

8

{

    "state": 1,

    "data": {

        "errcode": 0,

        "errmsg""ok"

    },

    "info""successful!"

}

  

至此,推送功能完整实现!


http://chatgpt.dhexx.cn/article/wv62yGiX.shtml

相关文章

微信小程序订阅模板消息

1.登录管理员后台&#xff0c;订阅消息&#xff0c;选择模板或者申请模板 2. 开发管理&#xff0c;开发设置&#xff0c;开启消息推送&#xff0c;并验证服务器 3. 开发获取获取模板列表接口&#xff0c;和 测试消息发送接口 4. 前端根据接口配置授权弹窗页&#xff0c;获取用…

微信小程序|如何设置模板消息提醒

管理员如何设置模板消息提醒&#xff0c;管理员如何查看。回复用户咨询信息 使用管理员模板消息提醒&#xff0c;首先配置模板消息 第一步&#xff0c;设置模板消息&#xff0c;配送员通过微信模板消息接收配送信息&#xff0c;需要在平台——微信公众号——模板消息设置&#…

小程序之模板消息

使用模板消息 获取模板 id 登录https://mp.weixin.qq.com获取模板&#xff0c;如果没有合适的模板&#xff0c;可以申请添加新模板&#xff0c;审核通过后可使用&#xff0c;详见模板审核说明 页面的 <form/> 组件&#xff0c;属性report-submit为true时&#xff0c;可…

微信小程序模板消息的两种实现方式

最近在做微信小程序&#xff0c;为了让用户能更加方便的获取到小程序内部的通知&#xff0c;便想着用模板消息来解决此类问题。首先介绍一下两种方法 第一种是传统的按照微信开发文档来实现模板消息的获取&#xff0c;首先要明确的是你要有一个第三方的服务器&#xff0c;因为…

微信小程序实例:创建下发模板消息实例

鉴于目前网络上都还找不到小程序下发模板消息的相关资源&#xff0c;在多次阅读了官方文档今天终于把小程序的模版消息给测通了&#xff0c;接下来介绍在不使用服务器的情况下&#xff0c;前端开发人员在本地怎么测试模板消息的发送。 1、在微信公众平台-小程序的模板中心先申请…

小程序配置模板消息

1.登录微信公众号平台&#xff0c;需要有权限的工作人员进行扫码登录。 2.登录进去点击订阅消息。 3.点击添加按钮&#xff0c;可以在搜索框进行搜索想要的模板类型&#xff0c;然后点击选用即可。 4.选择提醒模板消息的参数&#xff0c;需要跟客户沟通需要什么参数就配什么参…

小程序 发送模板消息的功能实现

☹. 背景 - 小程序开发的过程中&#xff0c;绝大多数会满足微信支付 - 那么&#xff0c;作为友好交互的体现&#xff0c;自然就会考虑到支付后的消息通知咯 - 所以&#xff0c;我的小程序项目也要求完成这个效果&#xff0c;so.分享一下自己的实现步骤&#xff0c;以方便道友们…

微信小程序-----消息模版(最全解释)

最近小程序在码界里嫌弃腥风血雨&#xff0c;每一个码奴都感觉世界给自己又多开一个扇窗&#xff0c;本菜鸟也眼红不已&#xff0c;就尝试着写了一个小程序&#xff0c;今天跟大家分享一下自己在写消息模版时候遇到的坑&#xff0c;希望能帮助每一位路过踩坑的道友&#xff1b;…

微信小程序模板消息推送

时序图 ​​​​​​​ 首先&#xff0c;我们需要知道一件事情&#xff0c;小程序的模板推送分为“一次性订阅”和“长期订阅” 一次性订阅&#xff1a;用户订阅小程序后&#xff0c;程序只能对指定OpenId进行一次推送模板消息&#xff0c;无法多次推送 长期订阅&#xff1a…

小程序发送模板消息给用户 —— 一次性模板实现“长期订阅”

大家好&#xff01;我是我玩亚索我会C&#xff0c;在写小程序时&#xff0c;我们会有向用户发送消息的需求&#xff0c;比如发送提醒通知&#xff0c;或者是一些重要通知来形成一个服务的闭环。这就要用到微信的发送消息功能了&#xff0c;下面我使用Java语言来详细演示下如何使…

小程序发送模板消息详细步骤

小程序发送通模板消息详细步骤 步骤一&#xff1a;获取模板id步骤二&#xff1a;页面的form组件&#xff0c;属性report-submit为true时&#xff0c;可以声明为需发模板消息&#xff0c;此时点击按钮提交表单可以获取formId&#xff0c;用于发送模板消息。或者当用户完成支付行…

小程序模板消息

一,制定小程序订阅消息模板 示例图片 (图1) 首先我们来讲一下如何获取制定微信小程序的订阅消息模板, 如图1所示我们首先要登录到微信公众平台,如图 而后进入到图1所示的订阅消息这个页面, 如果你是首次进入的话那么需要开通, 这里比较简单就不用讲解了, 如果说进入之后…

微信小程序能实现盈利的7大流量主广告组件及其分成模式概览

前段时间涉足了微信小程序流量主广告的接入&#xff0c;所以就学习和了解了一下相关的介绍与接入场景。因此做一下笔记记录。 概览 微信小程序流量主广告组件有Banner 广告、激励视频广告、插屏广告、小程序视频广告、视频前贴广告、Grid 广告、原生模板广告等。 基础介绍 什…

小程序无限插屏广告实现方法

大家好啊&#xff0c;最近突然想到一个问题&#xff0c;自己做为一个程序员&#xff0c;每天发的公众号文章和程序根本没半毛钱关系&#xff0c;靠分享一些破解软件浑浑度日&#xff0c;再这样下去恐怕要废。所以今天给自己技术群的狗子们分享一个小知识点&#xff0c;如何让你…

我做的小程序,昨天赚了 2.06 元广告费

我做的小程序&#xff0c;昨天赚了 2.06 元广告费 先看一下广告上线三天的收益&#xff0c;虽然不多&#xff0c;但很快乐hhh。 2020 年 6月接触了小程序云开发&#xff0c; 那时候还不太会写太复杂的小程序界面&#xff0c;于是就找了几个开源的框架改了改。 因为当时所处的行…

小程序流量主运营

个人和小微企业可通过小程序流量主进行变现&#xff0c;如果你擅长推广&#xff0c;有较多的粉丝那么小程序变现无疑是一种很好的收入渠道。小程序流量主的开通渠道门槛并不高——满1000人即可开通流量主。 那么我们运营什么样的小程序开通流量主进行流量变现呢&#xff1f;以…

Uni-app 小程序 APP 的广告变现之路:插屏广告

插屏广告 插屏广告组件是由客户端原生的图片、文本、视频控件组成的&#xff1b;一般来说&#xff0c;插屏广告可以实现比传统信息流广告和banner广告展现更大的广告尺寸&#xff0c;同样能够满足您对大量曝光和用户转化的需求。 平台差异说明 AppH5微信小程序支付宝小程序百…

小程序进入首页时弹出广告

项目需求&#xff0c;判断用户是否开通会员&#xff0c;没开通会员的话每次进入小程序弹出一个引导开通会员的弹窗&#xff0c;已经开通会员的不在弹 先看下效果图 wxml代码 <!-- 广告展示 --><view class"mask" hidden"{{showAd}}"><view…

uniapp 小程序 加载显示激励视频广告

uniapp激励广告文档&#xff1a;uni-app官网https://uniapp.dcloud.io/api/a-d/rewarded-video微信官网激励广告文档&#xff1a;激励视频广告 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/ad/rewarded-video-a…

微信 小游戏/小程序 广告组件被驳回 审核不通过

最近做微信小游戏开发&#xff0c;接入广告时遇到一些问题&#xff0c;被驳回了好几次。 相信大家接过微信小游戏或者小程序广告都晓得&#xff0c;接入很简单&#xff0c;不论是banner广告还是激励视频广告只要在合适的位置合适的时机去展示广告&#xff0c;都会顺利审核通过…