微信小程序 公眾號 推送消息


微信小程序推送公眾號模板消息

一、描述:

因小程序自帶推送只能實現單一推送,還得用戶授權后才能推送,想要實現相關內容的多條推送,很顯然不夠用。

好在通過公眾號推送消息可以連接到小程序,並且公眾號單日上限10萬條,可以實現小程序推送功能。

那么問題來了,如何實現公眾號推送小程序相關消息呢?很顯然可以使用openid來實現。

下面簡單說明實現思路(假設各平台已綁定):

  1. 獲取公眾號token(token每天限制200次,最好實現全局統一調用,避免token覆蓋導致的請求問題)

  2. 獲取公眾號關注用戶的openid

  3. 通過公眾號openid來獲取unionid(說明:unionid是微信開放平台全局唯一標識)

  4. 通過unionid來獲取小程序的openid(一般這個可以查詢數據庫,設計數據庫應該把openid,unionid字段設置上)

  5. 通過小程序openid,發送公眾號模板

二、前期准備:

1. 微信小程序認證

2. 微信公眾號認證

3. 微信開放平台認證(小程序和公眾號綁定同一開放平台,且必須認證)

三、代碼實現

1. 獲取公眾號access_token

通過微信公眾號的 AppId 和 AppSecret 獲取 公眾號的 access_token

說明:

  請求ip需在公眾號中的白名單

  access_token有效期為7200s(2h)

// 請求地址:
post https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET

// 返回結果
{
    "access_token": "ACCESS_TOKEN",
    "expires_in": 7200
}

2.獲取公眾號關注用戶的openid

一次拉取調用最多拉取10000個關注者的OpenID,可以通過多次拉取的方式來滿足需求。

參數說明:

  access_token:  調用憑證

  next_openid   第一個拉取的OPENID,不填默認從頭開始拉取

// 請求地址:
get https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

// 返回結果:
{
    "count": 2,
    "data": {
        "openid": [
            "OPENID1",
            "OPENID2"
        ]
    },
    "next_openid": "NEXT_OPENID",
    "total": 2
}

3. 通過公眾號openid獲取對應unionid

微信針對公眾號獲取用戶信息給出了2個接口:

  a. 獲取單個用戶信息

  b. 批量獲取用戶信息(每次最多100條)

我這里主要講解批量獲取用戶信息,如果想獲取單個用戶信息,可查看官方接口。

// 請求地址
https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN

// post數據:
{
    "user_list": [
        {
            "openid": "openid1", 
            "lang": "zh_CN"
        },
        {
            "openid": "openid2", 
            "lang": "zh_CN"
        }
    ]
}



// 返回數據
{
    "subscribe": 1,
    "openid": "",
    "nickname": "",
    "sex": 1,
    "language": "",
    "city": "",
    "province": "",
    "country": "",
    "headimgurl": "",
    "subscribe_time": ,
    "unionid": "",  // 綁定開放平台才會有
    "remark": "",
    "groupid": 0,
    "tagid_list": [
        128,
        2
    ],
    "subscribe_scene": "ADD_SCENE_QR_CODE",
    "qr_scene": ,
    "qr_scene_str": ""
} 

4. 通過unionid獲取小程序openid

因為是在開發小程序,所以像unionid和openid這都是在數據庫中存儲,因此在這里直接查詢數據庫信息即可,這里不過多介紹。

 

當然也可以通過前台傳過來的code去解析openid,相關如下:

// 請求地址
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code


// 返回結果
{
    "sex": 1,
    "photoUrl": "",
    "openId": "",
    "uniodId": ""
}

5. 發送模板消息

 公眾號模板消息需要公眾號openid和小程序openid

// 請求地址
post https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

// post數據
{
  "touser": "公眾號用戶openid",
  "template_id": "",
  "url": "http://weixin.qq.com/download",
  "miniprogram": {
    "appid": "小程序appid",
    "pagepath": "index?foo=bar"
  },
  "data": {
    "first": {
      "value": "恭喜你購買成功!",
      "color": "#173177"
    },
    "keyword1": {
      "value": "巧克力",
      "color": "#173177"
    },
    "keyword2": {
      "value": "39.8元",
      "color": "#173177"
    },
    "keyword3": {
      "value": "2014年9月22日",
      "color": "#173177"
    },
    "remark": {
      "value": "歡迎再次購買!",
      "color": "#173177"
    }
  }
}



// 返回結果
{
    "errcode":0,
     "errmsg":"ok",
     "msgid":200228332
}

注意:這里的小程序必須是線上已發布的才可以。

到此,公眾號消息推送算是完事啦。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM