ホームページ  >  記事  >  バックエンド開発  >  WeChatの公式アカウントを開発したことがありますか?

WeChatの公式アカウントを開発したことがありますか?

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

質問: 認定サブスクリプション アカウントを申請し、サーバー構成を有効にし、URL 検証に合格したと仮定します。しかし、私は WeChat を使用してこのサブスクリプション アカウントをフォローし、メッセージを送信しようとしました。理論的には、WeChat サーバーは、openid を含むユーザーの情報を URL に送信する必要があります。しかし、実際には、URL には何も情報がありませんでした。開発したことのある人にアドバイスをいただけないでしょうか。

私の URL のコード:

traceHttp();define("TOKEN", "4321");$access_token = '1234';$wechatObj = new wechatCallbackapiTest();if (isset($_GET['echostr'])) {    $wechatObj->valid();}else{    $wechatObj->responseMsg();}class wechatCallbackapiTest{    public function valid()    {        $echoStr = $_GET["echostr"];        if($this->checkSignature()){            echo $echoStr;            exit;        }    }    private function checkSignature()    {        $signature = $_GET["signature"];        $timestamp = $_GET["timestamp"];        $nonce = $_GET["nonce"];        $token = TOKEN;        $tmpArr = array($token, $timestamp, $nonce);        sort($tmpArr);        $tmpStr = implode( $tmpArr );        $tmpStr = sha1( $tmpStr );        if( $tmpStr == $signature ){            return true;        }else{            return false;        }    }    public function responseMsg()    {        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];        ob_start();        var_dump($_REQUEST);        $a = ob_get_clean();        file_put_contents('1.xml', $a, FILE_APPEND);        if (!empty($postStr)){            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);            $fromUsername = $postObj->FromUserName;            $toUsername = $postObj->ToUserName;            $keyword = trim($postObj->Content);            $time = time();            $textTpl = "<xml>                        <ToUserName><![CDATA[%s]]></ToUserName>                        <FromUserName><![CDATA[%s]]></FromUserName>                        <CreateTime>%s</CreateTime>                        <MsgType><![CDATA[%s]]></MsgType>                        <Content><![CDATA[%s]]></Content>                        <FuncFlag>0</FuncFlag>                        </xml>";            if($keyword == "?" || $keyword == "?")            {                $msgType = "text";                $contentStr = date("Y-m-d H:i:s",time());                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);//                echo $resultStr;                file_put_contents('1.xml', $resultStr, FILE_APPEND);            }        }else{            echo "";            exit;        }    }}function traceHttp(){    logger("\n\nREMOTE_ADDR:".$_SERVER["REMOTE_ADDR"].(strstr($_SERVER["REMOTE_ADDR"],'101.226')? " FROM WeiXin": "Unknown IP"));    logger("QUERY_STRING:".$_SERVER["QUERY_STRING"]);}function logger($log_content){    if(isset($_SERVER['HTTP_APPNAME'])){   //SAE        sae_set_display_errors(false);        sae_debug($log_content);        sae_set_display_errors(true);    }else{ //LOCAL        $max_size = 500000;        $log_filename = "log.xml";        if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}        file_put_contents($log_filename, date('Y-m-d H:i:s').' '.$log_content."\r\n", FILE_APPEND);    }}

サブスクリプション アカウントにメッセージを送信するたびに、新しいコンテンツが確かに 1 に記録されます。


ディスカッションへの返信 (解決策)
http://blog.csdn.net/fuyifang/article/details/40707517

記事によると、私がこの記事を購読したとき、私はすでにこの記事を読みました。アカウントがメッセージを送信すると、WeChat サーバーは、ユーザーの openid を含むサブスクリプション アカウントによって入力されたサーバー URL に XML 形式のデータを送信します。問題は、私のサーバー URL が WeChat サーバーから送信されたデータを受信しますが、データ内に XML 形式のデータがなく、openid も存在しないことです。

Tencent WeChat 開発 技術的な相談はありますか?プログラムのルールは彼らにカスタマイズされています。

サーバーに設定されているメッセージの暗号化と復号化の方法を確認してください。

プログラムは次の文をコメントアウトします。 : ob_start();

var_dump($_REQUEST);

$a = ob_get_clean();

file_put_contents('1.xml', $a, FILE_APPEND); 次に、疑問符 (?) を公式アカウントに送信してみてください。

問題は解決しました、5階で言及された問題です。使用できません
ob_start();
var_dump($_REQUEST);
$a = ob_get_clean();

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