Merge pull request #10785 from cnohall/improve-blockonomics-health-check-messages

Improve Blockonomics Health Checkup Message
This commit is contained in:
David Bomba 2025-03-31 11:21:58 +11:00 committed by GitHub
commit aaf1daed19
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 79 additions and 6 deletions

View File

@ -49,6 +49,7 @@ class BlockonomicsPaymentDriver extends BaseDriver
public $BASE_URL = 'https://www.blockonomics.co';
public $NEW_ADDRESS_URL = 'https://www.blockonomics.co/api/new_address';
public $PRICE_URL = 'https://www.blockonomics.co/api/price';
public $STORES_URL = 'https://www.blockonomics.co/api/v2/stores';
public function init()
{
@ -146,17 +147,89 @@ class BlockonomicsPaymentDriver extends BaseDriver
return $this->payment_method->refund($payment, $amount); //this is your custom implementation from here
}
public function testNewAddressGen($crypto = 'btc', $response): string
{
$api_key = $this->company_gateway->getConfigField('apiKey');
$new_address_reset_url = $this->NEW_ADDRESS_URL . '?reset=1';
$new_address_response = Http::withToken($api_key)
->post($new_address_reset_url, []);
if ($new_address_response->response_code != 200) {
return isset($new_address_response->response_message) && $new_address_response->response_message
? $new_address_response->response_message
: 'Could not generate new address';
}
if (empty($new_address_response->address)) {
return 'No address returned from Blockonomics API';
}
return 'ok';
}
public function checkStores($stores): string
{
if (empty($stores['data'])) {
return "Please add a store to your Blockonomics' account";
}
$invoice_ninja_callback_url = $this->company_gateway->webhookUrl();
$matching_store = null;
$store_without_callback = null;
$partial_match_store = null;
foreach ($stores['data'] as $store) {
if ($store['http_callback'] === $invoice_ninja_callback_url) {
$matching_store = $store;
break;
}
if (empty($store['http_callback'])) {
$store_without_callback = $store;
continue;
}
// Check for partial match - only secret or protocol differs
// TODO: Implement logic for updating partial matches
$store_base_url = preg_replace('/https?:\/\//', '', $store['http_callback']);
if (strpos($store_base_url, $invoice_ninja_callback_url) === 0) {
$partial_match_store = $store;
}
}
if ($matching_store) {
$matching_store_wallet = $matching_store['wallets'];
if (empty($matching_store_wallet)) {
return 'Please add a wallet to your Blockonomics store';
}
return 'ok';
}
return "No callback URL from your Blockonomics stores matches your Invoice Ninja webhook";
}
public function auth(): string
{
try {
$api_key = $this->company_gateway->getConfigField('apiKey');
$url = $this->NEW_ADDRESS_URL . '?reset=1';
$response = Http::withToken($api_key)
->post($url, []);
if($response->successful()) {
return 'ok';
if(!$api_key) {
return 'No API Key';
}
return 'error';
$get_stores_response = Http::withToken($api_key)
->get($this->STORES_URL, ['wallets' => 'true']);
$get_stores_response_status = $get_stores_response->status();
if($get_stores_response_status == 401) {
return 'API Key is incorrect';
}
if (!$get_stores_response || $get_stores_response_status !== 200) {
return 'Could not connect to Blockonomics API';
}
$stores = $get_stores_response->json();
$stores_check_result = $this->checkStores($stores);
return $stores_check_result;
} catch (\Exception $e) {
return $e->getMessage();
}