php主动推送弹幕_php实现微信公众号主动推送消息

通过学习借鉴朋友的实现方法进行整理,实现了PHP版的微信公共平台消息主动推送,分享给大家供大家参考,具体内容如下

此方法是通过模拟登录微信公共平台的方法来实现的。

代码如下:

一、登录接口部分代码

//登录

private function login(){

$url = 'https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN';

$this->send_data = array(

'username' => $this->_account,

'pwd' => md5($this->_password),

'f' => 'json'

);

$this->referer = "https://mp.weixin.qq.com/";

$this->getHeader = 1;

$result = explode("\n",$this->curlPost($url));

foreach ($result as $key => $value) {

$value = trim($value);

if(preg_match('/"ErrCode": (.*)/i', $value,$match)){//获取token

switch ($match[1]) {

case -1:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"系统错误")));

case -2:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"帐号或密码错误")));

case -3:

die(urldecode(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>urlencode("密码错误")))));

case -4:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"不存在该帐户")));

case -5:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"访问受限")));

case -6:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"需要输入验证码")));

case -7:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"此帐号已绑定私人微信号,不可用于公众平台登录")));

case -8:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"邮箱已存在")));

case -32:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"验证码输入错误")));

case -200:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"因频繁提交虚假资料,该帐号被拒绝登录")));

case -94:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"请使用邮箱登陆")));

case 10:

die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"该公众会议号已经过期,无法再登录使用")));

case 0:

$this->userFakeid = $this->getUserFakeid();

break;

}

}

if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $value,$match)){//获取cookie

$this->cookie .=$match[1].'='.$match[2].'; ';

}

if(preg_match('/"ErrMsg"/i', $value,$match)){//获取token

$this->token = rtrim(substr($value,strrpos($value,'=')+1),'",');

}

}

}

二、信息发送部分代码

//单发消息

private function send($fakeid,$content){

$url = 'https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN';

$this->send_data = array(

'type' => 1,

'content' => $content,

'error' => 'false',

'tofakeid' => $fakeid,

'token' => $this->token,

'ajax' => 1,

);

$this->referer = 'https://mp.weixin.qq.com/cgi-bin/singlemsgpage?token='.$this->token.'&fromfakeid='.$fakeid.'&msgid=&source=&count=20&t=wxm-singlechat&lang=zh_CN';

return $this->curlPost($url);

}

三、群发信息代码

//群发消息

public function sendMessage($content='',$userId='') {

if(is_array($userId) && !empty($userId)){

foreach($userId as $v){

$json = json_decode($this->send($v,$content));

if($json->ret!=0){

$errUser[] = $v;

}

}

}else{

foreach($this->userFakeid as $v){

$json = json_decode($this->send($v['fakeid'],$content));

if($json->ret!=0){

$errUser[] = $v['fakeid'];

}

}

}

//共发送用户数

$count = count($this->userFakeid);

//发送失败用户数

$errCount = count($errUser);

//发送成功用户数

$succeCount = $count-$errCount;

$data = array(

'status'=>0,

'count'=>$count,

'succeCount'=>$succeCount,

'errCount'=>$errCount,

'errUser'=>$errUser

);

return json_encode($data);

}

四、获取所有用户信息代码片段

//获取所有用户信息

public function getAllUserInfo(){

foreach($this->userFakeid as $v){

$info[] = $this->getUserInfo($v['groupid'],$v['fakeid']);

}

return $info;

}

//获取用户信息

public function getUserInfo($groupId,$fakeId){

$url = "https://mp.weixin.qq.com/cgi-bin/getcontactinfo?t=ajax-getcontactinfo&lang=zh_CN&fakeid={$fakeId}";

$this->getHeader = 0;

$this->referer = 'https://mp.weixin.qq.com/cgi-bin/contactmanagepage?token='.$this->token.'&t=wxm-friend&lang=zh_CN&pagesize='.$this->pageSize.'&pageidx=0&type=0&groupid='.$groupId;

$this->send_data = array(

'token'=>$this->token,

'ajax'=>1

);

$message_opt = $this->curlPost($url);

return $message_opt;

}

//获取所有用户fakeid

private function getUserFakeid(){

ini_set('max_execution_time',600);

$pageSize = 1000000;

$this->referer = "https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token={$_SESSION['token']}";

$url = "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize={$pageSize}&pageidx=0&type=0&groupid=0&token={$this->token}&lang=zh_CN";

$user = $this->vget($url);

$preg = "/\"id\":(\d+),\"name\"/";

preg_match_all($preg,$user,$b);

$i = 0;

foreach($b[1] as $v){

$url = 'https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize='.$pageSize.'&pageidx=0&type=0&groupid='.$v.'&token='.$this->token.'&lang=zh_CN';

$user = $this->vget($url);

$preg = "/\"id\":(\d+),\"nick_name\"/";

preg_match_all($preg,$user,$a);

foreach($a[1] as $vv){

$arr[$i]['fakeid'] = $vv;

$arr[$i]['groupid'] = $v;

$i++;

}

}

return $arr;

}

