Spaces:
No application file
No application file
| namespace MauticPlugin\MauticCrmBundle\Api; | |
| use Mautic\EmailBundle\Helper\MailHelper; | |
| use Mautic\PluginBundle\Exception\ApiErrorException; | |
| use MauticPlugin\MauticCrmBundle\Integration\HubspotIntegration; | |
| /** | |
| * @property HubspotIntegration $integration | |
| */ | |
| class HubspotApi extends CrmApi | |
| { | |
| protected $requestSettings = [ | |
| 'encode_parameters' => 'json', | |
| ]; | |
| protected function request($operation, $parameters = [], $method = 'GET', $object = 'contacts') | |
| { | |
| if ('oauth2' === $this->integration->getAuthenticationType()) { | |
| $url = sprintf('%s/%s/%s/', $this->integration->getApiUrl(), $object, $operation); | |
| } else { | |
| $url = sprintf('%s/%s/%s/?hapikey=%s', $this->integration->getApiUrl(), $object, $operation, $this->integration->getHubSpotApiKey()); | |
| } | |
| $request = $this->integration->makeRequest($url, $parameters, $method, $this->requestSettings); | |
| if (isset($request['status']) && 'error' == $request['status']) { | |
| $message = $request['message']; | |
| if (isset($request['validationResults'])) { | |
| $message .= " \n ".print_r($request['validationResults'], true); | |
| } | |
| if (isset($request['validationResults'][0]['error']) && 'PROPERTY_DOESNT_EXIST' == $request['validationResults'][0]['error']) { | |
| $this->createProperty($request['validationResults'][0]['name']); | |
| $this->request($operation, $parameters, $method, $object); | |
| } else { | |
| throw new ApiErrorException($message); | |
| } | |
| } | |
| if (isset($request['error']) && 401 == $request['error']['code']) { | |
| $response = json_decode($request['error']['message'] ?? null, true); | |
| if (isset($response)) { | |
| throw new ApiErrorException($response['message'], $request['error']['code']); | |
| } else { | |
| throw new ApiErrorException('401 Unauthorized - Error with Hubspot API', $request['error']['code']); | |
| } | |
| } | |
| if (isset($request['error'])) { | |
| throw new ApiErrorException($request['error']['message']); | |
| } | |
| return $request; | |
| } | |
| /** | |
| * @return mixed | |
| */ | |
| public function getLeadFields($object = 'contacts') | |
| { | |
| if ('company' == $object) { | |
| $object = 'companies'; // hubspot company object name | |
| } | |
| return $this->request('v2/properties', [], 'GET', $object); | |
| } | |
| /** | |
| * Creates Hubspot lead. | |
| * | |
| * @return mixed | |
| */ | |
| public function createLead(array $data, $lead, $updateLink = false) | |
| { | |
| /* | |
| * As Hubspot integration requires a valid email | |
| * If the email is not valid we don't proceed with the request | |
| */ | |
| $email = $data['email']; | |
| $result = []; | |
| // Check if the is a valid email | |
| MailHelper::validateEmail($email); | |
| // Format data for request | |
| $formattedLeadData = $this->integration->formatLeadDataForCreateOrUpdate($data, $lead, $updateLink); | |
| if ($formattedLeadData) { | |
| $result = $this->request('v1/contact/createOrUpdate/email/'.$email, $formattedLeadData, 'POST'); | |
| } | |
| return $result; | |
| } | |
| /** | |
| * gets Hubspot contact. | |
| * | |
| * @return mixed | |
| */ | |
| public function getContacts($params = []) | |
| { | |
| return $this->request('v1/lists/recently_updated/contacts/recent?', $params, 'GET', 'contacts'); | |
| } | |
| /** | |
| * gets Hubspot company. | |
| * | |
| * @return mixed | |
| */ | |
| public function getCompanies($params, $id) | |
| { | |
| if ($id) { | |
| return $this->request('v2/companies/'.$id, $params, 'GET', 'companies'); | |
| } | |
| return $this->request('v2/companies/recent/modified', $params, 'GET', 'companies'); | |
| } | |
| /** | |
| * @param string $object | |
| * | |
| * @return mixed|string | |
| */ | |
| public function createProperty($propertyName, $object = 'properties') | |
| { | |
| return $this->request('v1/contacts/properties', ['name' => $propertyName, 'groupName' => 'contactinformation', 'type' => 'string'], 'POST', $object); | |
| } | |
| } | |