WeChat/YiXin パブリック プラットフォーム開発 (2): カスタム メニューの PHP 実装 (ソース コード提供)
WeChat はパブリック アカウントをサブスクリプション アカウントとサービス アカウントに分けており、ユーザーの操作に非常に便利なメニューをカスタマイズできます。
例: 公共サービス アカウント「中国南方航空」のカスタム メニューは次のとおりです:
メニューをクリックして直接操作を入力できるので便利です!
追記: WeChat サービスアカウントは組織として登録する必要があります (認証には組織証明書などをアップロードする必要があります)。個人として登録できるのはサブスクリプションアカウントのみです (カスタムメニューはありません)
追伸: Yixin ではすべての公開アカウントでメニューをカスタマイズできます (Yixin の方が優れています!)
しかし、パブリック プラットフォームの開発者にとって、メニューの定義と生成は実際には少し面倒です。
私は開発ドキュメントを読み、それを理解するまで 3 時間テストしました。ここでは、開発者のコーディング作業を完全に簡素化するためのクラスを提供するとともに、いくつかの考えを書きたいと思います。
最初に原理について話しましょう (詳細については、パブリック プラットフォーム開発ドキュメントを参照してください):
1. パブリック アカウントを登録して開発者モードをアクティブ化すると、プラットフォームは APPID と APPSECRET という 2 つのパラメーターを提供します (WeChat サブスクリプション アカウントの場合、プラットフォームはそれらを提供しません。すべての Yixin パブリック アカウントが提供します)
2. メニューをカスタマイズする前に、プラットフォームから AccessToken を申請する必要があります。方法は次のとおりです。
GET メソッドを使用して URL https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET を読み取りますここで: APPID、APPSECRET
に実際のパラメータ値を代入します。
返される結果は、AccessToken を含む JSON 形式のテキストです (JSON はデータ交換形式なので、理解できない学生は理解するために最初から学ぶ必要があります)AccessToken は永続的に有効ではありません。返された結果には有効期限があります。つまり、AccessToken は XX 秒 (通常は約 1 日) 後に期限切れになります。
Yixin プラットフォームの場合、上記の URL は次のとおりです。
https://api.yixin.im/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
3. 有効な AccessToken を取得したら、カスタム メニューを作成および削除できます。
3.1 メニューの作成
POST を使用して、メニュー定義データをこの URL (URL: https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN) に送信します
そのうち:
ACCESS_TOKEN に実際のパラメータ値を代入します。
メニュー定義データは JSON 形式のテキスト(開発ドキュメントがあまり明確ではなく、理解するのに時間がかかりました)、POST メソッドの提出データ返される結果は JSON 形式のテキストであり、操作の成功コードとエラー メッセージが含まれます
Yixin プラットフォームの場合、メニューを作成する URL は次のとおりです。
https://api.yixin.im/cgi-bin/menu/create?access_token=ACCESS_TOKEN
3.2 メニューの削除
GET メソッドを使用して URL https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
を読み取ります
ここで:ACCESS_TOKEN に実際のパラメータ値を代入します。
返される結果は、AccessToken を含む JSON 形式のテキストです (JSON はデータ交換形式であり、理解できない学生は理解するために最初から学ぶ必要があります)AccessToken は永続的に有効ではありません。返された結果には有効期限があります。つまり、AccessToken は XX 秒 (通常は約 1 日) 後に期限切れになります。
Yixin プラットフォームの場合、上記の URL は次のとおりです。
https://api.yixin.im/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
上記のプロセスでは、開発者が HTTP プロトコルの詳細と JSON 形式をよく理解している必要がありますが、これは一般の開発者にとっては悪夢かもしれません。
自分でコーディングしてテストした後、開発者向けのカスタム メニューの開発を完全に簡素化するために、ここでは 2 つのクラスが提供されています (開発者は HTTP プロトコル、JSON、およびパブリック プラットフォーム プロトコルを理解する必要がなくなりました)
結果は次のとおりです:
開発言語: PHP 5.X
ソースコードのダウンロードアドレス: http://download.csdn.net/detail/c80486/6357873
ファイル名: jostudio.wechatmenu.php ここではその使用法のみを説明します。 (興味のある学生はソースコードのコメントを読むことができます)
ファイルには 2 つのクラスが定義されています:
最初のクラス: WeChatMenu はメニュー操作に使用されます
2 番目のクラス: MenuDefine はメニュー データの定義に使用されます
これら 2 つのクラスを使用して、カスタム メニュー操作、ルーチン ファイル test_menu.php を実装します
include_once 'jostudio.wechatmenu.php' //WeChatMenu クラスをインクルードします
$AppId="9cXXXXXXXXXXXXXXXXXX" //パブリック プラットフォームによって提供される AppId パラメーター
$AppSecret="61XXXXXXXXXXXXXX"; //パブリック プラットフォームによって提供される AppSecret パラメータ
//WeChatMenu クラスのインスタンスを作成します
$object = new WeChatMenu("weixin",$AppId, $AppSecret); //最初のパラメータ「weixin」は、WeChat プラットフォーム用であることを示します
//$object = new WeChatMenu("yixin",$AppId, $AppSecret); //最初のパラメータ "yixin" は、Yixin プラットフォーム用であることを示します
//メニューデータを定義します
$menu = new MenuDefine() //MenuDefine インスタンスを作成します
$menu->menuStart() //メニューの開始
$menu->addMenu("エンターテイメント ワールド");
$menu->addMenuItem("なぞなぞ", "なぞなぞ");
$menu->addMenuItem("ジョークを言う", "ジョーク");
$menu->addMenuItem("音楽を聴く", "音楽");
$menu->addMenuItem("映画を見る", "映画");
$menu->addMenuItem("小説を読む", "小説");
$menu->addMenu("ユーティリティ");
$menu->addMenuItem("食べ物を探す", "食べ物");
$menu->addMenuItem("都市の天気", "天気");
$menu->addMenuItem("翻訳", "翻訳");
$menu->menuEnd(); //メニュー定義が終了し、$menu->strにメニュー定義データ(JSON形式)が存在します。
//メニューを生成
echo "
//現在のメニューデータを取得します
echo "
//メニューを削除
echo "
コードの説明:
1、最初: include_once 'jostudio.wechatmenu.php' //WeChatMenu クラスを含めます
2. $AppId と $AppSecret はプラットフォームによって提供される 2 つのパラメーターです。コードを変更して実際の値を入力してください。
3. WeChatMenu クラスのインスタンスを作成します
$object = new WeChatMenu($platform, $AppId, $AppSecret);
最初のパラメータ (テキスト型) $platform は対象のプラットフォームを指定します。WeChat プラットフォームは "weixin"、Yixin プラットフォームは "yixin"
4、メニューデータを定義します
4.1 まず、MenuDefine インスタンスを作成します
$menu = new MenuDefine() //MenuDefine インスタンスを作成します
4.2 次にメニューに追加します
$menu->addMenu($name); //第 1 レベルのメニュー、$name はメニュー名です
4.3 メニュー項目を追加する
$menu->addMenuItem($name, $key) // セカンダリ メニュー
$name はメニュー項目名です
$key はメニュー項目をクリックすると、クリックされたメッセージが生成されます。
4.4 など、順次追加していきます。
上記のルーチンでは、2 つの第 1 レベルのメニューが定義されています
4.5 メニュー定義の終了 $menu->menuEnd(); を使用してメニュー定義を終了すると、この時点で$menuのstr変数にメニュー定義データ(JSON形式)が生成されています
MenuDefine クラスはメニュー定義を簡略化するために使用され、最終的に生成された JSON 形式のデータは $menu->str に保存されます。
5. WeChatMenu クラスの createMenu($menu_data) メソッドを呼び出してカスタム メニューを作成します
コードは次のとおりです: $object->createMenu($menu->str))
createMenu() は原理紹介のすべてのプロセスを自動的に完了します
メニューが正常に作成された場合、createMenu() は true を返します
メニューの作成が失敗した場合、createMenu() は false を返し、エラー コードとエラー情報はそれぞれ $object->errcode 変数と $object->errmsg 変数に記録されます
6. WeChatMenu クラスの getMenu() メソッドを呼び出して、現在のプラットフォームのメニュー定義データを読み取ります。返される結果は JSON 形式のテキストです
7. WeChatMenu クラスの deleteMenu() メソッドを呼び出して、プラットフォーム上のメニュー定義を削除します。
test_menu.php ルーチン ファイルが完成し、使用可能になります。必要に応じて変更し、サーバーにアップロードしてロードし、カスタム メニュー操作を完了します。
上記メニューの実際の画面効果は次のとおりです:
これは私のYixin公式アカウントのメニュー効果です。
私のWeChat公式アカウントはサービスアカウントではなくサブスクリプションアカウントであるため、カスタムメニュー機能がなく、このメニューはYixinでのみ完了できます。
Yixin で次の QR コードをスキャンし、Yixin 公式アカウント「Smart Technology」を追加すると、メニューの効果を実際に確認できます