400-800-9385
网站建设资讯详细

微信小程序模板消息推送详细介绍及代码实现

发表日期:2018-03-17 10:50:04   作者来源:方维网络   浏览:12724   标签:小程序    
  在如今科技发达的年代,大家每天都在接收大量的信息,如电话、短信、APP消息推送、邮件、微信消息、微信服务通知、朋友圈消息、微博消息等等,这些不乏大量的推广信息。面对大量的垃圾信息,我们会报告垃圾短信、屏蔽垃圾电话、屏蔽垃圾邮件、屏蔽某人朋友圈等等,这也导致了大部分消息推送方式的失效或者效果打折。那么,今天方维网络谈的是,效果非常好的微信服务通知,因为这里推送的都是有效信息,屏蔽的人非常少,微信不允许你把它当做推广工具,所以都有调用次数等规则限制,但我们可以好好利用以保持应用的用户粘性。

小程序的模板消息推送,体现在微信-服务通知,如下图。

模板消息推送
点击模板消息,可直接进入小程序某个页面,利用好可以保持应用和用户的粘性,效果非常好。

是不是什么消息都可以发送?模板消息推送有什么条件?
为了防止垃圾信息推送,微信做了很多的规范和限制,如下
  1. 只能发送微信提供的模板信息,不能自定义消息内容,想发什么就发什么;
  2. 有推送条件限制,即用户本人在微信体系内与页面有交互行为后触发。当用户在小程序内完成过支付行为,可在7天内推送3条模板消息或者当用户在小程序内有提交表单行为,可7天内推送1条模板消息。
  3. 有各种标题、关键词规范,防止发送垃圾信息,违者封接口。

具体推送步骤如下

第一步、到小程序管理后台申请推送模板。如下图,已申请了2个模板,最多可申请25个模板消息,模板库目前有160个模板,适合各行各业。

模板消息列表
比较重要的是记住模板ID和模板关键词,在实际推送过程中需要用到,如下图

模板消息详细
 

第二步、收集用户formid

用户支付产生的prepay_id和提交表单时产生的formid(表单属性report-submit="true")
 
小程序前端代码

消息推送前端代码

小程序JS后台代码

小程序JS代码

后台程序接收代码并保持到数据库

数据库如下

CREATE TABLE `xxx_formid` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自动ID',
  `member_id` int(11) DEFAULT NULL COMMENT '会员ID',
  `form_id` varchar(50) DEFAULT NULL COMMENT '收集到的form_id',
  `time_create` int(11) DEFAULT NULL COMMENT '收集时间',
  `time_expire` int(11) DEFAULT NULL COMMENT '过期时间',
  `can_use_times` int(2) DEFAULT NULL COMMENT '可使用次数',
  `used_times` int(2) DEFAULT NULL COMMENT '已使用次数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='小程序收集的用于推送消息的form_id表';

THINKPHP推送代码如下

 /**
     * 发送模板消息
     * @param type $ctype 模板消息类型
     * @param type $member_id 会员ID
     * @param type $template_id 模板ID
     * @param type $url 模板消息跳转地址
     * @param type $data 模板消息数据
     * @return int 是否成功
     */
    function do_send($ctype,$member_id, $template_id, $url, $data)
    {
        //获得access_token
        $AccessTokenObj = new AccessTokenModel();
        $access_token = $AccessTokenObj->get_token();
        
        //获得用户open_id
        $MemberObj = new MemberModel();
        $openid = $MemberObj->get_openid($member_id);
        
        //获得form_id
        $FormidObj = new FormidModel();
        $form_id = $FormidObj->get_form_id($member_id);
        
        $template = array(
            'touser' => $openid,
            'form_id' => $form_id,
            'template_id' => $template_id,
            'page' => $url,
            'data' => $data  
        );
        
        if(empty($openid)) {
            $this->add_record($ctype, $member_id, $openid, $form_id,$template_id, json_encode($data),$url, 0, "没有可用openid");
            return 2;//没有可用的openid
        }
        
        if(empty($form_id)) {
            $this->add_record($ctype, $member_id, $openid, $form_id,$template_id, json_encode($data),$url, 0, "没有可用formid");
            return 3;//没有可发送的form_id
        }
        
        $json_template = json_encode($template);
        $url_send = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" . $access_token;
        $json_result = sendCmd($url_send,$json_template);
        $result = json_decode($json_result,true);
        
        $is_success = 0;
        $err_msg = '';
        if($result['errcode'] == 0) {
            $FormidObj->update_state_form_id($form_id);
            $is_success = 1;
        } else {  
            $err_msg = $result['errcode'];
        }
        $this->add_record($ctype, $member_id, $openid, $form_id, $template_id, json_encode($data), $url, $is_success, $err_msg);
        return $is_success;
    }
    
其中需要用到PHP发送请求函数

/**
 * 发起请求
 * @param  string $url  请求地址
 * @param  string $data 请求数据包
 * @return   string      请求返回数据
 */
function sendCmd($url,$data)
{
    $curl = curl_init(); // 启动一个CURL会话      
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址                  
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检测    
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在      
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:')); //解决数据包大不能提交     
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转      
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer      
    curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求      
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包      
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循     
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容      
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回 
           
    $tmpInfo = curl_exec($curl); // 执行操作      
    if (curl_errno($curl)) {      
       echo 'Errno'.curl_error($curl);      
    }      
    curl_close($curl); // 关键CURL会话      
    return $tmpInfo; // 返回数据      
}

微信小程序的模板消息推送和服务号的模板消息推送还是不一样的

小程序发送需要formid,而且有7天的时间限制,而服务号是不需要的,但是一个服务号每天有消息总条数限制。

下面附带小程序的一些规则

审核说明
1.标题

1.1标题不能存在相同

1.2标题意思不能存在过度相似

1.3标题必须以“提醒”或“通知”结尾

1.4标题不能带特殊符号、个性化字词等没有行业通用性的内容

1.5标题必须能体现具体服务场景

1.6标题不能涉及营销相关内容,包括不限于:

消费优惠类、购物返利类、商品更新类、优惠券类、代金券类、红包类、会员卡类、积分类、活动类等营销倾向通知

2.关键词

2.1同一标题下,关键词不能存在相同

2.2同一标题下,关键词不能存在过度相似

2.3关键词不能带特殊符号、个性化字词等没有行业通用性的内容

2.4关键词内容示例必须与关键词对应匹配

2.5关键词不能太过宽泛,需要具有限制性,例如:“内容”这个就太宽泛,不能审核通过

违规说明

除不能违反运营规范外,还不能违反以下规则,包括但不限于:

不允许恶意诱导用户进行触发操作,以达到可向用户下发模板目的
不允许恶意骚扰,下发对用户造成骚扰的模板
不允许恶意营销,下发营销目的模板

处罚说明

根据违规情况给予相应梯度的处罚,一般处罚规则如下:

第一次违规,删除违规模板以示警告,

第二次违规,封禁接口7天,

第三次违规,封禁接口30天,

第四次违规,永久封禁接口

处罚结果及原因以站内信形式告知

方维网络专注于微信小程序定制开发,欢迎有需要的客户咨询我们的服务热线400-800-9385,或者加我们的客服QQ97798819

 
如没特殊注明,文章均为方维网络原创,转载请注明来自https://www.szfangwei.cn/news/4215.html