前に完了していなかった部分を続けて、簡単なテキスト インタラクションを実装します。この記事では、さまざまなメッセージやイベントへの応答を実装します。
プロジェクト GitHub アドレス: https://github.com/Andyahui/xgyxsh_WeiXin
SDK GitHub アドレス: https://github.com/JeffreySu/WeiXinMPSDK/
SDK 公式紹介ブログ: http ://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html
1: さまざまなメッセージに対する単純な返信の実装
現在の基礎となるフレームワークに基づいて、残りの応答メカニズムが難しくないことはわかりますが、私たちはこの SDK にあまり慣れていません。テキスト応答が実装されたので、OnTextRequest メソッドを書き換えるときに多くの再メソッドがあることがわかりました。が続きます。
これが、さまざまなメッセージメカニズムとイベントメカニズムを実装する必要がある方法です。 Web サイトに多くのニーズがある場合、WeChat サーバーから送信されるさまざまな POST リクエストに対応するメソッドで応答できます。ビジネス ロジックはこれらのメソッドで処理されます。
1.1: 音声リクエストの処理;
public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage) { var responseVoice = base.CreateResponseMessage<responsemessagevoice>(); responseVoice.Voice=new Voice() { MediaId = requestMessage.MediaId }; return responseVoice; }</responsemessagevoice>
クライアントから送信された音声リクエストは、最初に OnVoiceRequest メソッドに送られ、応答がない場合、ユーザー メッセージはデフォルトの応答メソッドに返信されます。上記のメソッドのテストでは、デフォルトで独自の音声で応答する音声応答を作成しました。 MediaId は、素材管理インターフェイスを通じてアップロードされたマルチメディア ファイルから取得された ID です。実際には、送信された音声の ID が WeChat サーバーに保存されます。ユーザーによる;
1.2: 画像リクエストを処理します。
public override IResponseMessageBase OnImageRequest(RequestMessageImage requestMessage) { var responseImage = base.CreateResponseMessage<responsemessagetext>(); responseImage.Content = "来自图片,ahui"; return responseImage; }</responsemessagetext>
ユーザーが画像リクエストを送信した後、テキストで返信します。複雑なロジックが必要な場合は、自分でここに追加できます。その中で、base.CreateResponseMessage
1.3: 地理的位置リクエストの処理;
public override IResponseMessageBase OnLocationRequest(RequestMessageLocation requestMessage) { //返回的是图文消息,是关于地址的图文消息。 var responseLocation = base.CreateResponseMessage<responsemessagenews>(); var markersList = new List<baidumarkers>(); markersList.Add(new BaiduMarkers() { Size=BaiduMarkerSize.m, Color ="red", Label="A", Latitude =requestMessage.Location_X, Longitude=requestMessage.Location_Y, }); var mapUrl = BaiduMapHelper.GetBaiduStaticMap(requestMessage.Location_Y,requestMessage.Location_X,1,13,markersList); responseLocation.Articles.Add(new Article() { Description = string.Format("您刚才发送了地理位置信息。Location_X:{0},Location_Y:{1},Scale:{2},标签:{3}",requestMessage.Location_X,requestMessage.Location_Y,requestMessage.Scale,requestMessage.Label), PicUrl = "http://pic.cnblogs.com/avatar/679140/20141128195544.png", Title="张辉的地图", Url = mapUrl }); return responseLocation; }</baidumarkers></responsemessagenews>
地理的位置リクエストを処理し、ユーザーは自分の地理的位置を送信します。ユーザーは送信したい情報を送信します。 上記は、Baidu Maps を呼び出して独自の情報を再送信するインターフェイスです。
public override IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage) { var responseLink = base.CreateResponseMessage<responsemessagenews>(); responseLink.Articles.Add(new Article() { Title="处理链接来的请求。", Description =requestMessage.Description, PicUrl = "http://pic.cnblogs.com/avatar/679140/20141128195544.png", Url=requestMessage.Url }); return responseLink; }</responsemessagenews>
2: POST イベントに返信WeChat ユーザーと公式アカウント間のやり取り中、ユーザーの一部の操作により、WeChat サーバーは開発者が設定した特定の Web サイト サーバーにイベントの形式でリクエストを送信します。イベントではユーザー情報に返信できます。これが次に行うことです。 WeChat 開発者ドキュメントのイベント プッシュ:
http://mp.weixin.qq.com/wiki/7/9f89d962eba4c5924ed95b513ba69d9b.html
Event_ ロゴが付いた代表はイベント メソッドです。再定義する必要があります。これらのメソッドを記述して応答を実装します。ここには公式ウェブサイトで読むことができる多くの紹介があります。/// <summary> /// 订阅事件 /// </summary> /// <param> /// <returns></returns> public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage) { var responseSubscribe = base.CreateResponseMessage<responsemessagetext>(); responseSubscribe.Content = "欢迎订阅,张辉欢迎您。"; return responseSubscribe; }</responsemessagetext>
/// <summary> /// 点击事件 /// </summary> /// <param> /// <returns></returns> public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) { var respondeEvert = base.CreateResponseMessage<responsemessagetext>(); respondeEvert.Content = "点击事件,"; return respondeEvert; }</responsemessagetext>
public override IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage) { var responseView = base.CreateResponseMessage<responsemessagetext>(); responseView.Content = "点击带有view的菜单栏"; return responseView; }</responsemessagetext>
3: WeChatパブリックアカウントのカスタムメニューの実装基本的にすべてのWeChatページにはメニューバーがありますが、私が持っているのは従来の設定で実現できました。現在はテスト アカウントしかありません。テスト アカウントのページを長い間探しましたが、結局、開発者のデバッグで設定できるようになりました。もう 1 つの方法は、SDK によって提供されるページを使用してこれを実現することです。
我们发现这个还需要access_token来请求,但是我们从之前的开发中都没有发现有这个,那么这个是什么呢,仔细的看官方的介绍吧;
获取access_token,我们可以通过开发者调试工具,利用AppId和secret来获取;
在第一幅图中我们还需要body,调用接口的json数据包;可以参考微信开发文档里面的进行设置。注意里面就会看到click和view这两个事件类型。
{ "button": [ { "name": "IT资讯", "sub_button": [ { "type": "view", "name": "博客园", "url": "http://m.cnblogs.com/", "sub_button": [ ] }, { "type": "view", "name": "IT新闻", "url": "http://news.cnblogs.com/m", "sub_button": [ ] }, { "type": "click", "name": "关于开发者", "key": "http://m.cnblogs.com/?u=netxiaohui", "sub_button": [ ] } ] }, { "name": "校园生活", "sub_button": [ { "type": "view", "name": "搜索", "url": "http://www.baidu.com/", "sub_button": [ ] }, { "type": "view", "name": "视频", "url": "http://v.qq.com/", "sub_button": [ ] }, { "type": "click", "name": "关注我们", "key": "V1001_GOOD", "sub_button": [ ] } ] }, { "name": "学生", "sub_button": [ { "type": "view", "name": "搜索", "url": "http://www.soso.com/", "sub_button": [ ] }, { "type": "view", "name": "视频", "url": "http://v.qq.com/", "sub_button": [ ] }, { "type": "click", "name": "关注我们", "key": "V1001_GOOD", "sub_button": [ ] } ] } ] }
关于里面的事件类型,我们可以自己随意的设置,都会响应我们前面设置的菜单事件,我们可以进行一系列的逻辑代码的处理。
3.2:SDK的自定义菜单
通过下面的网址可以 进行设置,里面还是需要前面的两个参数AppId和secret或者Token来设置微信的自定义菜单。
设置自定义菜单网址:http://sdk.weixin.senparc.com/Menu
四:最终的结果展示
实现上面的代码就可以实现相应的功能。这个SDK简单的使用我们现在已经大体的会了,在之后的博文中会慢慢的解析这个SDK里面的一些东西,会从Request,Response等基础开始。
以上がWeChat開発ではさまざまなメッセージへの応答を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。