appid = $appid; $this->token = $token; $this->encodingAesKey = $encodingAesKey; $this->appsecret = $appsecret; } /** * 获取平台令牌 component_access_token * 官方文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/component_access_token.html */ public function componentAccessToken() { $authorizer_access_token = Factory::cache('default')->get($this->component_access_token . ':' . $this->appid); if (!empty($authorizer_access_token)) { return ResultWrapper::success($authorizer_access_token); } $component_verify_ticket = Factory::cache('default')->get($this->component_verify_ticket . ':' . $this->appid); // if (empty($component_verify_ticket)) { // return ResultWrapper::fail('component_verify_ticket验证票据为空', ErrorCode::$contentNotExists); // } $postData = [ 'component_appid' => $this->appid, 'component_appsecret' => $this->appsecret, 'component_verify_ticket' => $component_verify_ticket, ]; $url = $this->baseUrl . 'api_component_token'; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); Factory::cache('default')->set($this->component_access_token . ':' . $this->appid, $authorizer_access_token['component_access_token'], 7000); return ResultWrapper::success($authorizer_access_token['component_access_token']); } /** * 公共处理返回结果函数 * https://developers.weixin.qq.com/doc/oplatform/Return_codes/Return_code_descriptions_new.html */ public function commonResponse($response, $isBinary = false) { if ($response['httpcode'] != 200) { return ResultWrapper::fail('请求外部系统接口报错', ErrorCode::$apiNotResult); } if (!is_object($response['content']) && $isBinary) { return ResultWrapper::success($response['content']); } $responseData = json_decode($response['content'], true); if (isset($responseData['errcode']) && $responseData['errcode'] != 0) { return ResultWrapper::fail($responseData['errmsg'], $responseData['errcode']); } return ResultWrapper::success($responseData); } /** * 创建小程序接口 * 官网文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Fast_Registration_Interface_document.html */ public function fastregisterweappCreate($registerData) { $result = self::componentAccessToken(); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $component_access_token = $result->getData(); $postData = [ 'name' => $registerData['name'], 'code' => $registerData['code'], 'code_type' => $registerData['code_type'], 'legal_persona_wechat' => $registerData['legal_persona_wechat'], 'legal_persona_name' => $registerData['legal_persona_name'], 'component_phone' => $registerData['component_phone'], ]; $url = $this->baseUrl . 'fastregisterweapp?action=create&component_access_token=' . $component_access_token; $response = request($url, json_encode($postData, JSON_UNESCAPED_UNICODE), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 查询创建状态 */ public function fastregisterweappSearch($registerData) { $result = self::componentAccessToken(); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $component_access_token = $result->getData(); $postData = [ 'name' => $registerData['name'], 'legal_persona_wechat' => $registerData['legal_persona_wechat'], 'legal_persona_name' => $registerData['legal_persona_name'], ]; $url = $this->baseUrl . 'fastregisterweapp?action=search&component_access_token=' . $component_access_token; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 微信认证名称检测 * 官网文档地址: https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/wxverify_checknickname.html */ public function checkwxverifynickname($authorizer_appid, $nickName) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $postData = [ 'nick_name' => $nickName, ]; $url = $this->wxverifyUrl . 'checkwxverifynickname?access_token=' . $authorizer_access_token; $response = request($url, json_encode($postData, JSON_UNESCAPED_UNICODE), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 设置名称 * 官网文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/setnickname.html */ public function setnickname($authorizer_appid, $nickName) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $postData = [ 'nick_name' => $nickName, ]; $url = $this->wxUrl . 'setnickname?access_token=' . $authorizer_access_token; $response = request($url, json_encode($postData, JSON_UNESCAPED_UNICODE), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 获取预授权码 pre_auth_code * 官网文档地址: https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/pre_auth_code.html */ public function preAuthCode() { $pre_auth_code = Factory::cache('default')->get($this->pre_auth_code . ':' . $this->appid); if (!empty($pre_auth_code)) { return ResultWrapper::success($pre_auth_code); } $result = self::componentAccessToken(); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $component_access_token = $result->getData(); $postData = [ 'component_access_token' => $component_access_token, 'component_appid' => $this->appid, ]; $url = $this->baseUrl . 'api_create_preauthcode?component_access_token=' . $component_access_token; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $pre_auth_code = $result->getData(); Factory::cache('default')->set($this->pre_auth_code . ':' . $this->appid, $pre_auth_code['pre_auth_code'], 500); return ResultWrapper::success($pre_auth_code['pre_auth_code']); } /** * 获取授权信息 authorizer_refresh_token */ public function apiQueryAuth($authorization_code) { $result = self::componentAccessToken(); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $component_access_token = $result->getData(); $postData = [ 'component_access_token' => $component_access_token, // 令牌 'component_appid' => $this->appid, // 第三方平台appid 'authorization_code' => $authorization_code, // 授权码 ]; $url = $this->baseUrl . 'api_query_auth?component_access_token=' . $component_access_token; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorization_info = $result->getData(); $authorization_info = $authorization_info['authorization_info']; Factory::cache('default')->set($this->authorizer_access_token . ':' . $authorization_info['authorizer_appid'], $authorization_info['authorizer_access_token'], 6000); Factory::cache('default')->set($this->authorizer_refresh_token . ':' . $authorization_info['authorizer_appid'], $authorization_info['authorizer_refresh_token'], 7000); Factory::cache('default')->del($this->pre_auth_code . ':' . $this->appid); return ResultWrapper::success($authorization_info); } /** * 拉取所有已授权的帐号信息 https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/api_get_authorizer_list.html * @param $authorizer_appid * @return ResultWrapper * @throws \Exception */ public function apiGetAuthorizerList() { $result = self::componentAccessToken(); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $component_access_token = $result->getData(); $postData = [ 'component_access_token' => $component_access_token, // 令牌 'component_appid' => $this->appid, // 第三方平台appid 'offset' => 0, 'count' => 500, ]; $url = $this->baseUrl . 'api_get_authorizer_list?component_access_token=' . $component_access_token; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $auth_list = $result->getData(); return ResultWrapper::success($auth_list); } /** * 获取/刷新接口调用令牌 authorizer_access_token * 官网文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/api_authorizer_token.html */ public function apiAuthorizerToken($authorizer_appid, $authorizer_refresh_token = null) { $authorizer_access_token = Factory::cache('default')->get($this->authorizer_access_token . ':' . $authorizer_appid); if (!empty($authorizer_access_token)) { return ResultWrapper::success($authorizer_access_token); } $result = self::componentAccessToken(); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $component_access_token = $result->getData(); //如果有刷新token,则使用返回的刷新token if (empty($authorizer_refresh_token)) { $authorizer_refresh_token = Factory::cache('default')->get($this->authorizer_refresh_token . ':' . $authorizer_appid); if (empty($authorizer_refresh_token)) { return ResultWrapper::fail('微信开发平台授权过期,请重新授权', ErrorCode::$notAllowAccess); } } $postData = [ 'component_access_token' => $component_access_token, // 令牌 'component_appid' => $this->appid, // 第三方平台appid 'authorizer_appid' => $authorizer_appid, 'authorizer_refresh_token' => $authorizer_refresh_token, ]; $url = $this->baseUrl . 'api_authorizer_token?component_access_token=' . $component_access_token; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); Factory::cache('default')->set($this->authorizer_access_token . ':' . $authorizer_appid, $authorizer_access_token['authorizer_access_token'], 6000); Factory::cache('default')->set($this->authorizer_refresh_token . ':' . $authorizer_appid, $authorizer_access_token['authorizer_refresh_token'], 7000); return ResultWrapper::success($authorizer_access_token['authorizer_access_token']); } /** * 设置服务器域名 * 官方文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Server_Address_Configuration.html */ public function modifyDomain($authorizer_appid, $requestDomain) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $postData = [ 'action' => 'set', 'requestdomain' => ['https://' . $requestDomain, 'https://restapi.amap.com'], 'wsrequestdomain' => ['wss://' . $requestDomain], 'uploaddomain' => [QINIU_UPLOAD], 'downloaddomain' => ['https://' . $requestDomain, QINIU_IMAGE, 'https://upload.' . DOMAIN], ]; $url = $this->wxUrl . 'modify_domain?access_token=' . $authorizer_access_token; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 设置业务域名 * 官方文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/setwebviewdomain.html */ public function setwebviewdomain($authorizer_appid, $webviewDomain) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $postData = [ 'action' => 'add', 'webviewdomain' => ['https://' . $webviewDomain],//增加业务域名 ]; $url = $this->wxUrl . 'setwebviewdomain?access_token=' . $authorizer_access_token; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * Doc: (des="获取小程序账号基本信息") * https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Mini_Program_Information_Settings.html * User: XMing * Date: 2020/11/9 * Time: 3:47 下午 * @param $authorizer_appid * @return ResultWrapper * @deprecated 仅限api快递创建的小程序使用 */ public function getAccountBasicInfo($authorizer_appid) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $url = $this->wxAccount . 'getaccountbasicinfo?access_token=' . $authorizer_access_token; $response = request($url); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * Doc: (des="获取小程序账户信息") * https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/api_get_authorizer_info.html * User: XMing * Date: 2020/11/9 * Time: 5:04 下午 */ public function apiGetAuthorizerInfo($authorizer_appid) { $result = self::componentAccessToken(); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $component_access_token = $result->getData(); $url = $this->baseUrl . 'api_get_authorizer_info?component_access_token=' . $component_access_token; $postData = [ 'component_appid' => $this->appid, 'authorizer_appid' => $authorizer_appid, ]; $response = request($url,json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 上传小程序代码 * 官方文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/code/commit.html */ public function commit($authorizer_appid, $template_id, $ext_json, $user_version, $user_desc) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $postData = [ 'template_id' => $template_id, 'ext_json' => json_encode($ext_json), 'user_version' => $user_version, 'user_desc' => $user_desc ]; $url = $this->wxUrl . 'commit?access_token=' . $authorizer_access_token; $response = request($url, json_encode($postData), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 获取已上传的代码的页面列表 */ public function getPage($authorizer_appid) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $url = $this->wxUrl . 'get_page?access_token=' . $authorizer_access_token; $response = request($url, null, 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $page_list = $result->getData(); return ResultWrapper::success($page_list['page_list']); } /** * 获取体验版二维码 */ public function getQrcode($authorizer_appid, $path) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $url = $this->wxUrl . 'get_qrcode?access_token=' . $authorizer_access_token . '&path=' . urlencode($path); $response = request($url, null, 10); $result = self::commonResponse($response, true); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 获取审核时可填写的类目信息 */ public function getCategory($authorizer_appid) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $url = $this->wxUrl . 'get_category?access_token=' . $authorizer_access_token; $response = request($url, null, 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $categoryData = $result->getData(); return ResultWrapper::success($categoryData['category_list']); } /** * 提交审核A */ public function submitAudit($authorizer_appid) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); unset($result); $result = self::getCategory($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $categoryData = $result->getData(); $item_list = [ [ 'address' => 'pages/index/index', 'tag' => '商城', 'first_class' => $categoryData[0]['first_class'], 'second_class' => $categoryData[0]['second_class'], 'first_id' => $categoryData[0]['first_id'], 'second_id' => $categoryData[0]['second_id'], 'title' => '首页', ] ]; $postData = [ 'item_list' => $item_list, ]; $url = $this->wxUrl . 'submit_audit?access_token=' . $authorizer_access_token; $response = request($url, json_encode($postData, JSON_UNESCAPED_UNICODE), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()['auditid']); } /** * 查询审核状态 */ public function getAuditstatus($authorizer_appid, $auditid) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $postData = [ 'auditid' => $auditid, ]; $url = $this->wxUrl . 'get_auditstatus?access_token=' . $authorizer_access_token; $response = request($url, json_encode($postData, JSON_UNESCAPED_UNICODE), 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 小程序审核撤回 * 官网文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/code/undocodeaudit.html */ public function undocodeaudit($authorizer_appid) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $url = $this->wxUrl . 'undocodeaudit?access_token=' . $authorizer_access_token; $response = request($url, null, 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 发布已通过审核的小程序 * 官网文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/code/release.html */ public function release($authorizer_appid) { $result = self::apiAuthorizerToken($authorizer_appid); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } $authorizer_access_token = $result->getData(); $url = $this->wxUrl . 'release?access_token=' . $authorizer_access_token; $response = request($url, '{}', 10); $result = self::commonResponse($response); if (!$result->isSuccess()) { return ResultWrapper::fail($result->getData(), $result->getErrorCode()); } return ResultWrapper::success($result->getData()); } /** * 将公众平台回复用户的消息加密打包. *