芝麻web文件管理V1.00
编辑当前文件:/home/royashxg/www/wp-content/plugins/fluentformpro/src/Integrations/ZohoCRM/ZohoCRM.php
apiUrl = 'https://www.zohoapis.com.'. end($apiDataServer).'/crm/v2/'; } else { $this->apiUrl = 'https://www.zohoapis.'. end($apiDataServer).'/crm/v2/'; } $this->accountUrl = $accountUrl; $this->clientId = $settings['client_id']; $this->clientSecret = $settings['client_secret']; $this->settings = $settings; $this->callBackUrl = admin_url('?ff_zohocrm_auth=1'); } public function redirectToAuthServer() { $url = add_query_arg([ 'scope' => 'ZohoCRM.users.ALL,ZohoCRM.modules.ALL,ZohoCRM.settings.ALL', 'client_id' => $this->clientId, 'access_type' => 'offline', 'redirect_uri' => $this->callBackUrl, 'response_type' => 'code' ], $this->accountUrl . '/oauth/v2/auth'); wp_redirect($url); exit(); } public function generateAccessToken($code, $settings) { $response = wp_remote_post($this->accountUrl . '/oauth/v2/token', [ 'body' => [ 'client_id' => $this->clientId, 'client_secret' => $this->clientSecret, 'grant_type' => 'authorization_code', 'redirect_uri' => $this->callBackUrl, 'code' => $code ] ]); if (is_wp_error($response)) { return $response; } $body = wp_remote_retrieve_body($response); $body = \json_decode($body, true); if (isset($body['error_description'])) { return new \WP_Error('invalid_client', $body['error_description']); } $settings['access_token'] = $body['access_token']; $settings['refresh_token'] = $body['refresh_token']; $settings['expire_at'] = time() + intval($body['expires_in']); return $settings; } public function make_request($action, $data = array(), $method = 'GET') { $settings = $this->getApiSettings(); if (is_wp_error($settings)) { return $settings; } $url = $this->apiUrl . $action; $response = false; $args = [ 'headers' => [ 'Authorization' => 'Zoho-oauthtoken ' . $settings['access_token'] ] ]; if ($method == 'GET') { $url = add_query_arg($data, $url); $response = wp_remote_get($url, $args); } else if ($method == 'POST') { $args['body'] = json_encode(['data' => [$data]]); $response = wp_remote_post($url, $args); } if (!$response) { return new \WP_Error('invalid', 'Request could not be performed'); } if (is_wp_error($response)) { return new \WP_Error('wp_error', $response->get_error_message()); } $body = wp_remote_retrieve_body($response); $body = \json_decode($body, true); if (isset($body['status']) && $body['status'] == 'error') { $message = $body['message']; return new \WP_Error('request_error', $message); } return $body; } protected function getApiSettings() { $this->maybeRefreshToken(); $apiSettings = $this->settings; if (!$apiSettings['status'] || !$apiSettings['expire_at']) { return new \WP_Error('invalid', 'API key is invalid'); } return array( 'baseUrl' => $this->apiUrl, 'version' => 'OAuth2', 'clientKey' => $this->clientId, 'clientSecret' => $this->clientSecret, 'callback' => $this->callBackUrl, 'access_token' => $apiSettings['access_token'], 'refresh_token' => $apiSettings['refresh_token'], 'expire_at' => $apiSettings['expire_at'] ); } protected function maybeRefreshToken() { $settings = $this->settings; $expireAt = $settings['expire_at']; if ($expireAt && $expireAt <= (time() - 10)) { // we have to regenerate the tokens $response = wp_remote_post($this->accountUrl . '/oauth/v2/token', [ 'body' => [ 'client_id' => $this->clientId, 'client_secret' => $this->clientSecret, 'grant_type' => 'refresh_token', 'refresh_token' => $settings['refresh_token'], 'redirect_uri' => $this->callBackUrl ] ]); if (is_wp_error($response)) { $settings['status'] = false; } $body = wp_remote_retrieve_body($response); $body = \json_decode($body, true); if (isset($body['error_description'])) { $settings['status'] = false; } $settings['access_token'] = $body['access_token']; $settings['expire_at'] = time() + intval($body['expires_in']); $this->settings = $settings; update_option('_fluentform_zohocrm_settings', $settings, 'no'); } } public function getAllModules() { return $this->make_request('settings/modules', [], 'GET'); } public function getAllFields($module_name) { return $this->make_request("settings/fields?module=$module_name", [], 'GET'); } public function insertModuleData($module_name, $data) { $response = $this->make_request($module_name, $data, 'POST'); if(!empty($response['data'][0]['details']['id'])){ return $response; } $err_msg = 'Date insert failed'; if($response['data'][0]['status'] == 'error'){ $err_msg = $response['data'][0]['message']; } return new \WP_Error('error', $err_msg); } public function addTags($module_name, $recordId, $tags) { return $this->make_request("$module_name/$recordId/actions/add_tags?tag_names=$tags", null, 'POST'); } }