php微信高级接口群发 多客服

互联网 17-2-20
这篇文章主要为大家详细介绍了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 = "<xml>  <ToUserName><![CDATA[%s]]></ToUserName>  <FromUserName><![CDATA[%s]]></FromUserName>  <CreateTime>%s</CreateTime>  <MsgType><![CDATA[transfer_customer_service]]></MsgType>  </xml>";      $resstr = sprintf($textTpl, $fromUsername, $toUsername, time());      echo $resstr;    }      /**     * 微信回复多图文     * @global type $wid     * @param type $res     * array(array(),array()     * );     * @param type $rid     * @param type $postObj     */    public static function response_morearts($res, $postObj) {      global $wid;      $fromUsername = $postObj->FromUserName;      $toUsername = $postObj->ToUserName;      $textTpl = "<xml>   <ToUserName><![CDATA[%s]]></ToUserName>   <FromUserName><![CDATA[%s]]></FromUserName>   <CreateTime>%s</CreateTime>   <MsgType><![CDATA[%s]]></MsgType>   <ArticleCount>%s</ArticleCount>   <Articles>   ITEM   </Articles>   </xml>";      $resstr = sprintf($textTpl, $fromUsername, $toUsername, time(), "news", count($res));      $item = '';      $subitem = "<item>   <Title><![CDATA[%s]]></Title>   <Description><![CDATA[%s]]></Description>   <PicUrl><![CDATA[%s]]></PicUrl>   <Url><![CDATA[%s]]></Url>   </item>";      foreach ($res as $r) {        $r['url'] = self::parseUrl($r['url']);        $item .= sprintf($subitem, $r['tit'], $r['des'], self::complateUrl($r['pic']), self::replaceToWXUrl(self::complateUrl($r['url']), $postObj));      }      $resstr = str_replace('ITEM', $item, $resstr);      echo $resstr;    }      /**     * url解析     * @param type $url     * @return string     */    public static function complateUrl($url) {      if (false === stristr($url, "http://")) {//查找http:// 如果不存在        if (0 === strpos($url, '/')) {//查找首字母 如果存在          $url = substr($url, 1); //去除/        }        $url = "http://" . $_SERVER['HTTP_HOST'] . '/' . $url; //拼接完整路径      }      return $url;    }      /**     * 微信url固定参数替换     * @param type $url     * @param type $postObj     * @return type     */    public static function replaceToWXUrl($url, $postObj) {      global $wechatid;      return str_ireplace('fromUsername', $wechatid, $url);    }      /**     * 完成以下行为     * parseUrlParam     * setUrlPublicParam     * buildUrlParam     * @param type $url     * @param type $other 附加参数 基础参数wid wxid wechatid     */    public static function parseUrl($url, $other = array()) {      $url = self::parseUrlParam($url);      $url = self::setUrlPublicParam($url);      if (is_array($other) && !empty($other)) {        $url['param'] = array_merge($url['param'], $other);      }      $url = self::buildUrlParam($url);      return $url;    }      /**     * 分析url     * @param type $url     * @return type     */    public static function parseUrlParam($url) {      $temp = explode("?", $url);      $url0 = $temp[0];      $url1 = $temp[1];      $p = explode("&", $url1);      $param = array();      foreach ($p as $v) {        $tempp = explode("=", $v);        $param[$tempp[0]] = $tempp[1];      }      return array("url" => $url0, "param" => $param);    }      /**     * 组装url     * @param type $arr     * @return type     */    public static function buildUrlParam($arr) {      $url = $arr['url'];      $param = $arr['param'];      $param_arr = array();      foreach ($param as $k => $v) {        if ($k == "") continue;        $param_arr[] = $k . "=" . $v;      }      return $url . "?" . implode("&", $param_arr) . "#mp.weixin.qq.com";    }      /**     * 设置微信保留参数信息     * @global type $uid     * @global type $wid     * @global type $wechatid     * @param type $url     * @return type     */    public static function setUrlPublicParam($url) {      global $uid, $wid, $wechatid;      $url['param']['wid'] = $wid;      $url['param']['wxid'] = $wechatid;      $url['param']['wechatid'] = $wechatid;      return $url;    }      public static $errorno = array(      '-1' => '系统繁忙',      '0' => '请求成功',      '40001' => '获取access_token时AppSecret错误,或者access_token无效',      '40002' => '不合法的凭证类型',      '40003' => '不合法的OpenID',      '40004' => '不合法的媒体文件类型',      '40005' => '不合法的文件类型',      '40006' => '不合法的文件大小',      '40007' => '不合法的媒体文件id',      '40008' => '不合法的消息类型',      '40009' => '不合法的图片文件大小',      '40010' => '不合法的语音文件大小',      '40011' => '不合法的视频文件大小',      '40012' => '不合法的缩略图文件大小',      '40013' => '不合法的APPID',      '40014' => '不合法的access_token',      '40015' => '不合法的菜单类型',      '40016' => '不合法的按钮个数',      '40017' => '不合法的按钮个数',      '40018' => '不合法的按钮名字长度',      '40019' => '不合法的按钮KEY长度',      '40020' => '不合法的按钮URL长度',      '40021' => '不合法的菜单版本号',      '40022' => '不合法的子菜单级数',      '40023' => '不合法的子菜单按钮个数',      '40024' => '不合法的子菜单按钮类型',      '40025' => '不合法的子菜单按钮名字长度',      '40026' => '不合法的子菜单按钮KEY长度',      '40027' => '不合法的子菜单按钮URL长度',      '40028' => '不合法的自定义菜单使用用户',      '40029' => '不合法的oauth_code',      '40030' => '不合法的refresh_token',      '40031' => '不合法的openid列表',      '40032' => '不合法的openid列表长度',      '40033' => '不合法的请求字符,不能包含\uxxxx格式的字符',      '40035' => '不合法的参数',      '40038' => '不合法的请求格式',      '40039' => '不合法的URL长度',      '40050' => '不合法的分组id',      '40051' => '分组名字不合法',      '40059' => '不合法的消息id',      '41001' => '缺少access_token参数',      '41002' => '缺少appid参数',      '41003' => '缺少refresh_token参数',      '41004' => '缺少secret参数',      '41005' => '缺少多媒体文件数据',      '41006' => '缺少media_id参数',      '41007' => '缺少子菜单数据',      '41008' => '缺少oauth code',      '41009' => '缺少openid',      '42001' => 'access_token超时',      '42002' => 'refresh_token超时',      '42003' => 'oauth_code超时',      '43001' => '需要GET请求',      '43002' => '需要POST请求',      '43003' => '需要HTTPS请求',      '43004' => '需要接收者关注',      '43005' => '需要好友关系',      '44001' => '多媒体文件为空',      '44002' => 'POST的数据包为空',      '44003' => '图文消息内容为空',      '44004' => '文本消息内容为空',      '45001' => '多媒体文件大小超过限制',      '45002' => '消息内容超过限制',      '45003' => '标题字段超过限制',      '45004' => '描述字段超过限制',      '45005' => '链接字段超过限制',      '45006' => '图片链接字段超过限制',      '45007' => '语音播放时间超过限制',      '45008' => '图文消息超过限制',      '45009' => '接口调用超过限制',      '45010' => '创建菜单个数超过限制',      '45015' => '回复时间超过限制',      '45016' => '系统分组,不允许修改',      '45017' => '分组名字过长',      '45018' => '分组数量超过上限',      '46001' => '不存在媒体数据',      '46002' => '不存在的菜单版本',      '46003' => '不存在的菜单数据',      '46004' => '不存在的用户',      '47001' => '解析JSON/XML内容错误',      '48001' => 'api功能未授权',      '50001' => '用户未授权该api'    );      /**     * GET 请求     * @param string $url     */    public static function http_get($url) {      if (!function_exists('curl_init')) {        die('curl 未开启');      };      $oCurl = curl_init();      if (stripos($url, "https://") !== FALSE) {        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);      }      curl_setopt($oCurl, CURLOPT_URL, $url);      curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);      $sContent = curl_exec($oCurl);      $aStatus = curl_getinfo($oCurl);      curl_close($oCurl);      if (intval($aStatus["http_code"]) == 200) {        return $sContent;      } else {        return false;      }    }      /**     * POST 请求     * @param string $url     * @param array $param     * @return string content     */    public static function http_post($url, $param, $httpBuildQuery = false) {      if (!function_exists('curl_init')) {        die('curl 未开启');      };      $oCurl = curl_init();      if (stripos($url, "https://") !== FALSE) {        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);      }      curl_setopt($oCurl, CURLOPT_URL, $url);      curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);  //    curl_setopt($oCurl, CURLOPT_HTTPHEADER, $header);//设置HTTP头      curl_setopt($oCurl, CURLOPT_POST, 1);      if ($httpBuildQuery) {        $param = http_build_query($param);      }      curl_setopt($oCurl, CURLOPT_POSTFIELDS, $param);      $sContent = curl_exec($oCurl);      $aStatus = curl_getinfo($oCurl);      curl_close($oCurl);      if (intval($aStatus["http_code"]) == 200) {        return $sContent;      } else {        return false;      }    }      /**     * 微信api不支持中文转义的json结构     * @param array $arr     */    static function json_encode($arr) {      $parts = array();      $is_list = false;      //Find out if the given array is a numerical array      $keys = array_keys($arr);      $max_length = count($arr) - 1;      if (($keys [0] === 0) && ($keys [$max_length] === $max_length )) { //See if the first key is 0 and last key is length - 1        $is_list = true;        for ($i = 0; $i < count($keys); $i ++) { //See if each key correspondes to its position          if ($i != $keys [$i]) { //A key fails at position check.            $is_list = false; //It is an associative array.            break;          }        }      }      foreach ($arr as $key => $value) {        if (is_array($value)) { //Custom handling for arrays          if ($is_list) $parts [] = self::json_encode($value); /* :RECURSION: */          else $parts [] = '"' . $key . '":' . self::json_encode($value); /* :RECURSION: */        } else {          $str = '';          if (!$is_list) $str = '"' . $key . '":';          //Custom handling for multiple data types          if (is_numeric($value) && $value < 2000000000) $str .= $value; //Numbers          elseif ($value === false) $str .= 'false'; //The booleans          elseif ($value === true) $str .= 'true';          else $str .= '"' . addslashes($value) . '"';  //All other things  // :TODO: Is there any more datatype we should be in the lookout for? (Object?)          $parts [] = $str;        }      }      $json = implode(',', $parts);      if ($is_list) return '[' . $json . ']'; //Return numerical JSON      return '{' . $json . '}'; //Return associative JSON    }    }

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

更多php微信高级接口群发 多客服相关文章请关注PHP中文网!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:微信公众平台开发——群发信息

相关资讯