ホームページ  >  記事  >  WeChat アプレット  >  WeChat パブリック アカウントのカスタム メニュー開発の経験の概要

WeChat パブリック アカウントのカスタム メニュー開発の経験の概要

高洛峰
高洛峰オリジナル
2017-03-22 16:10:451979ブラウズ

この記事では、WeChat パブリック アカウントのカスタム メニューの開発経験の概要を共有します

    开发公司的微信公众账号,在没人指导没有人商量的情况下没少查资料、逛论坛。其中有多少酸甜苦辣,相信能进来看见我的帖子的能体会的到。一年多来为了应付公司的各种需求没时间整理,今天我就把详细的流程写下来供同样遇到问题的参考。微信公众账号几种分类相信大家都有了解。 订阅号我表示无能为力。除非你能认证通过。废话少说开撸。
     
    自定义菜单操作流程其实很简单 ,就是执行一段Java程序 将你公众账号的appid和封装的菜单发送到腾讯服务器,腾讯服务器会根据你请求参数appid和封装的菜单添加到对应的公众账号,一定要罗嗦一句, 在Java 程序中执行一次 main 方法就可以,下次修改重新执行,不过会有缓存,取消重新关注就可以了。
    1 新建按钮基类   
        public class Button {
            //按钮名称
            private String name;
         
            public String getName() {
                return name;
            }
         
            public void setName(String name) {
                this.name = name;
            }
        }
    2,根据业务需求新建不同的按钮类 
         
    /**
     * view类型的按钮  点击跳转链接
     * 
     */
    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 type button は input type = 'button' と同様で、キーを指定し、取得したキーに従って対応する業務を処理します

*/

public class ClickButton extends Button {

private String type;

private String key;

public String getType() {

戻り値;

PUBLIC VOID SETKEY (String Key) {

this.Key = key

}}}

3 ボタンのタイプを作成します。メイン メニュー コンテナを単純に作成します

/**

* 複合型ボタン

*

*/

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 3 つのメイン メニューを保持するメニュー クラスを作成します

/**

* メニュー

*/

public class Menu {

private Button[] ボタン;

public Button[] getButton() {

戻るボタン;

}

public void setButton(Button[] button) {

this.button = button;

}

}

5 呼び出し資格情報クラスのトークンを作成します Tencent インターフェイスを呼び出すメイン メソッドを実行する準備をします

/**

* クーポン

*

*/

public class Token {

//インターフェイス アクセスcredentials

private String accessToken;

//バウチャーの有効期間、単位: 秒

Private intexpiresin;

Public String GetaccessStoken () {

Return Accessstoken

}

Public void Setaclesstoken; AccessStoken) {

This.access stoken = accesstoken

}

public int getexpiresin () {

returnexpiresIn;

}

public void setExpiresIn(intexpiresIn) {

this.expiresIn =expiresIn;

}

}

次のコードではクラスのみを説明します。特定のコード関数についてはコメントを参照してください。

6 Tencentインターフェースを呼び出す準備をする

(1) 共通ツールクラスを作成する

/**

* 一般的なツール

*

*/

public class CommonUtil {

private static Logger log = LoggerFactory.getLogger(CommonUtil.class) ;

/**

* インターフェースアクセス認証情報を取得します

*

* @param appid 認証情報

* @param appsecret key

* @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 = null;

String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);

// 資格情報を取得するための GET リクエストを開始します

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) {

// トークンの取得に失敗しました

トークン = null;

}

}

return token;

}

/**

* https リクエストを送信

*

* @param requestUrl リクエストアドレス

* @param requestMethod リクエストメソッド (GET, POST)

* @param OutputStr 送信データ

* @return JSONObject (via JSONObject.get ( Key)jsonオブジェクトの属性値を取得するメソッド)

*/

public static JSONObject httpsRequest(String requestUrl, String requestMethod, String OutputStr) {

JSONObject jsonObject = null;

try {

// SSLContext オブジェクトを作成し、指定した信頼マネージャーで初期化します

TrustManager[] tm = { new MyX509TrustManager() };

SSLContext sslContext = SSLContext.getInstance("SSL" , "SunJSSE") ;

sslContext.init(null, tm, new java.security.SecureRandom());

// 上記の SSLContext オブジェクトから SSLSocketFactory オブジェクトを取得します

SSLSocketFactory ssf = sslContext.getSocketFactory();

URL URL = 新しい URL(requestUrl);

R httpsurlConnection conn = (httpsurlconnection) url.openconnection ();

conn.setusecacher (false);

conn.setusecacher (false);

conn.setRequestMethod(requestMethod);

// OutputStr が null でない場合に出力ストリームにデータを書き込む

if (null != OutputStr) {

OutputStream OutputStream = conn.getOutputStream();

// 注意してくださいエンコード形式に変換します

OutputStream.write(outputStr.getBytes("UTF-8"));

OutputStream.close();

}

// 入力ストリームから読み取り、返されたコンテンツを取得します

InputStream inputStream = conn.getInputStream();

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");

BufferedReaderbufferedReader = 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("接続タイムアウト: {}", ce);

} catch (例外 e) {

log.error("https リクエスト例外: {}", e) ;

}

return jsonObject;

}

}

