【IT专家】php 微信模拟登陆 获取用户列表 群发消息
- 格式:pdf
- 大小:363.21 KB
- 文档页数:4
微信开发-群发接⼝前⾯说到的都是⼀条⼀条的回复给⽤户消息,如果想要⼀次性发给多个⽤户,就要使⽤微信提供的群发接⼝了。
微信群发需要注意(其实就是微信⽂档⾥⾯的内容):1.次数不⼀样,认证的订阅号可以每天发送⼀条群发消息,⽽认证的服务号虽然每天可以发送100条,但是⽤户每⽉只能接收四条,多余四条的将发送失败。
2.群发的时候,认证的订阅号每天只能使⽤is_to_all群发⼀次或者在公众平台群发⼀次。
相应的,服务号每个⽉公众平台群发+is_to_all群发最多只能四次。
根据标签群发 1.这个接⼝是通过post请求的,请求参数根据群发的内容略有不同。
2.tagid就是以前的分组id现在改名叫标签,在微信公众平台->⽤户管理的右侧可以看到已经创建的标签名,获得标签id需要通过接⼝来获得已经创建的所有标签的id。
3.当is_to_all为true时,可以选择不填写tagid。
4.media_id需要通过微信上传素材接⼝获得。
5.群发接⼝可以发送卡券,cardid需要通过创建卡券获得或者卡券相关事件推送获得。
/***根据标签进⾏群发*/public function pushByTags(){$access_token=get_token();$url="https:///cgi-bin/message/mass/sendall?access_token=".$access_token;$data=array('filter'=>array('is_to_all'=>false,'tag_id'=>135),'text'=>array('content'=>'test'),'msgtype'=>'text');$result=json_decode(curl($url,json_encode($data)),true);if($result['errcode']==0){echo "群发成功";M('monthtuisong')->add(array('msgid'=>$result['msg_id'])); }else{echo "群发失败";}} 返回errcode=0只是意味着群发任务提交成功,并不意味着群发结束,后续的群发过程中可能受到各种因素的影响,需要⼀段时间才能群发完毕。
如何用PHP实现消息推送1. 什么是消息推送通过服务器自动推送消息到客户端(浏览器,APP,微信)的应用技术。
2. 为什么要使用消息推送技术通常情况下都是用户发送请求浏览器显示用户需要的信息。
推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。
它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息。
3. 实现思路1. 管理员发送消息到swoole服务。
2. Swoole服务接受到管理员发送的信息并且发送给其他的客户端3. 其他的客户端通过WebSocket监听Swoole服务发送过来的信息并且输出。
4. 实现过程(CentOS环境)4.1. 安装swoole扩展pecl install swoole4.2. 启动swoole服务器在命令行中输入:1. php ws_server.phpws_server.php中的代码1. <?php2. $server = new swoole_websocket_server("0.0.0.0", 9501);3. $server->on('open', function (swoole_websocket_server $server, $request) {4. echo "server: handshake success with fd{$request->fd}\n";5. });6. $server->on('message', function (swoole_websocket_server $server, $frame) {7. echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";8. foreach ( $server->connections as $fd )9. {10. $server->push( $fd, $frame->data );11. }12. });13. $server->on('close', function ($ser, $fd) {14. echo "client {$fd} closed\n";15. });16.17. $server->start();4.3. 管理员向swoole服务发送信息4.3.1. 安装swoole客户端1. composer require textalk/websocket4.3.2. 管理员的代码1. <?php2. require './vendor/autoload.php';3.4. use WebSocket\Client;5.6.7. $client = new Client( "ws://swoole所在服务器的IP:9501" );8. $client->send("新的信息");4.4. 客户端监听swoole服务的代码1. <!DOCTYPE html>2. <meta charset="utf-8">3. <html lang="zh-CN">4. <head>5. <title> Swoole-push-demo </title>6. <meta name="viewport" content="width=device-width, initial-scale=1">7. <link rel="stylesheet" href="https:///bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">8. <script type="text/javascript" src="/libs/jquery/2.1.4/jquery.min.js"></script>9. <script type="text/javascript">10. var wsServer = 'ws://swoole服务器所在的IP:9501';11. var websocket = new WebSocket(wsServer);12. websocket.onopen = function (evt) {13. console.log("Connected to WebSocket server.");14. };15.16. websocket.onclose = function (evt) {17. console.log("Disconnected");18. };19.20. websocket.onmessage = function (evt) {21. console.log('Retrieved data from server: ' + evt.data);22. var html = "<a class='list-group-item list-group-item-success'>" + evt.data + "</a>";23. var selector = $( '.list-group > a:first' );24. selector.before( html );25. };26.27. websocket.onerror = function (evt, e) {28. console.log('Error occured: ' + evt.data);29. };30. </script>31. </head>32. <body>33. <div class="page-header">34. <h1> Swoole push client <small> 基于 Swoole 的浏览器推送 demo </small></h1>35. </div>36. <div class="list-group">37. <a href="#" class="list-group-item">Dapibus ac facilisis in</a>38. <a href="#" class="list-group-item">Morbi leo risus</a>39. <a href="#" class="list-group-item">Porta ac consectetur ac</a>40. <a href="#" class="list-group-item">Vestibulum at eros</a>41. </div>42.43. <a href="add.html" target="_blank" class="btn btn-info"> 添加信息 </a>44. <br>45. <div class="alert alert-warning" role="alert"> 请保留此页面,打开其他浏览器添加信息,此页面会自动显示你所添加的信息 </div>46. </body>47. </html>本文由源码时代老师原创提供。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系PHP:微信公众号的红包发送功能2016/03/25 0 更新为v2.0链接:pan.baidu/s/1o6rcvME密码: 67bp*说明参考续篇snmoney.blog.163/blog/static/440058201582141547557/使用公众号发送红包的准备工作(前提条件)1.你需要有一个微信服务号(mp.weixin.qq 注册,订阅号不行)且进行了企业认证(才能满足下一个条件);2. 需要申请一个微信商户号(pay.weixin.qq登录,需要发邮件申请注册,方法百度),且充足够发红包用的资金;3. 回微信公众平台(mp.weixin.qq) 完成【微信支付】的功能开通,然后打开【开发者中心】的开发模式。
确认在下面接口权限的列表中【功能服务- 微信支付】为已获得;4. 从mp.weixin 中记录下微信号的AppId(开发者中心);5. 从pay.weixin 记录下商户号(账户概览)、商户的API秘钥(账户设置- API安全),下载API证书(账户设置- API安全),解压得到pem文件备用。
类用法1. 用编辑器打开wxhongbao.class.php , 参考备注说明根据自己的微信号和商户号的信息设定前40行的变量;2. 把类文件、pem证书(apiclient_cert.pem/ apiclient_key.pem),上传到相应的路径下;3. 调用类,以下是一个简单的sample 。
include( wxhongbao.class.php ); $usrWXOpenId = 123456987654 ; //接收红包的用户的微信OpenId,捕获和辨识方法略~ $hb = new WXHongBao(); $hb- newhb($usrWXOpenId ,1000); //新建一个10元的红包,第二参数单位是分,注意取范围1-200元 //以下若干项可选操作,不指定则使用class脚本顶部的预设 $hb- setNickName( 土豪有限公司 $hb- setSendName( 王富贵 $hb- setWishing( 恭喜发财 $hb- setActName( 发钱活动 $hb- setRemark( 有钱!任性!。
.net微信公众号开发——群发消息1 MassMessage类MassMessage静态类封装了群发消息相关的⽅法,如下表:作⽤⽅法名群发Send删除Delete预览Preview查询发送状态GetStatus2 群发公众号可以按⽤户分组群发消息,也可以按⽤户的OpenId列表来群发群发消息。
2.1 按⽤户分组群发消息⽅法定义如下:/// <summary>///根据分组群发消息/// </summary>/// <param name="userName">公众号</param>/// <param name="isToAll">是否群发给所有⽤户</param>/// <param name="groupId">如果群发给所有⽤户,忽略该参数;否则群发给该组中的⽤户</param>/// <param name="messageType">群发消息类型</param>/// <param name="mediaIdOrContent">多媒体id或者⽂本内容</param>/// <param name="errorMessage">返回发送是否成功</param>/// <returns>如果发送成功,返回消息ID;否则,返回-1。
</returns>public static long Send(string userName, bool isToAll, string groupId, MassMessageTypeEnum messageType, string mediaIdOrContent, out ErrorMessage errorMessage)使⽤⽰例如下:/// <summary>///按分组群发消息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void btnSendToGroup_Click(object sender, EventArgs e){if (rblGroup.SelectedIndex >= 0){string userName = lbPublicAccount.SelectedValue;ErrorMessage errorMessage;bool isToAll = string.IsNullOrWhiteSpace(rblGroup.SelectedValue);string groupId = isToAll ? "" : rblGroup.SelectedValue;string content = txtContent.Text;long msgId = MassMessage.Send(userName, isToAll, groupId, MassMessageTypeEnum.text, content, out errorMessage);if (errorMessage.IsSuccess){ltrMessage.Text = "群发消息成功。
<?php/*** 微信公众平台PHP-SDK* Wechatauth为非官方微信登陆API* 用户通过扫描网页提供的二维码实现登陆信息获取* 主要实现如下功能:* get_login_code() 获取登陆授权码, 通过授权码才能获取二维码* get_code_image($code='') 将上面获取的授权码转换为图片二维码* verify_code() 鉴定是否登陆成功,返回200为最终授权成功.* get_login_cookie() 鉴定成功后调用此方法即可获取用户基本信息* sendNews($account,$title,$summary,$content,$pic,$srcurl='') 向一个微信账户发送图文信息* get_avatar($url) 获取用户头像图片数据* @authordodge<**********************>* @link https:///dodgepudding/wechat-php-sdk* @version 1.1**/include "snoopy.class.php";class Wechatauth{private $cookie;private $_cookiename;private $_cookieexpired = 3600;private $_account = 'test';private $_datapath = './data/cookie_';private $debug;private $_logcallback;public $login_user; //当前登陆用户, 调用get_login_info后获取public function __construct($options){$this->_account = isset($options['account'])?$options['account']:'';$this->_datapath = isset($options['datapath'])?$options['datapath']:$this->_datapath;$this->debug = isset($options['debug'])?$options['debug']:false;$this->_logcallback = isset($options['logcallback'])?$options['logcallback']:false;$this->_cookiename = $this->_datapath.$this->_account;$this->getCookie($this->_cookiename);}/*** 把cookie写入缓存* @param string $filename 缓存文件名* @param string $content 文件内容* @return bool*/public function saveCookie($filename,$content){return file_put_contents($filename,$content);}/*** 读取cookie缓存内容* @param string $filename 缓存文件名* @return string cookie*/public function getCookie($filename){if (file_exists($filename)) {$mtime = filemtime($filename);if ($mtime<time()-$this->_cookieexpired) return false;$data = file_get_contents($filename);if ($data) $this->cookie = $data;}return $this->cookie;}/** 删除cookie*/public function deleteCookie($filename) {$this->cookie = '';@unlink($filename);return true;}private function log($log){if ($this->debug && function_exists($this->_logcallback)) {if (is_array($log)) $log = print_r($log,true);return call_user_func($this->_logcallback,$log);}}/*** 获取登陆二维码对应的授权码*/public function get_login_code(){if ($this->_logincode) return $this->_logincode;$t = time().strval(mt_rand(100,999));$codeurl = 'https:///jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2F %2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_='.$t ;$send_snoopy = new Snoopy;$send_snoopy->fetch($codeurl);$result = $send_snoopy->results;if ($result) {preg_match("/window.QRLogin.uuid\s+=\s+\"([^\"]+)\"/",$result,$matches);if(count($matches)>1) {$this->_logincode = $matches[1];$_SESSION['login_step'] = 0;return $this->_logincode;}}return $result;}/*** 通过授权码获取对应的二维码图片地址* @param string $code* @return string image url*/public function get_code_image($code=''){if ($code=='') $code = $this->_logincode;if (!$code) return false;return '/qrcode/'.$this->_logincode.'?t=webwx';}/*** 设置二维码对应的授权码* @param string $code* @return class $this*/public function set_login_code($code) {$this->_logincode = $code;return $this;}/*** 二维码登陆验证** @return status:* >=400: invaild code; 408: not auth and wait, 400,401: not valid or expired* 201: just scaned but not confirm* 200: confirm then you can get user info*/public function verify_code() {if (!$this->_logincode) return false;$t = time().strval(mt_rand(100,999));$url = 'https:///cgi-bin/mmwebwx-bin/login?uuid='.$this->_logincode.'&tip=1&_='. $t;$send_snoopy = new Snoopy;$send_snoopy->referer = "https:///";$send_snoopy->fetch($url);$result = $send_snoopy->results;$this->log('step1:'.$result);if ($result) {preg_match("/window\.code=(\d+)/",$result,$matches);if(count($matches)>1) {$status = intval($matches[1]);if ($status==201) $_SESSION['login_step'] = 1;if ($status==200) {preg_match("/ticket=([0-9a-z-_]+)&lang=zh_CN&scan=(\d+)/",$result,$matches);$this->log('step2:'.print_r($matches,true));if (count($matches)>1) {$ticket = $matches[1];$scan = $matches[2];$loginurl = 'https:///cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket='.$ticket.'&lang=zh_CN& scan='.$scan.'&fun=new';$send_snoopy = new Snoopy;$send_snoopy->referer = "https:///";$send_snoopy->fetch($loginurl);$this->log('step3:'.print_r($send_snoopy->headers,true));foreach($send_snoopy->headers as $key => $value) {$value = trim($value);if(strpos($value,'Set-Cookie: ') !== false){$tmp = str_replace("Set-Cookie: ","",$value);$tmp = str_replace("Path=/","",$tmp);$tmp = str_replace("Domain=; ","",$tmp);$cookie.=$tmp;}}$cookie .="Domain=;";$this->cookie = $cookie;$this->saveCookie($this->_cookiename,$this->cookie);}}return $status;}}return false;}/*** 获取登陆的cookie** @param bool $is_array 是否以数值方式返回,默认否,返回字符串* @return string|array*/public function get_login_cookie($is_array = false){if (!$is_array) return $this->cookie;$c_arr = explode(';',$this->cookie);$cookie = array();foreach($c_arr as $item) {$kitem = explode('=',trim($item));if (count($kitem)>1) {$key = trim($kitem[0]);$val = trim($kitem[1]);if (!empty($val)) $cookie[$key] = $val;}}return $cookie;}/*** 授权登陆后获取用户登陆信息*/public function get_login_info(){if (!$this->cookie) return false;$t = time().strval(mt_rand(100,999));$send_snoopy = new Snoopy;$submit = 'https:///cgi-bin/mmwebwx-bin/webwxinit?r='.$t;$send_snoopy->rawheaders['Cookie']= $this->cookie;$send_snoopy->referer = "https:///";$send_snoopy->submit($submit,array());$this->log('login_info:'.$send_snoopy->results);$result = json_decode($send_snoopy->results,true);if ($result['BaseResponse']['Ret']<0) return false;$this->_login_user = $result['User'];return $result;}/*** 获取头像* @param string $url 传入从用户信息接口获取到的头像地址*/public function get_avatar($url) {if (!$this->cookie) return false;if (strpos($url, 'http')===false) {$url = ''.$url;}$send_snoopy = new Snoopy;$send_snoopy->rawheaders['Cookie']= $this->cookie;$send_snoopy->referer = "https:///";$send_snoopy->fetch($url);$result = $send_snoopy->results;if ($result)return $result;elsereturn false;}/*** 登出当前登陆用户*/public function logout(){if (!$this->cookie) return false;preg_match("/wxuin=(\w+);/",$this->cookie,$matches);if (count($matches)>1) $uid = $matches[1];preg_match("/wxsid=(\w+);/",$this->cookie,$matches);if (count($matches)>1) $sid = $matches[1];$this->log('logout: uid='.$uid.';sid='.$sid);$send_snoopy = new Snoopy;$submit = 'https:///cgi-bin/mmwebwx-bin/webwxlogout?redirect=1&type=1';$send_snoopy->rawheaders['Cookie']= $this->cookie;$send_snoopy->referer = "https:///";$send_snoopy->submit($submit,array('uin'=>$uid,'sid'=>$sid));$this->deleteCookie($this->_cookiename);return true;}}。
php实现微信模板消息推送本⽂实例为⼤家分享了php微信模板消息推送的具体代码,供⼤家参考,具体内容如下1.微信公众号模板消息配置2.PHP代码/*** 发送模板消息*/public function send_notice(){//获取access_tokenif ($_COOKIE['access_token']){$access_token2=$_COOKIE['access_token'];}else{$json_token=$this>curl_post("https:///cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret.'"); $access_token1=json_decode($json_token,true);$access_token2=$access_token1['access_token'];setcookie('access_token',$access_token2,7200);}//模板消息$json_template = $this->json_tempalte();$url="https:///cgi- bin/message/template/send?access_token=".$access_token2;$res=$this->curl_post($url,urldecode($json_template));if ($res['errcode']==0){return '发送成功';}else{return '发送失败';}}/*** 将模板消息json格式化*/public function json_tempalte(){//模板消息$template=array('touser'=>'.$openid.', //⽤户openid'template_id'=>".$tenpalate_id.", //在公众号下配置的模板id'url'=>".$uel.", //点击模板消息会跳转的链接'topcolor'=>"#7B68EE",'data'=>array('first'=>array('value'=>urlencode("您的活动已通过"),'color'=>"#FF0000"),'keyword1'=>array('value'=>urlencode('测试⽂章标题'),'color'=>'#FF0000'), //keyword需要与配置的模板消息对应'keyword2'=>array('value'=>urlencode(date("Y-m-d H:i:s")),'color'=>'#FF0000'),'keyword3'=>array('value'=>urlencode('测试发布⼈'),'color'=>'#FF0000'),'keyword4'=>array('value'=>urlencode('测试状态'),'color'=>'#FF0000'),'remark' =>array('value'=>urlencode('备注:这是测试'),'color'=>'#FF0000'), ));$json_template=json_encode($template);return $json_template;}/*** @param $url* @param array $data* @return mixed* curl请求*/function curl_post($url , $data=array()){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);// POST数据curl_setopt($ch, CURLOPT_POST, 1);// 把post的变量加上curl_setopt($ch, CURLOPT_POSTFIELDS, $data);$output = curl_exec($ch);curl_close($ch);return $output;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
微信怎么群发消息给多人微信是一款广受欢迎的社交媒体应用程序,它不仅可以用于与朋友和家人保持联系,还可以用于商业目的。
在商业场景中,群发消息给多人是非常有用的功能。
本文将为您介绍如何使用微信群发消息给多人。
第一步:创建一个微信群组在微信中,您可以创建一个群组来批量发送消息。
要创建一个群组,请按照以下步骤操作:1. 打开微信应用程序并登录您的帐户。
2. 在应用程序的底部找到并点击“通讯录”选项。
3. 在通讯录页面,点击右上角的“+”图标。
4. 在弹出的菜单中选择“新建群组”选项。
5. 在新建群组页面,您可以选择添加群组名称和群组图标。
6. 添加群组成员。
您可以通过选择联系人并点击“√”图标来添加成员,也可以通过点击“通过群助手邀请新人加入”来邀请更多的人加入群组。
7. 点击“确定”完成群组创建。
第二步:发送消息给群组成员一旦群组创建完成,您可以开始发送消息给群组成员。
要发送消息,请按照以下步骤操作:1. 打开微信应用程序并登录您的帐户。
2. 在应用程序的底部找到并点击“通讯录”选项。
3. 在通讯录页面,找到并点击您刚刚创建的群组。
4. 在群组聊天页面,点击底部的文本框,输入您要发送的消息内容。
5. 点击键盘上的发送按钮,消息将被发送到群组中的所有成员。
第三步:使用群发助手发送消息如果您想发送相同的消息给多个群组,或者发送消息给大量的人,微信还提供了一个群发助手功能。
要使用群发助手发送消息,请按照以下步骤操作:1. 打开微信应用程序并登录您的帐户。
2. 在应用程序的底部找到并点击“群发助手”选项。
3. 在群发助手页面,点击右上角的“+”图标。
4. 在弹出的菜单中选择“新建消息”选项。
5. 在新建消息页面,您可以选择消息的类型,例如文本、图片、视频等。
6. 编辑您要发送的消息内容。
7. 点击右上角的“选择群组”按钮,选择您要发送消息的群组。
8. 点击发送按钮,消息将会发送给选定的群组中的所有成员。
第四步:注意事项在使用微信群发消息给多人的过程中,还有一些注意事项需要注意:1. 尊重成员隐私。
PHPEMS微信端设置教程微信端已成为现代社会中最为流行的通讯工具之一,许多企业和组织纷纷选择利用微信平台进行信息传播和业务推广。
在这样的背景下,PHPEMS为用户提供了微信端设置功能,使用户可以轻松地将信息发布到微信平台上,并与客户进行互动。
本文将为您介绍如何使用PHPEMS微信端设置功能,并详细说明每个步骤的操作方法。
第一步:登录PHPEMS后台管理系统首先,您需要访问PHPEMS网站,并登录后台管理系统。
在登录页面中输入正确的用户名和密码,然后点击“登录”按钮进入系统主界面。
第二步:进入微信端设置页面在系统主界面中,您可以看到左侧导航栏,其中包含了各种管理功能。
请点击导航栏中的“微信端设置”选项,进入微信端设置页面。
第三步:配置微信公众号信息在微信端设置页面中,您需要配置微信公众号信息,这样才能与微信平台进行连接。
具体的配置步骤如下:1.获取微信公众号的AppID和AppSecret,这些信息可以在微信公众平台的开发者中心中找到。
2.在微信端设置页面填写AppID和AppSecret,并点击“保存”按钮。
第四步:设置菜单栏在微信端设置页面的下方,您可以看到一个名为“菜单栏设置”的部分。
通过设置菜单栏,您可以在微信端上展示您的产品、服务和其他信息。
具体的设置步骤如下:1.点击“添加菜单”按钮,进入新建菜单界面。
2.在新建菜单界面中,您可以设置菜单的名称、链接和显示顺序。
3.点击“保存”按钮,保存菜单设置。
第五步:配置关注回复和自动回复在微信端设置页面的右侧,您可以找到“关注回复”和“自动回复”的设置选项。
通过配置这些选项,您可以自定义用户关注公众号后的回复内容和用户发送消息后的自动回复内容。
具体的配置方法如下:1.点击“关注回复”选项,进入关注回复设置页面。
2.在关注回复设置页面,您可以编辑关注回复的文本内容,并设置图片、链接等元素。
3.点击“保存”按钮,保存关注回复设置。
4.点击“自动回复”选项,进入自动回复设置页面。
Fastadminthinkphp微信登录授权Demo 由于经常⽤这些就搞个⽰例⽅便调⽤吧!这是index⾥⾯的⽂件到时候就直接访问/index.php/index/index/wxindex<?phpnamespace app\index\controller;use app\common\controller\Frontend;use fast\Wxsdk;class Index extends Frontend{protected$noNeedLogin = '*';protected$noNeedRight = '*';// protected $layout = '';public function _initialize(){$this->appId = 'wx63c391768f362ca8'; //wxe6747dc052817254$this->appSecret = '512ec5eb6117b86bcaccf3f10b45edc2'; //}public function wxindex(){$this->Wxsdk = new Wxsdk($this->appId,$this->appSecret);if(!$this->Wxsdk->islogin()){$user = $this->Wxsdk->login();if(!empty($user['openid'])){//存数据库$this->add_Wxuser($user);//获取到微信⽤户存数据// 然后继续操作}else{$this->success('error', $user);}}}public function add_Wxuser($user){//在你的数据库添加⽤户信息dump($user);}}⾥⾯加载的类⽂件(QQ496631085)⽂件名Wxsdk.php 放在extend\fast\⽬录下⾯看框架及版本定义1 <?php23 namespace fast;456class Wxsdk7 {8private$appId;9private$appSecret;1011public function __construct($appId, $appSecret) {12$this->appId = $appId;13$this->appSecret = $appSecret;14 }151617public function islogin(){18//验证是否登录过,如果没有登录就跳转19if(empty(session('openid'))){20// $this->getUserOpenId();21return false;22// $this->redirect('/index/index/me');23 // exit();24 }else{25// echo " ";26return true;27// dump(session('openid'));28 }29 }3031public function login(){32// $user ='1111';33$user = $this->getUserOpenId();3435return$user;36 }373839public function getBaseInfo(){40//1.获取到code414243 // $redirect_uri=urlencode($this->domain()."/index/index/index");//跳转可以⾃⼰改参数 QQ49663108544$redirect_uri=urlencode($this->domain()."/index/index/wxindex");4546$url="https:///connect/oauth2/authorize?appid=".$this->appId."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=xiaohe#wechat_redirect"; 4748echo '<script>;location.href="'.$url.'";</script>;';49exit();50 }5152535455/**56 * 判断是否为https57 * @return bool 是https返回true;否则返回false58*/59public function domain() {60if ( !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {61return 'https://'.$_SERVER['HTTP_HOST'];62 } elseif ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {63return 'https://'.$_SERVER['HTTP_HOST'];64 } elseif ( !empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {65return 'https://'.$_SERVER['HTTP_HOST'];66 }else{67return 'http://'.$_SERVER['HTTP_HOST'];68 }69 }7071//查询这个⽤户的信息72public function openid_nickname($openid){73$nickname = Db::name('wxuser')->where('openid',$openid)->find();74return$nickname['nickname'];75 }7677//获取⽤户的openid等信息78public function getUserOpenId(){79if(!empty($_SERVER['HTTP_REFERER']))80file_put_contents('tiaozhuan.txt', $_SERVER['HTTP_REFERER'].'\r\n',FILE_APPEND);81// exit($_GET);82 //2.获取到⽹页授权的access_token838485 // if(empty($this->request->get('code'))){86if(empty($_GET['code'])){87$this->getBaseInfo();88exit();89 }90// dump($this->request->get());91$code = $_GET['code'];//92$url="https:///sns/oauth2/access_token?appid=".$this->appId."&secret=".$this->appSecret."&code=".$code."&grant_type=authorization_code ";93//3.拉取⽤户的openid94$res = file_get_contents($url);9596$data = json_decode($res,true);97if(!empty($data['access_token']) && !empty($data['openid'])){98$this->access_token=$data['access_token'];99$this->refresh_token=$data['refresh_token'];100101$url = "https:///sns/userinfo?access_token=".$data['access_token']."&openid=".$data['openid']."&lang=zh_CN";102$userInfo = file_get_contents($url);103$user_res = json_decode($userInfo,true);104// echo $userInfo;105return$user_res;106// $this->openid = $user_res['openid'];107 // $this->nickname = base64_encode($user_res['nickname']);108 // $this->headimgurl = $user_res['headimgurl'];109 // $this->sex = $user_res['sex'];110 // // dump($user_res);111 // //获取都⽤户信息然后判断是否新⽤户存表112 // session('openid',$this->openid);113 // if(!empty($_SERVER['HTTP_REFERER'])){114 // $this->redirect($_SERVER['HTTP_REFERER']);115 // }116 // else{117 // $this->redirect($this->_domain.'/index/index/index');118 // }119120 }else{121return($data);122// $this->getUserOpenId();123exit();124 }125 }126127128129130public function getSignPackage() {131$jsapiTicket = $this->getJsApiTicket();132133// 注意 URL ⼀定要动态获取,不能 hardcode.134$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; 135$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";136137$timestamp = time();138$nonceStr = $this->createNonceStr();139140// 这⾥参数的顺序要按照 key 值 ASCII 码升序排序141$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";142143$signature = sha1($string);144145$signPackage = array(146 "appId" => $this->appId,147 "nonceStr" => $nonceStr,148 "timestamp" => $timestamp,149 "url" => $url,150 "signature" => $signature,151 "rawString" => $string152 );153return$signPackage;154 }155156private function createNonceStr($length = 16) {157$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";158$str = "";159for ($i = 0; $i < $length; $i++) {160$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);161 }162return$str;163 }164165private function getJsApiTicket() {166// jsapi_ticket 应该全局存储与更新,以下代码以写⼊到⽂件中做⽰例167if(file_get_contents("jsapi_ticket.json")){168$data = json_decode(file_get_contents("jsapi_ticket.json"));169 }else{170$data = null;171 }172173174if ($data->expire_time < time()) {175$accessToken = $this->getAccessToken();176// 如果是企业号⽤以下 URL 获取 ticket177 // $url = "https:///cgi-bin/get_jsapi_ticket?access_token=$accessToken";178$url = "https:///cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";179$res = json_decode($this->httpGet($url));180$ticket = $res->ticket;181if ($ticket) {182$data->expire_time = time() + 7000;183$data->jsapi_ticket = $ticket;184$fp = fopen("jsapi_ticket.json", "w");185fwrite($fp, json_encode($data));186fclose($fp);187 }188 } else {189$ticket = $data->jsapi_ticket;190 }191192return$ticket;193 }194195private function getAccessToken() {196// access_token 应该全局存储与更新,以下代码以写⼊到⽂件中做⽰例197$data = json_decode(file_get_contents("access_token.json"));198if ($data->expire_time < time()) {199// 如果是企业号⽤以下URL获取access_token200 // $url = "https:///cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";201$url = "https:///cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";202$res = json_decode($this->httpGet($url));203$access_token = $res->access_token;204if ($access_token) {205$data->expire_time = time() + 7000;206$data->access_token = $access_token;207$fp = fopen("access_token.json", "w");208fwrite($fp, json_encode($data));209fclose($fp);210 }211 } else {212$access_token = $data->access_token;213 }214return$access_token;215 }216217private function httpGet($url) {218$curl = curl_init();219 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);220 curl_setopt($curl, CURLOPT_TIMEOUT, 500);221 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);222 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);223 curl_setopt($curl, CURLOPT_URL, $url);224225$res = curl_exec($curl);226 curl_close($curl);227228return$res;229 }230 }View Code然后就可以继续操作了。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系php 微信模拟登陆获取用户列表群发消息2015/04/16 0 ?phpheader( Content-Type: text/html; charset=UTF-8 /*调用方式简单说明:$arr = array( account = 公众平台帐号, password = 密码);$w = new Weixin($arr);print_r($w- getAllUserInfo());//获取所有用户信息$w- getUserInfo($groupid, $fakeid);//获取所有用户信息,如果默认分组,则$groupid传0$w- sendMessage( 群发内容//群发给所有用户$w- sendMessage( 群发内容,$userId); //群发给特定用户,这里的$userId就是用户的fakeid,数组方式传递*/class Weixin { public $userFakeid;//所有粉丝的fakeid private $_account;//用户名private $_password;//密码private $url;//请求的网址private $send_data;//提交的数据private $getHeader = 0;//是否显示Header信息private $token;//公共帐号TOKEN private $host = mp.weixin.qq //主机private $origin = https://mp.weixin.qq private $referer;//引用地址private $cookie; private $pageSize = 100000;//每页用户数(用于读取所有用户)private $userAgent = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0 public function __construct($options){ $this- _account = isset($options[ account ])?$options[ account ]: $this- _password = isset($options[ password ])?$options[ password ]: $this- login(); } //登录private function login(){ $url = https://mp.weixin.qq/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/ $this- getHeader = 1; $result = explode( \n ,$this- curlPost($url)); foreach ($result as $key = $value) { $value = trim($value); if (preg_match( /token=(\d+)/i , $value,$match)) { //获取token $this- token = trim($match[1]); } if (preg_match( / ret :(.*)/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 =。