##微信公衆號,和微信小程序是微信的兩款單獨的產品,各自擁有一套openid,用來發送消息
一.微信小程序發推送消息只有在以下情況:
1.微信支付回調;
2.提交form表單的時候;
微信小程序獲取openid步驟(官網api文檔都有):
官網api文檔地址:https://developers.weixin.qq.com/miniprogram/dev/api/
1.調用接口wx.login() 獲取臨時登錄憑證(code)會返回
2.請求 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
參數說明:appid 小程序唯一標識 secret 小程序的 app secret
js_code 登錄時獲取的 code grant_type 填寫爲 authorization_code
微信公衆號獲取openid步驟(官網api文檔都有):
官網api文檔地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
1.先獲取公衆號的accessToken(appid,secret填寫微信公衆號的,跟小程序不一樣,切記)
https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
2.獲取用戶的openid
微信公衆號提供獲取用戶列表接口(即獲取所有關注該微信公衆號的用戶信息)
請求地址https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
如果想獲取整個用戶列表的openid,next_openid=即可,即https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=
3.獲取用戶基本信息
接口調用請求說明
http請求方式: GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
ok,小程序的openid,公衆號的openid都到手了(小滿足),BUT, 要想打通小程序,公衆號,光有各自的openid並沒有什麼用,因爲兩套產品,各自都只維護自己的openid,so,騰訊搞出了一套unionid機制,即騰訊旗下所有產品相對於用戶來說,都存在一個唯一標識就是unionid,如何獲取unionid?註冊一個開發者賬號,綁定公衆號,小程序,即指定小程序,公衆號在同一開發者下,這樣在獲取公衆號openid,小程序openid都會返回unionid(真的是一樣的,開心),這樣數據庫存儲公衆號,小程序的openid,unionid,通過反查出公衆號的openid,就可以在公衆號發模板消息了…(小程序觸發事件,向公衆號推送模板消息)
走一波,封裝參數:
http請求方式: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
POST數據
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":"http://weixin.qq.com/download",
"miniprogram":{
"appid":"xiaochengxuappid12345",
"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"
}
}
}
這裏的access_token是微信公衆號的
注意事項:
pagepath 不能用 / 開頭 (小程序的跳轉頁面鏈接)
appid 使用小程序的appid
java 對象封裝(個人不建議使用map封裝,建議採用對象封裝)
import lombok.Getter;
import lombok.Setter;
import java.util.Map;
@Getter
@Setter
public class WechatTemplate {
private String touser;
private String template_id;
private String url;
private Map<String, TemplateData> data;
private MiniprogramData miniprogram;
}
@Getter
@Setter
public class TemplateData {
private String value;
private String color;
}
@Setter
@Getter
public class MiniprogramData {
private String appid;
private String pagepath;
}