欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php微信公众号开发(3)php实现简单微信文本通讯

程序员文章站 2024-03-05 20:11:31
微信开发前,需要设置token,这个是微信设置的,可以任意设置,用来实现微信通讯。这里有一个别人写的微信类,功能还比较不错。weixin.class.php代码如下...

微信开发前,需要设置token,这个是微信设置的,可以任意设置,用来实现微信通讯。这里有一个别人写的微信类,功能还比较不错。weixin.class.php代码如下

<?php
class weixin
{
 public $token = '';//token
 public $debug = false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据
 public $setflag = false;
 public $msgtype = 'text'; //('text','image','location')
 public $msg = array();
 
 public function __construct($token,$debug)
 {
 $this->token = $token;
 $this->debug = $debug;
 }
//获得用户发过来的消息(消息内容和消息类型 )
 public function getmsg()
 {
 $poststr = $globals["http_raw_post_data"];
 
 if (!empty($poststr)) {
  $this->msg = (array)simplexml_load_string($poststr, 'simplexmlelement', libxml_nocdata);
  $this->msgtype = strtolower($this->msg['msgtype']);
 }
 }
//回复文本消息
 public function maketext($text='')
 {
 $createtime = time();
 $funcflag = $this->setflag ? 1 : 0;
 $texttpl = "<xml>
  <tousername><![cdata[{$this->msg['fromusername']}]]></tousername>
  <fromusername><![cdata[{$this->msg['tousername']}]]></fromusername>
  <createtime>{$createtime}</createtime>
  <msgtype><![cdata[text]]></msgtype>
  <content><![cdata[%s]]></content>
  <funcflag>%s</funcflag>
  </xml>";
 return sprintf($texttpl,$text,$funcflag);
 }
 
//根据数组参数回复图文消息
 public function makenews($newsdata=array())
 {
 $createtime = time();
 $funcflag = $this->setflag ? 1 : 0;
 $newtplheader = "<xml>
  <tousername><![cdata[{$this->msg['fromusername']}]]></tousername>
  <fromusername><![cdata[{$this->msg['tousername']}]]></fromusername>
  <createtime>{$createtime}</createtime>
  <msgtype><![cdata[news]]></msgtype>
  <content><![cdata[%s]]></content>
  <articlecount>%s</articlecount><articles>";
 $newtplitem = "<item>
  <title><![cdata[%s]]></title>
  <description><![cdata[%s]]></description>
  <picurl><![cdata[%s]]></picurl>
  <url><![cdata[%s]]></url>
  </item>";
 $newtplfoot = "</articles>
  <funcflag>%s</funcflag>
  </xml>";
 $content = '';
 $itemscount = count($newsdata['items']);
 $itemscount = $itemscount < 10 ? $itemscount : 10;//微信公众平台图文回复的消息一次最多10条
 if ($itemscount) {
  foreach ($newsdata['items'] as $key => $item) {
  if ($key<=9) {
   $content .= sprintf($newtplitem,$item['title'],$item['description'],$item['picurl'],$item['url']);
  }
  }
 }
 $header = sprintf($newtplheader,$newsdata['content'],$itemscount);
 $footer = sprintf($newtplfoot,$funcflag);
 return $header . $content . $footer;
 }
 public function reply($data)
 {
 
 echo $data;
 }
 public function valid()
 {
 if ($this->checksignature()) {
  if( $_server['request_method']=='get' )
  {
  echo $_get['echostr'];
  exit;
  }
 }else{
  
  exit;
 }
 }
 private function checksignature()
 {
 $signature = $_get["signature"];
 $timestamp = $_get["timestamp"];
 $nonce = $_get["nonce"];
 
 $tmparr = array($this->token, $timestamp, $nonce);
 sort($tmparr);
 $tmpstr = implode( $tmparr );
 $tmpstr = sha1( $tmpstr );
 
 if( $tmpstr == $signature ){
  return true;
 }else{
  return false;
 }
 }
 
}
?>

接着正式开发,使用百度svn地址,创建weixinapi.php文件,这个根据你后台设置名称。

<?php
define("token", "");
define('debug', false);
include_once('weixin.class.php');
require_once("db.php");
  
$weixin = new weixin(token,debug);//实例化
$weixin->getmsg();
$type = $weixin->msgtype;//消息类型
$keyword = $weixin->msg['content'];//获取的文本
if ($type==='text') {
$reply = $weixin->maketext($key);
}elseif($type==='event'){//第一次关注推送事件
 $reply = $weixin->maketext("欢迎关注");
}else{//其他类型
$reply = $weixin->maketext("暂时没有图片,声音,地理位置等功能,后续开发会增加,感谢你关注");
}

$weixin->reply($reply);

这样就实现了一个例子,第一次关注事件回复,非文本回复,以及文本回复,这里文本回复是你输入什么就返回什么。

具体实现功能就写在文本回复里面。

其他的功能暂时不做,具体开发下节再说。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。