isp = $isp; if($isp){ $value = Setting::getItem('wxopen'); $value['component_access_token'] = Cache::get('component_access_token',''); $this->config = $value; } } /** * 获取session_key */ public function getSessionKey(string $code, int $applet_id) { if(!$applet = Applet::get($applet_id)){ $this->error = 'applet_id不存在!'; return false; } if($this->isp){ $url = 'https://api.weixin.qq.com/sns/component/jscode2session'; $queryarr = [ 'appid' => $applet['app_id'], 'js_code' => $code, 'grant_type' => 'authorization_code', 'component_appid' => $this->config['app_id'], 'component_access_token' => $this->config['component_access_token'] ]; }else{ $url = 'https://api.weixin.qq.com/sns/jscode2session'; $queryarr = [ 'appid' => $applet['app_id'], 'secret' => $applet['app_secret'], 'grant_type' => 'authorization_code', 'js_code' => $code ]; } $result = json_decode(Http::get($url, $queryarr),true); if (isset($result['errcode'])) { $this->error = 'code:' . $result['errcode'] . ' msg:' . $result['errmsg']; return false; } return $result; } //* ************************即将废除 - 开始************************* /** * 获取session_key - 服务商版 */ public function getComponentSessionKey(string $code, int $applet_id) { $applet = Applet::get($applet_id); $url = 'https://api.weixin.qq.com/sns/component/jscode2session'; $queryarr = [ 'appid' => $applet['app_id'], 'js_code' => $code, 'grant_type' => 'authorization_code', 'component_appid' => $this->config['app_id'], 'component_access_token' => $this->config['component_access_token'] ]; $result = json_decode(Http::get($url, $queryarr),true); if (isset($result['errcode'])) { $this->error = 'code:' . $result['errcode'] . ' msg:' . $result['errmsg']; return false; } return $result; } //* ************************即将废除 - 结束************************* /************ 小程序直播 (权限集 id 为:52)**************/ /** * 申请开通直播 */ public function applyLivelnfo($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/business/applyliveinfo?access_token='.$access_token; $queryarr = [ 'action' => 'apply' ]; return $this->result(Http::post($url, hema_json($queryarr))); } /************ 代商家注册小程序 **************/ /** * 快速注册企业小程序 */ public function registerMiniprogram($queryarr) { $url = 'https://api.weixin.qq.com/cgi-bin/component/fastregisterweapp?action=create&component_access_token=' . $this->config['component_access_token']; return $this->result(Http::post($url,hema_json($queryarr))); } /************ 模板库管理 **************/ /** * 删除代码模板 */ public function deleteTemplate(int $template_id) { $config = $this->config; $url = 'https://api.weixin.qq.com/wxa/deletetemplate?access_token='.$config['component_access_token']; $queryarr = ['template_id' => $template_id]; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 获取模板列表 * $template_type 模板类型 0=普通模板 1=标准模板,为空则全部 */ public function getTemplateList($template_type='') { $config = $this->config; $url = 'https://api.weixin.qq.com/wxa/gettemplatelist?access_token='.$config['component_access_token']; $queryarr = ['template_type' => $template_type]; $result = json_decode(Http::get($url,$queryarr),true); if($result['errcode']==0 AND sizeof($result['template_list']) > 0){ return arr_sort($result['template_list'],'template_id'); } return []; } /** * 将草稿添加到模板库 * $template_type 模板类型 0=普通模板 1=标准模板 */ public function addToTemplate(int $draft_id, int $template_type = 0) { $config = $this->config; $url = 'https://api.weixin.qq.com/wxa/addtotemplate?access_token='.$config['component_access_token']; $queryarr = [ 'draft_id' => $draft_id, 'template_type' => $template_type ]; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 获取草稿箱列表 */ public function getTemplatedRaftList() { $config = $this->config; $url = 'https://api.weixin.qq.com/wxa/gettemplatedraftlist?access_token='.$config['component_access_token']; $result = json_decode(Http::get($url),true); if($result['errcode']==0 OR isset($result['draft_list']) > 0){ return arr_sort($result['draft_list'],'draft_id'); } return []; } /************ 小程序代码管理 (权限集 id 为:18)**************/ /** * 上传代码并生成体验版 */ public function commit($applet, $code, $is_live = 0) { $access_token = $this->getAccessToken($applet['applet_id']); $url = 'https://api.weixin.qq.com/wxa/commit?access_token='.$access_token; $apiurl = $this->config['api_domain']; $apiurl = explode(';',$apiurl); $apiurl = 'https://'.$apiurl[0]; $ext = [ 'extEnable' => true, 'extAppid' => $applet['app_id'], 'directCommit' => false, 'ext' => [ 'applet_id' => $applet['applet_id'], 'api_url' => $apiurl ], 'requiredPrivateInfos' => [ 'getLocation', 'chooseLocation' ] ]; //如果小程序开通直播 if($is_live == 1){ /* if($wxlive = get_addon_config('wxlive')){ $ext['plugins']['live-player-plugin'] = [ 'version' => $wxlive['user_version'], 'provider' => $wxlive['plugin_appid'] ]; }*/ } $queryarr = [ 'template_id' => $code['id'], 'ext_json' => json_encode($ext), 'user_version' => $code['user_version'], 'user_desc' => $code['user_desc'] ]; return $this->result(Http::post($url, hema_json($queryarr))); } /** * 获取体验版二维码 */ public function getTrialQRCode($applet_id) { $access_token = $this->getAccessToken($applet_id); $path = urlencode('pages/index/index'); $url = 'https://api.weixin.qq.com/wxa/get_qrcode?access_token='.$access_token.'&path='.$path; $result = Http::get($url); $path = 'temp'; if(!file_exists('./'.$path)){ mkdir($path,0777,true); } //获取的二维码数据存储到指定的文件 file_put_contents('./'.$path . '/test_code_'. $applet_id .'.png',$result); return '/'.$path.'/test_code_'.$applet_id.'.png'; } /** * 提交代码审核 */ public function submitAudit($applet_id,$speedup=0) { $access_token = $this->getAccessToken($applet_id); $queryarr = [ 'privacy_api_not_use' => false ]; $url = 'https://api.weixin.qq.com/wxa/submit_audit?access_token='.$access_token; $result = json_decode(Http::post($url,hema_json($queryarr)),true); if($result['errcode'] != 0){ $this->error = 'code:' . $result['errcode'] . ',msg:' . $result['errmsg']; return false; } //是否加急审核 if($speedup == 1){ if(!$this->speedupCodeAudit($applet_id,$result['auditid'])){ return false; } } return $result; } /** * 查询审核单状态 */ public function getAuditStatus($applet_id,$auditid) { $access_token = getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/get_auditstatus?access_token='.$access_token; $queryarr = [ 'auditid' => $auditid ]; return $this->result(Http::post($url, json_encode($queryarr))); } /** * 撤回代码审核 * 单个帐号每天审核撤回次数最多不超过 5 次(每天的额度从0点开始生效),一个月不超过 10 次 */ public function undoAudit($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/undocodeaudit?access_token='.$access_token; return $this->result(Http::get($url)); } /** * 发布已通过审核的小程序 */ public function release($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/release?access_token='.$access_token; return $this->result(Http::post($url,'{}')); } /** * 小程序版本回退 */ public function revertCodeRelease($applet_id,$version='') { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/revertcoderelease?app_version='.$version.'&access_token='.$access_token; return $this->result(Http::get($url)); } /** * 获取可回退的小程序版本 */ public function getHistoryVersion($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/revertcoderelease?action=get_history_version&access_token='.$access_token; return $this->result(Http::get($url)); } /** * 设置小程序服务状态 */ public function setVisitStatus($applet_id,$action) { $access_token = $this->getAccessToken($applet_id); $queryarr = [ 'action' => $action ]; $url = 'https://api.weixin.qq.com/wxa/change_visitstatus?access_token='.$access_token; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 查询小程序服务状态 */ public function getVisitStatus($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/getvisitstatus?access_token='.$access_token; return $this->result(Http::post($url,'{}')); } /** * 设置最低基础库版本 */ public function setSupportVersion($applet_id,$version) { $access_token = $this->getAccessToken($applet_id); $queryarr = [ 'version' => $version ]; $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/setweappsupportversion?access_token='.$access_token; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 查询服务商审核额度 */ public function setCodeAuditQuota($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/queryquota?access_token='.$access_token; return $this->result(Http::get($url)); } /** * 加急代码审核 */ public function speedupCodeAudit($applet_id,$auditid) { $access_token = $this->getAccessToken($applet_id); $queryarr = [ 'auditid' => $auditid ]; $url = 'https://api.weixin.qq.com/wxa/speedupaudit?access_token='.$access_token; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 查询小程序版本信息 */ public function getVersionInfo($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/getversioninfo?access_token='.$access_token; return $this->result(Http::post($url,'{}')); } /** * 查询最新一次审核单状态 */ public function getLatestAuditStatus($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/get_latest_auditstatus?access_token='.$access_token; return $this->result(Http::get($url)); } /** * 获取隐私接口检测结果 */ public function getCodePrivacyInfo($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/security/get_code_privacy_info?access_token='.$access_token; $result = json_decode(Http::get($url),true); if($result['errcode'] != 0){ $this->error = 'code:' . $result['errcode'] . ',msg:' . $result['errmsg']; return false; } $res = true; $error = ''; if(sizeof($result['without_auth_list']) > 0){ $error = '没权限的隐私接口:'; foreach ($result['without_auth_list'] as $item){ $error = $error . $item . ','; } $res = false; } if(sizeof($result['without_conf_list']) > 0){ if(empty($error)){ $error = '没配置的隐私接口:'; }else{ $error = $error . '没配置的隐私接口:'; } foreach ($result['without_auth_list'] as $item){ $error = $error . $item . ','; } $res = false; } if(!empty($error)){ $error = $error . '请完成配置'; } if($res){ return $result; } $this->error = $error; return false; } /************ 扫普通二维码打开小程序 (权限集 id 为:3、18)**************/ /** * 获取已设置的二维码规则 */ public function getJumpQRCode($applet_id,$appid='') { if(empty($appid)){ $queryarr = '{}'; $access_token = $this->getAccessToken($applet_id); }else{ $queryarr = [ 'appid' => $appid ]; $queryarr = json_encode($queryarr,JSON_UNESCAPED_UNICODE); $access_token = $this->getAccessToken($applet_id,2); } $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/qrcodejumpget?access_token='.$access_token; $result = json_decode(Http::post($url,$queryarr),true); return $result; } /** * 增加或修改二维码规则 */ public function addJumpQRCode($applet_id,$queryarr) { if(isset($queryarr['appid'])){ $access_token = $this->getAccessToken($applet_id,2); }else{ $access_token = $this->getAccessToken($applet_id); } //获取效验文件 $path = str_replace(base_url(),'',$queryarr['prefix']); $path = './' . $path; if(!$this->downloadQRCodeText($applet_id,$access_token,$path)){ return false;//获取效验文件失败 } $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/qrcodejumpadd?access_token='.$access_token; $result = json_decode(Http::post($url,hema_json($queryarr)),true); if($result['errcode'] != 0){ $this->error = 'code:' . $result['errcode'] . ',msg:' . $result['errmsg']; return false; } rmdirs($path);//添加成功,删除效验文件 return $result; } /** * 发布已设置的二维码规则 */ public function publishJumpQRCode($applet_id,$prefix,$parameter='') { if(empty($parameter)){ $access_token = $this->getAccessToken($applet_id); }else{ $prefix = $prefix . '/' . $parameter; $access_token = $this->getAccessToken($applet_id,2); } $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/qrcodejumppublish?access_token='.$access_token; $queryarr = [ 'prefix' => $prefix ]; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 删除已设置的二维码规则 */ public function deleteJumpQRCode($applet_id,$prefix,$appid='') { $queryarr = [ 'prefix' => $prefix ]; if(empty($appid)){ $access_token = $this->getAccessToken($applet_id); }else{ $queryarr['appid'] = $appid; $access_token = $this->getAccessToken($applet_id,2); } $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/qrcodejumpdelete?access_token='.$access_token; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 获取校验文件名称及内容 */ public function downloadQRCodeText($applet_id,$access_token,$path) { $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/qrcodejumpdownload?access_token='.$access_token; $result = json_decode(Http::post($url,'{}'),true); if ($result['errcode'] != 0) { $this->error = 'code:' . $result['errcode'] . ' msg:' . $result['errmsg']; return false; } if(!file_exists($path)){ mkdir($path,0777,true); } $path = $path . $result['file_name']; file_put_contents($path,$result['file_content']); return true; } /************ 地理位置接口申请 (权限集 id 为:18)**************/ /** * 获取地理位置接口列表 */ public function getPrivacyInterface($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/security/get_privacy_interface?access_token='.$access_token; $result = json_decode(Http::get($url),true); return $result; } /** * 申请地理位置接口 */ public function applyPrivacyInterface($applet_id,$queryarr=[]) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/security/apply_privacy_interface?access_token='.$access_token; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 启动ticket推送服务 */ function startTicket(string $component_appid, string $component_secret) { $url = 'https://api.weixin.qq.com/cgi-bin/component/api_start_push_ticket'; $queryarr = [ 'component_appid' => $component_appid, 'component_secret' => $component_secret ]; Http::post($url, json_encode($queryarr)); return true; } /** * 获取不限制的小程序码 */ public function getUnlimitedQRCode(int $applet_id,$file_path, string $scene = '',$page = 'pages/index/index') { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token; $queryarr = [ 'scene' => $scene, 'page' => $page ]; $result = Http::post($url,json_encode($queryarr)); file_put_contents(public_path().$file_path,$result); //获取的二维码数据存储到指定的文件 return $file_path; } /** * 公众号用户登录 - 获取用户资料 */ public function getTicket($applet_id) { if(!$ticket = Cache::get('jsapi_ticket_'.$applet_id)){ $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket'; $queryarr = [ 'access_token' => $access_token, 'type' => 'jsapi' ]; $result = json_decode(Http::get($url, $queryarr),true); if($result['errcode']!=0){ return false; } $ticket = $result['ticket']; Cache::set('jsapi_ticket_'.$applet_id, $ticket, 5000); } return $ticket; } /** * 查询昵称设置状态 */ public function querynickname(){ $audit_id='454738159'; $access_token = getAccessToken(); $url = 'https://api.weixin.qq.com/wxa/api_wxa_querynickname?access_token='.$access_token; $data = ['audit_id' => $audit_id]; $result = http_post($url,$data); return $result; } /** * 获取审核时可填写的类目信息 */ public function getshowwxaitem() { $access_token = getAccessToken(); $url = 'https://api.weixin.qq.com/wxa/getshowwxaitem?access_token='.$access_token; return curl($url); } /** * code换取token - 微信扫码登录 */ function getWebToken(string $code) { $values = Setting::getItem('wxweb',0); $url = 'https://api.weixin.qq.com/sns/oauth2/access_token'; $queryarr = [ 'appid' => $values['app_id'], 'secret' => $values['app_secret'], 'grant_type' => 'authorization_code', 'code' => $code ]; $result = json_decode(Http::get($url,$queryarr),true); if(isset($result['errcode']) AND $result['errcode'] != 0){ $this->error = 'code:' . $result['errcode'] . ',msg:' . $result['errmsg']; return false; } return $result; } /** * 用户登录 - 获取用户资料 (公众号,web应用) */ public function getUserinfo(string $openid, string $access_token) { $url = 'https://api.weixin.qq.com/sns/userinfo'; $queryarr = [ 'access_token' => $access_token, 'openid' => $openid, 'lang' => 'zh_CN' ]; $result = json_decode(Http::get($url, $queryarr),true); if(isset($result['errcode']) AND $result['errcode'] != 0){ $this->error = 'code:' . $result['errcode'] . ',msg:' . $result['errmsg']; return false; } return $result; } /** * 获取授权应用的帐号基本信息 */ public function getAppInfo(string $auth_appid) { $config = $this->config; $url = 'https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token='.$config['component_access_token']; $queryarr = [ 'component_appid' => $config['app_id'], 'authorizer_appid' => $auth_appid ]; $result = json_decode(Http::post($url, json_encode($queryarr)),true); if(isset($result['errcode']) AND $result['errcode'] != 0){ $this->error = 'code:'.$result['errcode'].',msg:'.$result['errmsg'];//获取失败 return false; } return $result; } /** * 修改小程序头像 */ public function modifyHeadImage(string $media_id,int $applet_id) { $access_token = $this->getAccessToken($applet_id); //执行修改头像 $url = 'https://api.weixin.qq.com/cgi-bin/account/modifyheadimage?access_token='.$access_token; $queryarr = [ 'head_img_media_id' => $media_id, 'x1' => 0, 'y1' => 0, 'x2' => 1, 'y2' => 1 ]; return $this->result(Http::post($url, hema_json($queryarr))); } /** * 上传临时素材 */ public function upTempMaterial(string $file_url, int $applet_id, string $type='image') { $access_token = $this->getAccessToken($applet_id); $real_path = web_path() . 'temp/' . time() . '.jpg'; $temp_file = file_get_contents($file_url); //获取网络图片 file_put_contents($real_path,$temp_file); //存放临时图片 $url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$access_token.'&type='.$type; $queryarr['media'] = curl_file_create($real_path,'image/jpeg',$file_url);//获取要上传的二进制文件 $result = json_decode(http_post($url,$queryarr),true); unlink($real_path);//删除临时图片 if(isset($result['media_id'])){ return $result['media_id']; //返回的临时素材(media_id) }else{ $this->error = 'code:'.$result['errcode'].',msg:'.$result['errmsg'];//获取失败 return false; } } /** * 获取小程序设置信息 */ public function getInfor(int $applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/account/getaccountbasicinfo?access_token='.$access_token; return $this->result(Http::get($url)); } /** * 获取预授权码 - 生成授权页面 * $type,1=授权公众号,2=授权小程序,3=两者都有 */ public function authUrl(int $applet_id = 0, int $type = 3) { $config = $this->config; //获取第三方配置 $url = '#'; $redirect_uri = 'https://'.$config['authorize_domain'].'/applet/auth/'; if($type==1){ $redirect_uri .= 'wechat/applet_id/'.$applet_id; }else{ $redirect_uri .= 'wxapp/applet_id/'.$applet_id; } $url = 'https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token='.$config['component_access_token']; $queryarr = [ 'component_appid' => $config['app_id'] ]; $result = json_decode(Http::post($url, json_encode($queryarr)),true);//返回"pre_auth_code": "预授权码","expires_in": 有效期(600秒) if(isset($result['pre_auth_code'])){ $url = 'https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid='.$config['app_id'].'&pre_auth_code='.$result['pre_auth_code'].'&redirect_uri='.$redirect_uri.'&auth_type='.$type; } return $url; } /** * 设置服务器域名 */ public function setServeDomain(int $applet_id = 0, string $apiurl = '', string $access_token = '') { $config = $this->config; if(empty($access_token)){ $access_token = $this->getAccessToken($applet_id); } if(empty($apiurl)){ $apiurl = $config['api_domain']; } $domain = explode(';',$apiurl); $requestdomain = [];//request 合法域名 $wsrequestdomain = [];//socket 合法域名 for($n=0;$n 'set', 'requestdomain' => $requestdomain, 'wsrequestdomain' => $wsrequestdomain, 'uploaddomain' => $requestdomain, 'downloaddomain' => $requestdomain ]; $result = json_decode(Http::post($url, hema_json($queryarr)),true); if($result['errcode'] != 0){ $this->error = 'code:'.$result['errcode'].',msg:'.$result['errmsg']; return false; } $result['apiurl'] = $apiurl; return $result; } /** * 设置业务域名 */ public function setWebDomain(int $applet_id = 0, string $apiurl = '') { $config = $this->config; if(empty($access_token)){ $access_token = $this->getAccessToken($applet_id); } if(empty($apiurl)){ $apiurl = $config['api_domain']; } $domain = explode(';',$apiurl); $webviewdomain = []; foreach ($domain as $vo){ $webviewdomain[] = 'https://'.$vo; } $url = 'https://api.weixin.qq.com/wxa/setwebviewdomain?access_token='.$access_token; $queryarr = [ 'action' => 'set', 'webviewdomain' => $webviewdomain ]; return $this->result(Http::post($url, hema_json($queryarr))); } /** * 设置功能介绍 */ public function setSignature(int $applet_id = 0, string $signature = '', string $access_token = '') { if(empty($access_token)){ $access_token = $this->getAccessToken($applet_id); } if(empty($signature)){ $signature = '一个值得信赖的小程序'; } $url = 'https://api.weixin.qq.com/cgi-bin/account/modifysignature?access_token='.$access_token; $queryarr = ['signature' => $signature]; $result = json_decode(Http::post($url, hema_json($queryarr)),true); if($result['errcode'] != 0){ $this->error = 'code:'.$result['errcode'].',msg:'.$result['errmsg']; return false; } $result['signature'] = $signature; return $result; } /** * 微信认证名称检测 */ public function checkWxVerifyNickName(int $applet_id, string $nick_name) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/wxverify/checkwxverifynickname?access_token='.$access_token; $queryarr = ['nick_name' => $nick_name]; return $this->result(Http::post($url, hema_json($queryarr))); } /** * 设置小程序昵称 */ public function setNickName(int $applet_id, string $nick_name, string $license, string $other1) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/setnickname?access_token='.$access_token; $queryarr = [ 'nick_name' => $nick_name, 'license' => $license, 'naming_other_stuff_1' => $other1 ]; return $this->result(Http::post($url, hema_json($queryarr))); } /** * 删除类目 */ public function deleteCategory(int $applet_id, int $first, int $second) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/deletecategory?access_token='.$access_token; $queryarr = [ 'first' => $first, 'second' => $second ]; return $this->result(Http::post($url, hema_json($queryarr))); } /** * 获取已设置的所有类目 */ public function getCategory(int $applet_id) { $access_token = $this->getAccessToken($applet_id); if($this->isp){ $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/getcategory?access_token='.$access_token; }else{ $url = 'https://api.weixin.qq.com/wxaapi/newtmpl/getcategory?access_token='.$access_token; } $result = json_decode(Http::get($url),true); return $result; } /** * 获取可以设置的所有类目 */ public function getAllCategories($applet_id) { //同步微信端线下类目 $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/getallcategories?access_token='.$access_token; $result = json_decode(Http::get($url),true); if($result['errcode']==0){ $category = $result['categories_list']['categories']; $new = []; //筛选后的类目 //遍历一级类目 foreach($category[0]['children'] as $value){ //查找一级类目 for($n=1;$ngetAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/wxopen/addcategory?access_token='.$access_token; $queryarr = [ 'categories' => [ [ 'first' => $first, 'second' => $second, 'certicates' => [ 'key' => $ca_name, 'value' => $media_id ] ] ] ]; return $this->result(Http::post($url, hema_json($queryarr))); } /** * 附近小程序 - 查询地点类目信息 */ public function getStoreWxaAttr(int $applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/getstorewxaattr?access_token='.$access_token; $result = json_decode(Http::get($url),true); $list = []; if($result['errcode'] == 0 AND $result['is_exist'] == 1){ $category = $this->getMerchantCategory($applet_id);//拉取可设置类目 if(isset($result['store_wxa_attr']['weapp_category'])){ foreach ($result['store_wxa_attr']['weapp_category']['categories'] as $vo) { $first_name = ''; $second_name = ''; //获取一级类目名称 foreach ($category as $first) { if($first['id'] == $vo['first']){ $first_name = $first['name']; //获取二级类目名称 foreach ($first['children'] as $second) { if($second['id'] == $vo['second']){ $second_name = $second['name']; break; } } break; } } $list[] = [ 'first_id' => $vo['first'], 'first_name' => $first_name, 'second_id' => $vo['second'], 'second_name' => $second_name, 'audit_status' => $vo['audit_status'], 'audit_id' => $vo['audit_id'] ]; } } } return $list; } /** * 附近小程序 - 申请附近地点类目 */ public function nearbyApplyCategory(array $queryarr, int $applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/nearbyapplycategory?access_token='.$access_token; $this->result(Http::post($url,hema_json($queryarr))); } /** * 附近小程序 - 拉取门店小程序类目 */ public function getMerchantCategory(int $applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/get_merchant_category?access_token='.$access_token; $result = json_decode(Http::get($url),true); if($result['errcode']==0){ $category = $result['data']['all_category_info']['categories']; $new = []; //筛选后的类目 //遍历一级类目 foreach($category[0]['children'] as $value){ //查找一级类目 for($n=1;$ngetAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/getnearbypoilist?page=1&page_rows=20&access_token='.$access_token; $result = json_decode(Http::get($url),true); return $result; } /** * 附近小程序 - 添加附近门店 */ public function addNearbyPoi(array $queryarr, int $applet_id) { $queryarr['hour'] = str_replace(' ','',$queryarr['hour']); $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/addnearbypoi?access_token='.$access_token; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 附近小程序 - 删除附近门店 */ public function delNearbyPoi(int $applet_id, string $poi_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/delnearbypoi?access_token='.$access_token; $queryarr =[ 'poi_id' => $poi_id //门店的 poi_id ]; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 附近小程序 - 展示/取消展示附近门店(小程序) */ public function setNearbyPoiShowStatus(int $applet_id, $poi_id, $status) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/setnearbypoishowstatus?access_token='.$access_token; $queryarr =[ 'poi_id' => $poi_id, //门店的 poi_id 'status' => $status //0:取消展示;1:展示 ]; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 配置小程序用户隐私保护指引 */ public function setPrivacySetting($applet_id,$queryarr) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/component/setprivacysetting?access_token=' . $access_token; $queryarr['owner_setting']['notice_method'] = '小程序弹窗'; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 查询小程序用户隐私保护指引 */ public function getPrivacySetting($applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/component/getprivacysetting?access_token=' . $access_token; return $this->result(Http::post($url,"{}")); } /** * 获取体验用户列表 */ public function getTestUser(int $applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/memberauth?access_token='.$access_token; $queryarr =[ 'action' => 'get_experiencer' //固定值 ]; return json_decode(Http::post($url,hema_json($queryarr)),true); } /** * 添加体验用户 */ public function addTestUser(int $applet_id, string $wechatid) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/bind_tester?access_token='.$access_token; $queryarr =[ 'wechatid' => $wechatid //微信号 ]; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 删除体验用户 */ public function delTestUser(int $applet_id, string $userstr) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxa/unbind_tester?access_token='.$access_token; $queryarr =[ 'userstr' => $userstr //唯一识别码 ]; return $this->result(Http::post($url,hema_json($queryarr))); } /** * 上传图文消息内的图片 - 到微信端(永久素材) - 小程序端 * 图片仅支持jpg/png格式,大小必须在1MB以下 */ public function upMediaUrl(string $file_url, int $applet_id = 0) { $access_token = $this->getAccessToken($applet_id); $real_path = web_path() . 'temp/' . time() . '.jpg'; $temp_file = file_get_contents($file_url);//获取网络图片 file_put_contents($real_path,$temp_file); //存放临时图片 //上传到微信服务器 $url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token='.$access_token; $queryarr['media'] = curl_file_create($real_path,'image/jpeg',$file_url);//获取要上传的二进制文件 $result = json_decode(Http::post($url,$queryarr),true); unlink($real_path);//删除临时图片 if(!isset($result['url'])){ $this->error = 'code:' . $result['errcode'] . ',msg:' . $result['errmsg']; return false;//上传错误,一般是图片不符合要求 } return $result['url']; } /** * 使用授权码获取授权信息 */ public function getAuth(string $auth_code) { $config = $this->config; $url = 'https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token='.$config['component_access_token']; $queryarr = [ 'component_appid' => $config['app_id'], 'authorization_code' => $auth_code ]; $result = json_decode(Http::post($url, hema_json($queryarr)),true); if(!isset($result['authorization_info'])){ $this->error = 'code:' . $result['errcode'] . ' msg:' . $result['errmsg']; return false; } return $result['authorization_info']; } /** * 获取 component_access_token */ public function getComponentToken(string $ticket) { $config = $this->config; $url = 'https://api.weixin.qq.com/cgi-bin/component/api_component_token'; $queryarr = [ 'component_appid' => $config['app_id'], 'component_appsecret' => $config['app_secret'], 'component_verify_ticket' => $ticket, ]; $result = json_decode(Http::post($url, hema_json($queryarr)),true); if(isset($result['component_access_token'])){ return $result; } $this->error = 'code:' . $result['errcode'] . ' msg:' . $result['errmsg']; return false; } /************ 公众号 - 生成二维码 (帐号管理-生成带参数的二维码)**************/ public function qrcodeCreate($applet_id=0,$action_name='QR_STR_SCENE',$scene='login',$expire_seconds=7200) { $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=' . $access_token; /** * 二维码类型 * QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值 * QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值 */ $queryarr['action_name'] = $action_name; //设置临时二维码过期时间 if($action_name=='QR_STR_SCENE' or $action_name=='QR_SCENE'){ $queryarr['expire_seconds'] = $expire_seconds; } if($action_name=='QR_STR_SCENE' or $action_name=='QR_LIMIT_STR_SCENE'){ $queryarr['action_info']['scene']['scene_str'] = $scene; }else{ $queryarr['action_info']['scene']['scene_id'] = (int)$scene; } $result = json_decode(Http::post($url, hema_json($queryarr)),true); if(isset($result['ticket'])){ $rs = Http::get('https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.urlencode($result['ticket'])); $path = 'temp'; if(!file_exists('./'.$path)){ mkdir($path,0777,true); } //获取的二维码数据存储到指定的文件 file_put_contents('./'.$path . '/hemaphp_login_qrcode.png',$rs); return $result['ticket']; } $this->error = 'code:' . $result['errcode'] . ' msg:' . $result['errmsg']; return false; } /** * 公众号网页授权 - H5用户登录 code 换取 access_token * $appid 公众号的APPID */ public function oauth2($code,$appid,$applet_id) { $access_token = $this->getAccessToken($applet_id,2); //通过 code 换取 access_token $url = 'https://api.weixin.qq.com/sns/oauth2/component/access_token'; $queryarr = [ 'appid' => $appid, 'code' => $code, 'grant_type' => 'authorization_code', 'component_appid' => $this->config['app_id'], 'component_access_token' => $this->config['component_access_token'] ]; $result = json_decode(Http::get($url, $queryarr),true); if (isset($result['errcode'])) { $this->error = 'code:'.$result['errcode'].',msg:' . $result['errmsg']; return false; }else{ //拉取用户信息(需 scope 为 snsapi_userinfo) $url = 'https://api.weixin.qq.com/sns/userinfo?access_token'; $queryarr = [ 'access_token' => $result['access_token'], 'openid' => $result['openid'], 'lang' => 'zh_CN' ]; $result = json_decode(Http::get($url, $queryarr),true); if (isset($result['errcode'])) { $this->error = 'code:'.$result['errcode'].',msg:' . $result['errmsg']; return false; } } return $result; } /** * 公众号获取粉丝列表 */ public function getFans(int $applet_id) { $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token='.$access_token.'&next_openid='; $result = json_decode(Http::get($url),true); return $result; } /** * 上传图文消息内的图片 - 到微信端(永久素材) - 公众号端 * 图片仅支持jpg/png格式,大小必须在1MB以下 */ public function upWechatUrl(array $img, int $applet_id = 0) { $access_token = $this->getAccessToken($applet_id,2); for($n=0;$ngetAccessToken($applet_id,2); $real_path = web_path() . 'uploads/' . $file_path; //上传到微信服务器 $url = 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.$access_token.'&type='.$type; $queryarr['media'] = curl_file_create($real_path,$mimetype,$file_path);//获取要上传的二进制文件 $result = json_decode(http_post($url,$queryarr),true); return $result; //$result['media_id']; } /** * 删除素材文件 - 到微信端 */ public function delMaterial(string $media_id, int $applet_id = 0) { $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/material/del_material?access_token='.$access_token; $queryarr = [ 'media_id' => $media_id ]; $result = json_decode(Http::post($url,json_encode($queryarr)),true); return $result; } /** * 新增草稿 - 图文消息 */ public function addDraft(array $data, int $applet_id = 0) { $queryarr['articles'] = array(); for($n=0;$n $data[$n]['title'], 'author' => $data[$n]['author'], 'digest' => $data[$n]['digest'], 'content' => str_ireplace('"','\'',$data[$n]['wx_content']), 'content_source_url' => base_url(), 'thumb_media_id' => $data[$n]['media_id'] ]); } $access_token = $this->getAccessToken($applet_id,2); //上传到微信服务器 $url = 'https://api.weixin.qq.com/cgi-bin/draft/add?access_token='.$access_token; $result = json_decode(Http::post($url,hema_json($queryarr)),true); return $result; } /** * 修改草稿 - 图文消息 */ public function editDraft(array $data, int $media_id, int $applet_id = 0) { $access_token = $this->getAccessToken($applet_id,2); for($n=0;$n $media_id, 'index' => $data[$n]['ids'], 'articles' => [ 'title' => $data[$n]['title'], 'author' => $data[$n]['author'], 'digest' => $data[$n]['digest'], 'content' => str_ireplace('"','\'',$data[$n]['wx_content']), 'content_source_url' => base_url(), 'thumb_media_id' => $data[$n]['media_id'] ] ]; //上传到微信服务器 $url = 'https://api.weixin.qq.com/cgi-bin/draft/update?access_token='.$access_token; $result = json_decode(Http::post($url,hema_json($queryarr)),true); if($result['errcode']!=0){ $this->error = 'code:' . $result['errcode'] . ',msg:' . $result['errmsg']; return false; } } return true; } /** * 删除草稿 - 图文消息 */ public function delDraft(string $media_id, int $applet_id = 0) { $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/draft/delete?access_token='.$access_token; $queryarr = [ 'media_id' => $media_id ]; return json_decode(Http::post($url,json_encode($queryarr)),true); } /** * 根据OpenID列表群发公众号信息 */ public function sendMass($msg, $open_id, int $applet_id = 0) { //图文消息 if($msg['msg_type']['value']=='news'){ $queryarr = [ 'mpnews' => [ 'media_id' => $msg['content'] ], 'msgtype' => 'mpnews', 'send_ignore_reprint' => $msg['send_ignore_reprint'] ]; } //文本消息 if($msg['msg_type']['value']=='text'){ $queryarr = [ 'msgtype' => 'text', 'text' => [ 'content' => $msg['content'] ] ]; } //语音消息 if($msg['msg_type']['value']=='voice'){ $queryarr = [ 'voice' => [ 'media_id' => $msg['content'] ], 'msgtype' => 'voice' ]; } //图片消息 if($msg['msg_type']['value']=='image'){ $queryarr = [ 'images' => [ 'media_ids' => [ 0 => $msg['content'] ], 'recommend' => $msg['recommend'], 'need_open_comment' => $msg['need_open_comment'], 'only_fans_can_comment' => $msg['only_fans_can_comment'] ], 'msgtype' => 'image' ]; } //视频消息 if($msg['msg_type']['value']=='video'){ $queryarr = [ 'mpvideo' => [ 'media_id' => $msg['content'], 'title' => $msg['title'], 'description' => $msg['description'] ], 'msgtype' => 'mpvideo' ]; } //卡券消息 if($msg['msg_type']['value']=='wxcard'){ $queryarr = [ 'wxcard' => [ 'card_id' => $msg['content'] ], 'msgtype' => 'wxcard' ]; } $queryarr['touser'] = $open_id; $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token='.$access_token; $result = json_decode(Http::post($url,json_encode($queryarr)),true); return $result; } /** * 删除公众号群发记录 */ public function deleteMass(int $msg_id,int $applet_id = 0) { $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token='.$access_token; $queryarr = ['msg_id' => $msg_id]; $result = json_decode(Http::post($url,json_encode($queryarr)),true); return $result; } /** * 向公众号发布预览消息 */ public function previewMsg(array $data, string $open_id, int $applet_id = 0) { //图文消息 if($data['msg_type']=='news'){ $queryarr = [ 'mpnews' => ['media_id' => $data['content']], 'msgtype' => 'mpnews' ]; } //文本消息 if($data['msg_type']=='text'){ $queryarr = [ 'text' => ['content' => $data['content']], 'msgtype' => 'text' ]; } //语音消息 if($data['msg_type']=='voice'){ $queryarr = [ 'voice' => ['media_id' => $data['content']], 'msgtype' => 'voice' ]; } //图片消息 if($data['msg_type']=='image'){ $queryarr = [ 'image' => ['media_id' => $data['content']], 'msgtype' => 'image' ]; } //视频消息 if($data['msg_type']=='video'){ $queryarr = [ 'mpvideo' => ['media_id' => $data['content']], 'msgtype' => 'mpvideo' ]; } //卡券消息 if($data['msg_type']=='wxcard'){ $queryarr = '{ "wxcard":{ "card_id":"'.$data['content'].'", "card_ext": "{ "code":"", "openid":"", "timestamp":"", "signature":"" } "msgtype":"wxcard" }'; $queryarr = [ 'wxcard' => [ 'card_id' => $data['content'], 'card_ext' => [ 'code' => '', 'openid' => '', 'timestamp' => '', 'signature' => '' ] ], 'msgtype' => 'wxcard' ]; } $queryarr['touser'] = $open_id; $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token='.$access_token; $result = json_decode(Http::post($url,json_encode($queryarr)),true); return $result; } /** * 公众号自定义菜单 - 同步到微信端 */ public function creatMenu(array $menu, int $applet_id = 0) { $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$access_token; $queryarr = [ 'button' => $menu ]; $result = json_decode(Http::post($url, hema_json($queryarr)),true); return $result; } /** * 发布模板消息 - 公众号 */ function sendWechatMsg(int $applet_id = 0, array $queryarr = []) { if(sizeof($queryarr) == 0){ return true; } $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$access_token; $result = json_decode(Http::post($url,json_encode($queryarr)),true); return true; } /** * 获取公众号粉丝用户基本信息(包括UnionID机制)- 公众号 */ public function getWechatUserInfo(string $openid, int $applet_id) { $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/user/info'; $queryarr = [ 'access_token' => $access_token, 'openid' => $openid, 'lang' => 'zh_CN' ]; $result = json_decode(Http::get($url,$queryarr),true); if(!isset($result['openid'])){ $this->error = 'code:' . $result['errcode'] . ' msg:' . $result['errmsg']; return false; } $data['open_id'] = $result['openid']; if(isset($result['unionid'])){ $data['union_id'] = $result['unionid']; } return $data; } /** * 发送客服消息模板 */ public function sendServiceMsg(array $msg, string $touser, int $applet_id) { //文本消息 if($msg['type']=='text'){ $queryarr = [ 'msgtype' => 'text', 'text' => [ 'content' => $msg['content'] ] ]; } //图片消息 if($msg['type']=='image'){ $queryarr = [ 'msgtype' => 'image', 'image' => [ 'media_id' => $msg['media_id'] ] ]; } //图文消息(点击跳转到图文消息页面) 图文消息条数限制在1条以内 if($msg['type']=='news'){ $queryarr = [ 'msgtype' => 'mpnews', 'mpnews' => [ 'media_id' => $msg['media_id'] ] ]; } //发送图文消息(点击跳转到外链) 图文消息条数限制在1条以内 if($msg['type']=='news'){ $queryarr = [ 'msgtype' => 'news', 'news' => [ 'articles' => [ 'picurl' => $msg['picurl'], 'url' => $msg['url'], 'title' => $msg['title'], 'description' => $msg['description'] ] ] ]; } //语音消息 if($msg['type']=='voice'){ $queryarr = [ 'msgtype' => 'voice', 'voice' => [ 'media_id' => $msg['media_id'] ] ]; } //视频消息 if($msg['type']=='video'){ $queryarr = [ 'msgtype' => 'video', 'video' => [ 'media_id' => $msg['media_id'], 'thumb_media_id' => $msg['thumb_media_id'], 'title' => $msg['title'], 'description' => $msg['description'] ] ]; } //音乐消息 if($msg['type']=='music'){ $queryarr = [ 'msgtype' => 'music', 'video' => [ 'musicurl' => $msg['musicurl'], 'thumb_media_id' => $msg['thumb_media_id'], 'title' => $msg['title'], 'hqmusicurl' => $msg['hqmusicurl'], 'description' => $msg['description'] ] ]; } //发送小程序卡片(要求小程序与公众号已关联) if($msg['type']=='wxapp'){ $queryarr = [ 'msgtype' => 'miniprogrampage', 'miniprogrampage' => [ 'pagepath' => $msg['pagepath'], 'thumb_media_id' => $msg['thumb_media_id'], 'title' => $msg['title'], 'appid' => $msg['appid'], 'description' => $msg['description'] ] ]; } if(isset($queryarr)){ $queryarr['touser'] = $touser; $access_token = $this->getAccessToken($applet_id,2); $url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token; return $this->result(Http::post($url, hema_json($queryarr))); } $this->error = '参数错误'; return false; } /** * 获取令牌 - 开放平台 * $type 请求类型 1小程序,2公众号 */ function getAccessToken(int $applet_id = 0, int $type = 1) { $config = $this->config; //获取第三方配置 $access_token = ''; if($type==1){ if($applet = Applet::getApplet([ 'applet_id' => $applet_id,'status' => 1 ])) { $access_token=$applet['access_token']; if(empty($access_token)){ $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx3668302906e3894f&secret=3ef948febd085fb89908f22b4a79c52f' ; $result = json_decode(Http::get($url), true); if(isset($result['access_token'])){ $access_token = $result['access_token']; $applet->access_token = $result['access_token']; $applet->expires_in = time()+3600;//2个小时候过期,这里设置1小时获取一次 $applet->save();//保存最新的令牌access_token和过期时间 } } } }else{ //公众号 if($wechat = Wechat::getWechat([ 'applet_id' => $applet_id, 'status' => 1 ])){ $access_token=$wechat['access_token']; if($wechat['expires_in'] < time()){ //重新获取 $url = 'https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token='.$config['component_access_token']; $queryarr = [ 'component_appid' => $config['app_id'], 'authorizer_appid' => $wechat['app_id'], 'authorizer_refresh_token' => $wechat['authorizer_refresh_token'] ]; $result = json_decode(Http::post($url, json_encode($queryarr)),true); if(isset($result['authorizer_access_token'])){ $access_token = $result['authorizer_access_token']; $wechat->access_token = $result['authorizer_access_token']; $wechat->expires_in = time()+3600; //2个小时候过期,这里设置1小时获取一次 $wechat->save();//保存最新的令牌access_token和过期时间 } } } } return $access_token; } /** * 请求数据验证 **/ private function result($result) { $result = json_decode($result,true); if(isset($result['errcode']) and $result['errcode']!=0){ $this->error = '错误代码:' . $result['errcode'] . ',错误信息:' . $result['errmsg']; return false; } return $result; } public function getError() { return $this->error; } //订阅消息接口 //#################################################################### /** * 获取帐号下的模板列表 */ public function getMessageTemplateList(int $applet_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate?access_token='.$access_token; return $this->result(Http::get($url)); } /** * 删除帐号下的模板 */ public function deleteMessageTemplate(int $applet_id, string $tpl_id) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate?access_token='.$access_token; $queryarr = [ 'priTmplId' => $tpl_id ]; return $this->result(Http::post($url, hema_json($queryarr),[],['content-type: application/json'])); } /** * 添加帐号下的模板 */ public function addMessageTemplate(int $applet_id, string $tid, array $kidlist, string $desc) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate?access_token='.$access_token; $queryarr = [ 'tid' => $tid, 'kidList' => $kidlist, 'sceneDesc' => $desc ]; return $this->result(Http::post($url, hema_json($queryarr),[],['content-type: application/json'])); } /** * 发送订阅消息 */ public function sendMessage(int $applet_id, array $queryarr) { $access_token = $this->getAccessToken($applet_id); $url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token='.$access_token; $result = json_decode(Http::post($url,json_encode($queryarr)),true); write_log($result,__DIR__); return true; } //#################################################################### }