這篇文章分享微信公眾賬號(hào)開(kāi)發(fā)自定義菜單的經(jīng)驗(yàn)總結(jié)
????開(kāi)發(fā)公司的微信公眾賬號(hào),在沒(méi)人指導(dǎo)沒(méi)有人商量的情況下沒(méi)少查資料、逛論壇。其中有多少酸甜苦辣,相信能進(jìn)來(lái)看見(jiàn)我的帖子的能體會(huì)的到。一年多來(lái)為了應(yīng)付公司的各種需求沒(méi)時(shí)間整理,今天我就把詳細(xì)的流程寫(xiě)下來(lái)供同樣遇到問(wèn)題的參考。微信公眾賬號(hào)幾種分類(lèi)相信大家都有了解。?訂閱號(hào)我表示無(wú)能為力。除非你能認(rèn)證通過(guò)。廢話(huà)少說(shuō)開(kāi)擼。 ????? ????自定義菜單操作流程其實(shí)很簡(jiǎn)單?,就是執(zhí)行一段Java程序?將你公眾賬號(hào)的appid和封裝的菜單發(fā)送到騰訊服務(wù)器,騰訊服務(wù)器會(huì)根據(jù)你請(qǐng)求參數(shù)appid和封裝的菜單添加到對(duì)應(yīng)的公眾賬號(hào),一定要羅嗦一句,?在Java?程序中執(zhí)行一次?main?方法就可以,下次修改重新執(zhí)行,不過(guò)會(huì)有緩存,取消重新關(guān)注就可以了。 ????1?新建按鈕基類(lèi)??? ????????public?class?Button?{ ????????????//按鈕名稱(chēng) ????????????private?String?name; ????????? ????????????public?String?getName()?{ ????????????????return?name; ????????????} ????????? ????????????public?void?setName(String?name)?{ ????????????????this.name?=?name; ????????????} ????????} ????2,根據(jù)業(yè)務(wù)需求新建不同的按鈕類(lèi)? ????????? ????/** ?????*?view類(lèi)型的按鈕??點(diǎn)擊跳轉(zhuǎn)鏈接 ?????*? ?????*/ ????public?class?ViewButton?extends?Button?{ ????????private?String?type; ????????private?String?url; ????? ????????public?String?getType()?{ ????????????return?type; ????????} ????? ????????public?void?setType(String?type)?{ ????????????this.type?=?type; ????????} ????? ????????public?String?getUrl()?{ ????????????return?url; ????????} ????? ????????public?void?setUrl(String?url)?{ ????????????this.url?=?url; ????????} ????}
? ? /**
?????* click類(lèi)型的按鈕 類(lèi)似于input type = 'button' 指定key 根據(jù)捕獲到的key處理相應(yīng)的業(yè)務(wù)
?????*?
?????*/
????public class ClickButton extends Button {
???? private String type;
???? private String key;
???? public String getType() {
???? return type;
???? }
???? public void setType(String type) {
???? this.type = type;
???? }
???? public String getKey() {
???? return key;
???? }
???? public void setKey(String key) {
???? this.key = key;
???? }
????}
????3 創(chuàng)建符合類(lèi)型的按鈕 , 說(shuō)白了就是創(chuàng)建主菜單容器
/**
?* 復(fù)合類(lèi)型的按鈕
?*?
?*/
public class ComplexButton extends Button {
private Button[] sub_button;
public Button[] getSub_button() {
return sub_button;
}
public void setSub_button(Button[] sub_button) {
this.sub_button = sub_button;
}
}
4 創(chuàng)建菜單類(lèi), 用于盛放 三個(gè)主菜單
/**
?* 菜單
?*/
public class Menu {
private Button[] button;
public Button[] getButton() {
return button;
}
public void setButton(Button[] button) {
this.button = button;
}
}
5 創(chuàng)建調(diào)用憑證類(lèi)Token 為執(zhí)行main方法調(diào)用騰訊接口做準(zhǔn)備
/**
?* 憑證
?*?
?*/
public class Token {
// 接口訪問(wèn)憑證
private String accessToken;
// 憑證有效期,單位:秒
private int expiresIn;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public int getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(int expiresIn) {
this.expiresIn = expiresIn;
}
}
以下代碼我只做類(lèi)的描述。具體代碼功能看注釋。
6 為調(diào)用騰訊接口做準(zhǔn)備
????(1)創(chuàng)建通用工具類(lèi)
/**
?* 通用工具類(lèi)
?*?
?*/
public class CommonUtil {
private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
/**
?* 獲取接口訪問(wèn)憑證
?*?
?* @param appid 憑證
?* @param appsecret 密鑰
?* @return
?*/
public static Token getToken(String appid, String appsecret) {
// 憑證獲取(GET)
String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
Token token = null;
String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
// 發(fā)起GET請(qǐng)求獲取憑證
JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
if (null != jsonObject) {
try {
token = new Token();
token.setAccessToken(jsonObject.getString("access_token"));
token.setExpiresIn(jsonObject.getInt("expires_in"));
} catch (JSONException e) {
// 獲取token失敗
token = null;
}
}
return token;
}
/**
?* 發(fā)送https請(qǐng)求
?*?
?* @param requestUrl 請(qǐng)求地址
?* @param requestMethod 請(qǐng)求方式(GET、POST)
?* @param outputStr 提交的數(shù)據(jù)
?* @return JSONObject(通過(guò)JSONObject.get(key)的方式獲取json對(duì)象的屬性值)
?*/
public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
JSONObject jsonObject = null;
try {
// 創(chuàng)建SSLContext對(duì)象,并使用我們指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 從上述SSLContext對(duì)象中得到SSLSocketFactory對(duì)象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 設(shè)置請(qǐng)求方式(GET/POST)
conn.setRequestMethod(requestMethod);
// 當(dāng)outputStr不為null時(shí)向輸出流寫(xiě)數(shù)據(jù)
if (null != outputStr) {
OutputStream outputStream = conn.getOutputStream();
// 注意編碼格式
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 從輸入流讀取返回內(nèi)容
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
// 釋放資源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
conn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
log.error("連接超時(shí):{}", ce);
} catch (Exception e) {
log.error("https請(qǐng)求異常:{}", e);
}
return jsonObject;
}
}
(2)創(chuàng)建信任管理器
package com.test.util;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
/**
?* 信任管理器
?*?
?*/
public class MyX509TrustManager implements X509TrustManager {
// 檢查客戶(hù)端證書(shū)
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
// 檢查服務(wù)器端證書(shū)
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
// 返回受信任的X509證書(shū)數(shù)組
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
7 以上工作做完就可以創(chuàng)建自定義菜單了。創(chuàng)建自定義菜單管理類(lèi)。賦值 appId 和?appSecret ?運(yùn)行main方法, 搞定。
package com.test.menu;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sf.json.JSONObject;
import com.test.bean.Button;
import com.test.bean.ComplexButton;
import com.test.bean.Menu;
import com.test.bean.Token;
import com.test.bean.ViewButton;
import com.test.util.CommonUtil;
/**
?* 菜單管理器類(lèi)
?*?
?*/
public class MenuManager {
private static Logger log = LoggerFactory.getLogger(MenuManager.class);
/**
?* 定義菜單結(jié)構(gòu)
?* @return
?*/
private static Menu getMenu() {
//定義子菜單
ViewButton btn1 = new ViewButton();
btn1.setName("子菜單1");
btn1.setType("view");
btn1.setUrl("http://www.baidu.com");
ViewButton btn2 = new ViewButton();
btn2.setName("子菜單2");
btn2.setType("view");
btn2.setUrl("http://www.baidu.com");
ViewButton btn3 = new ViewButton();
btn3.setName("子菜單3");
btn3.setType("view");
btn3.setUrl("http://www.baidu.com");
ViewButton btn4 = new ViewButton();
btn4.setName("子菜單4");
btn4.setType("view");
btn4.setUrl("http://www.baidu.com");
ComplexButton mainBtn1 = new ComplexButton();
mainBtn1.setName("主菜單1");
mainBtn1.setSub_button(new Button[] { btn1,btn2});//微信規(guī)定最多五個(gè)子菜單
ComplexButton mainBtn2 = new ComplexButton(); ?
mainBtn2.setName("主菜單2");
mainBtn2.setSub_button(new Button[] { btn3});
ComplexButton mainBtn3 = new ComplexButton();?
mainBtn3.setName("主菜單3");
mainBtn3.setSub_button(new Button[] {btn4});
Menu menu = new Menu();
menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });
return menu;
}
public static void main(String[] args) {
// 公眾賬號(hào)唯一憑證
1
String appId = "";
?//公眾賬號(hào)唯一憑證密鑰
String appSecret = "";
// 調(diào)用接口獲取憑證
Token token = CommonUtil.getToken(appId, appSecret);
if (null != token) {
// 創(chuàng)建菜單
boolean result = createMenu(getMenu(), token.getAccessToken());
// 判斷菜單創(chuàng)建結(jié)果
if (result)
log.info("菜單創(chuàng)建成功!");
else
log.info("菜單創(chuàng)建失?。?);
}
}
/**
?* 創(chuàng)建菜單
?*?
?* @param menu 菜單實(shí)例
?* @param accessToken 憑證
?* @return true成功 false失敗
?*/
public static boolean createMenu(Menu menu, String accessToken) {
boolean result = false;
String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
String url = menu_create_url.replace("ACCESS_TOKEN", accessToken);
// 將菜單對(duì)象轉(zhuǎn)換成json字符串
String jsonMenu = JSONObject.fromObject(menu).toString();
// 發(fā)起POST請(qǐng)求創(chuàng)建菜單
JSONObject jsonObject = CommonUtil.httpsRequest(url, "POST", jsonMenu);
if (null != jsonObject) {
int errorCode = jsonObject.getInt("errcode");
String errorMsg = jsonObject.getString("errmsg");
if (0 == errorCode) {
result = true;
} else {
result = false;
log.error("創(chuàng)建菜單失敗 errcode:{} errmsg:{}", errorCode, errorMsg);
}
}
return result;
}
}
Atas ialah kandungan terperinci 微信公眾賬號(hào)開(kāi)發(fā)自定義菜單的經(jīng)驗(yàn)總結(jié). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PHP ialah bahasa skrip sumber terbuka yang digunakan secara meluas dalam pembangunan web dan pengaturcaraan sisi pelayan, terutamanya dalam pembangunan WeChat. Hari ini, semakin banyak syarikat dan pembangun mula menggunakan PHP untuk pembangunan WeChat kerana ia telah menjadi bahasa pembangunan yang benar-benar mudah dipelajari dan mudah digunakan. Dalam pembangunan WeChat, penyulitan dan penyahsulitan mesej merupakan isu yang sangat penting kerana ia melibatkan keselamatan data. Untuk mesej tanpa kaedah penyulitan dan penyahsulitan, penggodam boleh mendapatkan data dengan mudah, menimbulkan ancaman kepada pengguna.

Dalam pembangunan akaun awam WeChat, fungsi pengundian sering digunakan. Fungsi undian ialah cara yang bagus untuk pengguna mengambil bahagian dalam interaksi dengan pantas, dan ia juga merupakan alat penting untuk mengadakan acara dan meninjau pendapat. Artikel ini akan memperkenalkan anda cara menggunakan PHP untuk melaksanakan fungsi undian WeChat. Dapatkan kebenaran akaun rasmi WeChat Pertama, anda perlu mendapatkan kebenaran akaun rasmi WeChat. Pada platform awam WeChat, anda perlu mengkonfigurasi alamat API akaun awam WeChat, akaun rasmi dan token yang sepadan dengan akaun awam. Dalam proses pembangunan kami menggunakan bahasa PHP, kami perlu menggunakan PH yang disediakan secara rasmi oleh WeChat

Dengan populariti WeChat, semakin banyak syarikat mula menggunakannya sebagai alat pemasaran. Fungsi pemesejan kumpulan WeChat ialah salah satu cara penting bagi perusahaan untuk menjalankan pemasaran WeChat. Walau bagaimanapun, jika anda hanya bergantung pada penghantaran manual, ia adalah tugas yang sangat memakan masa dan susah payah untuk pemasar. Oleh itu, adalah amat penting untuk membangunkan alat pemesejan massa WeChat. Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan alat penghantaran massa WeChat. 1. Kerja penyediaan Untuk membangunkan alat pemesejan massa WeChat, kita perlu menguasai perkara teknikal berikut: Pengetahuan asas PHP WeChat alat pembangunan platform awam: Sub

WeChat kini merupakan salah satu platform sosial dengan pangkalan pengguna terbesar di dunia Dengan populariti Internet mudah alih, semakin banyak syarikat mula menyedari kepentingan pemasaran WeChat. Apabila menjalankan pemasaran WeChat, perkhidmatan pelanggan adalah bahagian yang penting. Untuk mengurus tetingkap sembang perkhidmatan pelanggan dengan lebih baik, kami boleh menggunakan bahasa PHP untuk pembangunan WeChat. 1. Pengenalan kepada pembangunan PHP WeChat PHP ialah bahasa skrip bahagian pelayan sumber terbuka yang digunakan secara meluas dalam bidang pembangunan Web. Digabungkan dengan antara muka pembangunan yang disediakan oleh platform awam WeChat, kami boleh menggunakan bahasa PHP untuk menjalankan WeChat

Dalam pembangunan akaun awam WeChat, pengurusan tag pengguna ialah fungsi yang sangat penting, yang membolehkan pembangun memahami dan mengurus pengguna mereka dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi pengurusan teg pengguna WeChat. 1. Dapatkan openid pengguna WeChat Sebelum menggunakan fungsi pengurusan tag pengguna WeChat, kita perlu mendapatkan openid pengguna terlebih dahulu. Dalam pembangunan akaun awam WeChat, adalah amalan biasa untuk mendapatkan openid melalui kebenaran pengguna. Selepas kebenaran pengguna selesai, kami boleh mendapatkan pengguna melalui kod berikut

Memandangkan WeChat menjadi alat komunikasi yang semakin penting dalam kehidupan orang ramai, fungsi pemesejan tangkasnya digemari oleh sebilangan besar perusahaan dan individu. Bagi perusahaan, membangunkan WeChat menjadi platform pemasaran telah menjadi trend, dan kepentingan pembangunan WeChat secara beransur-ansur menjadi lebih menonjol. Antaranya, fungsi penghantaran kumpulan lebih banyak digunakan Jadi, sebagai pengaturcara PHP, bagaimana untuk melaksanakan rekod penghantaran mesej kumpulan? Berikut akan memberi anda pengenalan ringkas. 1. Memahami pengetahuan pembangunan yang berkaitan dengan akaun awam WeChat Sebelum memahami cara melaksanakan rekod penghantaran mesej kumpulan, I

Cara menggunakan PHP untuk membangunkan akaun awam WeChat Akaun awam WeChat telah menjadi saluran penting untuk promosi dan interaksi bagi banyak syarikat, dan PHP, sebagai bahasa Web yang biasa digunakan, juga boleh digunakan untuk membangunkan akaun awam WeChat. Artikel ini akan memperkenalkan langkah khusus untuk menggunakan PHP untuk membangunkan akaun awam WeChat. Langkah 1: Dapatkan akaun pembangun akaun rasmi WeChat Sebelum memulakan pembangunan akaun rasmi WeChat, anda perlu memohon akaun pembangun akaun rasmi WeChat. Untuk proses pendaftaran khusus, sila rujuk laman web rasmi platform awam WeChat

Dengan pembangunan Internet dan peranti pintar mudah alih, WeChat telah menjadi bahagian yang amat diperlukan dalam bidang sosial dan pemasaran. Dalam era yang semakin digital ini, cara menggunakan PHP untuk pembangunan WeChat telah menjadi tumpuan ramai pembangun. Artikel ini terutamanya memperkenalkan mata pengetahuan yang berkaitan tentang cara menggunakan PHP untuk pembangunan WeChat, serta beberapa petua dan langkah berjaga-jaga. 1. Persediaan persekitaran pembangunan Sebelum membangunkan WeChat, anda perlu menyediakan persekitaran pembangunan yang sepadan terlebih dahulu. Secara khusus, anda perlu memasang persekitaran operasi PHP dan platform awam WeChat
