首先回答一個問題:
個人申請的小程序是否可以推送?
答案是肯定的,下面記錄的就是我的踏坑之旅,后臺采用PHP實現。
要想完成推送大概可分為六步:
1、配置模板
2、生成小程序 AppSecret
3、獲取 ACCESS_TOKEN
4、獲取將要推送用戶的 openID
5、提交 formId
6、推送模板信息
接下來是詳細的步驟:
關于對于下文后臺PHP網絡請求調用的Http方法不明白的地方,或者不知道怎么用PHP發(fā)起網絡請求的,可以查看我的另一篇文章
【PHP 發(fā)送網絡請求】
http://m.itdecent.cn/p/77096b4c2eff
這里我把方法粘貼過來:
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;
}
我用的curl發(fā)的網絡請求,你可以采用其他的方法。
1、配置模板

點擊添加會到模板庫里面挑選你想推送的模板


配置好點擊提交,就OK了。
2、生成小程序 AppSecret

點擊【生成】或者【重置】,便會讓你掃碼驗證,驗證好后就會彈出下面這個框

這里的AppSecret你需要記錄下,因為他不會出現在你的管理界面,如果要找回就只有重置,一但重置之前的就會失效。
3、獲取 ACCESS_TOKEN
文檔地址:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

支持POST、GET請求
access_token的有效期目前為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發(fā)送給后臺,后臺用js_code換取用戶的openID。
代碼片段:
var that = this;
//獲取js_code
wx.login({
success: res => {
var code = res.code;
//把js_code發(fā)送給后臺
that.loginRequest(code);
},
fail: e=> {
}
})
//網絡請求
loginRequest: function(code){
wx.request({
url: "/**/login", //這個鏈接需要換成你項目的鏈接
data: {
"code":code
},
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded' // 如果不加這請求頭,PHP可能無法獲取到發(fā)送過去的數據
},
success: function (res) {
console.log(res.data)
}
})
}
后臺換取openID
js_code 換取 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 以及開發(fā)者的 ACCESS_TOKEN 就類似于做好了微信的授權。
接下來就可以開始做推送操作了。
由于微信不允許開發(fā)者主動推送雜七雜八的消息,必須要用戶自愿接受推送,如果提現自愿,就通過用戶提交form表單后就代表我想接受一次。我是這樣理解的,有點像微信開發(fā)里面的回復消息,用戶發(fā)消息過來服務器必須在5分鐘之內回復一樣。
我們需要在小程序做一個表單
<form bindsubmit="formSubmit" report-submit="true">
<button formType="submit">Submit</button>
</form>
對應的js
formSubmit: function (e) {
var that = this
wx.request({
url: "/***/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、推送模板信息
文檔地址:
https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理

代碼片段:
$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實現小程序推送就結束了。
最后
如果大家還有不懂或者其他問題,歡迎私信我或者評論
[獲取授權]