diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php
index 59dbedb855..bb918a8de3 100644
--- a/app/Models/Gateway.php
+++ b/app/Models/Gateway.php
@@ -108,7 +108,7 @@ class Gateway extends StaticModel
} elseif ($this->id == 63) {
$link = 'https://rotessa.com';
} elseif ($this->id == 64) {
- $link = 'https://blockonomics.co';
+ $link = 'https://help.blockonomics.co/a/solutions/articles/33000291849';
}
return $link;
diff --git a/app/PaymentDrivers/Blockonomics/Blockonomics.php b/app/PaymentDrivers/Blockonomics/Blockonomics.php
index bc758d0941..35f430da92 100644
--- a/app/PaymentDrivers/Blockonomics/Blockonomics.php
+++ b/app/PaymentDrivers/Blockonomics/Blockonomics.php
@@ -47,24 +47,36 @@ class Blockonomics implements LivewireMethodInterface
}
- public function getBTCAddress(): string
+ public function getBTCAddress(): array
{
$api_key = $this->blockonomics->company_gateway->getConfigField('apiKey');
+ if (!$api_key) {
+ return ['success' => false, 'message' => 'Please enter a valid API key'];
+ }
+
// $params = config('ninja.environment') == 'development' ? '?reset=1' : '';
$url = 'https://www.blockonomics.co/api/new_address';
- $r = Http::withToken($api_key)
- ->post($url, []);
+ $response = Http::withToken($api_key)
+ ->post($url, []);
- nlog($r->body());
+ nlog($response->body());
- if ($r->successful()) {
- return $r->object()->address ?? 'Something went wrong';
+ if ($response->status() == 401) {
+ return ['success' => false, 'message' => 'API Key is incorrect'];
+ };
+
+ if ($response->successful()) {
+ if (isset($response->object()->address)) {
+ return ['success' => true, 'address' => $response->object()->address];
+ } else {
+ return ['success' => false, 'message' => 'Address not returned'];
+ }
+ } else {
+ return ['success' => false, 'message' => "Could not generate new address (This may be a temporary error. Please try again). \n\n
If this continues, please ask website administrator to check blockonomics registered email address for error messages"];
}
-
- return $r->object()->message ?? 'Something went wrong';
-
+ return ['success' => false, 'message' => 'Something went wrong'];
}
public function getBTCPrice()
@@ -81,6 +93,10 @@ class Blockonomics implements LivewireMethodInterface
$btc_price = $this->getBTCPrice();
$btc_address = $this->getBTCAddress();
+ $data['error'] = null;
+ if (!$btc_address['success']) {
+ $data['error'] = $btc_address['message'];
+ }
$fiat_amount = $data['total']['amount_with_fee'];
$btc_amount = $fiat_amount / $btc_price;
$_invoice = collect($this->blockonomics->payment_hash->data->invoices)->first();
@@ -89,7 +105,7 @@ class Blockonomics implements LivewireMethodInterface
$data['amount'] = $fiat_amount;
$data['currency'] = $this->blockonomics->client->getCurrencyCode();
$data['btc_amount'] = number_format($btc_amount, 10, '.', '');
- $data['btc_address'] = $btc_address;
+ $data['btc_address'] = $btc_address['address'] ?? '';
$data['btc_price'] = $btc_price;
$data['invoice_number'] = $_invoice->invoice_number;
diff --git a/app/PaymentDrivers/BlockonomicsPaymentDriver.php b/app/PaymentDrivers/BlockonomicsPaymentDriver.php
index cad8b74711..dfa717f3f9 100644
--- a/app/PaymentDrivers/BlockonomicsPaymentDriver.php
+++ b/app/PaymentDrivers/BlockonomicsPaymentDriver.php
@@ -143,4 +143,22 @@ class BlockonomicsPaymentDriver extends BaseDriver
$this->setPaymentMethod(GatewayType::CRYPTO);
return $this->payment_method->refund($payment, $amount); //this is your custom implementation from here
}
+
+ public function auth(): bool
+ {
+ try {
+ // TODO: Add check /api/new_address?reset=1 to see if the API key is valid
+ $this->company_gateway->getConfigField('apiKey');
+ $url = $this->NEW_ADDRESS_URL . '?reset=1';
+ $response = Http::withToken($api_key)
+ ->post($url, []);
+ if($response->successful()) {
+ return true;
+ }
+ return false;
+ } catch (\Exception $e) {
+ return false;
+ }
+ return false;
+ }
}
diff --git a/database/seeders/PaymentLibrariesSeeder.php b/database/seeders/PaymentLibrariesSeeder.php
index edd1d050ef..ff5d7b6a2b 100644
--- a/database/seeders/PaymentLibrariesSeeder.php
+++ b/database/seeders/PaymentLibrariesSeeder.php
@@ -17,6 +17,7 @@ use App\Models\GatewayType;
use App\Utils\Ninja;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;
+use Illuminate\Support\Str;
class PaymentLibrariesSeeder extends Seeder
{
@@ -24,6 +25,9 @@ class PaymentLibrariesSeeder extends Seeder
{
Model::unguard();
+ // Generate a random callback secret for Blockonomics users
+ $callbackSecret = Str::random(32);
+
$gateways = [
['id' => 1, 'name' => 'Authorize.Net', 'provider' => 'Authorize', 'sort_order' => 5, 'key' => '3b6621f970ab18887c4f6dca78d3f8bb', 'fields' => '{"apiLoginId":"","transactionKey":"","testMode":false,"developerMode":false,"liveEndpoint":"https:\/\/api2.authorize.net\/xml\/v1\/request.api","developerEndpoint":"https:\/\/apitest.authorize.net\/xml\/v1\/request.api"}
'],
@@ -90,7 +94,7 @@ class PaymentLibrariesSeeder extends Seeder
['id' => 62, 'name' => 'BTCPay', 'provider' => 'BTCPay', 'key' => 'vpyfbmdrkqcicpkjqdusgjfluebftuva', 'fields' => '{"btcpayUrl":"", "apiKey":"", "storeId":"", "webhookSecret":""}'],
['id' => 63, 'name' => 'Rotessa', 'is_offsite' => false, 'sort_order' => 22, 'provider' => 'Rotessa', 'key' => '91be24c7b792230bced33e930ac61676', 'fields' => '{"apiKey":"", "testMode":false}'],
['id' => 64, 'name' => 'CBA PowerBoard', 'is_offsite' => false, 'sort_order' => 26, 'provider' => 'CBAPowerBoard', 'key' => 'b67581d804dbad1743b61c57285142ad', 'fields' => '{"publicKey":"", "secretKey":"", "testMode":false, "gatewayId":"", "amex":false, "ausbc":false, "discover":false, "japcb":false, "laser":false, "mastercard":true, "solo":false, "visa":true, "visa_white":false}'],
- ['id' => 65, 'name' => 'Blockonomics', 'is_offsite' => false, 'sort_order' => 27, 'provider' => 'Blockonomics', 'key' => 'wbhf02us6owgo7p4nfjd0ymssdshks4d', 'fields' => '{"apiKey":"", "callbackSecret":""}'],
+ ['id' => 65, 'name' => 'Blockonomics', 'is_offsite' => false, 'sort_order' => 27, 'provider' => 'Blockonomics', 'key' => 'wbhf02us6owgo7p4nfjd0ymssdshks4d', 'fields' => '{"apiKey":"", "callbackSecret":"' . $callbackSecret . '"}'],
];
foreach ($gateways as $gateway) {
diff --git a/resources/views/portal/ninja2020/gateways/blockonomics/pay_livewire.blade.php b/resources/views/portal/ninja2020/gateways/blockonomics/pay_livewire.blade.php
index cd1d59f5da..0e03cec1e5 100644
--- a/resources/views/portal/ninja2020/gateways/blockonomics/pay_livewire.blade.php
+++ b/resources/views/portal/ninja2020/gateways/blockonomics/pay_livewire.blade.php
@@ -4,7 +4,11 @@
+
+ @if ($error)
+