Overview

Packages

  • None
  • WxRobot
    • Admin
    • Cmd
    • CoreFunctions
    • Exends
    • Install
    • Table
    • Uninstall
    • WxSDK

Classes

  • ErrorCode
  • PKCS7Encoder
  • Prpcrypt
  • SHA1
  • Weixin_BaseCore
  • WeiXin_SDK
  • Weixin_Template
  • WXBizMsgCrypt
  • WxRobot_Admin
  • WxRobot_Admin_Menu_Extends
  • WxRobot_Admin_Menu_Instro
  • WxRobot_Admin_Menu_Menu
  • WxRobot_Admin_Menu_Records
  • WxRobot_Admin_Menu_Reply
  • WxRobot_Admin_Menu_Setting
  • WxRobot_Admin_Menu_Statistics
  • WxRobot_Cmd
  • WxRobot_Cmd_Event
  • WxRobot_Cmd_Event_User
  • WxRobot_Cmd_Text
  • WxRobot_Extends
  • WxRobot_Install
  • WxRobot_Robot
  • WxRobot_SDK
  • WxRobot_Table_Extends
  • WxRobot_Table_Menu
  • WxRobot_Table_Records
  • WxRobot_Table_Reply
  • WxRobot_Uninstall
  • WxRobot_Wp
  • XMLParse

