微信小程序订阅消息推送瞎搞哒
官方文档
一.小程序代码:
一开始用的bindsubmit发现调不起弹窗
<form bindtap="payBtn" report-submit='true' style="z-index:1;">
<button form-type="submit" type="default" class='settlement-pay-btn' wx:if='{{canClick&&payProduct.length>0}}'>确认支付 </button>
<view class='settlement-pay-btn settlement-pay-btn-dis' wx:else>确认支付</view>
</form>
Page({
data:{
template_list:[] //订阅消息模板ID集合
},
payBtn:function(){
var that = this;
wx.requestSubscribeMessage({
tmplIds: this.data.template_list,
success (res) {
//这里是下单代码
}
})
}
})
二.后台自定义模板信息,模板类型,键名,键值,模板id必填,与公众号不同的是订阅号键值发送时不能为空,否则会报错
三.推送
//要发送的订单信息
$sendData = array(
'store_name'=>'测试门店',
'order_no'=>123456
);
//keywordList 模板信息
//$value['key'] 键名
//之前后台存的键值是订单信息的键名,$sendData[$value['field']]
$tempData = array();
$template_info = 根据推送类型查出的模板信息;
$keywordList = json_decode($template_info['field_json'],true); //后台存入的模板信息键名对应键值是json字符串,查出后进行解析
foreach ($keywordList['list'] as $key => $value){
$tempData[$value['key']] = array('value' => strval($sendData[$value['field']]));
}
//获取access_token
$access_token = get_tokens($merchant_id);
//模板数据,微信要的是json数据,我这里先构建数组再转成json
$data = array(
'touser' => strval($openid),//要发送的用户
'template_id' => trim($template_id),//模板id,从模板库中获取,可通过接口获取或直接从小程序后台复制
"page" => $keywordList['page'] ? $keywordList['page'] : '',//跳转小程序的页面
'data' => $tempData,
);
//然后直接发送即可
$this->sendMsg(json_encode($data),$access_token );
//发送模板消息
protected function sendMsg($data, $access_token)
{
//这个方法里面的代码来源于百度复制,能否用于生产有待考究
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" . $access_token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}
注意事项:
1.用户每次触发订阅消息功能都会弹出授权窗口,如果用户勾选了不再询问则不会出现弹窗
2.不支持开发者工具,只能通过真机调试
3.你现在有两个订阅消息,第一个你勾选了不再询问,第二个没勾选,下次点击还是会提示的
4.键值的类型必须要符合官方规则
订阅消息参数值内容限制说明
参数类别 参数说明 参数值限制 说明
thing.DATA 事物 20个以内字符 可汉字、数字、字母或符号组合
number.DATA 数字 32位以内数字 只能数字,可带小数
letter.DATA 字母 32位以内字母 只能字母
symbol.DATA 符号 5位以内符号 只能符号
character_string.DATA 字符串 32位以内数字、字母或符号 可数字、字母或符号组合
time.DATA 时间 24小时制时间格式(支持+年月日) 例如:15:01,或:2019年10月1日 15:01
date.DATA 日期 年月日格式(支持+24小时制时间) 例如:2019年10月1日,或:2019年10月1日 15:01
amount.DATA 金额 1个币种符号+10位以内纯数字,可带小数,结尾可带“元” 可带小数
phone_number.DATA 电话 17位以内,数字、符号 电话号码,例:+86-0766-66888866
car_number.DATA 车牌 8位以内,第一位与最后一位可为汉字,其余为字母或数字 车牌号码:粤A8Z888挂
name.DATA 姓名 10个以内纯汉字或20个以内纯字母或符号 中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内
phrase.DATA 汉字 5个以内汉字 5个以内纯汉字,例如:配送中