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) +
{!! $error !!}
+ @else
@@ -43,6 +47,7 @@
+ @endif
@csrf