前言
个人申请的小程序是否可以推送?
答案是肯定的,下面记录的就是我的踏坑之旅,后台采用PHP实现。
要想完成推送大概可分为六步:
- 配置模板
- 生成小程序 AppSecret
- 获取 ACCESS_TOKEN
- 获取将要推送用户的 openID
- 提交 formId
- 推送模板信息
PHP 发送网络请求公共方法
在开始之前,这里提供一个PHP发起网络请求的Http方法,后续代码都会用到:
function Http($url,$data,$type="http"){
$curl = curl_init();
if ($type == "json"){
$headers = array("Content-type: application/json;charset=UTF-8");
$data=json_encode($data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
1、配置模板
在微信公众平台进入模板消息模块,点击添加会到模板库里面挑选你想推送的模板。配置好点击提交即可。
2、生成小程序 AppSecret
在小程序管理后台的开发设置中,点击【生成】或者【重置】,便会让你扫码验证。
注意:这里的AppSecret你需要记录下来,因为它不会再次出现在你的管理界面。如果要找回就只有重置,一旦重置之前的就会失效。
3、获取 ACCESS_TOKEN
access_token是小程序后台API调用的凭据,有效期为2个小时,需要定时获取。
接口文档:获取接口调用凭证
PHP代码示例:
$data = [
"grant_type" => "client_credential",
"appid" => $appId,
"secret" => $appSecret
];
$r = http_request("https://api.weixin.qq.com/cgi-bin/token", $data);
//返回的是字符串,需要用json_decode转换成数组
$data = json_decode($r, true);
4、获取将要推送用户的 openID
这一步需要小程序端的配合,调用wx.login获取js_code并发送给后台,后台用js_code换取用户的openID。
小程序端代码:
var that = this;
//获取js_code
wx.login({
success: res => {
var code = res.code;
//把js_code发送给后台
that.loginRequest(code);
},
fail: e=> {
}
})
//网络请求发送js_code
loginRequest: function(code){
wx.request({
url: "/api/login",
data: {
"code": code
},
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: function (res) {
console.log(res.data)
}
})
}
接口地址:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
PHP后台换取openID代码:
$r = http_request("https://api.weixin.qq.com/sns/jscode2session", [
"grant_type" => "authorization_code",
"appid" => $appId,
"secret" => $appSecret,
"js_code" => $code
]);
$rdata = json_decode($r, true);
5、提交 formId
获取 openID 以及开发者的 ACCESS_TOKEN 就类似做好微信的授权操作了。
由于微信不允许开发者主动推送杂七杂八的消息,必须要用户自愿接受推送。通过用户提交form表单后就代表用户自愿接受推送。
小程序端表单代码:
<form bindsubmit="formSubmit" report-submit="true">
<button form-type="submit">提交</button>
</form>
小程序端JS代码:
formSubmit: function (e) {
var that = this
wx.request({
url: "/api/formid",
data: {
"form_id": e.detail.formId
},
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: function (res) {
console.log(res.data)
},
fail: function(e){
}
})
}
PHP后台拿到formID时就可以准备推送了。
6、推送模板信息
接口文档:发送模版消息
PHP代码示例:
$data = [
"touser" => "用户openid",
"template_id" => "模板id",
"form_id" => "formid",
"data" => [
"keyword1" => [
"value" => "收到没",
"color" => "#cccccc"
]
]
];
$ast = "xxx"; //ACCESS_TOKEN
$rdata = http_request(
"https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" . $ast,
$data,
"json"
);
$rdata = json_decode($rdata, true);
注意:推送的地址一定要带上 access_token 参数,否则将会出现 access_token error 错误。
总结
到这里,使用PHP实现小程序通知推送的全过程就完成了。主要流程包括:获取access_token、获取用户openID、收集用户formId、最后调用模板消息接口发送通知。

发表评论 取消回复