微信点歌其实已有很多博客写过,不过重复超超轮子就当锻炼锻炼身体嘛。先上效果图
回复2.2@谢谢你的爱,它先会去找这首歌,然后返回回来,如果找的不是你想点的歌曲,则需要中上歌手名称,如2.2@谢谢你的爱谢霆锋
代码部分如下
1、统一回复调用方法
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
|
//这里只对文本消息进行处理 private function reply( $data ){ if ( ‘text‘ == $data [ ‘MsgType‘ ]){ $text = $data [ "Content" ]; if ( $text == "?" ){ return $this ->get_main_datas(); } $_menu_text = strpos ( $text , "@" )===false? $text :(string)doubleval( $text ); //当需要查询时,指令为1.1@xxx使用进行doubleval转换 if ( array_key_exists ( $_menu_text , $this ->all_info)){ //存在于菜单中,当输入,1
2 3 时 return $this ->get_replay_datas( $_menu_text , $text , $data [ "FromUserName" ]); } return $this ->hello(); } elseif ( ‘event‘ == $data [ ‘MsgType‘ ]
&& ‘subscribe‘ == $data [ ‘Event‘ ]){ //订阅写入数据表 return $this ->hello(); //$reply
= array(‘欢迎您关注桂林小魔方童装公众助手! 打开我们的网站:http://aidemofang.com 可以了解最新的款式和价格.‘,
‘text‘); } else { exit ; } } //取得回复的信息 private function get_replay_datas( $_menu_text , $text , $fromUser ){ $menu_text = strlen ( $_menu_text )==1? $_menu_text -1: $_menu_text ; $method = $this ->get_method( $menu_text ); $param =null; if ( strpos ( $text , "@" )!==false){ $arr =
preg_split( "/@/" , $text ); $param = $arr [1]; } return $this -> $method ( $param , $fromUser ); } |
2、点歌实现
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
|
//歌曲点播 public function get_song( $song_title , $fromUser ){ //$song_title="春天里"; $m_param = array ( "op" => "7" , "mode" => "1" , "count" => "1" , "title" => $song_title ); $song_utf8 =utf8( $song_datas , "gbk" ); preg_match_all( ‘/\<name\>(.*?)\<\/name\>/s‘ , $song_utf8 , $matchs ); if ( count ( $matchs )>1){ $song_name = $matchs [1][0]; } if ( empty ( $song_name )){ return array ( "未找到这首歌,检查一下网络或咱们换一首吧." , "text" ); } $param = array ( "op" => "12" , "count" => "1" , "title" =>trim( "$song_name" ) ); //查找作者的这首歌 $xml = new DOMDocument(); $xml ->loadXML( $datas ); $lst = $xml ->getElementsByTagName( ‘encode‘ ); //普通质量地址 $item = $lst ->item(0); $pre = $item ->nodeValue; $suffix = $item ->nextSibling->nodeValue; $MusicURL = str_replace ( strrchr ( $pre , "/" ), "" , $pre ). "/" . str_replace ( strrchr ( $suffix , "&" ), "" , $suffix ); //高质量地址 $item = $lst ->item(0); $pre = $item ->nodeValue; $suffix = $item ->nextSibling->nodeValue; $HQMusicUrl = str_replace ( strrchr ( $pre , "/" ), "" , $pre ). "/" . str_replace ( strrchr ( $suffix , "&" ), "" , $suffix ); $datas = array (); $datas []= str_replace ( ‘$‘ , "" , $song_name ); //音乐标题 $datas []= "来自互联网" ; //音乐描述 $datas []= "$MusicURL" ; //音乐链接 $datas []= "$HQMusicUrl" ; //高质量音乐链接,WIFI环境优先使用该链接播放音乐 $this ->sendLyric( str_replace ( ‘$$‘ , "-" , $song_name ), $fromUser ); return array ( $datas , "music" ); } private function sendLyric( $song_name , $fromUser ){ $param = array ( "key" => "free" , "appid" => "0" , "msg" => "歌词" . $song_name ); $json =json_decode( $datas ); if ( $json ->result==0){ $content = str_replace ( "{br}" , "\n" , $json ->content); $content .= "\n\n小助手:回复
@ 进入主界面" ; import( ‘@.ORG.ThinkWechat‘ ); $weixin = new ThinkWechat
(); $result = $weixin ->sendMsg( $content , $fromUser , "text" ); //发送歌词 Log::write( "
init data ->" . $fromUser . "
,content =$content" ); Log::write( "result
-> " .print_r( $result ,true)); } }</name\> |
*上面增加了发送歌词接口,自动发送给客户端,可惜我是订阅号,似乎没有那上权限,so,放弃吧.
原文:http://blog.csdn.net/w116858389/article/details/18425219