微信开发前,需要设置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 ); |
这样就实现了一个例子,第一次关注事件回复,非文本回复,以及文本回复,这里文本回复是你输入什么就返回什么。
具体实现功能就写在文本回复里面。
其他的功能暂时不做,具体开发下节再说。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。