From a6413da67a4579866f0fd0323ddb23a7b6b9654a Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 18 Sep 2026 17:00:53 +0000
Subject: [PATCH] =Cleaning up the Integrations setup a bit, started the Helcim integration work too
---
inc/integrations/services/Helcim.php | 109 +++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 90 insertions(+), 19 deletions(-)
diff --git a/inc/integrations/services/Helcim.php b/inc/integrations/services/Helcim.php
index f388c96..a54f0ef 100644
--- a/inc/integrations/services/Helcim.php
+++ b/inc/integrations/services/Helcim.php
@@ -28,10 +28,11 @@
*/
class Helcim extends Integrations
{
- use Admin, Instance, OAuth, Requests, UserConnection, SyncToPost;
+ use Admin, Instance, Requests, UserConnection, SyncToPost;
protected function __construct()
{
+ $this->canTest = true;
$this->service_name = 'helcim';
$this->title = 'Helcim';
$this->icon = 'currency-dollar';
@@ -42,11 +43,11 @@
'delete' => true,
];
- $this->baseUrl = 'https://api.helcim.com/v2';
+ $this->apiVersion = 'v2';
+ $this->baseUrl = sprintf('https://api.helcim.com/%s/', $this->apiVersion);
$this->defineFields();
$this->defineInstructions();
- $this->defineActions();
parent::__construct();
}
@@ -61,6 +62,9 @@
$api_token->setSubType('password');
$api_token->setRequired();
$api_token->setHint('Found in Helcim Dashboard → Settings → API Access');
+ $api_token->makeSetupField();
+ $api_token->setHideStored();
+ $this->updateField('api_token', $api_token);
$currency = $this->addField(
'currency',
@@ -73,6 +77,7 @@
'USD' => 'USD'
]);
$currency->setDefault('CAD');
+ $currency->makeAdditionalField();
$feeSaver = $this->addField(
'fee_saver',
@@ -81,6 +86,7 @@
[$this, 'testUserSetup']
);
$feeSaver->setHint('Pass processing fees to customers? (Not compatible with Google Pay)');
+ $feeSaver->makeAdditionalField();
$allowACH = $this->addField(
'allow_ach',
@@ -89,6 +95,7 @@
[$this, 'testUserSetup']
);
$allowACH->setHint('Enable bank account payments alongside credit card');
+ $allowACH->makeAdditionalField();
}
public function testUserCanConnect():bool
{
@@ -113,11 +120,21 @@
protected function defineActions():void
{
- $this->addAction(
- 'Initialize Checkout',
- [$this, 'initializeCheckout'],
- 'initialize_checkout'
- );
+ if ($this->isSetUp()) {
+ $this->addAction(
+ 'Sync to Helcim',
+ [$this, 'syncToHelcim'],
+ 'sync_to_helcim',
+ 'upload-simple'
+ );
+ $this->addAction(
+ 'Sync to Site',
+ [$this, 'syncToSite'],
+ 'sync_to_site',
+ 'download-simple'
+ );
+ }
+
}
protected function initialize(): void
@@ -125,30 +142,84 @@
// TODO: Implement initialize() method.
}
- protected function refreshAccessToken(OAuthCredentials $credentials): array
- {
- // TODO: Implement refreshAccessToken() method.
- }
protected function getRequestHeaders(): array
{
- // TODO: Implement getRequestHeaders() method.
- }
-
- protected function handleResponse(WP_Error|array $response, string $method, string $endpoint): array
- {
- // TODO: Implement handleResponse() method.
+ return empty($this->getApiToken()) ? [] : [
+ 'api-token' => $this->getApiToken(),
+ 'Accept' => 'application/json',
+ ];
}
protected function setContentTypes(): void
{
- // TODO: Implement setContentTypes() method.
+ $this->contentTypes = [
+ 'recurring' => $this->buildRecurringPaymentFields(),
+ 'product' => $this->buildPaymentFields(),
+ 'customer' => $this->buildCustomerFields(),
+ 'invoice' => $this->buildInvoiceFields(),
+ ];
}
+ protected function buildRecurringPaymentFields(): array
+ {
+ return [];
+ }
+ protected function buildPaymentFields(): array
+ {
+ return [];
+ }
+
+ protected function buildCustomerFields():array
+ {
+ return [];
+ }
+
+ protected function buildInvoiceFields():array
+ {
+ return [];
+ }
protected function formatForService(int $itemID, string $type = 'post'): array
{
+ return [];
// TODO: Implement formatForService() method.
}
+
+ public function initializeCheckout():void
+ {
+
+ }
+
+ public function syncToHelcim():void
+ {
+
+ }
+ public function syncToSite():void
+ {
+
+ }
+ /*************************************************************************
+ * REQUESTS
+ *************************************************************************/
+
+ protected function handleResponse(WP_Error|array $response, string $method, string $endpoint): array
+ {
+ if (is_wp_error($response) && $response->get_error_message() === 'rate_limit_exceeded') {
+ return $this->response(false, 'Rate limit exceeded');
+ }
+ return match ($endpoint) {
+ 'connection-test' => $this->response(true,'Connection successful', $response),
+ default => $this->response(false, 'Unhandled response for '.$endpoint),
+ };
+ }
+ protected function performConnectionTest(): bool
+ {
+ $response = $this->getRequest(
+ 'connection-test'
+ );
+ error_log('Helcim connection test: '.print_r($response, true));
+ return $response['success']??false;
+ }
/*************************************************************************
* UTILITY
*************************************************************************/
--
Gitblit v1.10.0