(2) トラストマネージャー

パッケージを作成します com.test.util;

import java.security.cert.CertificateException;

import java.security .cert.X509Certificate

import; javax.net.ssl.ertificate[]chain, String authType) throws CertificateException {

}

// サーバー側の証明書を確認します

public void checkServerTrusted(X509Certificate[]chain, String authType) throws CertificateException {

}

// 信頼できる X509 証明書配列を返します

publicカスタム メニュー管理クラスを作成します。 appId と appSecret を割り当て、main メソッドを実行して完了です。

パッケージ 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;

/**

* トラストマネージャー

*

*/

public class MenuManager {

private static Logger log = LoggerFactory.getLogger(MenuManager.class);

/**

* メニューマネージャークラス

*

*/

private static Menu getMenu() {

//サブメニューを定義します

ViewButton btn1 = new ViewButton();

btn1.setName("サブメニュー 1");

btn1.setType("view");

setUrl( "http://www.baidu.com");

ViewButton btn2 = new ViewButton();

btn2.setName("サブメニュー 2");

btn2.setType("view");

btn2。 setUrl("http://www.baidu.com");

ViewButton btn3 = 新しい ViewButton();

btn3.setName("サブメニュー 3");

btn3.setType("view" );

btn3.setUrl("http://www.baidu.com");

ViewButton btn4 = 新しい ViewButton();

btn4.setName("サブメニュー 4");

btn4.setType( "view");

btn4.setUrl("http://www.baidu.com");

ComplexButton mainBtn1 = new ComplexButton();

mainBtn1.setName("メインメニュー 1");

mainBtn1 .setSub_button(新しいボタン[] { btn1,btn2});//WeChat では最大 5 つのサブメニューを規定しています

ComplexButton mainBtn2 = new ComplexButton();

mainBtn2.setName("Main Menu 2");

mainBtn2.setSub_button (new Button[] { btn3});

ComplexButton mainBtn3 = new ComplexButton();

mainBtn3.setName("メイン メニュー 3");

mainBtn3.setSub_button(new Button[] {btn4});

メニュー メニュー = 新しいメニュー();

menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });

return menu;

}

public static void main(String[] args) {

// 一意の認証情報パブリック アカウントの

1


String appId = "";

//パブリック アカウントの一意の認証キー

String appSecret = "";

// インターフェイスを呼び出して取得します資格情報

トークン token = CommonUtil.getToken(appId, appSecret);

if (null != トークン) {

// メニューを作成します

boolean result = createMenu(getMenu(), token.getAccessToken());

// メニューの作成結果を決定します

if (result)

log.info("メニューが正常に作成されました!" ) ;

else

log.info("メニューの作成に失敗しました!");

}

}

/**

* メニューの作成

*

* @param メニュー メニュー インスタンス

* @param accessToken 資格情報

* @return true 成功 false 失敗

*/

public static boolean createMenu(Menu menu, String accessToken) {

ブール値 = false;

文字列 menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";

文字列 url = menu_create_url.replace("ACCESS_TOKEN", accessToken );

// メニュー オブジェクトを json 文字列に変換します

String jsonMenu = JSONObject.fromObject(menu).toString();

// POST リクエストを開始してメニューを作成します

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("メニューの作成に失敗しました errcode:{} errmsg:{}", errorCode, errorMsg );

}

}

結果を返します;

}

}

以上がWeChat パブリック アカウントのカスタム メニュー開発の経験の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。