PHP 實現小程序通知推送

首先回答一個問題:
個人申請的小程序是否可以推送?
答案是肯定的,下面記錄的就是我的踏坑之旅,后臺采用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

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

image.png

這里的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接口

接口地址: https://link.jianshu.com/?t=https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

請求參數
返回參數

代碼片段:


        $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#模版消息管理

發(fā)送模板消息

代碼片段:


$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實現小程序推送就結束了。

最后

如果大家還有不懂或者其他問題,歡迎私信我或者評論

[獲取授權]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容