公眾號開發筆記
前言
微信公眾平臺開發模板訊息,用於公眾號向使用者傳送服務通知,如學生進校門,用校卡滴,就可以在公眾號接收服務通知,表明學生進校.在公眾號內申請功能,新增模板訊息.
只有認證後的服務號才能申請模板訊息,需要選擇2個行業,MP
(維基百科,自由的百科全書),模板訊息需要模板的ID
,和模板中各種引數,內容以".DATA"
結尾,否則視為保留字,模板保留符號"{{ }}"
.
設定行業可以在公眾平臺後臺完成,介面呼叫:
這個步驟需要access_token
// 請求方式: POST
https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=ACCESS_TOKEN
資料:
{
"industry_id1":"1",
"industry_id2":"4"
}
引數說明
| 引數 | 說明 |
| ------ | ------ |
| access_token
| 介面呼叫憑證 |
| industry_id1
| 行業編號 |
| industry_id2
| 行業編號 |
行業程式碼查詢:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277
獲取設定的行業資訊:
// 請求方式:GET
https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=ACCESS_TOKEN
需要access_token
介面呼叫憑證,返回示例:
{
"primary_industry":{"first_class":"運輸與倉儲","second_class":"快遞"},
"secondary_industry":{"first_class":"IT科技","second_class":"網際網路|電子商務"}
}
primary_industry
: 主營行業secondary_industry
: 副營行業
獲取模板ID
: 可以在公眾平臺後獲取模板ID
:
// 請求方式: POST
https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN
需要access_token
post
後的資料:
{
"template_id_short":"TM00015"
}
template_id_short
: 是模板庫中模板的編號.
返回模板訊息的介面,獲取json
資料:
{
"errcode":0,
"errmsg":"ok",
"template_id":"Doclyl5uP7Aciu-qZ7mJNPtWkbkYnWBWVja26EGbNyk"
}
獲取模板列表
獲取帳號下所有模板資訊:
提供的介面:
// 請求方式:GET
https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=ACCESS_TOKEN
返回的資料:
呼叫介面進行刪除某賬號下的模板:
``` // 請求方式:POST
https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=ACCESS_TOKEN
POST資料說明如下:
{ "template_id" : "Dyvp3-Ff0cnail_CDSzk1fIc6-9lOkxsQE7exTJbwUE" } ```
template_id
: 模板訊息ID
刪除成功:
{
"errcode" : 0,
"errmsg" : "ok"
}
傳送模板訊息
呼叫介面:
// 請求方式: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
需要:
OPENID
template_id
url
miniprogram
呼叫模板訊息介面成功:
{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}
事件推送
訊息模板傳送成功到公眾號,微信伺服器會將是否傳送成功作為通知到開發者中心的伺服器配置地址中.
推送xml
程式碼:
模版訊息介面文件
https://www.cnblogs.com/jiqing9006/p/5220571.html
對模板進行檢視詳情:
# 可向指定openID群發
https://segmentfault.com/a/1190000012828138
php
的實現
https://www.cnblogs.com/jiqing9006/p/5220571.html
- 例項化 --> 獲取
appid,appsecret
- 獲取
access_token
- 傳送模板訊息
- 組合訊息資料
- 獲取
openid
, 併傳送訊息
傳送模板訊息的介面:
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
傳送模板的方法:
//傳送模板訊息的介面
public static final String SEND_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
/**
* 傳送模板
*
*/
public static void sendTemplate(String data){
String result = HttpUtil.post(SEND_TEMPLATE_URL.replace("ACCESS_TOKEN", getAccessToken()),data);
System.out.println(result);
}
getAccessToken
的方法:
驗證接入
微信公眾平臺介面測試帳號申請
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
公眾號開發:
appid
和appsecret
配置引數: URL
(自己的伺服器地址)和Token
(可任意填寫)
使用java語言,SpringMVC+Spring+MyBatis框架
保證url
的有效性:
程式碼示例:
@Controller
public class WeChatController {
/**
* 微信URL接入驗證
* @param signature
* @param timestamp
* @param nonce
* @param echostr
* @return
*/
@RequestMapping(value="/weChat",method= RequestMethod.GET)
@ResponseBody
public String validate(String signature,String timestamp,String nonce,String echostr){
//1. 將token、timestamp、nonce三個引數進行字典序排序
String[] arr = {timestamp,nonce,WeChatUtil.TOKEN};
Arrays.sort(arr);
//2. 將三個引數字串拼接成一個字串進行sha1加密
StringBuilder sb = new StringBuilder();
for (String temp : arr) {
sb.append(temp);
}
//3. 開發者獲得加密後的字串可與signature對比,標識該請求來源於微信
if(SecurityUtil.SHA1(sb.toString()).equals(signature)){
//接入成功
return echostr;
}
//接入失敗
return null;
}
}
WeChatUtil.TOKEN是常量要與填入的token值相同
SecurityUtil是工具類,提供sha1加密方法
獲取access_token
``` public class WeChatUtil { //URL驗證時使用的token public static final String TOKEN = "wolfcode"; //appid public static final String APPID = "wx59687be81dd3d388"; //secret public static final String SECRET = "d4624c36b6795d1d99dcf0547af5443d"; //建立選單介面地址 public static final String CREATE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; //獲取access_token的介面地址 public static final String GET_ACCESSTOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; //快取的access_token private static String accessToken; //access_token的失效時間 private static long expiresTime;
/**
* 獲取accessToken
* @return
*/
public static String getAccessToken(){
//判斷accessToken是否已經過期,如果過期需要重新獲取
if(accessToken==null||expiresTime < new Date().getTime()){
//發起請求獲取accessToken
String result = HttpUtil.get(GET_ACCESSTOKEN_URL.replace("APPID", APPID).replace("APPSECRET", SECRET));
//把json字串轉換為json物件
JSONObject json = JSON.parseObject(result);
//快取accessToken
accessToken = json.getString("access_token");
//設定accessToken的失效時間
long expires_in = json.getLong("expires_in");
//失效時間 = 當前時間 + 有效期(提前一分鐘)
expiresTime = new Date().getTime()+ (expires_in-60) * 1000;
}
return accessToken;
}
} ```
HttpUtil
是發起http
請求的工具類
https://blog.csdn.net/frankcheng5143/article/details/50070591
官方文件中的示例:
//1.獲得一個httpclient物件
CloseableHttpClient httpclient = HttpClients.createDefault();
//2.生成一個get請求
HttpGet httpget = new HttpGet("http://localhost/");
//3.執行get請求並返回結果
CloseableHttpResponse response = httpclient.execute(httpget);
try {
//4.處理結果
} finally {
response.close();
}
HttpGet
和HttpPost
傳送HttpGet
/**
* 傳送HttpGet請求
* @param url
* @return
*/
public static String sendGet(String url) {
//1.獲得一個httpclient物件
CloseableHttpClient httpclient = HttpClients.createDefault();
//2.生成一個get請求
HttpGet httpget = new HttpGet(url);
CloseableHttpResponse response = null;
try {
//3.執行get請求並返回結果
response = httpclient.execute(httpget);
} catch (IOException e1) {
e1.printStackTrace();
}
String result = null;
try {
//4.處理結果,這裡將結果返回為字串
HttpEntity entity = response.getEntity();
if (entity != null) {
result = EntityUtils.toString(entity);
}
} catch (ParseException | IOException e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
傳送HttpPost
/**
* 傳送不帶引數的HttpPost請求
* @param url
* @return
*/
public static String sendPost(String url) {
//1.獲得一個httpclient物件
CloseableHttpClient httpclient = HttpClients.createDefault();
//2.生成一個post請求
HttpPost httppost = new HttpPost(url);
CloseableHttpResponse response = null;
try {
//3.執行get請求並返回結果
response = httpclient.execute(httppost);
} catch (IOException e) {
e.printStackTrace();
}
//4.處理結果,這裡將結果返回為字串
HttpEntity entity = response.getEntity();
String result = null;
try {
result = EntityUtils.toString(entity);
} catch (ParseException | IOException e) {
e.printStackTrace();
}
return result;
}
HttpClient
通過UrlEncodedFormEntity
提交帶引數的請求
使用apache
的HttpClient
傳送post
請求
https://blog.csdn.net/xiaoyaoyulinger/article/details/77315694
JAVA http
請求工具類http-request
https://www.jianshu.com/p/e955b01e2e16
獲取微信使用者資訊
https://blog.csdn.net/wolfcode_cn/article/details/80755359
兩種scope授權作用域 配置授權域名
引導使用者開啟授權介面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
用code
來獲取網頁授權專用的access_token
憑據
地址:
https://blog.csdn.net/wolfcode_cn/article/details/80755359
結語
- 下面我將繼續對 其他知識 深入講解 ,有興趣可以繼續關注
- 小禮物走一走 or 點贊
相關文章
- 【Java】微信公眾號開發筆記Java筆記
- 微信公眾號支付開發手記(node)
- 記一次微信公眾號開發
- 微信公眾號開發
- 微信公眾號Java開發記錄(一)接入Java
- 開發公眾號吃的大坑,今天記下來。
- Nodejs微信公眾號開發NodeJS
- .net開發微信公眾號
- 微信公眾號開發-分享
- 微信公眾號測試號開發小結
- 微信公眾號開發之坑(一)
- Python+Tornado開發微信公眾號Python
- PHP微信公眾號開發——公共方法PHP
- Laravel+easywechat 開發微信公眾號Laravel
- 微信sdk 公眾號 微信支付 NFC 坑&筆記筆記
- 微信公眾號開發 —— 微信網頁授權小記網頁
- 微信公眾號開發推送事件排重事件
- 微信公眾號開發Django JSSDK授權DjangoJS
- 微信公眾號開發(一)基礎配置
- Spring Boot 開發微信公眾號後臺Spring Boot
- 微信公眾號開發之客服訊息
- 基於.net5 wtm框架、uni-app微信公眾號開發一、公眾號授權框架APP
- 微信公眾號支付踩坑記
- NodeJS介紹以及開發微信公眾號ExampleNodeJS
- Python開發微信公眾號後臺(系列二)Python
- 微信公眾號開發Django 網頁授權Django網頁
- 微信公眾號開發教程(一) 驗證接入
- Nodejs開發微信公眾號中控服務NodeJS
- 微信公眾號開發-後端demo(隨錄)後端
- 想要運營公眾號?公眾號形象定位有哪些?
- 微信公眾號讚賞功能開通方法 微信公眾號讚賞如何開通
- 開發微信公眾號基本配置引數錯誤
- 公眾號開發總是有快取怎麼辦?快取
- 微信公眾號支付開發全過程(Java 版)Java
- 微信公眾號影片直播系統開發介紹
- thinkphp5.0.11開發微信公眾號通用系統PHP
- Vue開發微信公眾號預設背景為灰色Vue
- 公眾號已開通,歡迎支援!