关注公众号的时候有时候有回复信息,有时候没有。收到的少 大部分都收不到 求解答

来源:3-2 接收事件订阅与回复响应消息(二)

叶子的思念

2018-05-25 19:28

<?phpnamespace app\index\controller;class Index{
    public function index()    {        
    //1.将timestamp,nonce,toke按字典顺序排序  		
    $timestamp = $_GET['timestamp'];  		
    $nonce = $_GET['nonce'];  		
    $token = 'weixin';  		
    $signature = $_GET['signature'];  		
    $array = array($timestamp,$nonce,$token);  		
    //2.将排序后的三个参数拼接之后用sha1加密  		
    $tmpstr = implode('',$array);  		
    $tmpstr = sha1($tmpstr);  		
    //3.将加密后的字符串与signature进行对比,判断该请求是否来自微信  		
    if($tmpstr == $signature && $_GET['echostr']){		    
    header('content-type:text');		      
    // 第一次接入微信API接口		    
    echo $_GET['echostr'];  		    
    exit;  		
    } else{
    	$this->responseMsg();		}    }    
    	/*接受事件推送并回复*/    
    	public function responseMsg()    {			
    	$postArr = file_get_contents("php://input");	        
    	libxml_disable_entity_loader(true);	        
    	$postObj = simplexml_load_string($postArr, 'SimpleXMLElement', LIBXML_NOCDATA);			
    	// 判断该数据包是否是订阅的时间推送			
    	if(strtolower($postObj->MsgType) == 'event'){				
    	// 如果是关注subscribe事件				
    	if(strtolower($postObj->Event) == 'subscribe'){					
    	// 回复用户信息					
    	$toUser = $postObj->FromUserName;					
    	$fromUser = $postObj->ToUserName;					
    	$time = time();					
    	$Msgtype = 'text';					
    	// $Content = '相信自己,你的选择是对的。';					
    	$Content = '相信自己,你的选择是对的';					
    	$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";					
    	$info = sprintf($template,$toUser,$fromUser,$time,$Msgtype,$Content);
    	//后面的值将会按顺序填到$template里面的%s					
    	echo $info;				}			}    }}
写回答 关注

1回答

  • 夏洺幼
    2018-08-15 16:00:36

    少了个sort($array);加上测一下

PHP实现微信公众平台开发—提升篇

本课程详细讲解了接收微信用户发送的消息和接收订阅关注的事件推送

64948 学习 · 371 问题

查看课程

相似问题