日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

微信接口php版本sdk的WxApi.class.php

瀏覽:174日期:2022-06-02 16:02:52

微信最新公布接口 php版本的sdk,包括分組、獲取用戶信息、獲取關注列表、創建帶參數的二維碼等等。

<?phpclass OAuthException extends Exception { // pass}/*** @package wx* @author Jianjun Deng* @version 1.0*/class WxAuthV2 { public $access_token; public $host = 'https://api.weixin.qq.com/cgi-bin/'; public $timeout = 30; public $connecttimeout = 30; public $ssl_verifypeer = FALSE; public $format = ’?’; public $decode_json = TRUE; public $http_info; public static $boundary = ’’; function __construct($access_token = NULL) { $this->access_token = $access_token; } function base64decode($str) { return base64_decode(strtr($str.str_repeat(’=’, (4 - strlen($str) % 4)), ’-_’, ’+/’)); } /** * GET wrappwer for oAuthRequest. * * @return mixed */ function get($url, $parameters = array()) { $response = $this->oAuthRequest($url, ’GET’, $parameters); if ($this->format === ’?’ && $this->decode_json) { return json_decode($response, true); } return $response; } /** * POST wreapper for oAuthRequest. * * @return mixed */ function post($url, $parameters = array(), $multi = false) { $response = $this->oAuthRequest($url, ’POST’, $parameters, $multi ); if ($this->format === ’?’ && $this->decode_json) { return json_decode($response, true); } return $response; } /** * DELTE wrapper for oAuthReqeust. * * @return mixed */ function delete($url, $parameters = array()) { $response = $this->oAuthRequest($url, ’DELETE’, $parameters); if ($this->format === ’json’ && $this->decode_json) { return json_decode($response, true); } return $response; } /** * Format and sign an OAuth / API request * * @return string * @ignore */ function oAuthRequest($url, $method, $parameters, $multi = false) { if (strrpos($url, ’http://’) !== 0 && strrpos($url, ’https://’) !== 0) { $url = '{$this->host}{$url}{$this->format}'.'access_token='.$this->access_token; } switch ($method) { case ’GET’: $url = $url . ’&’ . http_build_query($parameters); return $this->http($url, ’GET’); default: $headers = array(); if (!$multi && (is_array($parameters) || is_object($parameters)) ) { $body = $this->ch_json_encode($parameters); } else { $body = self::build_http_query_multi($parameters); $headers[] = 'Content-Type: multipart/form-data; boundary=' . self::$boundary; } return $this->http($url, $method, $body, $headers); } } /** * Make an HTTP request * * @return string API results * @ignore */ function http($url, $method, $postfields = NULL, $headers = array()) { $this->http_info = array(); $ci = curl_init(); /* Curl settings */ curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ci, CURLOPT_ENCODING, ''); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, ’getHeader’)); curl_setopt($ci, CURLOPT_HEADER, FALSE); switch ($method) { case ’POST’: curl_setopt($ci, CURLOPT_POST, TRUE); if (!empty($postfields)) { curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); $this->postdata = $postfields; } break; } curl_setopt($ci, CURLOPT_URL, $url ); curl_setopt($ci, CURLOPT_HTTPHEADER, $headers ); curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE ); $response = curl_exec($ci); $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); $this->url = $url; curl_close ($ci); return $response; } /** * Get the header info to store. * * @return int * @ignore */ function getHeader($ch, $header) { $i = strpos($header, ’:’); if (!empty($i)) { $key = str_replace(’-’, ’_’, strtolower(substr($header, 0, $i))); $value = trim(substr($header, $i + 2)); $this->http_header[$key] = $value; } return strlen($header); } /** * @ignore */ public static function build_http_query_multi($params) { if (!$params) return ’’; uksort($params, ’strcmp’); $pairs = array(); self::$boundary = $boundary = uniqid(’------------------’); $MPboundary = ’--’.$boundary; $endMPboundary = $MPboundary. ’--’; $multipartbody = ’’; foreach ($params as $parameter => $value) { if( in_array($parameter, array(’pic’, ’image’)) && $value{0} == ’@’ ) { $url = ltrim( $value, ’@’ ); $content = file_get_contents( $url ); $array = explode( ’?’, basename( $url ) ); $filename = $array[0]; $multipartbody .= $MPboundary . 'rn'; $multipartbody .= ’Content-Disposition: form-data; name='’ . $parameter . ’'; filename='’ . $filename . ’'’. 'rn'; $multipartbody .= 'Content-Type: image/unknownrnrn'; $multipartbody .= $content. 'rn'; } else { $multipartbody .= $MPboundary . 'rn'; $multipartbody .= ’content-disposition: form-data; name='’ . $parameter . ''rnrn'; $multipartbody .= $value.'rn'; } } $multipartbody .= $endMPboundary; return $multipartbody; } /** * 對數組和標量進行 urlencode 處理 * 通常調用 wphp_json_encode() * 處理 json_encode 中文顯示問題 * @param array $data * @return string */ function wphp_urlencode($data) { if (is_array($data) || is_object($data)) { foreach ($data as $k => $v) { if (is_scalar($v)) { if (is_array($data)) { $data[$k] = urlencode($v); } else if (is_object($data)) { $data->$k = urlencode($v); } } else if (is_array($data)) { $data[$k] = $this->wphp_urlencode($v); //遞歸調用該函數 } else if (is_object($data)) { $data->$k = $this->wphp_urlencode($v); } } } return $data; } /** * json 編碼 * * 解決中文經過 json_encode() 處理后顯示不直觀的情況 * 如默認會將“中文”變成'u4e2du6587',不直觀 * 如無特殊需求,并不建議使用該函數,直接使用 json_encode 更好,省資源 * json_encode() 的參數編碼格式為 UTF-8 時方可正常工作 * * @param array|object $data * @return array|object */ public function ch_json_encode($data) { $ret = $this->wphp_urlencode($data); $ret = json_encode($ret); return urldecode($ret); }}class WxApi{ var $oauth; /** * 構造函數 * * @access public * @param mixed $access_token OAuth認證返回的token * @return void */ function __construct($access_token) { $this->oauth = new WxAuthV2($access_token); } /** * 查詢分組 API:http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3 * */ function groups_get() { $params = array(); return $this->oauth->get(’groups/get’, $params);//可能是接口的bug不能補全 } /** * 創建分組 API:http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3#.E5.88.9B.E5.BB.BA.E5.88.86.E7.BB.84 * $name 分組名字(30個字符以內) */ function groups_create($name){ $params = array(''); $params[’group’][’name’] = trim($name); return $this->oauth->post(’groups/create’,$params ); } /** * 修改分組名 API:http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3#.E5.88.9B.E5.BB.BA.E5.88.86.E7.BB.84 * POST數據例子:{'group':{'id':108,'name':'test2_modify2'}} * $id 分組id,由微信分配 * $name 分組名字(30個字符以內) */ function groups_update($id,$name){ $params = array(''); $params[’group’][’id’] = $this->id_format($id); $params[’group’][’name’] = trim($name); return $this->oauth->post(’groups/update’,$params); } /** * 移動用戶分組 API:http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3#.E5.88.9B.E5.BB.BA.E5.88.86.E7.BB.84 * {'openid':'oDF3iYx0ro3_7jD4HFRDfrjdCM58','to_groupid':108} * $openid 用戶唯一標識符 * $to_groupid 分組id * $name 分組名字(30個字符以內) */ function groups_members_update($openid,$to_groupid){ $params = array(''); $params[’group’][’openid’] = trim($openid); $params[’group’][’to_groupid’] = trim($to_groupid); return $this->oauth->post(’groups/members/update’,$params); } /** * 獲取關注列表 一次最多返回1萬 * http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E5%85%B3%E6%B3%A8%E8%80%85%E5%88%97%E8%A1%A8 * * */ function user_get($next_openid='') { $params = array(); $params[’next_openid’]=$next_openid; return $this->oauth->get(’user/get’, $params);//可能是接口的bug不能補全 } /** * 獲取用戶基本信息 *Array ( [subscribe] => 1 *[openid] => of76zt-k-bMZZaCip16MKfGAigec *[nickname] => _魏什么。 *[sex] => 1 *[language] => zh_TW *[city] => 福州 *[province] => 福建 *[country] => 中國 *[headimgurl] => http://wx.qlogo.cn/mmopen/kaTUtbf9iaBY32aSBLkcxWVDicjlhHSiapLWDcia1ic948tYdmhJQLQa8FpB7MdqpDNQHOVUWoVfPHjlymJ1z1fyStAUyduicvAbmh/0 *[subscribe_time] => 1381576837 ) */ function user_info($openid='') { $params = array(); $params[’openid’]=$openid; return $this->oauth->get(’user/info’, $params);//可能是接口的bug不能補全 } /* * 發送客服文本消息 * http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF */ function message_custom_send_text($touser,$content){ $params = array(''); $params[’touser’]=trim($touser); $params[’msgtype’]='text'; $params[’text’]['content']=$content; return $this->oauth->post(’message/custom/send’,$params); } /* * 發送客服圖片消息 * http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF * access_token 是 調用接口憑證touser 是 普通用戶openidmsgtype 是 消息類型,imagemedia_id 是 發送的圖片的媒體ID */ function message_custom_send_image($touser,$media_id){ $params = array(''); $params[’touser’]=trim($touser); $params[’msgtype’]='image'; $params[’image’]['media_id']=$media_id; return $this->oauth->post(’message/custom/send’,$params); } /* * 發送客服語音消息 * http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF * access_token 是 調用接口憑證 touser 是 普通用戶openid msgtype 是 消息類型,image media_id 是 發送的圖片的媒體ID */ function message_custom_send_voice($touser,$media_id){ $params = array(''); $params[’touser’]=trim($touser); $params[’msgtype’]='voice'; $params[’voice’]['media_id']=$media_id; return $this->oauth->post(’message/custom/send’,$params); } /* * 發送客服圖文消息 圖文消息條數限制在10條以內。 * http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF * access_token 是 調用接口憑證 * touser 是 普通用戶openid * msgtype 是 消息類型,image * media_id 是 發送的圖片的媒體ID * $newsArray[0]=array( 'title'=>'', 'description'=>'', 'url'=>'', 'picurl'=>'' ) */ function message_custom_send_news($touser,$newsArray){ $params = array(''); $params[’touser’]=trim($touser); $params[’msgtype’]='news'; $params[’news’]['articles']=$newsArray; return $this->oauth->post(’message/custom/send’,$params); } /* * 創建臨時二維碼ticket * http://mp.weixin.qq.com/wiki/index.php?title=%E7%94%9F%E6%88%90%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81 * expire_seconds 該二維碼有效時間,以秒為單位。 最大不超過1800。 *action_name 二維碼類型,QR_SCENE為臨時,QR_LIMIT_SCENE為永久 *action_info 二維碼詳細信息 *scene_id 場景值ID,臨時二維碼時為32位整型,永久二維碼時最大值為1000 */ function qrcode_create_scene($expire_seconds='900',$scene_id){ $params = array(''); $params[’expire_seconds’]=$expire_seconds; $params[’action_name’]='QR_SCENE'; $params[’action_info’]['scene']['scene_id']=$scene_id; return $this->oauth->post(’qrcode/create’,$params); } /* * 創建永久二維碼ticket * http://mp.weixin.qq.com/wiki/index.php?title=%E7%94%9F%E6%88%90%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81 * expire_seconds 該二維碼有效時間,以秒為單位。 最大不超過1800。 *action_name 二維碼類型,QR_LIMIT_SCENE為永久 *action_info 二維碼詳細信息 *scene_id 場景值ID,臨時二維碼時為32位整型,永久二維碼時最大值為1000 */ function qrcode_create_forever($action_name='',$scene_id){ $params = array(''); $params[’action_name’]='QR_LIMIT_SCENE'; $params[’action_info’]['scene']['scene_id']=$scene_id; return $this->oauth->post(’qrcode/create’,$params); } /* * 通過ticket換取二維碼 * */ function showqrcode($ticket){ return file_get_contents('https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={$ticket}'); } protected function id_format(&$id) { if ( is_float($id) ) { $id = number_format($id, 0, ’’, ’’); } elseif ( is_string($id) ) { $id = trim($id); } } }

標簽: 微信
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久激情av| 欧美日韩国产观看视频| 欧美天堂视频| 国产日韩欧美一区在线| 亚洲三级av| 91久久精品无嫩草影院| 亚洲三级视频| 亚州国产精品| 日韩av中文字幕一区二区三区| 国产精品婷婷| 亚洲人妖在线| 国产丝袜一区| 成人国产综合| 亚洲激情二区| 日韩中文一区二区| 国产精品v一区二区三区| 国产欧美三级| 蜜臀久久精品| 亚洲在线网站| 日韩国产在线不卡视频| 麻豆精品99| 国产二区精品| 婷婷综合社区| 日韩精品欧美成人高清一区二区| 欧美成人精品一级| 国产精品蜜月aⅴ在线| 日韩影院二区| 日韩一二三区在线观看| 狂野欧美性猛交xxxx| 国内精品99| 国产精品毛片久久久| 欧美性感美女一区二区 | 综合激情网...| 久久国产精品免费一区二区三区| 成人日韩av| 蜜臀久久99精品久久久久宅男| 国产亚洲电影| 91久久中文| 国产成人免费视频网站视频社区| 国产精品普通话对白| 久久中文字幕一区二区| 亚洲欧美日韩国产一区二区| 国产精品极品| 蜜桃视频免费观看一区| 91一区二区| 涩涩涩久久久成人精品| 麻豆国产欧美一区二区三区| 激情久久五月| 国内自拍视频一区二区三区| 首页国产欧美久久| 蜜桃av.网站在线观看| 国产精品高清一区二区| 婷婷亚洲综合| 日本精品影院| 精品视频高潮| 国产日本精品| 亚洲精品精选| 欧美天堂亚洲电影院在线观看| 国产精品99视频| 国产乱人伦精品一区| 久久亚洲视频| 日韩欧美二区| 成人精品视频| 久久久久久久久成人| 欧美亚洲人成在线| 蜜桃视频免费观看一区| 亚洲综合另类| 免费久久99精品国产| 2023国产精品久久久精品双| 国产v综合v| 亚洲激情另类| 亚洲我射av| 欧美视频二区| 欧美中文高清| 国产极品一区| 高清av一区| 成人欧美一区二区三区的电影| 美女久久久久久| 亚洲精品国产嫩草在线观看| 精品一区毛片| 日韩中文字幕| 国产精品hd| 另类中文字幕国产精品| 欧美成人久久| 免费在线视频一区| 91p九色成人| 久久精品国产999大香线蕉| 精品久久一区| 国产精品免费看| 欧美一区激情| 久久久久午夜电影| 国产亚洲一区在线| 久久精品99国产精品| 蜜臀国产一区| 日韩专区一卡二卡| 精品久久美女| 免费美女久久99| 国产精品久久久久久久久久10秀 | 日本在线成人| 超碰99在线| 蜜芽一区二区三区| av综合电影网站| 亚洲一区二区三区四区五区午夜 | 精品久久久久久久| 水野朝阳av一区二区三区| 国产精品久久久久久久久久妞妞| 91精品啪在线观看国产18 | aa亚洲婷婷| 精品亚洲自拍| 四虎精品一区二区免费| 日韩欧美午夜| 欧美精品成人| 免费成人性网站| 亚洲一级特黄| 久久99影视| 日韩一区二区三区高清在线观看| 色婷婷狠狠五月综合天色拍| 日本强好片久久久久久aaa| 免费观看久久av| 日本国产精品| av在线最新| 精品三区视频| 国产欧美日韩在线一区二区| 香蕉久久久久久久av网站| av资源亚洲| 高清av不卡| 日韩久久视频| 丝袜美腿一区| 国产在线|日韩| 久久久国产精品网站| 国产精品久久久久77777丨 | 麻豆视频在线观看免费网站黄 | 国产福利资源一区| 国产亚洲精品美女久久 | 裤袜国产欧美精品一区| 国产精品亚洲欧美日韩一区在线| 日韩高清电影免费| 亚洲影院天堂中文av色| 香蕉久久久久久久av网站| 国产一区二区精品| 综合视频一区| 欧美一级网址| 精品三级国产| 亚洲不卡av不卡一区二区| 一本色道久久精品| 日韩在线麻豆| 欧美中文高清| 麻豆国产91在线播放| 不卡福利视频| 激情综合亚洲| 日韩中文字幕亚洲一区二区va在线| 日韩中文字幕区一区有砖一区 | 99精品美女| 蜜桃久久av一区| 国产精品最新自拍| 日韩高清成人| 亚洲影视一区| 亚洲综合电影| 亚洲精选成人| 伊人久久在线| 日韩黄色av| 久久国产中文字幕| 日韩二区在线观看| 91一区二区三区四区| 亚洲三级观看| 日韩高清中文字幕一区二区| 免费不卡在线视频| 亚洲欧洲高清| 国产美女久久| 亚洲一区成人| 日韩深夜视频| 国产精品久久久网站| 国产美女一区| 四虎884aa成人精品最新| 日韩av网站在线免费观看| 国产一区二区中文| 麻豆精品国产91久久久久久| 蜜桃久久久久久久| 婷婷丁香综合| 久久久男人天堂| 国产精品美女午夜爽爽| 国产免费成人| 91一区二区三区四区| 国产精品亚洲欧美| 亚洲一区二区三区在线免费| 91精品一区国产高清在线gif| 国产福利一区二区精品秒拍| 亚洲精品黄色| 手机精品视频在线观看| 欧美日韩免费观看一区=区三区| 精品久久久久久久| 国产一区2区| 成人亚洲一区| 天堂а√在线最新版中文在线| 久久精品国产在热久久| 久久精品国产999大香线蕉| 欧美偷窥清纯综合图区| 日韩国产在线观看| 日本v片在线高清不卡在线观看| 久久国产精品99国产|