ホームページ >バックエンド開発 >PHPチュートリアル >WeChat メッセージ インターフェイスを使用する場合、提供されたデモで自分が作成したクラスを参照するときに問題が発生します。

WeChat メッセージ インターフェイスを使用する場合、提供されたデモで自分が作成したクラスを参照するときに問題が発生します。

WBOY
WBOYオリジナル
2016-06-23 14:40:031267ブラウズ

これは WeChat によって提供されたデモです。 私は、responseMsg 関数で作成した検証 php クラスを呼び出したいのですが、
require_once "./IValidMsgImpl.php"; というステートメントを追加しましたが、応答しません。 Java の考え方については、phper を参照してください。問題ないと思います。それともパスの問題ですか?海外サーバーを使用しています。
/**
* wechat php テスト
  */

//トークンを定義します

define("TOKEN", "sharenet");
$wechatObj = new wechatCallbackapiTest(); ();
$wechatObj->responseMsg();

クラス wechatCallbackapiTest
{
$echoStr = $_GET["echostr"]
//有効な署名、オプション $this- >checkSignature()){
さまざまな環境をエコーするだけではありません。
$postStr = $GLOBALS[" HTTP_RAW_POST_DATA"]; _load_string($postStr, 'SimpleXMLElement ', LIBXML_NOCDATA); // コンテンツを読み取るオブジェクトを介した XML メッセージの
$キーワード = トリム($postObj->コンテンツ
;![CDATA[%s]]> %s で置き換えられたコンテンツは XML パーサーによって解析されません
>


/これは、ユーザーが送信した情報に対する単純な空でないチェックです。詳細な検証ルールはここで展開されます
if(!empty( $keyword ))

$test = new IValidMsgImpl();
$contentStr = $ test->ValidNum($keyword);
//データの返信形式は変更できません!返信コンテンツをXML形式に変換し、このXML形式のデータパケットを送信し、echo $ resultStrに転送します$contentStr = "空のメッセージを送信しないでください!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time2, $msgType, $contentStr); // 返信コンテンツを送信します $resultStr, Tencent WeChat サーバーはこのデータ パケットを XML 形式で受信し、受信者に転送します。
echo $resultStr;

private function checkSignature() { TOKEN; ($tmpArr);
$tmpStr = implode( $tmpStr );
if( $tmpStr == $signature ){
return false; }
}
}

?>

私自身のphp:
public class IValidMsgImpl{
/*
WeChatの友達から送信された認証メッセージが学生番号であるかどうかを確認し、学生情報がインポートされているかどうかを確認します
学籍番号の形式は、1020107201 のような 10 桁です。
*/
function ValidNum($keyword){
//返信内容のデータ型: text,
$msgType = "text"
//自動返信の内容$contentStr はここで変更できます。中国語の文字を送信する場合は、エンコーディング utf-8 を指定する必要があります
//$contentStr = "i am a robot..."
if(preg_match(" /^R:d{10}) $/",$keyword)){
$array =explode(':', $keyword);
$keyword2 = $array[1];
$contentStr = "R :Command を使用しました。コマンドを受け取りました" ;
}else{
$contentStr = "ようこそ、私の新しい関数を試してください。「R:」コマンドを入力して、R: 1020107228 のような 10 桁の数字を追加してください。異なるコンテンツが表示されます。 ";
return $contentStr;
}
}
?>
検証コンテンツをクラスに入れたいだけです! 現在テストされています。WeChat の友達から送信された空の文字列とコードのプロンプトがあります。 php を使用するときにエラーが発生しました。パスの問題である可能性があります。これらの 2 つの php ファイルを Apache サーバーの htdocs フォルダーに配置しました。ご指導ください。


ディスカッション (解決策) に返信します。 /IValidMsgImpl.php" ;
この文には php ファイルが含まれています。
パスを確認して問題がないか確認してください。

まずパスを確認し、ValidMsgImpl.php に
function isRight(){ などのテスト メソッドを記述します。
echo 'test=== =======================>ok';
}

次に、インポートファイルで呼び出します。という文が表示された場合は、参照パスが正しいことを意味し、表示されない場合は、まずパスを調整してください
を入れても問題ありません。 WeChat インターフェースでテストしました
テストに成功しましたが、WeChat インターフェースで呼び出しても応答がありません
PHP マスター、具体的な質問があります
ドン。環境を変更すると、問題が発生しても驚かないでください。Windows でコードを作成すると、使用するエディターの問題が原因で、コードを Linux サーバーにアップロードした後にこの特殊文字が表示されることがあります。構文エラー
を引き起こします。

ありがとう、私が悩んでいた問題は解決しました。それを伝えてお互いを高めていきましょう。ハハ
私のファイルのディレクトリ構造: ルート ディレクトリ htdocs/ の下にファイル myTest.php があり、フォルダー sharenet
sharenet/php/DAO/ もあり、私のインターフェイスの一部に分散されており、IValidMsg.php があります。その中のインターフェイス
sharenet /php/impl/ は、私のインターフェイス実装クラスの一部に分散されています。IValidMsg を実装する IValidMsgImpl.php インターフェイス実装クラスがあり、ファイル内に参照パス require_once "../DAO/IValidMsg. php";

そして、myTest.php ファイルでこのように require_once "./sharenet/php/impl/IValidMsgImpl.php" を参照しました。最初にインターフェイスに基づいて実装クラスの特定のメソッドを呼び出す必要がありますが、すぐに実行すると、パスが間違っているというエラーが報告されます
見つけました たくさんの情報を読んだ後、PHP のパスの問題は、パスに含まれるファイルを直接ディレクトリに追加するだけであることがわかりました。 Java とは異なり、Java はロード中にコンパイルされますが、PHP は最初に解釈されてロードされます。まず、require_once "../DAO/IValidMsg.php" に含まれるパスを直接ロードします。これは htdocs/ ディレクトリにあるため、sharenet/php/impl/ の下にファイルが見つかりません。そこで、ネットで聞いたインターフェース実装クラスを定義するファイルの require_once "./sharenet/php/DAO/IValidMsg.php"; のパスを直接参照したのが set_include_path() という関数でしょうか。 2 つのパス ./sharenet/php/DAO/ と ./sharenet/php/impl/ を事前定義し、ファイル内のファイルによるパスを考慮せずにそれらを直接使用できるのは素晴らしいことです。今私が考えていることは役に立ちますか?私は PHP を学習したことがありません。それについて何か知っていることがあれば、私に連絡してください。PHP を学習している人を探したいと思っています。笑

環境を変えると何か問題が起こっても驚かないでください。 Windows でコードを作成する場合、使用するエディターの問題により、コードを Linux サーバーにアップロードした後に特殊文字が表示されることがあります。この特殊文字は構文エラーを引き起こす可能性があります。
ありがとう、私が悩んでいた問題は解決しました。それを伝えてお互いを高めていきましょう。ハハ
私のファイルのディレクトリ構造: ルート ディレクトリ htdocs/ の下にファイル myTest.php があり、フォルダー sharenet
sharenet/php/DAO/ もあり、私のインターフェイスの一部に分散されており、IValidMsg.php があります。その中のインターフェイス
sharenet /php/impl/ は、私のインターフェイス実装クラスの一部に分散されています。IValidMsg を実装する IValidMsgImpl.php インターフェイス実装クラスがあり、ファイル内に参照パス require_once "../DAO/IValidMsg." を追加しました。 php";

そして、myTest.php ファイルでこのように require_once "./sharenet/php/impl/IValidMsgImpl.php" を参照しました。最初にインターフェイスに基づいて実装クラスの特定のメソッドを呼び出す必要がありますが、すぐに実行すると、パスが間違っているというエラーが報告されます
見つけました たくさんの情報を読んだ後、PHP のパスの問題は、パスに含まれるファイルを直接ディレクトリに追加するだけであることがわかりました。 Java とは異なり、Java はロード中にコンパイルされますが、PHP は最初に解釈されてロードされます。まず、require_once "../DAO/IValidMsg.php" に含まれるパスを直接ロードします。これは htdocs/ ディレクトリにあるため、sharenet/php/impl/ の下にファイルが見つかりません。そこで、ネットで聞いたインターフェース実装クラスを定義するファイルの require_once "./sharenet/php/DAO/IValidMsg.php"; のパスを直接参照したのが set_include_path() という関数でしょうか。 2 つのパス ./sharenet/php/DAO/ と ./sharenet/php/impl/ を事前定義し、ファイル内のファイルによるパスを考慮せずにそれらを直接使用できるのは素晴らしいことです。今私が考えていることは役に立ちますか?私は PHP を学習したことがありません。それについて何か知っていることがあれば、私に連絡してください。PHP を学習している人を探したいと思っています。笑

これをコメントアウトしてください $wechatObj->valid();

こんにちは、lz さん、私はつい最近 WeChat に出会い、公開アカウントを登録しました。 WeChat Web サイトで、新しいユーザーが購読すると、以前の「Hello2BizUser」テキストのプッシュが「購読」イベントのプッシュに変更されると読みました。でも、まだ書き方がわかりません。例えば、誰かがフォローした後に「ようこそ」を送りたいのですが、どう書けばいいでしょうか? よろしくお願いします

php は、thinkphp 、Weifa.com によって作成されたプラットフォームである WeChat サードパーティ開発を行います。

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