微信点歌其实已有很多博客写过,不过重复超超轮子就当锻炼锻炼身体嘛。先上效果图

回复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