微信小程序之 PHP 发送模板消息

        小程序开放个人申请已经有个几天了,踩了无数的坑…折腾了半个多小时终于搞定了模板消息的推送,在这儿 share 一下咯!


前期准备:

        首先,发送模板消息的前提是:

                formId 或 prepay_id:

        用户必须得提交了表格或进行了支付才能推送模板消息,而且一个 formId 或 prepay_id 只能推送一条消息。

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

openID:
        “推送给谁”的用户标识符

template_id:
         模板消息的模板编号,可在微信小程序的后台申请

access_token:
         access_token 是全局唯一接口调用凭据,开发者调用各接口时都需使用 access_token,请妥善保存。

         access_token 的存储至少要保留512个字符空间。

         access_token 的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效。

        然后获取formID:

    首先,个人小程序是无法进行支付的,所以只好用提交 form 的办法了:

<!-- submit.wxml -->
<form bindsubmit="submit" report-submit="true">
  <!--这里是一些 <input>-->
  <button formType="submit">提交</button>
</form>

    然后,在 JS 里接收 form 的 formID:

// submit.js
submit: function (e) {
  var formID = e.detail.formId;
  //其他代码,比如 wx.request 之类
}

发送模板消息:

获取 access_token:

        access_token 需要用到自己小程序的 appId 和 appsecret,并调用微信的 API,PHP 脚本如下:

// getAccessToken.php
function getAccessToken ($appid, $appsecret) {                    
  $url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
  $html = file_get_contents($url);
  $output = json_decode($html, true);
  $access_token = $output['access_token'];

  return $access_token;
}

发送模板消息:

//sendNotice.php
include 'getAccessToken.php';
$data_arr = array(
  'keyword1' => array( "value" => $value, "color" => $color ) 
  //这里根据你的模板对应的关键字建立数组,color 属性是可选项目,用来改变对应字段的颜色
);
$post_data = array (
  "touser"           => $openid,
  //用户的 openID,可用过 wx.getUserInfo 获取
  "template_id"      => $templateid,
  //小程序后台申请到的模板编号
  "page"             => "/pages/check/result?orderID=".$orderID,
  //点击模板消息后跳转到的页面,可以传递参数
  "form_id"          => $formid,
  //第一步里获取到的 formID
  "data"             => $data_arr,
  "emphasis_keyword" => "keyword2.DATA"
  //需要强调的关键字,会加大居中显示
);

function send_post( $url, $post_data ) {
  $options = array(
    'http' => array(
      'method'  => 'POST',
      'header'  => 'Content-type:application/json',
      //header 需要设置为 JSON
      'content' => $post_data,
      'timeout' => 60
      //超时时间
    )
  );

  $context = stream_context_create( $options );
  $result = file_get_contents( $url, false, $context );

  return $result;
}

$url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=".getAccessToken ($appid, $appsecret);  
//这里替换为你的 appID 和 appSecret
$data = json_encode($post_data, true);   
//将数组编码为 JSON

$return = send_post( $url, $data);
echo '返回值:' . $return;
//这里的返回值是一个 JSON,可通过 json_decode() 解码成数组

返回值(直接复制疼训爸爸的原话咯):

返回码 说明
0 一切正常,推送成功
40037 template_id 不正确
41028 form_id 不正确,或者过期
41029 form_id 已被使用
41030 page不正确
45009 接口调用超过限额(目前默认每个帐号日调用限额为100万)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值