希望本文所述对大家学习php程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,这个插件并不是傻瓜式安装的,很多东西需要自己去调试,以下只给有一定基础的人,所以纯伸手党就不用看了 申明: 弹幕的接收和发送的最初源码来自此贴:http://www.discuz.net/thread-2499499-1-1.html 注: 下载后发现问题很多,所以我自己修改了一遍,剔除了代码中的大部分不合理的地方加入了控制最大弹幕数的,编码GBK测试无问题,utf-8未测试(应该是不会有问题的)。 此源码为最初版,后来还重写了记录吐槽者IP、整合至视频展厅以及管理弹幕的简易后台,根据情况我在开放下载吧 播放器使用的是mukioplayer:http://code.google.com/p/mukioplayer/ 如果你要转载下面的内容,那么请注明原帖地址 --------------------------------------------我是分割线-------------------------------------------- 源码下载(内含v1.150mukioplayer): 2012-04-25第3次更新 1.追加简易后台管理一枚 2012-04-17第2次更新 1.修正了无法正确保存ZOOME字幕的问题 2012-04-05第1次更新 1.增加一个外置弹幕列表的播放器可自由选择任意一个使用 2.修改了php的引用代码和php默认不支持的函数 3.其他已知的问题 下载后需要编辑2个配置文件: 一.在config.php中设置你的数据库连接和可控制的最大弹幕数。 注:数据库填写的信息和你安装论坛时填写的一样,如果你是独立主机那么可以建立一个专门的MYSQL用户操作弹幕表,加强安全性 二.在conf.xml中设置弹幕播放器的接收和发送URL地址。  1.post.php为接收从弹幕中传入参数的  2.xml.php为生成弹幕文件的 三.关于后台:  1.可以更改admin这个文件夹名字来隐藏后台路径提高安全性  2.使用前请先配置后台文件夹中的admin.php后台基本设定,具体规则参见每行的注释  3.后台访问路径既:http://你的域名/bplayer/后台文件夹名称/admin.php 配置完成后把文件夹上传到根目录中即可 --------------------------------------------我是分割线-------------------------------------------- 进入后台 - 站长 - 数据库 - 升级中运行以下SQL语句: CREATE TABLE IF NOT EXISTS `tm_comment` ( `ID` int(12) NOT NULL auto_increment, `playerID` varchar(15) default NULL, `message` text, `color` varchar(12) default NULL, `fontsize` varchar(12) default NULL, `playtime` varchar(12) default NULL, `mode` varchar(12) default NULL, `times` datetime default NULL, KEY `ID` (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1 ; --------------------------------------------我是分割线-------------------------------------------- 在看到后台的界面 - 编辑器设置 - Discuz! 代码,新增一个标签,名称随意,这里我们就用iplay,添加后点击详情,在替换内容中添加如下代码: <embed width='800' height='353' quality='high' allowfullscreen='true' type='application/x-shockwave-flash' src='http://你的域名/bplayer/mukioplayer.swf?type={1}&vid;={2}'='http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash'/> 复制代码 例子中添加代码:[iplay={1}]{2}[/iplay] 解释:添加弹幕播放器 参数个数:2 参数提示语: 视频类型 视频的ID 镶套次数:1 允许使用的用户组根据自己论坛的情况而定即可 --------------------------------------------我是分割线-------------------------------------------- 完毕,在帖子中使用 [iplay=视频类型]视频ID[/iplay] 就可以添加一个弹幕播放器测试了。 视频类型解释 : 新浪 sina或者video都可以 优酷 youku 新发现: QQ视频 qq (测试可用) 6间房 6room (未测试) 视频ID解释 : 例如一个视频地址是新浪的 http://you.video.sina.com.cn/b/25323843-1272884840.html 那么 - 前面的25323843 这个值就是这个视频的ID 优酷的话 http://v.youku.com/v_show/id_XMzIzNjA2NjE2.html 就是id_至.html中间的XMzIzNjA2NjE2 --------------------------------------------我是分割线-------------------------------------------- 播放器提示评论文件加载失败或者发送失败,但是弹幕可以正确保存到数据库中的解决方法: 打开config.php,复制全部内容(已经配置好了数据库信息的),在打开xml.php,选中require 'config.php';,粘贴全部内容,保存。 某些linx服务器会出现此问题,临时用这个方法解决,暂时没有找到php生成xml不能包含其他文件的原因 --------------------------------------------我是分割线-------------------------------------------- 关于播放器侧边栏问题,压缩包里还有一个mukioplayer1.swf文件,将此文件与mukioplayer.swf替换,即可显示侧边栏 --------------------------------------------我是分割线-------------------------------------------- 总结:实现了基本的弹幕存储功能,但是管理很麻烦,而且安全性也有待加强,字段类型也弄的很随便,期待有强人来完善 若有问题可回帖,有时间我会回答,但不一定每个都回答(只针对本帖的内容和源码,在其他地方下的别问我) 此弹幕并不仅限DISCUZ论坛,PHPWIND及其他论坛也是可以整合的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值