小程序发送模板消息的使用

当我们的小程序在支付成功,或者其它的有需要和用户进行友好提示时,我们可以使用小程序的模板消息

首先查看小程序的模板消息的接口,可以看到发送模板消息要使用 accessToken ,所以我们要先调用获取accessToken的接口

https://developers.weixin.qq.com/miniprogram/dev/api-backend/auth.getAccessToken.html

拿到accesstoken 后 ,要妥善保管, 因为有请求次数的限制,它的过期时间是 7200秒,所在,要么存入数据库,并且记录一个过期时间,  要么写入缓存,给一个过期时间刚好是 7200秒   如果过期了再重新请求 accessToken 这个不是今天的重点

发送模板消息

https://developers.weixin.qq.com/miniprogram/dev/api/notice.html

 

https://developers.weixin.qq.com/miniprogram/dev/api-backend/templateMessage.send.html

这里要注意的问题是,发送模板消息 必须要在之前有一个form 表单的 formid来做参数,如果是支付的情况下的交互,也可以拿支付时的prepare_id来充当formid

prepare_id  和 formId是一样的用,但是使用次数上是有点小区别的 小程序的文档如下

1. 支付

当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发3条,多次支付下发条数独立,互相不影响)

2. 提交表单

当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)

从上面可以看到 formid只能用一次,也就是发送一个模板消息给用户

支付的 prepare_id 可以发送3次

别的不说了,上代码

  public function getTestFormTemplate(){
        $name = request()->param("name");
        $age = request()->param("age");
        $height = request()->param("height");
        $color = request()->param("color");
        $formId = request()->param("formId");
        
        //以上是前端传来的参数 其中主要的就是 formId;  (只有在手机上使用formid才有效,微信开发者工具中的 formid是不会获取到的)

        //发送模板消息,首先要获得 access_token
        $access_token = RoutineServer::get_access_token();


        $mini_open_id = WechatUser::getOpenId($this->userInfo["uid"]);
        //这里得到模板消息发送对象的open_id

        $url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=".$access_token;
        //发送模板消息请求的url


        $template_id  = "CUiIAcQb9qWOhmtwbnh2exkep9as4Jk"; 

        //在微信公众平台上配置的
        //这里是小程序后台配置好的 模板的 id

        $data = [
            "touser"=>$mini_open_id,
            "template_id"=>$template_id,
            "page"=>"www.baidu.com",
            "form_id"=>$formId,
            "data"=>[
                'keyword1'=>[
                    "value"=>$name
                ],
                'keyword2'=>[
                    "value"=>$age
                ],
                'keyword3'=>[
                    "value"=>$height,
                ],
                'keyword4'=>[
                    "value"=>$color,
                ],
                'keyword5'=>[
                    "value"=>"haha",
                ],
                'keyword'=>[
                    "value"=>"点我跳百度"
                ]
            ]
        ];
        $data = json_encode($data);

       $result = HttpService::postRequest($url,$data);

    }

以上是php服务器端的代码

小程序的界面如下

小程序的wxml代码,关于form的如下

<view class="wrapper">
  <view class="title">这是一个标题</view>


  <form report-submit="true" bindsubmit="formSubmit" bindreset='formReset'>
    //这里,这里,这里  只有report-submit= true 的时候,event.detail中才会出现 formId



    <view class="list-wrapper">
      <text>姓名:</text>
      <view class="v-input">
        <input bindinput='nameinput' name= "name"  value="{{name}}" placeholder='请输入名称' />
      </view>
    </view>

    <view class="list-wrapper">
      <text>年龄:</text>
      <view class="v-input">
        <input bindinput="ageinput" name="age" value="{{age}}" placeholder='请输入年龄' />
      </view>
    </view>

    <view class="list-wrapper">
      <text>身高:</text>
      <view class="v-input">
        <input bindinput="heightinput" name="height"  value="{{height}}" placeholder='请输入身高' />
      </view>
    </view>

    <view class="list-wrapper">
      <text>人种:</text>
      <view class="v-input">
        <input bindinput="colorinput" name="color"  value="{{color}}" placeholder='请输入人种' />
      </view>
    </view>

    <view class="list-wrapper">
      <button form-type="submit">提交</button>
    </view>
  </form>
</view>

下面是小程序的js 代吗

  formSubmit(e){
    console.log(e.detail.value);
    console.log(e);
    let data = Object.assign({}, {"formId": e.detail.formId},e.detail.value);
    //这里通过 Es6语法的 Object.assign方法把两个对象合并成一个对象

    wx.request({
      url: app.globalData.url + '/routine/auth_api/getTestFormTemplate?uid=' + 19,
      data:data
    })
  },

 

之后在真机上测试就可以了,这只是一个测试用例,实际使用时的流程不是这个样子的,当前端把 formid传给后台时,后台会把formId存 入数据库中,当有需要的时候才去调用它

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A黄俊辉A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值