微信小程序订阅模板推送瞎搞哒

微信小程序订阅消息推送瞎搞哒

官方文档
一.小程序代码:
一开始用的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个以内纯汉字,例如:配送中

发布了6 篇原创文章 · 获赞 5 · 访问量 456

猜你喜欢

转载自blog.csdn.net/CS__Love/article/details/103957299