- 开发无止境 -
Data: 2018-01-08 09:41:23Form: JournalClick: 22
在使用或开发小程序过程中,我们会发现消息通知是非常重要的一个环节。我把小程序消息通知分为“小程序内通知”和“微信内通知”两种。小程序内通知包含各种步骤提示、错误提示以及各种实时消息通知,这些通知只有在用户进入小程序才会看到。微信内通知则是跳出小程序的框架在微信消息列表完成消息提示。例如,我么使用某一个商品小程序下单的时候,当物流到了会通过“服务通知”提示我们“请尽快提取获取~”。下面我主要来介绍一下小程序“微信内通知”如何实现?
微信官方文档为我们介绍了三种推送方式:
这里我着重介绍一下开发者服务器接收消息推送方式:
//文件位置
<?php
function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = "*****"; //对应上图中设置的token
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if ($tmpStr == $signature ) {
return true;
} else {
return false;
}
}
$echostr = $_GET["echostr"];
if (checkSignature()) {
echo $echostr;
}
?>
登录小程序后台后,在「功能」-「订阅消息」-「公共模板库」中选择你需要的模板如下:
或者调用官方API组合模板并添加至帐号下的个人模板库
<?php
//模拟post请求
//模拟post请求
function curlPost($url,$data)
{
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
//启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
$params[CURLOPT_POST] = false;
$params[CURLOPT_HTTPHEADER] = array(
'Content-Type: application/json; charset=utf-8');
$params[CURLOPT_POSTFIELDS] = $data;
curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
function send($config) {
$token =""; //小程序接口调用凭证
$kids = [1,2,3,4]; //开发者自行组合好的模板关键词列表
$data = array("kidList"=>$kids);
//tid:模板标题 id,sceneDesc:服务场景描述
$result=curlPost("https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate?access_token=$token&tid=30753&sceneDesc=通知简介",json_encode($data));
print_r($result);
}
send();
?>
wx.requestSubscribeMessage(Object object),注意:需要用户点击,即由bindtap触发。
//订阅消息问询
subscribe: function() {
wx.requestSubscribeMessage({
tmplIds: [''], //需要订阅的消息模板的id的集合,一次调用最多可订阅3条消息
success (res) { }
})
}
https调用方式:subscribeMessage.send
<?php
//模拟post请求
function curlPost($url,$data)
{
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_POST] = true;
$params[CURLOPT_POSTFIELDS] = $data;
curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
function send($config) {
$token =""; //接口调用凭证
//消息字段值
$params = array("amount3"=>array("value"=>"11.0"),"amount4"=>array("value"=>"12.2"),"character_string6"=>array("value"=>"test123") ,"amount5"=>array("value"=>"13.0"),"thing8"=>array("value"=>"用户名"));
$data = array("touser"=>"接收者(用户)的 openid",
"template_id"=>"所需下发的订阅模板id",
"page"=>"index",//点击模板卡片后的跳转页面,仅限本小程序内的页面
"miniprogram_state"=>"trial",//跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
"lang"=>"zh_CN", //进入小程序查看”的语言类型
"data"=>$news); //模板内容
$result=curlPost("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=$token",json_encode($data));
print_r($result);
}
$config = selectOne2($conn2);
send($config);
?>
云调用方式:openapi.subscribeMessage.send
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
try {
const result = await cloud.openapi.subscribeMessage.send({
"touser": 'OPENID',
"page": 'index',
"lang": 'zh_CN',
"data": {
"number01": {
"value": '339208499'
},
"date01": {
"value": '2015年01月05日'
},
"site01": {
"value": 'TIT创意园'
},
"site02": {
"value": '广州市新港中路397号'
}
},
"templateId": 'TEMPLATE_ID',
"miniprogramState": 'developer'
})
return result
} catch (err) {
return err
}
}