"订阅号", 1 => "由历史老帐号升级后的订阅号", 2 => "服务号", ); //公众号认证类型 public $verify_type = array ( -1 => "未认证", 0 => "微信认证", 1 => "新浪微博认证", 2 => "腾讯微博认证", 3 => "已资质认证通过但还未通过名称认证", 4 => "已资质认证通过、还未通过名称认证,但通过了新浪微博认证", 5 => "已资质认证通过、还未通过名称认证,但通过了腾讯微博认证", ); //business_info 说明 public $business_type = array ( 'open_store' => "是否开通微信门店功能", 'open_scan' => "是否开通微信扫商品功能", 'open_pay' => "是否开通微信支付功能", 'open_card' => "是否开通微信卡券功能", 'open_shake' => "是否开通微信摇一摇功能", ); public function __construct($site_id = 0) { $this->site_id = $site_id; // $response = $this->app->server->serve(); // 将响应输出 // $response->send();exit; // Laravel 里请使用:return $response; } /** * 授权实例 */ public function app() { $config_model = new Config(); $config_result = $config_model->getWechatConfig($this->site_id); $config = $config_result[ "data" ]; if (!empty($config)) { $config_info = $config[ "value" ]; } //授权方式 手动授权 或 自动授权(通过开放平台) $auth_type = $config_info[ "is_authopen" ] ?? ''; if ($auth_type == "1") { $oplatform_model = new Oplatform(); $config_info[ 'type' ] = 'wechat'; $this->app = $oplatform_model->app($config_info); } else { $config = [ 'app_id' => $config_info[ "appid" ] ?? '', 'secret' => $config_info[ "appsecret" ] ?? '', 'token' => $config_info[ "token" ] ?? '', // Token 'aes_key' => $config_info[ 'encodingaeskey' ] ?? '', // EncodingAESKey,兼容与安全模式下请一定要填写!!! // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名 'response_type' => 'array', /** * 日志配置 * * level: 日志级别, 可选为:debug/info/notice/warning/error/critical/alert/emergency * permission:日志文件权限(可选),默认为null(若为null值,monolog会取0644) * file:日志文件位置(绝对路径!!!),要求可写权限 */ 'log' => [ 'level' => 'debug', 'permission' => 0777, 'file' => 'runtime/log/wechat/easywechat.logs', ], ]; if (empty($config[ 'app_id' ]) || empty($config[ 'secret' ])) { throw new \Exception('商家公众号配置有误,请联系平台管理员'); } $this->app = Factory::officialAccount($config); } return $this->app; } /** * 创建微信菜单 * @param $buttons */ public function menu($buttons) { try { $result = $this->app()->menu->create($buttons); if ($result[ 'errcode' ] == 0) { return $this->success(); } else { return $this->error($result, $result[ "errmsg" ]); } } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /** * 拉取粉丝列表 * @param $nextOpenId * @return \multitype * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function user($nextOpenId = null) { try { $result = $this->app()->user->list($nextOpenId); // $nextOpenId 可选 if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /** * 查询多个粉丝信息 * @param $user_list 数组 [$openId1, $openId2, ...] */ public function selectUser($user_list) { try { $result = $this->app()->user->select($user_list); // $nextOpenId 可选 if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /** * 得到粉丝信息 */ public function getUser($openId) { try { $result = $this->app()->user->get($openId); // $nextOpenId 可选 if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /** * TODO * 根据 Code 获取用户 session 信息 * @param $param * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function authCodeToOpenid($params = []) { try { if (empty($_REQUEST[ "code" ])) { $auth_result = $this->getAuthCode(request()->url(true)); if ($auth_result[ "code" ] >= 0) { Header("Location: " . $auth_result[ "data" ]); } else { return $auth_result; } } $user = $this->app()->oauth->user();//获取授权用户 $data = [ 'openid' => $user->getId(), 'userinfo' => [ 'avatarUrl' => $user->getAvatar(), 'nickName' => $user->getNickname() ] ]; return $this->success($data); } catch (\Exception $e) { if (property_exists($e, 'body')) { return $this->handleError($e->body[ 'errcode' ], $e->body[ 'errmsg' ]); } return $this->error([], $e->getMessage()); } } /** * 根据code获取授权信息 * @param $code * @return array */ public function getAuthByCode($params) { try { $user = $this->app()->oauth->userByCode($params[ 'code' ]);//获取授权用户 $original = $user->getOriginal(); $data = [ 'openid' => $original[ 'openid' ], 'userinfo' => [ 'avatarUrl' => $original[ 'headimgurl' ] ?? '', 'nickName' => $original[ 'nickname' ] ?? '' ] ]; if (isset($original[ 'unionid' ])) { $data[ 'unionid' ] = $original[ 'unionid' ]; } return $this->success($data); } catch (\Exception $e) { if (property_exists($e, 'body')) { return $this->handleError($e->body[ 'errcode' ], $e->body[ 'errmsg' ]); } return $this->error([], $e->getMessage()); } } /** * 获取公众号网页授权code * @param $redirect * @param string $scopes snsapi_base:静默授权 snsapi_userinfo:用户授权 * @return array */ public function getAuthCode($redirect, $scopes = 'snsapi_base') { try { $response = $this->app()->oauth->scopes([ $scopes ])->redirect($redirect); return $this->success($response->getTargetUrl()); } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /** * 获取永久二维码 * @return unknown */ public function getQrcode($uid) { $result = $this->app()->qrcode->forever($uid); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } $url = $this->app()->qrcode->url($result[ 'data' ][ 'ticket' ]); if (isset($url[ 'errcode' ]) && $url[ 'errcode' ] != 0) { return $this->error($url, $url[ "errmsg" ]); } return $this->success($url); } /** * 获取临时二维码 * @param $scene * @return array */ public function getTempQrcode($scene, $seconds) { try { $result = $this->app()->qrcode->temporary($scene, $seconds); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } $url = $this->app()->qrcode->url($result[ 'ticket' ]); if (isset($url[ 'errcode' ]) && $url[ 'errcode' ] != 0) { return $this->handleError($url[ 'errcode' ], $url[ "errmsg" ]); } return $this->success($url); } catch (\Exception $e) { if (property_exists($e, 'body')) { return $this->handleError($e->body[ 'errcode' ], $e->body[ 'errmsg' ]); } return $this->error([], $e->getMessage()); } } /** * 获取jssdk配置 * @param unknown $url */ public function getJssdkConfig($url) { try { $this->app()->jssdk->setUrl($url); $res = $this->app->jssdk->buildConfig([], false, false, false); return $this->success($res); } catch (\Exception $e) { if (property_exists($e, 'body')) { return $this->handleError($e->body[ 'errcode' ], $e->body[ 'errmsg' ]); } return $this->error([], $e->getMessage()); } } /********************************************************** 数据统计与分析start *******************************************************************/ /********************************************************** 数据统计与分析end *******************************************************************/ /*******************************************************************************微信接口连接开始*****************************************************/ /*******************************************************************************微信接口连接结束*****************************************************/ /***************************************************************** 微信公众号 统计 start *****************************************************************************************/ /***************************************************************** 微信公众号 统计 end *****************************************************************************************/ /****************************************************************************** 数据统计与分析***********************************************************/ /** * 获取用户增减数据, 最大时间跨度:7; * @param $from * @param $to */ public function userSummary($from, $to) { try { $result = $this->app()->data_cube->userSummary($from, $to); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error([], $result[ "errmsg" ]); } return $this->success($result[ "list" ]); } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /** * 获取累计用户数据, 最大时间跨度:7 * @param $from * @param $to */ public function userCumulate($from, $to) { try { $result = $this->app()->data_cube->userCumulate($from, $to); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error([], $result[ "errmsg" ]); } return $this->success($result[ "list" ]); } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /** * 获取接口分析分时数据, 最大时间跨度:1; * @param $from * @param $to * @return array|\multitype */ public function interfaceSummaryHourly($from, $to) { try { $result = $this->app()->data_cube->interfaceSummaryHourly($from, $to); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error([], $result[ "errmsg" ]); } return $this->success($result[ "list" ]); } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /** * 获取接口分析数据, 最大时间跨度:30; * @param $from * @param $to * @return array|\multitype */ public function interfaceSummary($from, $to) { try { $result = $this->app()->data_cube->interfaceSummary($from, $to); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error([], $result[ "errmsg" ]); } return $this->success($result[ "list" ]); } catch (\Exception $e) { return $this->error([], $e->getMessage()); } } /****************************************************************************** 数据统计与分析***********************************************************/ /****************************************************************************** 素材start***********************************************************/ /** * 上传图片 * @param $path * @return array */ function uploadImage($path) { $result = $this->app()->material->uploadImage($path); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /** * 上传语音 * @param $path * @return array */ function uploadVoice($path) { $result = $this->app()->material->uploadVoice($path); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /** * 上传视频 * @param $path * @return array */ function uploadVideo($path) { $result = $this->app()->material->uploadVideo($path); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /** * 上传缩略图 * @param $path * @return array */ function uploadThumb($path) { $result = $this->app()->material->uploadThumb($path); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /** * 上传图文 * @param $data */ public function uploadArticle($data) { $article_data = []; foreach ($data as $k => $v) { $article_data[] = new Article($v); } $result = $this->app()->material->uploadArticle($article_data); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /** * 修改图文 * @param $mediaId * @param $data 文章详情 * @param int $index 多图文中的第几篇 * @return array */ public function updateArticle($mediaId, $data, $index = 0) { $result = $this->app()->material->updateArticle($mediaId, $data, $index); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /** * 上传图文消息图片 * @param $path * @return array * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function uploadArticleImage($path) { $result = $this->app()->material->uploadArticleImage($path); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /** * 获取永久素材 * @param $mediaId * @return array */ public function getMaterial($mediaId) { $result = $this->app()->material->get($mediaId); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /** * 删除永久素材 * @param $mediaId * @return array */ public function deleteMaterial($mediaId) { $result = $this->app()->material->delete($mediaId); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /****************************************************************************** 素材end***********************************************************/ /****************************************************************************** 回复start***********************************************************/ /** * 用户事件 * @return array */ public function relateWeixin() { $server = $this->app->server; $message = $server->getMessage(); if (isset($message[ 'MsgType' ])) { switch ( $message[ 'MsgType' ] ) { case 'event': $this->app->server->push(function($res) { if ($res[ 'Event' ] == 'subscribe') { // 关注公众号 $Userstr = $this->getUser($res[ 'FromUserName' ]); //获取用户信息 $wechat_user = $this->app->user->get($res[ 'FromUserName' ]); if (preg_match("/^qrscene_/", $res[ 'EventKey' ])) { $source_uid = substr($res[ 'EventKey' ], 8); $_SESSION[ 'source_uid' ] = $source_uid; } elseif (!empty($_SESSION[ 'source_uid' ])) { $source_uid = $_SESSION[ 'source_uid' ]; } else { $source_uid = 0; } if (preg_match("/^qrscene_key_/", $res[ 'EventKey' ])) { //新增2021.06.02 $key = substr($res[ 'EventKey' ], 12); $cache = Cache::get('wechat_' . $key); if (!empty($cache)) { Cache::set('wechat_' . $key, $wechat_user); } } if (preg_match("/^verify_/", $res[ 'EventKey' ])) { $cache = Cache::get($res[ 'EventKey' ]); if (empty($cache)) { Cache::set($res[ 'EventKey' ], $wechat_user, 7200); } } $nickname_decode = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $wechat_user[ 'nickname' ]); $headimgurl = $wechat_user[ 'headimgurl' ]; $sex = $wechat_user[ 'sex' ]; $language = $wechat_user[ 'language' ]; $country = $wechat_user[ 'country' ]; $province = $wechat_user[ 'province' ]; $city = $wechat_user[ 'city' ]; $district = "无"; $openid = $wechat_user[ 'openid' ]; $nickname = $wechat_user[ 'nickname' ]; if (!empty($wechat_user[ 'unionid' ])) { $unionid = $wechat_user[ 'unionid' ]; } else { $unionid = ''; } $memo = $wechat_user[ 'remark' ]; $data = array ( 'site_id' => $this->site_id, 'nickname' => $nickname, 'nickname_decode' => $nickname_decode, 'headimgurl' => $headimgurl, 'sex' => $sex, 'language' => $language, 'country' => $country, 'province' => $province, 'city' => $city, 'district' => $district, 'openid' => $openid, 'unionid' => $unionid, 'groupid' => '', 'is_subscribe' => 1, 'remark' => $memo, 'subscribe_time' => $wechat_user[ 'subscribe_time' ] ?? 0, 'subscribe_scene' => $wechat_user[ 'subscribe_scene' ] ?? 0, 'unsubscribe_time' => $wechat_user[ 'unsubscribe_time' ] ?? 0, 'update_date' => time() ); $fans = new Fans(); $fans_info = $fans->getFansInfo([ [ 'openid', '=', $openid ], [ 'site_id', '=', $this->site_id ] ]); if (empty($fans_info[ 'data' ])) { $fans->addFans($data); } else { $fans->editFans($data, [ [ 'openid', '=', $openid ], [ 'site_id', '=', $this->site_id ] ]); } //获取关注发送消息内容 $replay = new Replay(); $replay_content = $replay->getWechatFollowReplay($this->site_id); return new Text($replay_content[ 'data' ]); } else if ($res[ 'Event' ] == 'unsubscribe') { //取消关注 $fans = new Fans(); $openid = $res[ 'FromUserName' ]; $fans->unfollowWechat((string) $openid); } else if ($res[ 'Event' ] == 'unsubscribe') { //取消关注 $fans = new Fans(); $openid = $res[ 'FromUserName' ]; $fans->unfollowWechat((string) $openid); } else if ($res[ 'Event' ] == 'SCAN') { // SCAN事件 - 用户已关注时的事件推送 - 扫描带参数二维码事件 $openid = $res[ 'FromUserName' ]; $data = $res[ 'EventKey' ]; if (preg_match("/^key_/", $data)) { $key = substr($data, 4); $cache = Cache::get('wechat_' . $key); if (!empty($cache)) { $wechat_user = $this->app->user->get($res[ 'FromUserName' ]); Cache::set('wechat_' . $key, $wechat_user); } } if (preg_match("/^verify_/", $res[ 'EventKey' ])) { $cache = Cache::get($res[ 'EventKey' ]); if (empty($cache)) { $wechat_user = $this->app->user->get($res[ 'FromUserName' ]); Cache::set($res[ 'EventKey' ], $wechat_user, 7200); } } return new Text('扫码成功。'); } else if ($res[ 'Event' ] == 'CLICK') { // CLICK事件 - 自定义菜单事件 $openid = $res[ 'FromUserName' ]; $data = $res[ 'EventKey' ]; if (strpos($res[ 'EventKey' ], 'MATERIAL_GRAPHIC_MESSAGE_') === 0) { $material_id = substr($res[ 'EventKey' ], 25); $material_type = 1; } else if (strpos($res[ 'EventKey' ], 'MATERIAL_PICTURE_') === 0) { $material_id = substr($res[ 'EventKey' ], 17); $material_type = 2; } else if (strpos($res[ 'EventKey' ], 'MATERIAL_TEXT_MESSAGE_') === 0) { $material_id = substr($res[ 'EventKey' ], 22); $material_type = 5; } $material = new Material(); $media_info = $material->getMaterialInfo([ [ 'id', '=', $material_id, 'type', '=', $material_type ] ]); $media_info = $media_info[ 'data' ]; if ($media_info) { $value = json_decode($media_info[ 'value' ], true); if ($material_type == 1) { //图文 $url = __ROOT__; $url = $url . '/index.php/wechat/api/auth/wechatArticle?id=' . $media_info[ 'id' ]; $items = [ new NewsItem([ 'title' => $value[ 0 ][ 'title' ], 'description' => strip_tags($value[ 0 ][ 'content' ]), 'url' => $url, 'image' => $value[ 0 ][ 'cover' ][ 'path' ], ]), ]; return new News($items); } else if ($material_type == 2) { //图片 } else if ($material_type == 5) { //文字 return new Text($value[ 'content' ]); } } } else if ($res[ 'Event' ] == 'weapp_audit_success') { // 小程序审核通过 自动发布 if (addon_is_exit('wxoplatform')) { $weapp_original = $res[ 'ToUserName' ]; $site_info = model('config')->getInfo([ [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'WEAPP_CONFIG' ], [ 'value', 'like', '%is_authopen%' ], [ 'value', 'like', '%' . $weapp_original . '%' ] ], 'site_id'); if (!empty($site_info)) { // 先将审核中的变更为审核成功 model('weapp_audit_record')->update([ 'status' => 1, 'audit_time' => time() ], [ [ 'status', '=', 0 ], [ 'site_id', '=', $site_info[ 'site_id' ] ] ]); $platform = new OpenPlatform($site_info[ 'site_id' ]); $result = $platform->release(); if ($result[ 'code' ] >= 0) { model('weapp_audit_record')->update([ 'status' => 5, 'release_time' => time() ], [ [ 'status', '=', 1 ], [ 'site_id', '=', $site_info[ 'site_id' ] ] ]); } } } } }); $response = $this->app->server->serve(); // 将响应输出 return $response->send(); break; case 'text': $this->app->server->push(function($res) { $replay = new Replay(); $rule = $replay->getSiteWechatKeywordsReplay($res[ 'Content' ], $this->site_id); if ($rule[ 'data' ]) { if ($rule[ 'data' ][ 'type' ] == 'text') { //文字 return new Text($rule[ 'data' ][ 'reply_content' ]); } else { $material = new Material(); $media_info = $material->getMaterialInfo([ [ 'media_id', '=', $rule[ 'data' ][ 'media_id' ] ] ]); $media_info = $media_info[ 'data' ]; if ($media_info) { $material_type = $media_info[ 'type' ]; $value = json_decode($media_info[ 'value' ], true); if ($material_type == 1) { $url = __ROOT__; $url = $url . '/index.php/wechat/api/auth/wechatArticle?id=' . $media_info[ 'id' ]; $items = [ new NewsItem([ 'title' => $value[ 0 ][ 'title' ], 'description' => strip_tags($value[ 0 ][ 'content' ]), 'url' => $url, 'image' => $value[ 0 ][ 'cover' ][ 'path' ], ]), ]; return new News($items); } else if ($material_type == 2) { //图片 } } } } }); $response = $this->app->server->serve(); // 将响应输出 return $response->send(); break; case 'image': // return '收到图片消息'; break; case 'voice': // return '收到语音消息'; break; case 'video': // return '收到视频消息'; break; case 'location': //return '收到坐标消息'; break; case 'link': //return '收到链接消息'; break; case 'file': ///return '收到文件消息'; // ... 其它消息 default: //return '收到其它消息'; break; } } $response = $this->app->server->serve(); return $response->send(); } /****************************************************************************** 回复end***********************************************************/ /****************************************************************************** 模板消息start ***********************************************************/ /** * 添加模板消息 * @param unknown $shortId */ public function getTemplateId($shortId) { try { $res = $this->app()->template_message->addTemplate($shortId); if (isset($res[ 'errcode' ]) && $res[ 'errcode' ] == 0) return $res; $errormsg = [ '45026' => '模板数量超出限制' ]; return [ 'errcode' => $res[ 'errcode' ], 'errmsg' => $errormsg[ $res[ 'errcode' ] ] ?? $res[ 'errmsg' ] ]; } catch (\Exception $e) { return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ]; } } /** * 删除模板消息 * @param unknown $shortId */ public function deleteTemplate($templateId) { try { $res = $this->app()->template_message->deletePrivateTemplate($templateId); if (isset($res[ 'errcode' ]) && $res[ 'errcode' ] == 0) return $res; $errormsg = [ '45026' => '模板数量超出限制' ]; return [ 'errcode' => $res[ 'errcode' ], 'errmsg' => $errormsg[ $res[ 'errcode' ] ] ?? $res[ 'errmsg' ] ]; } catch (\Exception $e) { return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ]; } } /** * 发送模板消息 * @param array $param * @return Ambigous <\Psr\Http\Message\ResponseInterface, \EasyWeChat\Kernel\Support\Collection, multitype:, object, string> */ public function sendTemplateMessage(array $param) { $result = $this->app()->template_message->send([ 'touser' => $param[ 'openid' ], // openid 'template_id' => $param[ 'template_id' ],// 模板id 'url' => $param[ 'url' ],// 跳转链接 'miniprogram' => $param[ 'miniprogram' ], // 跳转小程序 ['appid' => 'xxxxxxx','pagepath' => 'pages/xxx',] 'data' => $param[ 'data' ] // 模板变量 ]); if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) { return $this->error($result, $result[ "errmsg" ]); } return $this->success($result); } /****************************************************************************** 模板消息end***********************************************************/ /******************************************************************************* 开放平台start *************************************************************************/ /** * 将公众号或小程序绑定到指定开放平台帐号下 */ public function bindTo($open_appid) { try { $res = $this->app()->account->bindTo($open_appid); return $res; } catch (\Exception $e) { return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ]; } } /** * 将公众号/小程序从开放平台帐号下解绑 */ public function unbindFrom($open_appid) { try { $res = $this->app()->account->unbindFrom($open_appid); return $res; } catch (\Exception $e) { return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ]; } } /** * 获取公众号/小程序所绑定的开放平台帐号 */ public function getBinding() { try { $res = $this->app()->account->getBinding(); return $res; } catch (\Exception $e) { return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ]; } } /** * 获取关注二维码 * @param $fans_id * @return array|mixed */ public function getFollowQrcode($fans_id) { $cache = Cache::get('wechat_follow_qrcode_' . $fans_id); if ($cache) return $cache; $res = $this->getTempQrcode('follow_key_' . $fans_id, 1728000); if ($res[ 'code' ] != 0) return $res; $data = $this->success([ 'qrcode' => $res[ 'data' ], 'site_id' => $this->site_id, 'fans_id' => $fans_id ]); Cache::set('wechat_follow_qrcode_' . $fans_id, $data, 1728000); return $data; } /******************************************************************************* 开放平台end *************************************************************************/ /** * 处理错误信息 * @param $errcode * @param string $message * @return array */ public function handleError($errcode, $message = '') { $error = require 'addon/wechat/config/wechat_error.php'; return $this->error([], $error[ $errcode ] ?? $message); } }