Functions

  • wx_admin_log
  • wx_is_xml
  • wx_notice_msg
  • wx_parse_xml
  • wx_random_big_pic
  • wx_random_small_pic
  • wx_request_array
  • wx_request_decode
  • wx_request_is_encode
  • wx_request_xml
  • wx_send_encode
  • Overview
  • Package
  • Class
  1: <?php
  2: /**
  3:  *  微信机器人核心Api
  4:  *
  5:  *  @author     midoks
  6:  *  @category   WxSDK
  7:  *  @package    WxRobot/WxSDK
  8:  *  @since      5.3.0
  9:  */
 10: class WxRobot_SDK{
 11: 
 12:     /**
 13:      * WxRobot_SDK Instance
 14:      */
 15:     public static $_instance = null;
 16: 
 17:     public function __construct(){
 18:         include_once('weixin/weixin.class.php');
 19:         $this->options = get_option(WEIXIN_ROBOT_OPTIONS);
 20:         $this->info    = wx_request_array();
 21:         $this->obj = new WeiXin_SDK($this->options['ai'], $this->options['as']);
 22:     }
 23: 
 24:     /**
 25:      * WxRobot SDK类实例化
 26:      * 
 27:      * @return WxRobot_SDK instance
 28:      */
 29:     public static function instance(){
 30:         if( is_null (self::$_instance)){
 31:             self::$_instance = new self();
 32:         }
 33:         return self::$_instance;
 34:     }
 35: 
 36: 
 37:     /**
 38:      * 返回文本信信息
 39:      *
 40:      * @param $Msg 信息
 41:      * @param $mode 是否开启截取模式(0:不开启,1:开启.默认开启)
 42:      * @return string xml
 43:      * exp:
 44:      * echo $this->toMsgText($contentStr);//文本地址
 45:      */
 46:     public function toMsgText($Msg, $mode=1){
 47:         if($mode){
 48:             $c = strlen($Msg);
 49:             if($c > 2048){
 50:                 $Msg = $this->byte_substr($Msg);
 51:             }
 52:         }
 53:         return $this->obj->toMsgText($this->info['FromUserName'], $this->info['ToUserName'], $Msg);
 54:     }
 55: 
 56:     /**
 57:      *  在手机客服端显示的一种(仅在客服端,有效果)
 58:      *  
 59:      *  @param array $alink
 60:      *  @param string $suffix (一般为"\r\n", 默认为空)
 61:      *  @info 由(http://weibo.com/clothand)提供, 当然我做了优化
 62:      *  @exp:
 63:      *  $alink[0]['link'] = 'midoks.cachecha.com';
 64:      *  $alink[0]['title'] = '你好';
 65:      */
 66:     public function toMsgTextAlink($alink, $suffix = ''){
 67:         $link_info = '';
 68:         foreach($alink as $k=>$v){
 69:             $_n = "<a href='{$v['link']}'>{$v['title']}</a>".$suffix;
 70:             $ret_n = $link_info.$_n; 
 71:             $_c = strlen($ret_n);
 72:             if($_c > 2048){
 73:                 return $this->toMsgText($link_info);
 74:             }else{
 75:                 $link_info .= $_n;
 76:             }
 77:         }
 78:         return $this->toMsgText($link_info);
 79:     }
 80: 
 81:     
 82:     /**
 83:      * 返回图片信息(测试未成功)
 84:      *
 85:      * @param $MediaId 图片信息
 86:      * @return string xml
 87:      * exp:
 88:      * echo $this->toMsgPic($MediaId);图
 89:      */
 90:     public function toMsgPic($MediaId){
 91:         return $this->obj->toMsgPic($this->info['FromUserName'], $this->info['ToUserName'], $MediaId);
 92:     }
 93: 
 94: 
 95:     /**
 96:      * 返回voice xml
 97:      *
 98:      * @param MediaId
 99:      * @return string xml
100:      * exp:
101:      * echo $this->toMsgVoice($MediaId);
102:      */
103:     public function toMsgVoice($MediaId){
104:         return $this->obj->toMsgVoice($this->info['FromUserName'], $this->info['ToUserName'], $MediaId);
105:     }
106: 
107:     /**
108:      * 返回music xml
109:      *
110:      * @param string $title 标题
111:      * @param string $desc 描述
112:      * @param string $MusicUrl 地址
113:      * @param string $HQMusicUrl 高清播放(会首先选择)
114:      * @return xml
115:      * exp:
116:      * echo $this->toMsgVoice('声音','当男人好难!', $MusicUrl, $MusicUrl);//voice
117:      */
118:     public function toMsgMusic($title, $desc, $MusicUrl, $HQMusicUrl, $ThumbMediaId=''){
119:         return $this->obj->toMsgMusic($this->info['FromUserName'], $this->info['ToUserName'], $title, $desc, $MusicUrl, $HQMusicUrl, $ThumbMediaId);
120:     }
121: 
122:     /**
123:      * 返回video xml
124:      * 
125:      * @param 通过上传多媒体文件,得到id
126:      * @param 缩图的媒体ID,通过上传多媒体文件,得到的id
127:      * @return xml
128:      */
129:     public function toMsgVideo($media_id, $thumb_media_id){
130:         return $this->obj->toMsgVideo($this->info['FromUserName'], $this->info['ToUserName'], $media_id, $thumb_media_id);
131:     }
132: 
133:     /**
134:      * 返回图文
135:      * 
136:      * @param array $info
137:      * @param array $array
138:      * @return string xml
139:      * exp
140:      * $textPic = array(
141:      *      array(
142:      *          'title'=> '标题',
143:     *           'desc'=> '描述',
144:     *           'pic'=> $this->bigPic(),//图片地址
145:     *           'link'=>$pic,//图片链接地址
146:     *       ),//第一个图片为大图
147:     *       array(
148:     *           'title'=> '标题',
149:     *           'desc'=> '描述',
150:     *           'pic'=> $this->smallPic(),//图片地址
151:     *           'link'=> '',//图片链接地址
152:     *       ),//此自以后皆为小图
153:     *       array(
154:     *           'title'=> '标题',
155:     *           'desc' => '描述',
156:     *           'pic'  => $this->smallPic(),//图片地址
157:     *           'link' => '',//图片链接地址
158:     *       ),
159:     *       array(
160:     *           'title'=> '标题',
161:     *           'desc' => '描述',
162:     *           'pic'  => $this->smallPic(),//图片地址
163:     *           'link' => '',//图片链接地址
164:     *       ),
165:     *       array(
166:     *           'title'=> '标题',
167:     *           'desc' => '描述',
168:     *           'pic'  => $this->smallPic(),//图片地址
169:     *           'link' => '',//图片链接地址
170:     *       ),
171:     *       array(
172:     *           'title'=> '标题',
173:     *           'desc' => '描述',
174:     *           'pic'  => $this->smallPic(),//图片地址
175:     *           'link' => '',//图片链接地址
176:     *       ),
177:     *   );
178:     *   echo $this->toMsgTextPic($textPic);//图文
179:     */
180:     public function toMsgTextPic($picTextInfo){
181:         $fromUserName = $this->info['FromUserName'];
182:         $toUserName = $this->info['ToUserName'];
183:         return $this->obj->toMsgNews($fromUserName, $toUserName, $picTextInfo);
184:     }
185: 
186:     /**
187:      *  在客服端列表的展示形式
188:      *
189:      *  $list[0]['title'] = '0';
190:      *  $list[0]['desc'] =  '0';
191:      *  $list[0]['link'] = "http://midok.cachecha.com/";
192:      */
193:     public function toMsgTextPicList($list){
194:         $info = array();
195:         foreach($list as $k=>$v){
196:             $a['title'] = $v['title'];
197:             $a['desc'] =  $v['desc'];
198:             $a['link'] = $v['link'];
199:             $info[] = $a;
200:         }
201:         return $this->toMsgTextPic($info);//图文
202:     }
203: 
204:     /**
205:      * 重新获取token
206:      *
207:      * @return string
208:      */
209:     public function getReToken(){
210:         $data = $this->obj->getToken();
211:         $data = json_decode($data, true);
212:         $data['expires_in'] = time() + $data['expires_in'];
213:         $this->options['weixin_robot_token'] = json_encode($data);
214:         update_option(WEIXIN_ROBOT_OPTIONS, $this->options);
215:         return $data['access_token']; 
216:     }
217:     
218:     /**
219:      * 获取token
220:      *
221:      * @return string
222:      */
223:     public function getToken(){
224:         if(empty($this->options['ai']) || empty($this->options['as'])){
225:             wx_notice_msg('填写服务号的信息!!!');   
226:         }
227: 
228:         if(!empty($this->options['weixin_robot_token'])){
229:             $data = $this->options['weixin_robot_token'];
230:             $data = base64_decode($data);
231:             $data = json_decode($data, true);
232:             if($data['expires_in'] <= time()){
233:                 $_data =  $this->obj->getToken();
234:                 $data = json_decode($_data, true);
235:                 if(isset($data['errcode'])){//判断错误
236:                     return($_data);
237:                 }
238:                 $data['expires_in'] = time() + $data['expires_in'];
239:                 $this->options['weixin_robot_token'] = base64_encode(json_encode($data));
240:                 update_option(WEIXIN_ROBOT_OPTIONS, $this->options);
241:             }
242:             return $data['access_token'];
243:         }else{
244:             $_data = $this->obj->getToken();
245:             $data = json_decode($_data, true);
246:             if(isset($data['errcode'])){//判断错误
247:                 return($_data);
248:             }
249:             $data['expires_in'] = time() + $data['expires_in'];
250:             $this->options['weixin_robot_token'] = base64_encode(json_encode($data));
251:             update_option(WEIXIN_ROBOT_OPTIONS, $this->options);
252:         }
253:         return $data['access_token'];
254:     }
255: 
256: /**
257:  *  多客服系统接口 start 
258:  *  多客服系统是在的插件中使用!!!
259:  */
260:     /**
261:      *  获取客服聊天记录
262:      *
263:      *  @param $open_id     普通用户的标识,对当前公众号唯一
264:      *  @param $starttime   查询开始时间,UNIX时间戳
265:      *  @param $endtime     查询结束时间,UNIX时间戳,每次查询不能跨日查询
266:      *  @param $pagesize    每页大小,每页最多拉取1000条
267:      *  @param $pageindex   查询第几页,从1开始
268:      *  @return string json  
269:      */
270:     public function getCustomServiceLog($open_id, $starttime, $endtime, $pagesize=20, $pageindex=1){
271:         $token = $this->getToken();
272:         return $this->obj->getCustomServiceLog($token, $open_id, $starttime, $endtime, $pagesize, $pageindex);
273:     }
274: /* 多客服系统接口 end */
275: 
276: /* 菜单相关 start */
277:     /**
278:      * 删除菜单
279:      *
280:      * @return json
281:      */
282:     public function menuDel(){
283:         $token = $this->getToken();
284:         $data = $this->obj->menuDel($token);
285:         return $data;
286:     }
287: 
288:     /**
289:      * 设置菜单
290:      * 
291:      * @param json $json 传递json数据
292:      * @return json
293:      */
294:     public function menuSet($json){
295:         $token = $this->getToken();
296:         return $this->obj->menuSet($token, $json);
297:     }
298: 
299:     /**
300:      * 获取菜单
301:      *
302:      * @return json|bool
303:      * @since 5.3.1
304:      */
305:     public function menuGet(){
306:         $token = $this->getToken();
307:         $data = $this->obj->menuGet($token);
308:         $data = json_decode($data, true);
309:         if(isset($data['errcode'])){
310:             if('46003' == $data['errcode']){
311:                 return true;
312:             }
313:             return false;
314:         }
315:         return $data;
316:     }
317: /* 菜单相关 start */
318: 
319:     /**
320:      * 智能语意分析
321:      * 
322:      * @param string $query     查询的句子
323:      * @param string $appid     公众号唯一标示
324:      * @param string $uid       用户唯一ID
325:      * @param string $city      城市名称            默认 北京
326:      * @param string $category  需要使用的服务类型 默认flight,hotel
327:      * @param string $region    区域名称            默认为空
328:      * @param string $lat       纬度坐标            默认为空
329:      * @param string $long      经度坐标            默认为空
330:      * @return json
331:      */
332:     public function getSemantic($query, $appid, $uid, $city='北京', $category='flight,hotel', $region ='', $lat = '', $long = ''){
333:         $token = $this->getToken();
334:         return $this->obj->getSemantic($token, $query, $category, $lat, $long, $city, $region, $appid, $uid);
335:     }
336: 
337:     //主动推送消息(24小时联系的人)
338: 
339:     /**
340:      *  推送文本类型的消息
341:      *
342:      *  @param string $open_id
343:      *  @param string $msg
344:      *  @return json
345:      */
346:     public function pushMsgText($open_id, $msg){
347:         $token = $this->getToken();
348:         return $this->obj->pushMsgText($token, $open_id, $msg);
349:     }
350: 
351:     /**
352:      *  推送图片消息
353:      *
354:      *  @param string $open_id
355:      *  @param string $media_id
356:      *  @return json
357:      */
358:     public function pushMsgImage($open_id, $media_id){
359:         $token = $this->getToken();
360:         return $this->obj->pushMsgImage($token, $open_id, $media_id);
361:     }
362: 
363:     /**
364:      *  推送高清图片消息
365:      *
366:      *  @param string $open_id 用户open_id
367:      *  @param string $file 文件绝对地址
368:      *  @return json
369:      */
370:     public function pushMsgImageAdv($open_id, $file){
371:         if(filesize($file) > 131072){
372:             return '{errcode: "file size too big"}';
373:         }
374:         $token = $this->getToken();
375:         return $this->obj->pushMsgImageAdv($token, $open_id, $file);
376:     }
377: 
378:     /**
379:      *  推送音频消息
380:      *
381:      *  @param string $open_id 用户open_id
382:      *  @param string $media_id 资源ID
383:      *  @return json
384:      */
385:     public function pushMsgVoice($open_id,$media_id){
386:         $token = $this->getToken();
387:         return $this->obj->pushMsgVoice($token, $open_id, $media_id);
388:     }
389: 
390:     /**
391:      *  推送高清音频消息
392:      *
393:      *  @param string $open_id 用户open_id
394:      *  @param string $media_id 资源ID
395:      *  @return json
396:      */
397:     public function pushMsgVoiceAdv($open_id, $file){
398:         if(filesize($file) > 262144){
399:             return '{errcode: "file size too big"}';
400:         }
401:         $token = $this->getToken();
402:         return $this->obj->pushMsgVoiceAdv($token, $open_id, $file);
403:     }
404: 
405:     /**
406:      *  推送视频消息
407:      *
408:      *  @param string $open_id 用户open_id
409:      *  @param string $media_id 资源ID
410:      *  @param string $title 标题
411:      *  @param string $desc 描述信息
412:      *  @return json
413:      */
414:     public function pushMsgVideo($open_id, $media_id, $title, $desc){
415:         $token = $this->getToken();
416:         return $this->obj->pushMsgVoice($token, $open_id, $media_id);
417:     }
418: 
419:     /**
420:      *  推送高清视频消息
421:      *
422:      *  @param string $open_id 用户open_id
423:      *  @param string $file 绝对地址
424:      *  @param string $title 标题
425:      *  @param string $desc 描述信息
426:      *  @return json
427:      */
428:     public function pushMsgVideoAdv($open_id, $file, $title, $desc){
429:         if(filesize($file) > 1048576){
430:             return '{errcode: "file size too big"}';
431:         }
432:         $token = $this->getToken();
433:         return $this->obj->pushMsgVoiceAdv($token, $file,$open_id, $file);
434:     }
435: 
436:     /**
437:      *  推送音乐消息
438:      *
439:      *  @param string $open_id 用户open_id
440:      *  @param string $file 文件绝对地址
441:      *  @param string $title 标题
442:      *  @param string $desc 描述信息
443:      *  @param string $musicurl 音乐url地址
444:      *  @param string $hqmusicurl 高质量url地址
445:      *  @return json
446:      */
447:     public function pushMsgMusic($open_id, $file, $title, $desc, $musicurl, $hqmusicurl){
448:         $token = $this->getToken();
449:         return $this->obj->pushMsgMusic($token, $open_id, $thumb_media_id, $title, $desc, $musicurl, $hqmusicurl);
450:     }
451: 
452:     /**
453:      *  推送高清音乐消息
454:      *
455:      *  @param string $open_id 用户open_id
456:      *  @param string $file 文件绝对地址
457:      *  @param string $title 标题
458:      *  @param string $desc 描述信息
459:      *  @param string $musicurl 音乐url地址
460:      *  @param string $hqmusicurl 高质量url地址
461:      *  @return json
462:      */
463:     public function pushMsgMusicAdv($open_id, $file, $title, $desc, $musicurl, $hqmusicurl){
464:         if(filesize($file) > 65536){
465:             return '{errcode: "file size too big"}';
466:         }
467:         $token = $this->getToken();
468:         return $this->obj->pushMsgMusicAdv($token, $open_id, $file, $title, $desc, $musicurl, $hqmusicurl);
469:     }
470: 
471: 
472:     /**
473:      * 推送图文信息
474:      *
475:      * @param string $open_id 用户open_id
476:      * @param array $info 图文信息
477:      * @return json
478:      * @exp: $info should be:
479:      *      $info[]["title"] = "Happy Day";
480:      *      $info[]["description"]="Is Really A Happy Day";
481:      *      $info[]["url"] = "URL";
482:      *      $info[]["picurl"] = "PIC_URL";
483:      */
484:     public function pushMsgNew($open_id, $info){
485:         $token = $this->getToken();
486:         return $this->obj->pushMsgNew($token, $open_id, $info);
487:     }
488: //END PUSH
489:     
490: 
491:     /**
492:      *  下载媒体文件
493:      *
494:      *  @param string $media_id 媒体文件ID
495:      *  @return json
496:      */
497:     public function download($media_id){
498:         $token = $this->getToken();
499:         return $this->obj->download($token, $media_id);
500:     }
501: 
502:     /**
503:      *  上传媒体文件
504:      *
505:      *  @param string $type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
506:      *  @param string $file 文件地址
507:      *  @return json
508:      */
509:     public function upload($type, $file){
510:         $token = $this->getToken();
511:         return $this->obj->upload($token, $type, $file);
512:     }
513: 
514:     /*public function uploadUrl($type, $url){
515:         $token = $this->getToken();
516:         $content = file_get_contents($url, false, stream_context_create(array('http'=> array('timeout'=> 10))));
517:         //var_dump($content);
518:         $fn = basename($url);
519:         $fn = "author.jpg";
520:         $mime = mime_content_type($fn);
521:         $mime = "image/jpeg";
522:         return $this->obj->uploadUrl($token, $type, $fn, $mime, $content);
523:     }*/
524: 
525: //user info about
526:     /**
527:      *  获取用户信息
528:      *  
529:      *  @param string $open_id 普通用户的标识,对当前公众号唯一
530:      *  @param string $lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
531:      *  @return json
532:      */
533:     public function getUserInfo($open_id, $lang='zh_CN'){
534:         $token = $this->getToken();
535:         return $this->obj->getUserInfo($token, $open_id);
536:     }
537: 
538:     /**
539:      * 获取用户列表
540:      *
541:      * @param string $next_openid 
542:      * @return json
543:      */
544:     public function getUserList($next_openid = ''){
545:         $token = $this->getToken();
546:         return $this->obj->getUserList($token, $next_openid);
547:     }
548: 
549:     /**
550:      * 创建分组
551:      * @param json $json 数据
552:      * @return json
553:      */
554:     public function setUserGroup($json){
555:         $token = $this->getToken();
556:         return $this->obj->setUserGroup($token, $json);
557:     }
558: 
559:     /**
560:      * 查询所有组
561:      * 
562:      * @return json
563:      */
564:     public function getUserGroup(){
565:         $token = $this->getToken();
566:         return $this->obj->getUserGroup($token);
567:     }
568: 
569:     /**
570:      * 查询分组用户所在分组
571:      *
572:      * @param json $json 数据
573:      * @return json
574:      */
575:     public function getUserGroupPosition($json){
576:         $token = $this->getToken();
577:         return $this->obj->getUserGroupPosition($token, $json);
578:     }
579: 
580:     /**
581:      * 修改分组名
582:      * 
583:      * @param json $json 数据
584:      * @return json
585:      */
586:     public function modUserGroup($json){
587:         $token = $this->getToken();
588:         return $this->obj->modUserGroup($token, $json);
589:     }
590: 
591:     /**
592:      * 移动用户分组
593:      * 
594:      * @param json $json 数据
595:      * @return json
596:      */
597:     public function movUserGroup($json){
598:         $token = $this->getToken();
599:         return $this->obj->movUserGroup($token, $json);
600:     }
601: 
602:     /**
603:      * 备注用户
604:      *
605:      * @param string $open_id 用户open_id
606:      * @param string $remark 标记
607:      * @return json
608:      */
609:     public function updateRemark($open_id, $remark){
610:         $token = $this->getToken();
611:         return $this->obj->updateRemark($token, $open_id, $remark);
612:     }
613: //推送消息
614: 
615: /* 推广相关 start */
616:     
617:     /**
618:      *  获取二维码的图片的图片路径
619:      *
620:      *  @param string $scene_id     识别标示,默认midoks
621:      *  @param time $time 过期时间 当$type为temp类型时有效, 默认5分钟
622:      *  @param string $type 二维码的类型, 默认temp, 还有 permanent 类型
623:      *  @return url
624:      */
625:     public function get_ticket_url($scene_id = 'midoks', $time = '3000', $type = 'temp'){
626:         $url = '';
627:         if('temp' == $type){
628:             $tmp_ticket = array(
629:                 'expire_seconds'=> $time,
630:                 'action_name'=>'QR_SCENE',
631:                 'action_info'=> array('scene'=> array('scene_id'=> $scene_id)),
632:             );
633:             $data = $this->temp_ticket($tmp_ticket);
634:             $data = json_decode($data, true);
635:             $url = $this->get_ticket($data['ticket']);
636:         }else if('permanent' == $type){
637:             $tmp_ticket = array(
638:                 'action_name'=>'QR_LIMIT_SCENE',
639:                 'action_info'=> array('scene'=> array('scene_id'=> $scene_id)),
640:             );
641:             $data = $this->permanent_ticket($tmp_ticket);
642:             $data = json_decode($data, true);
643:             $url = $this->get_ticket($data['ticket']);
644:         }
645:         return $url;
646:     }
647: 
648:     /**
649:      * 创建二维码ticket
650:      *
651:      * @param json $json 数据
652:      * @return json
653:      */
654:     public function temp_ticket($json){
655:         $token = $this->getToken();
656:         return $this->obj->temp_ticket($token, $json);
657:     }
658: 
659:     /**
660:      * 创建永久二维码ticket
661:      * 
662:      * @param json $json 数据
663:      * @return json
664:      */
665:     public function permanent_ticket($json){
666:         $token = $this->getToken();
667:         return $this->obj->permanent_ticket($token, $json);
668:     }
669: 
670:     /**
671:      * 获取ticket,返回路径
672:      * 
673:      * @
674:      */
675:     public function get_ticket($ticket){
676:         return $this->obj->get_ticket($ticket);
677:     }
678: 
679:     /**
680:      * 把长连接转换为短链接
681:      *
682:      * @param string $url URL地址
683:      * @return json
684:      */
685:     public function long2short($url){
686:         $token = $this->getToken();
687:         return $this->obj->long2short($token, $url);
688:     }
689: 
690: /* 推广相关 end */
691: 
692: 
693:     //不是真正意思上的群发,推荐到微信官方使用群发,本例,仅供参考
694:     /**
695:      * 分组群发接口
696:      * @param json $json 数据
697:      * @return json
698:      * exp:
699:      *  $msg[] = array(
700:      *      'image' => WEIXIN_PLUGINS."/demo.jpg",  //仅支持jpg(必须是本地的图片)
701:      *      'author' => "xxx",                  //作者
702:      *      'title' => "Happy Day",             //标题
703:      *      'content_source_url' => "www.qq.com",//内容地址
704:      *      'content' => "content",             //内容
705:      *      'digest' => "digest",               //图文消息的描述
706:      *      'show_cover_pic' => "1"             //是否显示封面,0,为不显示,1,为显示
707:      *  ),
708:      */
709:     public function sendGroupInfo(array $json){
710:         //获取所有组
711:         $groups = $this->getUserGroup();
712:         $_groups = json_decode($groups, true);
713:         if(!isset($_groups['groups'])){
714:             return $_groups;
715:         }
716:         $_max = 0;
717:         $_id = null;
718: 
719:         foreach ($_groups['groups'] as $v) {
720:             if($v['count'] > $_max){
721:                 $_max = $v['count'];
722:                 $_id = $v['id'];
723:             }
724:         }
725: 
726:         if(is_numeric($_id)){
727:             $_json = array();
728:             foreach($json as $k=>$v){
729:                 $image = $this->upload('thumb', $v['image']);
730:                 $image = json_decode($image, 'true');
731:                 if (!isset($image['thumb_media_id'])) {
732:                     return $image;
733:                 }
734: 
735:                 $_insert = array();
736:                 $_insert['thumb_media_id']      = $image['thumb_media_id'];
737:                 $_insert['author']              = $v['author'];
738:                 $_insert['title']               = $v['title'];
739:                 $_insert['content_source_url']  = $v['content_source_url'];
740:                 $_insert['digest']              = $v['digest'];
741:                 $_insert['show_cover_pic']      = $v['show_cover_pic'];
742:                 $_json[] = $_insert;
743:             }
744:             $imageText = $this->uploadMsgImageText($_json);
745:             $imageText = json_decode($imageText, 'true');
746:             if(!isset($imageText['media_id'])){
747:                 return $imageText;
748:             }
749:             return $this->sendAllByGroup($_id, $imageText['media_id']);
750:         }
751:         return false;
752:     }
753:     
754:     /**
755:      *  上传图文消息素材优化版
756:      *
757:      *  @param array $msg 上传消息数据
758:      *  @return json
759:      *
760:      *  exp:
761:      *  $msg[] = array(
762:      *      'thumb_media_id' => "qI6_Ze_6PtV7svjolgs",
763:      *      'author' => "xxx",
764:      *      'title' => "Happy Day",
765:      *      'content_source_url' => "www.qq.com",
766:      *      'content' => "content",
767:      *      'digest' => "digest",
768:      *      'show_cover_pic' => "1"
769:      *  ),
770:      */
771:     public function uploadMsgImageText(array $msg){
772:         $num = count($msg);
773:         if($num>10){
774:             $_msg = array_slice($msg, 0, 9);
775:         }else{
776:             $_msg = $msg;
777:         }
778:         $token = $this->getToken();
779:         return $this->obj->uploadMsgImageText($token, $_msg);
780:     }
781: 
782:     /**
783:      * 通过分组进行群发
784:      *
785:      * @param string $group_id 分组ID
786:      * @param string $media_id 资源ID
787:      * @param string $msgtype 资源类型
788:      * @return json
789:      */
790:     public function sendAllByGroup($group_id, $media_id, $msgtype = 'mpnews'){
791:         $token = $this->getToken();
792:         return $this->obj->sendAllByGroup($token, $group_id, $media_id, $msgtype);
793:     }
794: 
795:     /**
796:      * 根据OpenID列表群发
797:      *
798:      * @param array $user 发送用户列表
799:      * @param string $media_id 资源ID
800:      * @return json
801:      */
802:     public function sendAll($user, $media_id, $msgtype = 'mpnews'){
803:         $token = $this->getToken();
804:         return $this->obj->sendAll($token, $user, $media_id, $msgtype);
805:     }
806: 
807:     /**
808:      * 删除群发信息
809:      * 
810:      * @param int $id 要删除群发的ID
811:      * @return json
812:      */
813:     public function deleteSend($id){
814:         $token = $this->getToken();
815:         return $this->obj->deleteSend($token, $id);
816:     }
817: 
818:     /**
819:      *  模版接口发送消息
820:      *  @param array $json 模版信息
821:      *  @return json
822:      *  exp: $array = array(
823:      *      "touser"=>"OPENID",
824:      *      "template_id"=>"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
825:      *      "url"=>"http://weixin.qq.com/download",
826:      *      "topcolor"=>"#FF0000",
827:      *      "data"=> array(
828:      *          "first"=>array(
829:      *              "value"=>"您好,您已成功消费。",
830:      *              "color"=>"#0A0A0A"
831:      *           ), 
832:      *          "keynote1"=>array(
833:      *              "value"=>"巧克力",
834:      *              "color"=>"#CCCCCC"
835:      *           ),
836:      *          "keynote2"=>array(
837:      *              "value"=>"39.8元",
838:      *              "color"=>"#CCCCCC"
839:      *           ),
840:      *          "keynote3"=>array(
841:      *              "value"=>"2014年9月16日",
842:      *              "color"=>"#CCCCCC"
843:      *           ),
844:      *          "remark"=>array(
845:      *              "value"=>"欢迎再次购买。",
846:      *              "color"=>"#173177"
847:      *           )
848:      *      )
849:      *  );
850:      */
851:     public function sendTemplateInfo(array $json){
852:         $token = $this->getToken();
853:         return $this->obj->sendTemplateInfo($token, $json);
854:     }
855: 
856:     /**
857:      * 获取微信可以IP
858:      *
859:      * @return json
860:      */
861:     public function getWeixinIp(){
862:         $token = $this->getToken();
863:         return $this->obj->getWeixinIp($token);
864:     }
865: 
866: 
867: ///base func lib
868:     /**
869:      *  返回定长字节(仅utf-8)
870:      *  @param string $str 截取字符传
871:      *  @param int $len 字节长度(默认:2048字节)
872:      *  @return string  
873:      */
874:     public function byte_substr($str, $len = 2048){
875:         $ret = '';
876:         $c = strlen($str);
877:         for($i=0; $i<$c; $i++){
878:             if(ord(substr($str, $i, 1)) > 0xa0){
879:                 $temp_wd = substr($str, $i, 3);
880:                 $i += 2;
881: 
882:                 $temp_len = strlen($ret);
883:                 if(($temp_len+3)>$len){
884:                     return $ret;
885:                 }else if(($temp_len+3) == $len){
886:                     return $ret.$temp_wd;
887:                 }else{
888:                     $ret .= $temp_wd;
889:                 }
890:             }else{
891:                 $temp_wd = substr($str, $i, 1);
892:                 $temp_len = strlen($ret);
893: 
894:                 if(($temp_len+1)>$len){
895:                     return $ret;
896:                 }else if(($temp_len+1) == $len){
897:                     return $ret.$temp_wd;
898:                 }else{
899:                     $ret .= $temp_wd;
900:                 }
901:             }
902:         }
903:         return $ret;
904:     }
905: 
906:     /**
907:      * 转化为微信可识别的json
908:      *
909:      * @param array $arr 数组
910:      * @return json
911:      */
912:     public function to_json($arr){
913:         return $this->obj->to_json($arr);
914:     }
915: 
916: }
917: ?>
918: 
API documentation generated by ApiGen