/** * 下载多媒体文件 * @param $mediaId 多媒体ID * @return 头信息如下 * * HTTP/1.1 200 OK * Connection: close * Content-Type: image/jpeg * Content-disposition: attachment; filename="MEDIA_ID.jpg" * Date: Sun, 06 Jan 2013 10:20:18 GMT * Cache-Control: no-cache, must-revalidate * Content-Length: 339721 * curl -G "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID" */ public static function download($mediaId) { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $queryUrl = 'http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=' . $accessToken . '&media_id=' . $mediaId; return Curl::callWebServer($queryUrl, '', 'GET'); }
/** * 获取自动回复规则 * 本接口与自定义菜单查询接口的不同之处在于,本接口无论公众号的接口是如何设置的,都能查询到接口,而自定义菜单查询接口则仅能查询到使用API设置的菜单配置。 * Url:http://mp.weixin.qq.com/wiki/7/7b5789bb1262fb866d01b4b40b0efecb.html * @return bool|mixed * * 返回: */ public static function getAutoreply() { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/get_current_autoreply_info?access_token=' . $accessToken; return Curl::callWebServer($url, '', 'GET'); }
/** * 获取微信服务器IP列表 */ public static function getWeChatIPList() { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=' . $accessToken; return Curl::callWebServer($url, '', 'GET'); }
/** * 获取摇周边的设备及用户信息 * 获取设备信息,包括UUID、major、minor,以及距离、openID等信息。 * 根据 $ticket 获取用户及设备信息 * * @param $ticket 摇周边业务的ticket,可在摇到的URL中得到,ticket生效时间为30分钟 * * @return array("data"=>array("page_id "=>1421,"openid"=> "oVDmXjp7y8aG2AlBuRpMZTb1-cmA",'beacon_info'=>array("distance"=> 55.00620700469034,"major"=> 10001,"minor"=> 19007,"uuid"=> "FDA50693-A4E2-4FB1-AFCF-C6EB07647825")), "errcode"=> 0,"errmsg"=> "success.") */ public static function getShakeInfo($ticket) { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $queryUrl = 'https://api.weixin.qq.com/shakearound/user/getshakeinfo?access_token=' . $accessToken; $data = json_encode(array('ticket' => $ticket)); return Curl::callWebServer($queryUrl, $data, 'POST', 1, 0); }
/** * 上传图片素材 * 上传在摇一摇页面展示的图片素材,素材保存在微信侧服务器上。 * 格式限定为:jpg,jpeg,png,gif,图片大小建议120px*120 px,限制不超过200 px *200 px,图片需为正方形。 * * @param $filename,文件绝对路径 * * @return array("data"=>array("pic_url"=>"http://shp.qpic.cn/wechat_shakearound_pic/0/1428377032e9dd2797018cad79186e03e8c5aec8dc/120"), "errcode"=> 0,"errmsg"=> "success.") */ public static function upload($filename) { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $queryUrl = 'https://api.weixin.qq.com/shakearound/material/add?access_token=' . $accessToken; $data = array(); $data['media'] = '@' . $filename; return Curl::callWebServer($queryUrl, $data, 'POST', 1, 0); }
/** * 将一条长链接转成短链接。 * 主要使用场景:开发者用于生成二维码的原链接(商品、支付二维码等)太长导致扫码速度和成功率下降,将原长链接通过此接口转成短链接再生成二维码将大大提升扫码速度和成功率。 * @param $longUrl String 需要转换的长链接,支持http://、https://、weixin://wxpay 格式的url * @return array('errcode'=>0, 'errmsg'=>'错误信息', 'short_url'=>'http://t.cn/asdasd')错误码为0表示正常 */ public static function long2short($longUrl) { $queryUrl = 'https://api.weixin.qq.com/cgi-bin/shorturl?access_token=' . AccessToken::getAccessToken(); $queryAction = 'POST'; $template = array(); $template['long_url'] = $longUrl; $template['action'] = 'long2short'; return Curl::callWebServer($queryUrl, '', $queryAction); }
/** * 获取自动回复规则 * * @return String 返回结果与字段说明请查看http://mp.weixin.qq.com/wiki/7/7b5789bb1262fb866d01b4b40b0efecb.html */ public static function getRole($industryId1, $industryId2) { $queryUrl = 'https://api.weixin.qq.com/cgi-bin/get_current_autoreply_info?access_token=' . AccessToken::getAccessToken(); $queryAction = 'POST'; $template = array(); $template['industry_id1'] = "{$industryId1}"; $template['industry_id2'] = "{$industryId2}"; $template = json_encode($template); return Curl::callWebServer($queryUrl, $template, $queryAction); }
/** * 向用户推送模板消息 * @param $data = array( * 'first'=>array('value'=>'您好,您已成功消费。', 'color'=>'#0A0A0A') * 'keynote1'=>array('value'=>'巧克力', 'color'=>'#CCCCCC') * 'keynote2'=>array('value'=>'39.8元', 'color'=>'#CCCCCC') * 'keynote3'=>array('value'=>'2014年9月16日', 'color'=>'#CCCCCC') * 'keynote3'=>array('value'=>'欢迎再次购买。', 'color'=>'#173177') * ); * @param $touser 接收方的OpenId。 * @param $templateId 模板Id。在公众平台线上模板库中选用模板获得ID * @param $url URL * @param string $topcolor 顶部颜色, 可以为空。默认是红色 * @return array("errcode"=>0, "errmsg"=>"ok", "msgid"=>200228332} "errcode"是0则表示没有出错 * * 注意:推送后用户到底是否成功接受,微信会向公众号推送一个消息。 */ public static function sendTemplateMessage($data, $touser, $templateId, $url, $topcolor = '#FF0000') { $queryUrl = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' . AccessToken::getAccessToken(); $queryAction = 'POST'; $template = array(); $template['touser'] = $touser; $template['template_id'] = $templateId; $template['url'] = $url; $template['topcolor'] = $topcolor; $template['data'] = $data; $template = json_encode($template); return Curl::callWebServer($queryUrl, $template, $queryAction); }
/** * Description: 通过code换取网页授权access_token * 首先请注意,这里通过code换取的网页授权access_token,与基础支持中的access_token不同。 * 公众号可通过下述接口来获取网页授权access_token。 * 如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。 * @param $code getCode()获取的code参数 */ public static function getAccessTokenAndOpenId($code) { //公众号的唯一标识 $appid = WECHAT_APPID; //公众号的appsecret $secret = WECHAT_APPSECRET; //填写为authorization_code $grant_type = 'authorization_code'; //构造请求微信接口的URL $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $secret . '&code=' . $code . '&grant_type=' . $grant_type . ''; //请求微信接口, Array(access_token, expires_in, refresh_token, openid, scope) return Curl::callWebServer($url); }
/** * @descrpition 从微信服务器获取微信ACCESS_TOKEN * @return Ambigous|bool */ private static function _getAccessToken() { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . WECHAT_APPID . '&secret=' . WECHAT_APPSECRET; $accessToken = Curl::callWebServer($url, '', 'GET'); if (!isset($accessToken['access_token'])) { return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败'); } $accessToken['time'] = time(); $accessTokenJson = json_encode($accessToken); //存入数据库 $db = new mysql(); $db->connect(DBHOST, DBUSER, DBPASSWORD, DBNAME); $sql = "update accesstoken set access_token='" . $accessTokenJson . "' where id=1"; $db->query($sql); return $accessToken; }
/** * @descrpition 从微信服务器获取微信ACCESS_TOKEN * @return Ambigous|bool */ private function _getAccessToken() { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . WECHAT_APPID . '&secret=' . WECHAT_APPSECRET; $accessToken = Curl::callWebServer($url, '', 'GET'); if (!isset($accessToken['access_token'])) { return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败'); } $accessToken['time'] = time(); $accessTokenJson = json_encode($accessToken); //存入数据库 /** * 这里通常我会把access_token存起来,然后用的时候读取,判断是否过期,如果过期就重新调用此方法获取,存取操作请自行完成 * * 请将变量$accessTokenJson给存起来,这个变量是一个字符串 */ return $accessToken; }
/** * @descrpition 从微信服务器获取js sdk api_ticket * @return Ambigous|bool */ private static function _getJsapiTicket() { $accessToken = AccessToken::getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" . $accessToken; $JsapiTicket = Curl::callWebServer($url, '', 'GET'); if (!isset($JsapiTicket['ticket'])) { return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取js ticket失败'); } $JsapiTicket['time'] = time(); $JsapiTicketJson = json_encode($JsapiTicket); //存入数据库 $db = new mysql(); $db->connect(DBHOST, DBUSER, DBPASSWORD, DBNAME); $sql = "update jsapiticket set ticket='" . $JsapiTicketJson . "' where id=1"; $db->query($sql); return $JsapiTicket; }
/** * @descrpition 从微信服务器获取微信API_TICKET * @return Ambigous|bool */ private static function _getApiTicket(){ $accessToken = AccessToken::getAccessToken(true); $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $apiTicket = Curl::callWebServer($url, '', 'GET'); if(!isset($apiTicket['ticket'])){ return Msg::returnErrMsg(MsgConstant::ERROR_GET_API_TICKET, '获取API_TICKET失败'); } $apiTicket['time'] = time(); $apiTicketJson = json_encode($apiTicket); //存入数据库 /** * 这里通常我会把api_ticket存起来,然后用的时候读取,判断是否过期,如果过期就重新调用此方法获取,存取操作请自行完成 * * 请将变量$apiTicketJson给存起来,这个变量是一个字符串 */ $f = fopen(self::_fileName2Store(), 'w+'); fwrite($f, $apiTicketJson); fclose($f); return $apiTicket; }
/** * 语义理解 * 单类别意图比较明确,识别的覆盖率比较大,所以如果只要使用特定某个类别,建议将category只设置为该类别。 * @param $query 输入文本串,如“查一下明天从北京到上海的南航机票" * @param $category String 需要使用的服务类型,如“flight,hotel”,多个用“,”隔开,不能为空。详见《接口协议文档》 * @param $latitude Float 纬度坐标,与经度同时传入;与城市二选一传入。详见《接口协议文档》 * @param $longitude Float 经度坐标,与纬度同时传入;与城市二选一传入。详见《接口协议文档》 * @param $region String 区域名称,在城市存在的情况下可省;与经纬度二选一传入。详见《接口协议文档》 * @param $city 城市名称,如“北京”,与经纬度二选一传入 * @param $openId * @return bool|mixed * 《接口协议文档》:http://mp.weixin.qq.com/wiki/images/1/1f/微信语义理解协议文档.zip */ public static function semanticSemproxy($query, $category, $openId, $latitude = '', $longitude = '', $region = '', $city = '') { $queryUrl = 'https://api.weixin.qq.com/semantic/semproxy/search?access_token=' . AccessToken::getAccessToken(); $queryAction = 'POST'; $template = array(); $template['query'] = $query; $template['category'] = $category; $template['appid'] = WECHAT_APPID; $template['uid'] = $openId; if (!empty($latitude)) { $template['latitude'] = $latitude; } if (!empty($longitude)) { $template['longitude'] = $longitude; } if (!empty($region)) { $template['region'] = $region; } if (!empty($city)) { $template['city'] = $city; } $template = json_encode($template); return Curl::callWebServer($queryUrl, $template, $queryAction, 0, 0); }
/** * 获取JsApiTicket * 本接口与自定义菜单查询接口的不同之处在于,本接口无论公众号的接口是如何设置的,都能查询到接口,而自定义菜单查询接口则仅能查询到使用API设置的菜单配置。 * Url:http://mp.weixin.qq.com/wiki/7/7b5789bb1262fb866d01b4b40b0efecb.html * @return string|ticket * * 返回:ticket值 */ public static function getJsApiTicket() { // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents("jsapi_ticket.json")); if ($data->expire_time < time()) { $accessToken = AccessToken::getAccessToken(); // 如果是企业号用以下 URL 获取 ticket // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken"; $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token={$accessToken}"; $res = Curl::callWebServer($url, '', 'GET'); $ticket = $res['ticket']; if ($ticket) { $data = array(); $data['expire_time'] = time() + 7000; $data['jsapi_ticket'] = $ticket; $fp = fopen("jsapi_ticket.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $ticket = $data->jsapi_ticket; } return $ticket; }
/** * 检验授权凭证(access_token)是否有效 * @param $accessToken 网页授权接口调用凭证。通过本类的第二个方法getAccessTokenAndOpenId可以获得一个数组,数组中有一个字段是access_token,就是这里的参数。注意:此access_token与基础支持的access_token不同 * @param $openId * @return array("errcode"=>0,"errmsg"=>"ok") */ public static function checkAccessToken($accessToken, $openId) { $queryUrl = 'https://api.weixin.qq.com/sns/auth?access_token=' . $accessToken . '&openid=' . $openId; $queryAction = 'GET'; return Curl::callWebServer($queryUrl, '', $queryAction); }
/** * 获取微信菜单 * @return bool|mixed * * 成功返回:{"errcode":0,"errmsg":"ok"} */ public static function delMenu() { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=' . $accessToken; return Curl::callWebServer($url, '', 'GET'); }
/** * 获取客服聊天记录接口,有分页,一次获取一页,一页最多1000条 * 在需要时,开发者可以通过获取客服聊天记录接口,获取多客服的会话记录,包括客服和用户会话的所有消息记录和会话的创建、关闭等操作记录。利用此接口可以开发如“消息记录”、“工作监控”、“客服绩效考核”等功能 * * @param $startTime 查询开始时间,UNIX时间戳 * @param $endTime 查询结束时间,UNIX时间戳,每次查询不能跨日查询 * @param $pageIndex 查询第几页,从1开始 * @param $pageSize 每页大小,每页最多拉取1000条 * @param $openId 可以为空,普通用户的标识,对当前公众号唯一。 * * @return array( array("worker"=>"test1", "openid"=>"", "opercode"=>2002, "time"=>1400563710, "text"=>"您好,客服test1为您服务。"), array("worker"=>"test1", "openid"=>"", "opercode"=>2002, "time"=>1400563715, "text"=>" 你好,有什么事情?"), * ) * 关于opercode 1000 创建未接入会话,1001 接入会话, 1002 主动发起会话,1004 关闭会话 1005 抢接会话, 2001 公众号收到消息,2002 客服发送消息,2003 客服收到消息 */ public function getRecord($startTime, $endTime, $pageIndex = 1, $pageSize = 1000, $openId = '') { $queryUrl = 'https://api.weixin.qq.com/cgi-bin/customservice/getrecord?access_token=' . AccessToken::getAccessToken(); $queryAction = 'POST'; $template = array(); $template['starttime'] = $startTime; $template['endtime'] = $endTime; $template['openid'] = $openId; $template['pagesize'] = $pageSize; $template['pageindex'] = $pageIndex; $template = json_encode($template); $result = Curl::callWebServer($queryUrl, $template, $queryAction); return isset($result['recordlist']) ? $result['recordlist'] : array(); }
/** * 预览 * 请注意,只有已经发送成功的消息才能删除删除消息只是将消息的图文详情页失效,已经收到的用户,还是能在其本地看到消息卡片。 另外,删除群发消息只能删除图文消息和视频消息,其他类型的消息一经发送,无法删除。 * * @param $msgId 发送出去的消息ID * @return mixed array("errcode"=>0, "errmsg"=>"ok"} 正常是errcode为0 */ public static function preview($touser, $type, $media_id) { $queryUrl = 'https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=' . AccessToken::getAccessToken(); $queryAction = 'POST'; $template = array(); $template['touser'] = $touser; if ($type == 'text') { $template[$type]["content"] = $media_id; } else { $template[$type]["media_id"] = $media_id; } $template['msgtype'] = $type; $template = json_encode($template); return Curl::callWebServer($queryUrl, $template, $queryAction); }
/** *@descrpition 从文件中获取access_token * @return string */ private static function _getFromFile() { if (self::_existsToken()) { if (self::_expriseToken()) { //重新获取一次access_token,并且将文件删除,重新向文件里面写一次 $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . WECHAT_APPID . '&secret=' . WECHAT_APPSECRET; $accessToken = Curl::callWebServer($url, '', 'GET'); if (!isset($accessToken['access_token'])) { return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败'); } unlink('token.txt'); file_put_contents('token.txt', $accessToken['access_token']); } else { $accessToken = file_get_contents('token.txt'); } } else { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . WECHAT_APPID . '&secret=' . WECHAT_APPSECRET; $accessToken = Curl::callWebServer($url, '', 'GET'); if (!isset($accessToken['access_token'])) { return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败'); } file_put_contents('token.txt', $accessToken['access_token']); } return $accessToken['access_token']; }
/** * @descrpition 图文 - 先调用self::newsItem()再调用本方法 * @param $tousername * @param $item 数组,每个项由self::newsItem()返回 * @return string */ public static function news($tousername, $item) { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); self::$queryUrl = self::$queryUrl . $accessToken; //开始 $template = array('touser' => $tousername, 'msgtype' => 'news', 'news' => array('articles' => $item)); $template = json_encode($template); return Curl::callWebServer(self::$queryUrl, $template, self::$action); }
/** * 获取素材列表 * @author: 正朴<*****@*****.**> * @param $type 素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news) * @param $offset 从全部素材的该偏移位置开始返回,0表示从第一个素材 返回 * @param $count 返回素材的数量,取值在1到20之间 */ public static function getmateriallist($type, $offset, $count) { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $queryUrl = 'https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=' . $accessToken; $template = array('type' => $type, 'offset' => $offset, 'count' => $count); $template = json_encode($template, JSON_UNESCAPED_UNICODE); return Curl::callWebServer($queryUrl, $template, 'POST', 1, 0); }
/** * 添加个性化菜单,一级菜单最多3个,每个一级菜单最多可以有5个二级菜单 * @param $menuListJson * { "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜单", "sub_button":[ { "type":"view", "name":"搜索", "url":"http://www.soso.com/" }, { "type":"view", "name":"视频", "url":"http://v.qq.com/" }, { "type":"click", "name":"赞一下我们", "key":"V1001_GOOD" }] }], "matchrule":{ "group_id":"2", "sex":"1", "country":"中国", "province":"广东", "city":"广州", "client_platform_type":"2" "language":"zh_CN" } } *除了匹配规则之中的参数,其余各参数的说明同setMenu($menuList)方法 *关于匹配,只有符合匹配条件的用户才会有上述定制的个性化菜单 * @return bool */ public static function setPersonalMenuJson($menuListJson) { //json格式 $data = $menuListJson; //此处获得token所调用的函数内部有改写,此处是可在SAE平台上运行的,实际应用过程中可 //根据运行平台的不同改写getAccessToken()函数 $accessToken = AccessToken::getAccessToken(); //请求地址与创建普通菜单有区别 //创建个性化菜单之前必须先创建默认菜单 $url = "https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=" . $accessToken; $result = Curl::callWebServer($url, $data, 'POST'); if ($result['errcode'] == 0) { return true; } return $result; }
/** * 查询设备列表 基础函数 * 查询已有的设备ID、UUID、Major、Minor、激活状态、备注信息、关联门店、关联页面等信息。可指定设备ID或完整的UUID、Major、Minor查询,也可批量拉取设备信息列表。 * * @param $info array('UUID'=>'FDA50693-A4E2-4FB1-AFCF-C6EB07647825','minor '=>'1002','major'=>'1223') or array('begin'=>0,'count'=>3) or array( "apply_id"=>1231,"begin"=> 0,"count"=> 3) * * @return array('data'=>array('devices'=>array(array("comment"=> "","device_id"=> 10098,"major"=> 10001, "minor"=> 12103,"page_ids"=> "15368","status"=> 1,"poi_id"=> 0,"uuid"=> "FDA50693-A4E2-4FB1-AFCF-C6EB07647825")),"errcode"=> 0,'errmsg'=>'success'); */ public static function _searchDevice($data) { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $queryUrl = 'https://api.weixin.qq.com/shakearound/device/bindlocation?access_token=' . $accessToken; $data = json_encode($data); return Curl::callWebServer($queryUrl, $data, 'POST'); }
private function requestAction($action) { switch ($action) { case 'wxJsSignature': // got wx js signature if (isset($_SERVER['HTTP_REFERER'])) { $url = $_SERVER['HTTP_REFERER']; } else { $url = self::_phpFileFullUrl(); } //var_dump($url); $sig = new ApiSignature(WECHAT_APPID, WECHAT_APPSECRET, $url); $ret = json_encode($sig->getSignPackage()); echo $ret; break; case 'fetchCode': if (isset($_SERVER['HTTP_REFERER'])) { $redirectUrl = $_SERVER['HTTP_REFERER']; } else { $redirectUrl = $_SERVER['REQUEST_URI']; } WeChatOAuth::getCode($redirectUrl, $state = 'qianduoduo', $scope = 'snsapi_base'); break; case 'fetchOpenid': if (!isset($_GET['code'])) { echo json_encode(['msg' => 'no code here !!!']); return; } $code = $_GET['code']; $ret = WeChatOAuth::getAccessTokenAndOpenId($code); echo json_encode($ret); break; case 'scanCodePay': //$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.WECHAT_APPID.'&secret='.WECHAT_APPSECRET; // var params = { // id: $('#channel').val() + '01', // '01' means pay // amount: $('#money').val(), // openId: openid, // authCode: result // }; //var_dump($_GET); $params = ['id' => $_GET['id'], 'amount' => $_GET['amount'], 'authCode' => $_GET['authCode'], 'openId' => $_GET['openId']]; //$params = []; //parse_str() //var_dump($params); $ret = Curl::callWebServer(WECHAT_URL . 'zero/scanweb', json_encode($params), 'POST'); //var_dump($ret); // check receipt openid here. /** * Notify JS frontend. */ echo json_encode($ret); /** * Notify the receipt. */ $retParams = $ret['params']; if (is_string($retParams)) { $retParams = json_decode($retParams, true); } $debugMode = isset($_GET['debugMode']) && $_GET['debugMode'] === '1'; if ($debugMode) { // mock $ret['code'] = '00'; $retParams['total_amount'] = '0.01'; } if ($ret['code'] === '00' && $retParams && $retParams['total_amount'] && !is_null($retParams['total_amount'])) { $content = '收到' . '付款金额' . $retParams['total_amount']; ResponseInitiative::text($params['openId'], $content); } break; // case 'notifyPayResult': { // //if(isset($_POST())) // if (!isset($_GET['code'])) { // echo json_encode(['msg'=>'no code here !!!']); // return; // } // // $code = $_GET['code']; // $ret = WeChatOAuth::getAccessTokenAndOpenId($code); // echo json_encode($ret); // } break; default: //return ResponsePassive::text($request['fromusername'], $request['tousername'], '收到未知的消息,我不知道怎么处理'); } }
/** * 查询群发消息发送状态【订阅号与服务号认证后均可用】 * * @param $msgId String 群发消息后返回的消息id * @return mixed array("msg_status":"SEND_SUCCESS","msg_id"=>34182) */ public static function getStatus($openId, $mediaId) { $queryUrl = 'https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=' . AccessToken::getAccessToken(); $queryAction = 'POST'; $template = array(); $template['touser'] = $openId; $template['image']['media_id'] = $mediaId; $template['msgtype'] = 'image'; $template = json_encode($template); return Curl::callWebServer($queryUrl, $template, $queryAction); }
/** * 设置备注名 开发者可以通过该接口对指定用户设置备注名,该接口暂时开放给微信认证的服务号。 * @param $openId 用户的openId * @param $remark 新的昵称 * @return array('errorcode'=>0, 'errmsg'=>'ok') 正常时是0 } */ public static function setRemark($openId, $remark) { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); $queryUrl = 'https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=' . $accessToken; $data = json_encode(array('openid' => $openId, 'remark' => $remark)); return Curl::callWebServer($queryUrl, $data, 'POST'); }
/** * @descrpition 获取关注者列表 * @param $next_openid 第一个拉取的OPENID,不填默认从头开始拉取 * @return JSON {"total":2,"count":2,"data":{"openid":["","OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"} */ public static function getFansList($next_openid = '') { //获取ACCESS_TOKEN $accessToken = AccessToken::getAccessToken(); if (empty($next_openid)) { $queryUrl = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=' . $accessToken; } else { $queryUrl = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=' . $accessToken . '&next_openid=' . $next_openid; } $data = ''; return Curl::callWebServer($queryUrl, $data, 'GET'); }