原文链接:https://www.whongbin.cn/index/article/detail/id/47.html
前言
1: 官方文档
https://developers.weixin.qq.com/miniprogram/dev/api/notice.html#发送模板消息
总的来说,小程序发送模板消息和公众号发送模板消息区别不是很大
2: 小程序发送模板消息:
- 获取access_token并存储以备再次使用
- 小程序端获取发送必要的formID(submit提交事件)或 prepay_id(支付事件)
- 拼装模板消息数据
- 调用接口发送模板消息
吐槽一下
微信小程序的机制是这样的
formid 只能通过移动端进行获取(手机,iPad);
每获取到一个 formid **只能使用一次**(一个formid只能发送一条模板消息);
发起form表单提交事件 ==> 获取 form_id 和 发起人openid ==> php后台处理拼装模板消息 ==> 发送给发起人;
上边说的意思是:A获取的formid只能用来给自己发送模板消息,不能用来给B发送模板消息;
解决方案
在A触发表单提交事件时,将本次获取到的formid保存到A提交的表单内容中,反正就是与A本次提交的数据绑定死(死结,除了自己,谁都不给用),在B触发对A的某事件时,需要发送模板消息了,这时把A之前绑定的formid拿出来用,还是给A自己用
for example:
A提交了请假申请(通过表单提交申请内容),B审核,审核完成后,把审核结果通过模板消息发送给A
终于到代码了
我不是前端妹子,小程序的代码就不放了,自己找找吧
<?php
namespace Jykj\\Template\\Weixin;
/**
* 小程序模板消息发送
* 微信规定:不能直接在小程序调用,只能在后台发起
*/
class WxSendTemplate {
private $token ='''';
private $appid = ''******************'';
private $appsecret = ''********************************'';
private $templateid = ''*******************************************'';
private $SEND_TEMPLATE_URL = ''https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=##TOKEN##'';
private $GET_ACCESSTOKEN_URL = ''https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=##APPID##&secret=##APPSECRET##'';
/**
* 构造函数,获取access_token
* @Author wanghongbin
* @Email wanghongbin@ngoos.org
* @DateTime 2018-07-06
*/
public function __construct() {
$this->token = $this->getAccessToken();
}
/**
* 发送模板消息
* @Author wanghongbin
* @Email wanghongbin@ngoos.org
* @DateTime 2018-07-06
* @param array
* @return [type]
*/
public function sendTemplateData($data = array()) {
$options = array(
''http'' => array(
''method'' => ''POST'',
''header'' => ''Content-type:application/json'',//header 需要设置为 JSON
''content'' => $this->getTemplatePostData($data),
''timeout'' => 60//超时时间
)
);
$url = str_replace("##TOKEN##",$this->token,$this->SEND_TEMPLATE_URL);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
return $result;
}
/**
* 获取模板消息
* @Author wanghongbin
* @Email wanghongbin@ngoos.org
* @DateTime 2018-07-06
* @param array
* @return [type]
*/
private function getTemplatePostData($data=array()){
$post_data = array (
"touser" => $data[''openid''],//用户的 openID,可用过 wx.getUserInfo 获取
"template_id" => $this->templateid,//小程序后台申请到的模板编号
"page" => $data[''pageuri''],//点击模板消息后跳转到的页面,可以传递参数
"form_id" => $data[''formid''],//第一步里获取到的 formID
"data" => array(
''keyword1'' => array( "value" => $data[''status''],"color"=>"green"),
''keyword2'' => array( "value" => $data[''shopername'']),
''keyword3'' => array( "value" => $data[''telephone'']),
''keyword4'' => array( "value" => $data[''ordertime''])
),
"emphasis_keyword" => "keyword1.DATA"
);
//将数组编码为 JSON
return \\json_encode($post_data, true);
}
/**
* 获取AccessToken
* @Author wanghongbin
* @Email wanghongbin@ngoos.org
* @DateTime 2018-07-06
* @return [type]
*/
private function getAccessToken () {
$url = str_replace("##APPID##",$this->appid,$this->GET_ACCESSTOKEN_URL);
$url = str_replace("##APPSECRET##",$this->appsecret,$url);
$html = file_get_contents($url);
$output = json_decode($html, true);
$access_token = $output[''access_token''];
return $access_token;
}
/**
* 获取所有的模板
* @Author wanghongbin
* @Email wanghongbin@ngoos.org
* @DateTime 2018-07-06
* @return [type]
*/
public function get_all_private_template()
{
$url = "https://api.weixin.qq.com/cgi-bin/wxopen/template/list?access_token=".$this->token;
$res = file_get_contents($url);
return json_decode($res,true);
}
}
网友评论