ホームページ  >  記事  >  バックエンド開発  >  PHP WeChat 公開開発ノート (2)

PHP WeChat 公開開発ノート (2)

WBOY
WBOYオリジナル
2016-06-23 13:50:26875ブラウズ

PHP WeChat 公開開発ノート シリーズ

日付: 2014.9.1


要件分析:

WeChat 開発者サービスを正常に開いたら、ユーザーの操作に応答する機能を開始する必要があります。実際、私が WeChat パブリック プラットフォームを構築する当初の目的は、サービス プラットフォームになることでした。なぜなら、私は大学を卒業したばかりで、クラ​​スメートはそれぞれ別の道を歩んでいたからです。時々、私たちは見知らぬ街に行って、「この街にクラスメートはいるだろうか?」と思うかもしれません。このとき、携帯電話を取り出し、サービスアカウントをクリックして都市名を入力すると、この都市に学生がいる場合は連絡先などが列挙されて返されます。もちろん、顔見知りのクラスメートだから連絡先などは絶対に知っているはずなのに、なぜわざわざそんなことをするのかと言う人もいるかもしれません。私の考えでは、追加のリマインダーが役立つ場合があると考えています。あまりにもナンセンスなので、私が想定した機能要件について触れておきます:

1. メニュー機能:

ここで言及されているメニューは、下部にあるいくつかのカスタマイズされたメニューではありません。それにはお金が必要で、今私が欲しいものです。無料のものを作成してください。練習用に。したがって、私が想定しているメニュー機能は、ユーザーが指定されたテキスト情報を入力すると、パブリック プラットフォームが対応する操作に応答して、たとえばクエリを送信すると、パブリック プラットフォームがクラスメート情報をクエリするために「1」のような値を返すというものです。 、「2」は xx 情報などを照会します。これにより、簡単なメニュー機能が実装されます。

2. データ処理:

情報をクエリする必要があるため、データベース管理を使用して情報を保存する必要があります。クラスメートに関するさまざまな情報を分類および処理してデータベースに保存し、クエリ要求に応答するときにデータベースの情報を直接処理して、対応する情報を返します。


上記 2 点も当初の意図であり、単に情報のクエリ処理を行うだけです。この 2 つの機能が完了したら、他の機能を拡張することができます。機能要件が提案されたら、これらの機能を実装します。


実装要件:

1. メニュー機能を実装します:

ユーザーが対応するメッセージを送信し、パブリック プラットフォームが応答操作に応答します。これは、ユーザーから送信されたメッセージを処理するためのものです。 ここで、サンプル コードのメッセージを処理する関数に移ります。

この関数は、から送信されたメッセージを処理する関数です。ユーザーの場合は、この関数を拡張するだけです。

この関数を分析してみましょう。関数名は見ずに、関数の本体を直接見て、重要な点を見つけてください:

実際、これらはすべて WeChat の公開開発者ドキュメントに明確に記載されています。自分のナンセンスをもう一度言ってください。

この文書には、一般の WeChat ユーザーが公開アカウントにメッセージを送信すると、WeChat サーバーは開発者が入力した URL にメッセージの XML データ パケットを POST するため、メッセージは XML 形式のデータで送信されると記載されています。パケット。

1) 最初に XML パケット情報を取得します:
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

2) 次に、この関数に次のようなステートメントがあることがわかります:
libxml_disable_entity_loader(true);

このステートメントが Baidu から直接アクセスされると、見つかった情報はセキュリティ防御用です. :

PHP の場合、simplexml_load_string 関数の XML 解析の問題が libxml ライブラリで発生するため、エンティティをロードする前にそのような関数を呼び出すことができます。これは、ここで説明した関数です (http://www.cnhonkerarmy.com) /archiver /tid-214036.html) なので、この文ではセキュリティの問題も考慮する必要があります。

3) データを取得した後、WeChat サーバーによって送信された XML データ パケットを解析する必要があります。ここで実行されるのは次のとおりです:
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

構文の観点からは、取得した postStr データを解析する必要があります。解析後 必要な情報を取得します:
$fromUsername = $postObj->FromUserName;  //这一句便是得到谁发给公众号,我们之后处理回复信息就需要这个;$toUsername = $postObj->ToUserName;  //这一句得到用户发送给谁,这里这个指的就是我们这个微信公众号了;$keyword = trim($postObj->Content);  //这一句就是用来判断用户发送过来的信息了,这里有一个函数trim,这个函数是用来去除Content消息左右两边的空格的,这样就不会影响我们对消息的判断;我们有了keyword,就可以针对用户发送过来的消息做相应的响应操作了,即判断keyword的内容,响应响应的操作;$time = time();  //这个是时间函数,得到时间信息;$textTpl =    //这个是一个xml格式的字符串了,这个相关的知识通过对xml文件格式进行一定的学习了解之后便可以知道这个里面对应的信息了。

上記の情報を取得した後、この関数の次の内容を確認できます:
$msgType = "text";$contentStr = "Welcome to wechat world!";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;

ユーザーがメッセージを送信したと判断した後、公式アカウントは対応する操作に応答します。現在返信しているメッセージはテキスト メッセージなので、返す必要があるメッセージは $contentStr = "" です。

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); ここには $textTpl の後のパラメータを textTpl に書き込む関数があります。この textTpl が上記のものです。 XML 形式の文字列には次のものが含まれていることがわかります:


2 行目に [CDATA[%s]] があり、その後に ea5d8177d19f22584533e5c37c3899426671a89dce89e879d9e9c6d81d03862b が続きます。これは XML ファイルの形式要件です。 , なので、ここでは詳しく説明しません。 sprintf関数は、このxml文字列にtextTpl以降のパラメータ情報を書き込むと、echoでは意味が分からないものが出力されます。またはそれ以上の文字列。このようにして応答動作が実現される。

したがって、ここでキーワードの内容に基づいて特定の処理を実行するカスタム メニュー関数を実装する必要があります。プログラム開発では、関数ポイントを分離して 1 つの関数に記述することも好きなので、次のようにします。

ここでもう 1 つ付け加えておきたいのは、メッセージの受信にはユーザーから送信されたメッセージの受信が含まれるということです。また、いくつかのイベント (ユーザーのフォロー、フォロー解除など) も受信するため、メッセージの種類を決定する必要があります。


この時点から、次のように解釈される場合のメッセージ処理を分離し始めました。イベントが発生した場合、対応する操作を実行する 操作が文字情報の場合、対応する操作を実行する。 これは別の PHP 構文です: 各変数の前に $ 記号を付ける必要があるようです。その後、内部関数が $this-> で呼び出されます。これは this による明示的な呼び出しですが、C++ では可能でしょうか? PHP でサポートできるかどうかはわかりません。今度試してみます。解析されたデータ パケットをパラメータとして直接渡すと、必要なことはすべて実行できます。

次に、応答メニューを作成するには、対応する関数に関連するコードを記述する必要があるため、関数の最初のステップはこの方法で実装されます。次のステップは、データベース操作を実装することです。


現在発生している問題:

メニューを実装するとき、最初に第 1 レベルのメニューを表示し、次に第 2 レベルのメニューを選択します。ここで問題となるのは、第 1 レベルのメニューで選択した情報をどのように記憶するかです。インターネットで見つけた情報によると、キャッシュは情報を保存するために使用されるとのことです。明日、時間があれば実装します~~~

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