微信开发前,需要设置token,这个是微信设置的,可以任意设置,用来实现微信通讯。这里有一个别人写的微信类,功能还比较不错。weixin.class.php代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
<?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文件,这个根据你后台设置名称。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?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 );
|
这样就实现了一个例子,第一次关注事件回复,非文本回复,以及文本回复,这里文本回复是你输入什么就返回什么。
具体实现功能就写在文本回复里面。
其他的功能暂时不做,具体开发下节再说。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。