微信公众号SDK开发(五)

封装模拟请求

Wx.php

<?php
namespace wechat;
 
class Wx{
    //微信配置项
    static $config=[];
    protected $config=[];
    protected $message;
    public function __construct(array $config=[]){
        //if(is_array($config)){
        //    self::$config=$config;
        //}
		if(!empty($config)){
            self::$config=$config;
        }
        $this->message=$this->parsePostRequestData();
    }
    public function show(){
        echo 'wx';
    }
    //与微信服务器进行绑定
    public function valid(){
        $signature=$_GET["signature"];
        $timestamp=$_GET["timestamp"];
        $nonce=$_GET['nonce'];
        
        //$token='developer';
        $token=self::$config['token'];
        $tmpArr=array($token,$timestamp,$nonce);
        sort($tmpArr,SORT_STRING);
        $tmpStr=implode($tmpArr);
        $tmpStr=sha1($tmpStr);
        
        if($tmpStr==$signature){
            echo $_GET['echoStr'];
        }
    }
    //获取并解析用户发来的消息内容
    private function parsePostRequestData(){
        if(isset($_GLOBALS['HTTP_RAW_POST_DATA'])){
            //simplexml_load_string - 将XML字符串解释为对象
            return simplexml_load_string($_GLOBALS['HTTP_RAW_POST_DATA'],'SimpleXMLElement',LIBXML_NOCDATA);  // 将 CDATA 设置为文本节点
        }
    }
	/*
	//服务器之间发送数据 get请求
	public function curlGet($url){
		$ch=curl_init();
		curl_setopt($ch,CURLOPT_URL,$url);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
		$data='';
		if(curl_exec($ch)){
			$data=curl_multi_getcontent($ch);
		}
		curl_close($ch);
		return $data;
	}
	//使用curl发送post请求
	public function curlPost($url,$fields=array()){
		$ch=curl_init();
		
		curl_setopt($ch,CURLOPT_URL,$url);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
		curl_setopt($ch,CURLOPT_TIMEOUT,30);
		curl_setopt($ch,CURLOPT_POST,1);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
		
		$data='';
		if(curl_exec($ch)){
			$data=curl_multi_getcontent($ch);
		}
		curl_close($ch);
		return $data;
	}*/
	public function curl($url,$fields=[]){
		$ch=curl_init();
		
		curl_setopt($ch,CURLOPT_URL,$url);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
		
		if($fields){
			curl_setopt($ch,CURLOPT_TIMEOUT,30);
			curl_setopt($ch,CURLOPT_POST,1);
			curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
		}
		
		$data='';
		if(curl_exec($ch)){
			$data=curl_multi_getcontent($ch);
		}
		curl_close($ch);
		return $data;
	}
    //获取粉丝发来的消息内容
    public function getMessage(){
        return $this->message;
    }
    //获取功能实例类,如:消息管理
    //使用wx->instance('message');
    public function instance($name){
        $class='\wechat\build\\'.ucfirst($name);
        return new $class;
    }
}
 
 


Entry.php

<?php
//业务代码,为了测试微信sdk的功能
//微信操作的基础类 
namespace app;
use wechat\Wx;

class Entry{
    protected $wx;
    public function __construct(){
        $config=[
            'token'=>'developer'
        ];
        $this->wx=new Wx($config);
        $this->wx->valid();
    }
    public function handler(){
        //echo 'handler';
        //(new Wx())->show();
        //$content=$this->wx->getMessage();
        //file_put_contents('q.php',var_export($content,true));
        
        //回复用户信息
        /*$message=$this->wx->getMessage();
        $time=time();
        echo <<<php
        <xml> 
            <ToUserName>< ![CDATA[{$message->FromUserName}] ]></ToUserName> 
            <FromUserName>< ![CDATA[{$message->ToUserName}] ]></FromUserName> 
            <CreateTime>{$time}</CreateTime> 
            <MsgType>< ![CDATA[text] ]></MsgType> 
            <Content>< ![CDATA[这是我回复的消息] ]></Content> 
        </xml>
php;
        */
        //$this->wx->instance('message')->show();    
		/*你发什么我回复什么
		$message=$this->wx->getMessage();
		$this->wx->instance('message')->text('我收到了你的消息:'.$message->Content);
		*/
		//$this->wx->instance('message')->text('您好,欢迎关注镜花缘相亲公众号');        
		/*消息类型测试
		$this->wx->instance('message')->text('您好,欢迎关注镜花缘相亲公众号');   
		if($message->isTextMsg()){
			$message->text('这是文本消息');
		}
		if($message->isImageMsg()){
			$message->text('这是图片消息');
		}
		if($message->isLinkMsg()){
			$message->text('这是超链接');
		}
		if($message->isVideoMsg()){
			$message->text('这是视频消息');
		}
		if($message->isShortVideoMsg()){
			$message->text('这是短视频消息');
		}
		if($message->isLocationMsg()){
			$message->text('这是你的位置信息');
		}
		if($message->isVoiceMsg()){
			$message->text('这是语音消息');
		}
		*/
		
		/*$fd=$this->wx->curlGet('http://www.voter.pw/');
		echo $fd;*/
		
		$d=$this->wx->curl('http://voter.pw',['a'=>'232342']);	
		echo $d;
	}
}
 


SimpleXMLElement::__set_state(array(
    'ToUserName'=>'gh_17962820bb47',
    'FromUserName'=>'odnoLwrZfu6WwdGhzoHYMhz-L8rc',
    'CreateTime'=>'1478718634',
    'MsgType'=>'text',
    'Content'=>'gghhh',
    'MsgId'=>'6351048173485048275'
))


|wechatSDK
|    |---|app
|    |---|--|Entry.php
|    |---|wechat
|    |---|--Wx.php
|    |---|bootstrap.php
|     |---|build
|     |---|---Message.php


<?php
namespace wechat\build;

//专门处理微信消息
use wechat\Wx;

class Message extends Wx{
    public function show(){
        echo __METHOD__;
    }
	public function text($content){
		//echo 3333;exit;
		$xml='
		<xml> 
            <ToUserName>< ![CDATA[{$message->FromUserName}] ]></ToUserName> 
            <FromUserName>< ![CDATA[{$message->ToUserName}] ]></FromUserName> 
            <CreateTime>{$time}</CreateTime> 
            <MsgType>< ![CDATA[text] ]></MsgType> 
            <Content>< ![CDATA[这是我回复的消息] ]></Content> 
        </xml>
		';
		$text=sprintf($xml,$this->message->FromUserName,$this->message->ToUserName,time(),$content);
		header('Content-Type:application/xml;Charset:utf-8');
		echo $text;
	}
}

?>		

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值