微信公众平台开发概要

  • 申请公众账号
  • 打开开发者模式 填写url(eg:xx.com/index.php?g=fc/index)和token
  • 服务器内容编写:
  • 验证信息的真实性:
    public function index(){
    		$this->token=$this->_get('token');
    		$weixin = $this->gp($this->token);
    }
    public function gp($token){
    		$this->auth($token)||exit;
    		if(IS_GET){
    			echo($_GET['echostr']);
    			exit;
    		}else {//获取用户发送的信息
    			$xml = file_get_contents("php://input");
    			$xml = new SimpleXMLElement($xml);
    			$xml ||exit;
    			foreach ($xml as $key =>$value) {
    				$this->data[$key] = strval($value);
    			}
    		}
    	}
    private function auth($token){
    		$data = array($_GET['timestamp'],$_GET['nonce'],$token);
    		$sign = $_GET['signature'];
    		sort($data);
    		$signature = sha1(implode($data));
    		return $signature === $sign;
    	}

    开发文档上讲:在开发者首次提交验证申请时,微信服务器将发送GET请求到填写的URL,此后,每次开发者接收用户消息的时候,微信也都会带上前面三个参数(signature、timestamp、nonce)访问开发者设置的URL,开发者依然通过对签名的效验判断此条消息的真实性;当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上;所以在gp方法中加了个判断 如果是get的话 返回验证OK的信息,如果是post的话 根据用户请求内容组织XML返回信息给微信
  • 获取用户发送的信息:代码已贴出 存放在$this->data中备用
  • 关注/取消关注事件:关注/取消关注是一个Event 事件类型,subscribe(订阅)、unsubscribe(取消订阅)
    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    </xml>

    具体见http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E4%BA%8B%E4%BB%B6%E6%8E%A8%E9%80%81 我们可以判断事件 再返回给用户对应信息:if('subscribe'== $data['Event']){XML格式返回信息}
  • 接受普通信息:
     <xml>
     <ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[fromUser]]></FromUserName> 
     <CreateTime>1348831860</CreateTime>
     <MsgType><![CDATA[text]]></MsgType>
     <Content><![CDATA[this is a test]]></Content>
     <MsgId>1234567890123456</MsgId>
     </xml>
    可以根据$this->data['content'] 来返回不同的信息
  • 返回信息:以多图文信息为例
    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>12345678</CreateTime>
    <MsgType><![CDATA[news]]></MsgType>
    <ArticleCount>2</ArticleCount>
    <Articles>
    <item>
    <Title><![CDATA[title1]]></Title> 
    <Description><![CDATA[description1]]></Description>
    <PicUrl><![CDATA[picurl]]></PicUrl>
    <Url><![CDATA[url]]></Url>
    </item>
    <item>
    <Title><![CDATA[title]]></Title>
    <Description><![CDATA[description]]></Description>
    <PicUrl><![CDATA[picurl]]></PicUrl>
    <Url><![CDATA[url]]></Url>
    </item>
    </Articles>
    </xml> 
    这是微信给的返回格式
    比如用户想要获取今日最热图文新闻(这个可以自己根据需求来判断),新闻包含标题(title)链接(url)图片链接(pic)概述(intro) 
    $this->data = array( 'ToUserName'=>$this->data['FromUserName'],'FromUserName'=>$this->data['ToUserName'],'CreateTime'=>NOW_TIME,'MsgType'=>$type,);
    $articles = array(array('Title'=>'新闻title1','Description'=>'新闻描述1','PicUrl'=>'新闻图片url1','Url'=>'新闻链接1'),
    				array('Title'=>'新闻title2','Description'=>'新闻描述2','PicUrl'=>'新闻图片url2','Url'=>'新闻链接2'));//键值一定要和微信要求的一样
    $this->data['ArticleCount'] = count($articles);
    $this->data['Articles'] = $articles;
    $xml = new SimpleXMLElement('<xml></xml>');//创建XML
    $this->data2xml($xml,$this->data);
    private function data2xml($xml,$data,$item = 'item') {
    	foreach ($data as $key =>$value) {
    		is_numeric($key) &&$key = $item;//当循环到列表的时候 每一条信息都要在外层加一个item
    		if(is_array($value) ||is_object($value)){
    			$child = $xml->addChild($key);
    			$this->data2xml($child,$value,$item);
    		}else {
    			if(is_numeric($value)){//如果值是数字 直接将值添加 <ArticleCount>2</ArticleCount>
    				$child = $xml->addChild($key,$value);
    			}else {//如果值不是是数字 需要将值进行修改为<Description><![CDATA[description]]></Description>
    				$child = $xml->addChild($key);
    				$node = dom_import_simplexml($child);
    				$node->appendChild($node->ownerDocument->createCDATASection($value));
    			}
    		}
    	}
    }
    exit($xml->asXML());
    
    最后展示的效果与公众平台群发功能发送的图文信息基本一致 不过会在标题下方多个intro

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值