有没开发过微信公众号的?
Jun 23, 2016 pm 01:39 PM 请教一个问题:假设我现在已经申请号了认证订阅号,然后我也启用了服务器配置并且url验证通过了。但是我尝试用自己的微信关注这个订阅号,并且发送消息。理论上微信服务器应该会向url发送用户的信息,包括openid什么的。但是实际上我的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.xml确实会有新内容被记录,但只有这些:
array(3) { ["signature"]=> string(40) "2c1f15c808659e38ca8a2bef53068939c7710d09" ["timestamp"]=> string(10) "1423321593" ["nonce"]=> string(10) "1992378621"}
百思不得其解。
回复讨论(解决方案)
http://blog.csdn.net/fuyifang/article/details/40707517
这篇文章我已经看过了,按照文章所说,当我向订阅号发送消息的时候,微信服务器会向订阅号填写的服务器url发送xml格式数据,里面就有用户的openid。问题就是我服务器url这边是接收到微信服务器的发送数据,可是数据里面没有xml格式的数据啊,也没有openid。
腾 讯 微信开发 有技术咨询吧? 程序规则他们定制的 最好问下他们
检查下你服务器配置的消息加解密方式,看是否是明文的
你的代码是什么样程序就会表现什么样
注释掉下面几句:
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();

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

11 skrip pemendek URL terbaik PHP (percuma dan premium)

Bekerja dengan Data Sesi Flash di Laravel

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React

Respons HTTP yang dipermudahkan dalam ujian Laravel

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST

12 skrip sembang php terbaik di codecanyon

Pengumuman Penyiasatan Situasi PHP 2025
