php微信高级接口群发 多客服
微信(小程序)  /  管理员 发布于 6年前   276
本文实例为大家分享了php微信高级接口群发、多客服源码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。/** * 微信接口调用 * 依赖 * 全局变量 * global $uid 公众号用户id, $wid 公众号id, $wechatid 粉丝唯一id; * 参数 * $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; * $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); * 缓存类 自定义 * Cache:set * Cache:get * 具体业务修改 * 1.上传图文信息至微信素材库 * function uploadArticlesToWeiXinServer() * 2.关键字匹配图文回复 * function getArticleData() * * usage: * $options = array( * 'token'=>'tokenaccesskey', //填写你设定的key * 'appid'=>'wxdk1234567890', //填写高级调用功能的app id * 'appsecret'=>'xxxxxxxxxxxxxxxxxxx', //填写高级调用功能的密钥 * ); */class WeiXinTool { private $appid; private $appsecret; private $access_token; private $mediaType = array('image' => array("jpg"), 'voice' => array('amr', 'MP3'), 'video' => array('mp4'), 'thumb' => array("jpg")); private $mediaMaxSize = array('image' => 131072, 'voice' => 262144, 'video' => 1048576, 'thumb' => 65536); private $tem_file_path = "";// 授权地址 const AUTH_URL = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s';// 素材上传 const UPLOAD_MEDIA_URL = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=%s&type=%s"; const GET_MEDIA_URL = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=%s&media_id=%s"; const UPLOAD_NEWS_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=%s"; public function __construct($options) { $this->appid = isset($options['appid']) ? $options['appid'] : ''; $this->appsecret = isset($options['appsecret']) ? $options['appsecret'] : ''; //需修改 //上传图片临时文件目录自定义 $this->tem_file_path = YYUC_FRAME_PATH . YYUC_PUB . '/' . Session::get('upath'); } /** * 需修改 * 具体业务需求,图文信息上传至素材库 * 微站文章上传至微信素材 * @param type $wid * @param type $aid * @return int */ public function uploadArticlesToWeiXinServer($wid, $aid) { //具体图文组装过程,需修改 $m = new Model('website_article'); $m_pubs = new Model('pubs'); $m_pubs->find(array("id" => $wid)); $m->find(array("wid" => $wid, 'id' => $aid)); $res = array(); if ($m->has_id() && $m_pubs->has_id()) { $res[] = $m->get_model_array();// var_dump($res); $m->votetouser = json_decode($m->votetouser, TRUE); $articles = $m->votetouser[0]; $m_article = new Model('website_article'); $ress = $m_article->where(array('wid' => $wid, 'id' => $articles))->list_all_array(); $res = array_merge($res, $ress); } else { $errarr = array(); $errarr['errcode'] = 44003; $errarr['errmsg'] = self::$errorno[$errarr['errcode']]; return $errarr; } $items = array(); foreach ($res as $k => $v) { $mediaid = $this->uploadMedia($v['picurl']); if ($mediaid['media_id']) { $thumb_media_id = $mediaid['media_id']; } else { return $mediaid; } $item = array( "thumb_media_id" => $thumb_media_id, "author" => $m_pubs->pubun, "title" => $v['title'], "content_source_url" => WeiXinTool::complateUrl(WeiSite::parseArticleLinkData($v)), "content" => $v['reply_content'], //内容 富文本 "digest" => $v['description']//描述 ); $items[] = $item; } //以上具体图文组装过程,需修改 $postData['articles'] = $items; $error = $this->uploadNews($postData); return $error; } /** * 需修改 * 微站文章关键字匹配数据解析 */ public static function getArticleData($keyword) { global $wid; $m = new Model('website_article'); $m->find(array('wid' => $wid, 'keyword@~' => " " . $keyword . " ")); $res = array(); if ($m->has_id()) { $res[] = array("tit" => $m->title, "pic" => $m->picurl, "dec" => $m->description, "url" => WeiSite::parseArticleLinkData($m->get_model_array())); $m->votetouser = json_decode($m->votetouser, TRUE); $articles = $m->votetouser[0]; if (!empty($articles)) { foreach ($articles as $v) { $m_article = new Model('website_article'); $m_article->find(array('wid' => $wid, 'id' => $v)); $res[] = array("tit" => $m_article->title, "pic" => $m_article->picurl, "dec" => $m_article->description, "url" => WeiSite::parseArticleLinkData($m_article->get_model_array())); } } return $res; } } /** * 获取accesstoken * @param type $flag 强制刷新accesstoken 开关 * @return type */ public function getAccessToken($flag = FALSE) { $url = sprintf(self::AUTH_URL, $this->appid, $this->appsecret); $result = Cache::get(md5($url)); if ($flag || empty($result)) { $result = $this->http_get($url); $result = json_decode($result, TRUE); if ($result['errcode']) { return $result['errcode']; } Cache::set(md5($url), $result, 1); } $this->access_token = $result['access_token']; return true; } /** * 上传媒体 * @param type $file 媒体文件 $url或者物理路径地址 * @param type $type 类型 * @return int * return array (size=3) 'type' => string 'image' (length=5) 'media_id' => string '-0Lr3rX9mDYBB7i5bDydvwFHHm3zW2Uxt0OoDFBPmGRfYiwckiALqHH_DlP9jCm_' (length=64) 'created_at' => int 1400477181 */ public function uploadMedia($file, $type = "image") { $file = self::complateUrl($file); $urlarr = parse_url($file); $filetype = explode(".", $urlarr['path']); $filetype = strtolower($filetype[count($filetype) - 1]); $resizeSize = 100; //图片处理后另存质量 if (!key_exists($type, $this->mediaType) || !in_array($filetype, $this->mediaType[$type])) {// return 40005; //格式错误 $errarr = array(); $errarr['errcode'] = 40005; $errarr['errmsg'] = self::$errorno[$errarr['errcode']]; return $errarr; } $temp_file = $this->tem_file_path . 'uploadMedia.' . $filetype; $temp_file_resize = $this->tem_file_path . 'uploadMediaResize.' . $filetype; file_put_contents($temp_file, self::http_get($file)); $handle = fopen($temp_file, "r"); $fstat = fstat($handle); if ($fstat['size'] > $this->mediaMaxSize[$type]) { $resizeSize = intval($this->mediaMaxSize[$type] / $fstat['size'] * 100); ImageTool::resizeImage($temp_file_resize, $temp_file, 400, 400, $resizeSize); //图片太大再处理压缩 $temp_file = $temp_file_resize;// return 40006; //大小错误 } $filePath = realpath($temp_file); $uploadUrl = sprintf(self::UPLOAD_MEDIA_URL, $this->access_token, $type); $postData = array("r" => time(), 'media' => "@{$filePath}"); $result = self::http_post($uploadUrl, $postData); $result = json_decode($result, TRUE); return $result; } /** * 群发图文信息 * @param type $touser 粉丝数组/粉丝组id * @param type $media_id * @return type */ public function sendArticles($touser, $media_id) { $errarr = array(); $postData = array(); $postData['mpnews'] = array("media_id" => $media_id); $postData['msgtype'] = "mpnews"; if (is_array($touser)) { //用户列表群发 $postData['touser'] = $touser; $url = 'https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=%s'; } else { $group = intval($touser); $groups = $this->getGroups(true); if (key_exists($group, $groups['list'])) { $postData['filter'] = array("group_id" => $group); } else { $errarr['errcode'] = 40050; //无效分组id $errarr['errmsg'] = self::$errorno[$errarr['errcode']]; return $errarr; } $url = 'https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=%s'; } $url = sprintf($url, $this->access_token); $result = self::http_post($url, self::json_encode($postData)); $result = json_decode($result, TRUE); return $result; } /** * 删除群发信息 * @param type $msgid * @return type */ public function delSend($msgid) { $url = 'https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=%s'; $url = sprintf($url, $this->access_token); $postData = array('msgid' => $msgid, 'r' => time()); $result = self::http_post($url, self::json_encode($postData)); $result = json_decode($result, TRUE); return $result; } /** * 群发图文素材上传 $postData = array('articles' => array($item, $item,...)); $item = array( "thumb_media_id" => "WMQubqCECMQwAjqh8CI500LfhyoG0vmTTlKKJM5oP-of0uLML1_2s26j8XeIorDL", "author" => "xxx", "title" => "Happy Day", "content_source_url" => "www.qq.com", "content" => "content", "digest" => "digest" ); * return array (size=3) 'type' => string 'news' (length=4) 'media_id' => string 'OuXqv2dgZzxAmK4z-tvStgr6InG18oIllWkD6Tj1qJZVRg-2f64FDU2D3J7dptHs' (length=64) 'created_at' => int 1400477183 */ public function uploadNews($postData) { $uploadUrl = sprintf(self::UPLOAD_NEWS_URL, $this->access_token); $result = self::http_post($uploadUrl, self::json_encode($postData)); $result = json_decode($result, TRUE); return $result; } /** * 获取粉丝列表 * @param type $nextOpenId * @return type */ public function getAllConnects($nextOpenId = "") { $url = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=%s&next_openid=%s'; $url = sprintf($url, $this->access_token, $nextOpenId); $result = self::http_get($url); $result = json_decode($result, TRUE); $count = count($result['data']['openid']); $list = $result['data']['openid']; if ($result['data']['openid'][$count - 1] == $result['next_openid']) { return $result['data']['openid']; } else { $templist = $this->getAllConnects($result['next_openid']); $list = array_merge($list, $templist); return $list; } } /** * 根据粉丝唯一id获取微信信息 * @param type $openid * @return type */ public function getFansInfo($openid) { $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN'; $url = sprintf($url, $this->access_token, $openid); $result = self::http_get($url); $result = json_decode($result, TRUE); return $result; } /** * 更新粉丝组信息 * @param type $openid * @param type $groupid * @return type */ public function updateFansGroups($openid, $groupid) { $url = 'https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=%s'; $url = sprintf($url, $this->access_token); $postData = array("to_groupid" => $groupid, 'openid' => $openid); $result = self::http_post($url, self::json_encode($postData)); $result = json_decode($result, TRUE); $this->getGroups(true); return $result; } /** * 获取粉丝组信息 * @param type $openid * @return type */ public function getFansGroupInfo($openid) { $url = 'https://api.weixin.qq.com/cgi-bin/groups/getid?access_token=%s'; $url = sprintf($url, $this->access_token); $postData = array("r" => time(), 'openid' => $openid); $result = self::http_post($url, self::json_encode($postData)); $result = json_decode($result, TRUE); return $result['groupid']; } /** * 获取唯一key * @param type $key * @return type */ public function getKey($key) { return md5($this->appid . $this->appsecret . $key); } /** * 获取媒体图片到本地 * @param type $mediaid * @return string */ public function getMedia($mediaid) { $url = sprintf(self::GET_MEDIA_URL, $this->access_token, $mediaid); $result = self::http_get($url); $temp_file = $this->tem_file_path . 'getMedia.jpg'; file_put_contents($temp_file, $result); return $temp_file; } /** * 用户组 * @param type $flag 强制刷新用户组 * @return type */ public function getGroups($flag = false) { $key = $this->appid . 'gasdfev' . $this->appsecret; $result = Cache::get($key); if (empty($result) || $flag) { $url = 'https://api.weixin.qq.com/cgi-bin/groups/get?access_token=%s'; $url = sprintf($url, $this->access_token); $result = self::http_get($url); $result = json_decode($result, TRUE); $temg = array(); $temlist = array(); foreach ($result['groups'] as $k => $v) { $temg[$v['id']] = $v; $temlist[$v['id']] = $v['name']; } $result['map'] = $temg; $result['list'] = $temlist; Cache::set($key, $result); } return $result; } /** * 新增用户组 * @param type $name * @return type */ public function createGroup($name) { $url = 'https://api.weixin.qq.com/cgi-bin/groups/create?access_token=%s'; $url = sprintf($url, $this->access_token); $result = self::http_post($url, self::json_encode(array('group' => array('name' => $name)))); $result = json_decode($result, TRUE); return $result; } /** * 修改用户组 * @param type $id * @param type $name * @return type */ public function modifyGroup($id, $name) { $url = 'https://api.weixin.qq.com/cgi-bin/groups/update?access_token=%s'; $url = sprintf($url, $this->access_token); $result = self::http_post($url, self::json_encode(array('group' => array('id' => $id, 'name' => $name)))); $result = json_decode($result, TRUE); return $result; } /** * 多客服接入 * @global type $wid * @param type $postObj */ public static function responseService($postObj) { global $wid; $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $textTpl = "
您可能感兴趣的文章:
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号