mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-09 20:52:56 +01:00
Remove redundant dependencies
This commit is contained in:
parent
942a510d1e
commit
7d98db8592
@ -1,56 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Libraries\MultiDB;
|
||||
use App\Models\Company;
|
||||
use App\Models\CompanyGateway;
|
||||
use App\Models\User;
|
||||
use App\PaymentDrivers\WePayPaymentDriver;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class WePayController extends BaseController
|
||||
{
|
||||
use MakesHash;
|
||||
|
||||
/**
|
||||
* Initialize WePay Signup.
|
||||
*/
|
||||
public function signup(string $token)
|
||||
{
|
||||
// return render('gateways.wepay.signup.finished');
|
||||
|
||||
$hash = Cache::get($token);
|
||||
|
||||
MultiDB::findAndSetDbByCompanyKey($hash['company_key']);
|
||||
|
||||
$user = User::findOrFail($hash['user_id']);
|
||||
|
||||
$company = Company::where('company_key', $hash['company_key'])->firstOrFail();
|
||||
|
||||
$data['user_id'] = $user->id;
|
||||
$data['user_company'] = $company;
|
||||
|
||||
// $data['company_key'] = $company->company_key;
|
||||
// $data['db'] = $company->db;
|
||||
|
||||
$wepay_driver = new WePayPaymentDriver(new CompanyGateway(), null, null);
|
||||
|
||||
return $wepay_driver->setup($data);
|
||||
}
|
||||
|
||||
public function finished()
|
||||
{
|
||||
return render('gateways.wepay.signup.finished');
|
||||
}
|
||||
}
|
@ -1,215 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use App\DataMapper\FeesAndLimits;
|
||||
use App\Factory\CompanyGatewayFactory;
|
||||
use App\Libraries\MultiDB;
|
||||
use App\Models\Company;
|
||||
use App\Models\CompanyGateway;
|
||||
use App\Models\GatewayType;
|
||||
use App\Models\User;
|
||||
use App\PaymentDrivers\WePayPaymentDriver;
|
||||
use Livewire\Component;
|
||||
use WePay;
|
||||
|
||||
class WepaySignup extends Component
|
||||
{
|
||||
public $user;
|
||||
|
||||
public $user_id;
|
||||
|
||||
public $company_key;
|
||||
|
||||
public $first_name;
|
||||
|
||||
public $last_name;
|
||||
|
||||
public $email;
|
||||
|
||||
public $company_name;
|
||||
|
||||
public $country;
|
||||
|
||||
public $ach;
|
||||
|
||||
public $wepay_payment_tos_agree;
|
||||
|
||||
public $debit_cards;
|
||||
|
||||
public $terms;
|
||||
|
||||
public $privacy_policy;
|
||||
|
||||
public $saved;
|
||||
|
||||
public Company $company;
|
||||
|
||||
protected $rules = [
|
||||
'first_name' => ['required'],
|
||||
'last_name' => ['required'],
|
||||
'email' => ['required', 'email'],
|
||||
'company_name' => ['required'],
|
||||
'country' => ['required'],
|
||||
'ach' => ['sometimes'],
|
||||
'wepay_payment_tos_agree' => ['accepted'],
|
||||
'debit_cards' => ['sometimes'],
|
||||
];
|
||||
|
||||
public function mount()
|
||||
{
|
||||
MultiDB::setDb($this->company->db);
|
||||
|
||||
$user = User::find($this->user_id);
|
||||
$this->company = Company::query()->where('company_key', $this->company->company_key)->first();
|
||||
|
||||
$this->fill([
|
||||
'wepay_payment_tos_agree' => '',
|
||||
'ach' => '',
|
||||
'country' => 'US',
|
||||
'user' => $user,
|
||||
'first_name' => $user->first_name,
|
||||
'last_name' => $user->last_name,
|
||||
'email' => $user->email,
|
||||
'company_name' => $this->company->present()->name(),
|
||||
'saved' => ctrans('texts.confirm'),
|
||||
'terms' => '<a href="https://go.wepay.com/terms-of-service" target="_blank">'.ctrans('texts.terms_of_service').'</a>',
|
||||
'privacy_policy' => '<a href="https://go.wepay.com/privacy-policy" target="_blank">'.ctrans('texts.privacy_policy').'</a>',
|
||||
]);
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
return render('gateways.wepay.signup.wepay-signup');
|
||||
}
|
||||
|
||||
public function submit()
|
||||
{
|
||||
MultiDB::setDb($this->company->db);
|
||||
|
||||
$data = $this->validate($this->rules);
|
||||
|
||||
//need to create or get a new WePay CompanyGateway
|
||||
$cg = CompanyGateway::query()->where('gateway_key', '8fdeed552015b3c7b44ed6c8ebd9e992')
|
||||
->where('company_id', $this->company->id)
|
||||
->firstOrNew();
|
||||
|
||||
if (! $cg->id) {
|
||||
$fees_and_limits = new \stdClass();
|
||||
$fees_and_limits->{GatewayType::CREDIT_CARD} = new FeesAndLimits();
|
||||
$fees_and_limits->{GatewayType::BANK_TRANSFER} = new FeesAndLimits();
|
||||
|
||||
$cg = CompanyGatewayFactory::create($this->company->id, $this->user->id);
|
||||
$cg->gateway_key = '8fdeed552015b3c7b44ed6c8ebd9e992';
|
||||
$cg->require_cvv = false;
|
||||
$cg->require_billing_address = false;
|
||||
$cg->require_shipping_address = false;
|
||||
$cg->update_details = false;
|
||||
$cg->config = encrypt(config('ninja.testvars.checkout'));
|
||||
$cg->fees_and_limits = $fees_and_limits;
|
||||
$cg->token_billing = 'always';
|
||||
$cg->save();
|
||||
}
|
||||
|
||||
$this->saved = ctrans('texts.processing');
|
||||
|
||||
$wepay_driver = new WePayPaymentDriver($cg, null, null);
|
||||
|
||||
$wepay = $wepay_driver->init()->wepay;
|
||||
|
||||
$user_details = [
|
||||
'client_id' => config('ninja.wepay.client_id'),
|
||||
'client_secret' => config('ninja.wepay.client_secret'),
|
||||
'email' => $data['email'],
|
||||
'first_name' => $data['first_name'],
|
||||
'last_name' => $data['last_name'],
|
||||
'original_ip' => request()->ip(),
|
||||
'original_device' => request()->server('HTTP_USER_AGENT'),
|
||||
'tos_acceptance_time' => time(),
|
||||
'redirect_uri' => route('wepay.finished'),
|
||||
'scope' => 'manage_accounts,collect_payments,view_user,preapprove_payments,send_money',
|
||||
];
|
||||
|
||||
$wepay_user = $wepay->request('user/register/', $user_details);
|
||||
|
||||
$access_token = $wepay_user->access_token;
|
||||
|
||||
$access_token_expires = $wepay_user->expires_in ? (time() + $wepay_user->expires_in) : null;
|
||||
|
||||
$wepay = new WePay($access_token);
|
||||
|
||||
$account_details = [
|
||||
'name' => $data['company_name'],
|
||||
'description' => ctrans('texts.wepay_account_description'),
|
||||
'theme_object' => json_decode('{"name":"Invoice Ninja","primary_color":"0b4d78","secondary_color":"0b4d78","background_color":"f8f8f8","button_color":"33b753"}'),
|
||||
'callback_uri' => route('payment_webhook', ['company_key' => $this->company->company_key, 'company_gateway_id' => $cg->hashed_id]),
|
||||
'rbits' => $this->company->rBits(),
|
||||
'country' => $data['country'],
|
||||
];
|
||||
|
||||
if ($data['country'] == 'CA') {
|
||||
$account_details['currencies'] = ['CAD'];
|
||||
$account_details['country_options'] = ['debit_opt_in' => boolval($data['debit_cards'])];
|
||||
} elseif ($data['country'] == 'GB') {
|
||||
$account_details['currencies'] = ['GBP'];
|
||||
}
|
||||
|
||||
$wepay_account = $wepay->request('account/create/', $account_details);
|
||||
$confirmation_required = false;
|
||||
|
||||
try {
|
||||
$wepay->request('user/send_confirmation/', []);
|
||||
$confirmation_required = true;
|
||||
} catch (\WePayException $ex) {
|
||||
if ($ex->getMessage() == 'This access_token is already approved.') {
|
||||
$confirmation_required = false;
|
||||
} else {
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
request()->session()->flash('message', $ex->getMessage());
|
||||
}
|
||||
|
||||
nlog('failed in try catch ');
|
||||
nlog($ex->getMessage());
|
||||
}
|
||||
|
||||
$config = [
|
||||
'userId' => $wepay_user->user_id,
|
||||
'accessToken' => $access_token,
|
||||
'tokenType' => $wepay_user->token_type,
|
||||
'tokenExpires' => $access_token_expires,
|
||||
'accountId' => $wepay_account->account_id,
|
||||
'state' => $wepay_account->state,
|
||||
'testMode' => config('ninja.wepay.environment') == 'staging',
|
||||
'country' => $data['country'],
|
||||
];
|
||||
|
||||
$cg->setConfig($config);
|
||||
$cg->save();
|
||||
|
||||
if ($confirmation_required) {
|
||||
|
||||
/** @phpstan-ignore-next-line **/
|
||||
request()->session()->flash('message', trans('texts.created_wepay_confirmation_required'));
|
||||
} else {
|
||||
$update_uri = $wepay->request('/account/get_update_uri', [
|
||||
'account_id' => $wepay_account->account_id,
|
||||
'redirect_uri' => config('ninja.app_url'),
|
||||
]);
|
||||
|
||||
return redirect($update_uri->uri);
|
||||
}
|
||||
|
||||
return redirect()->to('/wepay/finished');
|
||||
}
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\Notifications\Ninja;
|
||||
|
||||
use Illuminate\Notifications\Messages\SlackMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class WePayFailureNotification extends Notification
|
||||
{
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected $company_id;
|
||||
|
||||
public function __construct($company_id)
|
||||
{
|
||||
$this->company_id = $company_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['slack'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
*
|
||||
*/
|
||||
public function toMail($notifiable)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($notifiable)
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
public function toSlack($notifiable)
|
||||
{
|
||||
$ip = '';
|
||||
|
||||
if (request()) {
|
||||
$ip = request()->getClientIp();
|
||||
}
|
||||
|
||||
return (new SlackMessage())
|
||||
->success()
|
||||
->from(ctrans('texts.notification_bot'))
|
||||
->image('https://app.invoiceninja.com/favicon.png')
|
||||
->content("New WePay ACH Failure from Company ID: {$this->company_id} IP: {$ip}");
|
||||
}
|
||||
}
|
@ -45,7 +45,7 @@
|
||||
@include('portal.ninja2020.gateways.includes.save_card')
|
||||
|
||||
<!-- This include pops up a credit card form -->
|
||||
@include('portal.ninja2020.gateways.wepay.includes.credit_card')
|
||||
@include('portal.ninja2020.gateways.stripe.includes.credit_card')
|
||||
|
||||
@include('portal.ninja2020.gateways.includes.pay_now')
|
||||
|
||||
|
@ -1,354 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\PaymentDrivers\WePay;
|
||||
|
||||
use App\Exceptions\PaymentFailed;
|
||||
use App\Jobs\Util\SystemLogger;
|
||||
use App\Models\ClientGatewayToken;
|
||||
use App\Models\GatewayType;
|
||||
use App\Models\Payment;
|
||||
use App\Models\SystemLog;
|
||||
use App\Notifications\Ninja\WePayFailureNotification;
|
||||
use App\PaymentDrivers\WePayPaymentDriver;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ACH
|
||||
{
|
||||
use MakesHash;
|
||||
use WePayCommon;
|
||||
|
||||
public $wepay_payment_driver;
|
||||
|
||||
public function __construct(WePayPaymentDriver $wepay_payment_driver)
|
||||
{
|
||||
$this->wepay_payment_driver = $wepay_payment_driver;
|
||||
}
|
||||
|
||||
public function authorizeView($data)
|
||||
{
|
||||
$data['gateway'] = $this->wepay_payment_driver;
|
||||
$data['country_code'] = $this->wepay_payment_driver?->client?->country ? $this->wepay_payment_driver->client->country->iso_3166_2 : $this->wepay_payment_driver->company_gateway->company->country()->iso_3166_2;
|
||||
|
||||
return render('gateways.wepay.authorize.bank_transfer', $data);
|
||||
}
|
||||
|
||||
public function authorizeResponse($request)
|
||||
{
|
||||
//https://developer.wepay.com/api/api-calls/credit_card#authorize
|
||||
$data = $request->all();
|
||||
// authorize the credit card
|
||||
|
||||
//nlog($data);
|
||||
/*
|
||||
'_token' => '1Fk5CRj34up5ntKPvrFyMIAJhDdUNF3boqT3iIN3',
|
||||
'company_gateway_id' => '39',
|
||||
'payment_method_id' => '1',
|
||||
'gateway_response' => NULL,
|
||||
'is_default' => NULL,
|
||||
'credit_card_id' => '180642154638',
|
||||
'q' => '/client/payment_methods',
|
||||
'method' => '1',
|
||||
*/
|
||||
|
||||
try {
|
||||
$response = $this->wepay_payment_driver->wepay->request('payment_bank/persist', [
|
||||
'client_id' => config('ninja.wepay.client_id'),
|
||||
'client_secret' => config('ninja.wepay.client_secret'),
|
||||
'payment_bank_id' => (int) $data['bank_account_id'],
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->wepay_payment_driver->sendFailureMail($e->getMessage());
|
||||
|
||||
$message = [
|
||||
'server_response' => $e->getMessage(),
|
||||
];
|
||||
|
||||
SystemLogger::dispatch(
|
||||
$e->getMessage(),
|
||||
SystemLog::CATEGORY_GATEWAY_RESPONSE,
|
||||
SystemLog::EVENT_GATEWAY_FAILURE,
|
||||
SystemLog::TYPE_WEPAY,
|
||||
$this->wepay_payment_driver->client,
|
||||
$this->wepay_payment_driver->client->company,
|
||||
);
|
||||
|
||||
if (config('ninja.notification.slack')) {
|
||||
$this->wepay_payment_driver->company_gateway->company->notification(new WePayFailureNotification($this->wepay_payment_driver->company_gateway->company))->ninja();
|
||||
}
|
||||
|
||||
throw new PaymentFailed($e->getMessage(), 400);
|
||||
}
|
||||
// display the response
|
||||
// nlog($response);
|
||||
|
||||
if (in_array($response->state, ['new', 'pending', 'authorized'])) {
|
||||
$this->storePaymentMethod($response, GatewayType::BANK_TRANSFER);
|
||||
|
||||
return redirect()->route('client.payment_methods.index');
|
||||
}
|
||||
|
||||
throw new PaymentFailed('There was a problem adding this payment method.', 400);
|
||||
/*
|
||||
{
|
||||
"payment_bank_id": 12345,
|
||||
"bank_name": "Wells Fargo",
|
||||
"account_last_four": "6789",
|
||||
"state": "authorized"
|
||||
}
|
||||
|
||||
state options: new, pending, authorized, disabled.
|
||||
*/
|
||||
}
|
||||
|
||||
/* If the bank transfer token is PENDING - we need to verify!! */
|
||||
//
|
||||
|
||||
public function verificationView(ClientGatewayToken $token)
|
||||
{
|
||||
$this->wepay_payment_driver->init();
|
||||
|
||||
$data = [
|
||||
'token' => $token,
|
||||
'gateway' => $this->wepay_payment_driver,
|
||||
];
|
||||
|
||||
return render('gateways.wepay.authorize.verify', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
{
|
||||
"client_id": 1234,
|
||||
"client_secret": "b1fc2f68-4d1f-4a",
|
||||
"payment_bank_id": 12345,
|
||||
"type": "microdeposits",
|
||||
"microdeposits": [
|
||||
8,
|
||||
12
|
||||
]
|
||||
}
|
||||
*/
|
||||
public function processVerification(Request $request, ClientGatewayToken $token)
|
||||
{
|
||||
$transactions = $request->input('transactions');
|
||||
|
||||
$transformed_transactions = [];
|
||||
|
||||
foreach ($transactions as $transaction) {
|
||||
$transformed_transactions[] = (int) $transaction;
|
||||
}
|
||||
|
||||
try {
|
||||
$response = $this->wepay_payment_driver->wepay->request('payment_bank/verify', [
|
||||
'client_id' => config('ninja.wepay.client_id'),
|
||||
'client_secret' => config('ninja.wepay.client_secret'),
|
||||
'payment_bank_id' => $token->token,
|
||||
'type' => 'microdeposits',
|
||||
'microdeposits' => $transformed_transactions,
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
nlog('we pay exception');
|
||||
nlog($e->getMessage());
|
||||
|
||||
return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER])
|
||||
->with('error', $e->getMessage());
|
||||
}
|
||||
/*
|
||||
{
|
||||
"payment_bank_id": 12345,
|
||||
"bank_name": "Wells Fargo",
|
||||
"account_last_four": "6789",
|
||||
"state": "authorized"
|
||||
}
|
||||
*/
|
||||
nlog($response);
|
||||
|
||||
//$meta = $token->meta;
|
||||
if ($response->state == 'authorized') {
|
||||
$meta = $token->meta;
|
||||
$meta->state = $response->state;
|
||||
$token->meta = $meta;
|
||||
$token->save();
|
||||
|
||||
return redirect()->route('client.payment_methods.index');
|
||||
} else {
|
||||
return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER])
|
||||
->with('error', ctrans('texts.verification_failed'));
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
public function paymentView(array $data)
|
||||
{
|
||||
$data['gateway'] = $this->wepay_payment_driver;
|
||||
$data['currency'] = $this->wepay_payment_driver->client->getCurrencyCode();
|
||||
$data['payment_method_id'] = GatewayType::BANK_TRANSFER;
|
||||
$data['amount'] = $data['total']['amount_with_fee'];
|
||||
|
||||
return render('gateways.wepay.bank_transfer', $data);
|
||||
}
|
||||
|
||||
public function paymentResponse($request)
|
||||
{
|
||||
$token = ClientGatewayToken::query()->find($this->decodePrimaryKey($request->input('source')));
|
||||
$token_meta = $token->meta;
|
||||
|
||||
if (! property_exists($token_meta, 'state') || $token_meta->state != 'authorized') {
|
||||
$response = $this->wepay_payment_driver->wepay->request('/payment_bank', [
|
||||
'client_id' => config('ninja.wepay.client_id'),
|
||||
'client_secret' => config('ninja.wepay.client_secret'),
|
||||
'payment_bank_id' => $token->token,
|
||||
]);
|
||||
|
||||
if ($response->state == 'authorized') {
|
||||
$meta = $token->meta;
|
||||
$meta->state = $response->state;
|
||||
$token->meta = $meta;
|
||||
$token->save();
|
||||
} else {
|
||||
return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]);
|
||||
}
|
||||
}
|
||||
|
||||
$app_fee = (config('ninja.wepay.fee_ach_multiplier') * $this->wepay_payment_driver->payment_hash->data->amount_with_fee) + config('ninja.wepay.fee_fixed');
|
||||
|
||||
try {
|
||||
$response = $this->wepay_payment_driver->wepay->request('checkout/create', [
|
||||
// 'callback_uri' => route('payment_webhook', ['company_key' => $this->wepay_payment_driver->company_gateway->company->company_key, 'company_gateway_id' => $this->wepay_payment_driver->company_gateway->hashed_id]),
|
||||
'unique_id' => Str::random(40),
|
||||
'account_id' => $this->wepay_payment_driver->company_gateway->getConfigField('accountId'),
|
||||
'amount' => $this->wepay_payment_driver->payment_hash->data->amount_with_fee,
|
||||
'currency' => $this->wepay_payment_driver->client->getCurrencyCode(),
|
||||
'short_description' => 'Goods and Services',
|
||||
'type' => 'goods',
|
||||
'fee' => [
|
||||
'fee_payer' => config('ninja.wepay.fee_payer'),
|
||||
'app_fee' => $app_fee,
|
||||
],
|
||||
'payment_method' => [
|
||||
'type' => 'payment_bank',
|
||||
'payment_bank' => [
|
||||
'id' => $token->token,
|
||||
],
|
||||
],
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
throw new PaymentFailed($e->getMessage(), 500);
|
||||
}
|
||||
|
||||
/* Merge all data and store in the payment hash*/
|
||||
$state = [
|
||||
'server_response' => $response,
|
||||
'payment_hash' => $request->payment_hash,
|
||||
];
|
||||
|
||||
$state = array_merge($state, $request->all());
|
||||
$this->wepay_payment_driver->payment_hash->data = array_merge((array) $this->wepay_payment_driver->payment_hash->data, $state);
|
||||
$this->wepay_payment_driver->payment_hash->save();
|
||||
|
||||
if (in_array($response->state, ['authorized', 'captured'])) {
|
||||
//success
|
||||
nlog('success');
|
||||
$payment_status = $response->state == 'authorized' ? Payment::STATUS_COMPLETED : Payment::STATUS_PENDING;
|
||||
|
||||
return $this->processSuccessfulPayment($response, $payment_status, GatewayType::BANK_TRANSFER);
|
||||
}
|
||||
|
||||
if (in_array($response->state, ['released', 'cancelled', 'failed', 'expired'])) {
|
||||
//some type of failure
|
||||
nlog('failure');
|
||||
|
||||
$payment_status = $response->state == 'cancelled' ? Payment::STATUS_CANCELLED : Payment::STATUS_FAILED;
|
||||
|
||||
$this->processUnSuccessfulPayment($response, $payment_status);
|
||||
}
|
||||
}
|
||||
|
||||
private function storePaymentMethod($response, $payment_method_id)
|
||||
{
|
||||
$payment_meta = new \stdClass();
|
||||
$payment_meta->exp_month = (string) '';
|
||||
$payment_meta->exp_year = (string) '';
|
||||
$payment_meta->brand = (string) $response->bank_name;
|
||||
$payment_meta->last4 = (string) $response->account_last_four;
|
||||
$payment_meta->type = GatewayType::BANK_TRANSFER;
|
||||
$payment_meta->state = $response->state;
|
||||
|
||||
$data = [
|
||||
'payment_meta' => $payment_meta,
|
||||
'token' => $response->payment_bank_id,
|
||||
'payment_method_id' => $payment_method_id,
|
||||
];
|
||||
|
||||
$this->wepay_payment_driver->storeGatewayToken($data);
|
||||
}
|
||||
|
||||
public function tokenBilling($token, $payment_hash)
|
||||
{
|
||||
$token_meta = $token->meta;
|
||||
|
||||
if (! property_exists($token_meta, 'state') || $token_meta->state != 'authorized') {
|
||||
return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]);
|
||||
}
|
||||
|
||||
$amount = array_sum(array_column($this->wepay_payment_driver->payment_hash->invoices(), 'amount')) + $this->wepay_payment_driver->payment_hash->fee_total;
|
||||
|
||||
$app_fee = (config('ninja.wepay.fee_cc_multiplier') * $amount) + config('ninja.wepay.fee_fixed');
|
||||
|
||||
$response = $this->wepay_payment_driver->wepay->request('checkout/create', [
|
||||
'unique_id' => Str::random(40),
|
||||
'account_id' => $this->wepay_payment_driver->company_gateway->getConfigField('accountId'),
|
||||
'amount' => $amount,
|
||||
'currency' => $this->wepay_payment_driver->client->getCurrencyCode(),
|
||||
'short_description' => 'Goods and Services',
|
||||
'type' => 'goods',
|
||||
'fee' => [
|
||||
'fee_payer' => config('ninja.wepay.fee_payer'),
|
||||
'app_fee' => $app_fee,
|
||||
],
|
||||
'payment_method' => [
|
||||
'type' => 'payment_bank',
|
||||
'payment_bank' => [
|
||||
'id' => $token->token,
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
/* Merge all data and store in the payment hash*/
|
||||
$state = [
|
||||
'server_response' => $response,
|
||||
'payment_hash' => $this->wepay_payment_driver->payment_hash,
|
||||
];
|
||||
|
||||
$this->wepay_payment_driver->payment_hash->data = array_merge((array) $this->wepay_payment_driver->payment_hash->data, $state);
|
||||
$this->wepay_payment_driver->payment_hash->save();
|
||||
|
||||
if (in_array($response->state, ['authorized', 'captured'])) {
|
||||
//success
|
||||
nlog('success');
|
||||
$payment_status = $response->state == 'authorized' ? Payment::STATUS_COMPLETED : Payment::STATUS_PENDING;
|
||||
|
||||
return $this->processSuccessfulPayment($response, $payment_status, GatewayType::BANK_TRANSFER, true);
|
||||
}
|
||||
|
||||
if (in_array($response->state, ['released', 'cancelled', 'failed', 'expired'])) {
|
||||
//some type of failure
|
||||
nlog('failure');
|
||||
|
||||
$payment_status = $response->state == 'cancelled' ? Payment::STATUS_CANCELLED : Payment::STATUS_FAILED;
|
||||
|
||||
$this->processUnSuccessfulPayment($response, $payment_status);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,346 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\PaymentDrivers\WePay;
|
||||
|
||||
use App\Exceptions\PaymentFailed;
|
||||
use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
|
||||
use App\Jobs\Util\SystemLogger;
|
||||
use App\Models\GatewayType;
|
||||
use App\Models\Payment;
|
||||
use App\Models\SystemLog;
|
||||
use App\PaymentDrivers\WePayPaymentDriver;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class CreditCard
|
||||
{
|
||||
use WePayCommon;
|
||||
|
||||
public $wepay_payment_driver;
|
||||
|
||||
public function __construct(WePayPaymentDriver $wepay_payment_driver)
|
||||
{
|
||||
$this->wepay_payment_driver = $wepay_payment_driver;
|
||||
}
|
||||
|
||||
public function authorizeView($data)
|
||||
{
|
||||
$data['gateway'] = $this->wepay_payment_driver;
|
||||
$data['country_code'] = $this->wepay_payment_driver?->client?->country ? $this->wepay_payment_driver->client->country->iso_3166_2 : $this->wepay_payment_driver->company_gateway->company->country()->iso_3166_2;
|
||||
|
||||
return render('gateways.wepay.authorize.authorize', $data);
|
||||
}
|
||||
|
||||
public function authorizeResponse($request)
|
||||
{
|
||||
//https://developer.wepay.com/api/api-calls/credit_card#authorize
|
||||
$data = $request->all();
|
||||
// authorize the credit card
|
||||
|
||||
// nlog($data);
|
||||
/*
|
||||
'_token' => '1Fk5CRj34up5ntKPvrFyMIAJhDdUNF3boqT3iIN3',
|
||||
'company_gateway_id' => '39',
|
||||
'payment_method_id' => '1',
|
||||
'gateway_response' => NULL,
|
||||
'is_default' => NULL,
|
||||
'credit_card_id' => '180642154638',
|
||||
'q' => '/client/payment_methods',
|
||||
'method' => '1',
|
||||
*/
|
||||
|
||||
try {
|
||||
$response = $this->wepay_payment_driver->wepay->request('credit_card/authorize', [
|
||||
'client_id' => config('ninja.wepay.client_id'),
|
||||
'client_secret' => config('ninja.wepay.client_secret'),
|
||||
'credit_card_id' => (int) $data['credit_card_id'],
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
return $this->wepay_payment_driver->processInternallyFailedPayment($this->wepay_payment_driver, $e);
|
||||
}
|
||||
// display the response
|
||||
// nlog($response);
|
||||
|
||||
if (in_array($response->state, ['new', 'authorized'])) {
|
||||
$this->storePaymentMethod($response, GatewayType::CREDIT_CARD);
|
||||
|
||||
return redirect()->route('client.payment_methods.index');
|
||||
}
|
||||
|
||||
throw new PaymentFailed('There was a problem adding this payment method.', 400);
|
||||
/*
|
||||
[credit_card_id] => 348084962473
|
||||
[credit_card_name] => Visa xxxxxx4018
|
||||
[state] => authorized
|
||||
[user_name] => Joey Diaz
|
||||
[email] => user@example.com
|
||||
[create_time] => 1623798172
|
||||
[expiration_month] => 10
|
||||
[expiration_year] => 2023
|
||||
[last_four] => 4018
|
||||
[input_source] => card_keyed
|
||||
[virtual_terminal_mode] => none
|
||||
[card_on_file] =>
|
||||
[recurring] =>
|
||||
[cvv_provided] => 1
|
||||
[auto_update] =>
|
||||
*/
|
||||
}
|
||||
|
||||
public function paymentView(array $data)
|
||||
{
|
||||
$data['gateway'] = $this->wepay_payment_driver;
|
||||
$data['description'] = ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number');
|
||||
$data['country_code'] = $this->wepay_payment_driver?->client?->country ? $this->wepay_payment_driver->client->country->iso_3166_2 : $this->wepay_payment_driver->company_gateway->company()->iso_3166_2;
|
||||
|
||||
return render('gateways.wepay.credit_card.pay', $data);
|
||||
}
|
||||
|
||||
public function paymentResponse(PaymentResponseRequest $request)
|
||||
{
|
||||
nlog('payment response');
|
||||
|
||||
//it could be an existing token or a new credit_card_id that needs to be converted into a wepay token
|
||||
if ($request->has('credit_card_id') && $request->input('credit_card_id')) {
|
||||
nlog('authorize the card first!');
|
||||
|
||||
try {
|
||||
$response = $this->wepay_payment_driver->wepay->request('credit_card/authorize', [
|
||||
'client_id' => config('ninja.wepay.client_id'),
|
||||
'client_secret' => config('ninja.wepay.client_secret'),
|
||||
'credit_card_id' => (int) $request->input('credit_card_id'),
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
return $this->wepay_payment_driver->processInternallyFailedPayment($this->wepay_payment_driver, $e);
|
||||
}
|
||||
|
||||
$credit_card_id = (int) $response->credit_card_id;
|
||||
|
||||
if (in_array($response->state, ['new', 'authorized']) && boolval($request->input('store_card'))) {
|
||||
$this->storePaymentMethod($response, GatewayType::CREDIT_CARD);
|
||||
}
|
||||
} else {
|
||||
$credit_card_id = (int) $request->input('token');
|
||||
}
|
||||
|
||||
// USD, CAD, and GBP.
|
||||
// nlog($request->all());
|
||||
|
||||
$app_fee = (config('ninja.wepay.fee_cc_multiplier') * $this->wepay_payment_driver->payment_hash->data->amount_with_fee) + config('ninja.wepay.fee_fixed');
|
||||
// charge the credit card
|
||||
|
||||
try {
|
||||
$response = $this->wepay_payment_driver->wepay->request('checkout/create', [
|
||||
'unique_id' => Str::random(40),
|
||||
'account_id' => $this->wepay_payment_driver->company_gateway->getConfigField('accountId'),
|
||||
'amount' => $this->wepay_payment_driver->payment_hash->data->amount_with_fee,
|
||||
'currency' => $this->wepay_payment_driver->client->getCurrencyCode(),
|
||||
'short_description' => 'Goods and services',
|
||||
'type' => 'goods',
|
||||
'fee' => [
|
||||
'fee_payer' => config('ninja.wepay.fee_payer'),
|
||||
'app_fee' => $app_fee,
|
||||
],
|
||||
'payment_method' => [
|
||||
'type' => 'credit_card',
|
||||
'credit_card' => [
|
||||
'id' => $credit_card_id,
|
||||
],
|
||||
],
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->wepay_payment_driver->sendFailureMail($e->getMessage());
|
||||
|
||||
$message = [
|
||||
'server_response' => $e->getMessage(),
|
||||
'data' => $this->wepay_payment_driver->payment_hash->data,
|
||||
];
|
||||
|
||||
SystemLogger::dispatch(
|
||||
$e->getMessage(),
|
||||
SystemLog::CATEGORY_GATEWAY_RESPONSE,
|
||||
SystemLog::EVENT_GATEWAY_FAILURE,
|
||||
SystemLog::TYPE_WEPAY,
|
||||
$this->wepay_payment_driver->client,
|
||||
$this->wepay_payment_driver->client->company,
|
||||
);
|
||||
|
||||
throw new PaymentFailed($e->getMessage(), 500);
|
||||
}
|
||||
|
||||
/* Merge all data and store in the payment hash*/
|
||||
$state = [
|
||||
'server_response' => $response,
|
||||
'payment_hash' => $request->payment_hash,
|
||||
];
|
||||
|
||||
$state = array_merge($state, $request->all());
|
||||
$this->wepay_payment_driver->payment_hash->data = array_merge((array) $this->wepay_payment_driver->payment_hash->data, $state);
|
||||
$this->wepay_payment_driver->payment_hash->save();
|
||||
|
||||
if (in_array($response->state, ['authorized', 'captured'])) {
|
||||
//success
|
||||
nlog('success');
|
||||
$payment_status = $response->state == 'authorized' ? Payment::STATUS_COMPLETED : Payment::STATUS_PENDING;
|
||||
|
||||
return $this->processSuccessfulPayment($response, $payment_status, GatewayType::CREDIT_CARD);
|
||||
}
|
||||
|
||||
if (in_array($response->state, ['released', 'cancelled', 'failed', 'expired'])) {
|
||||
//some type of failure
|
||||
nlog('failure');
|
||||
|
||||
$payment_status = $response->state == 'cancelled' ? Payment::STATUS_CANCELLED : Payment::STATUS_FAILED;
|
||||
|
||||
$this->processUnSuccessfulPayment($response, $payment_status);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
new The checkout was created by the application. This state typically indicates that checkouts created in WePay's hosted checkout flow are waiting for the payer to submit their information.
|
||||
authorized The payer entered their payment info and confirmed the payment on WePay. WePay has successfully charged the card.
|
||||
captured The payment has been reserved from the payer.
|
||||
released The payment has been credited to the payee account. Note that the released state may be active although there are active partial refunds or partial chargebacks.
|
||||
cancelled The payment has been cancelled by the payer, payee, or application.
|
||||
refunded The payment was captured and then refunded by the payer, payee, or application. The payment has been debited from the payee account.
|
||||
charged back The payment has been charged back by the payer and the payment has been debited from the payee account.
|
||||
failed The payment has failed.
|
||||
expired Checkouts expire if they remain in the new state for more than 30 minutes (e.g., they have been abandoned).
|
||||
*/
|
||||
|
||||
/*
|
||||
https://developer.wepay.com/api/api-calls/checkout
|
||||
{
|
||||
"checkout_id": 649945633,
|
||||
"account_id": 1548718026,
|
||||
"type": "donation",
|
||||
"short_description": "test checkout",
|
||||
"currency": "USD",
|
||||
"amount": 20,
|
||||
"state": "authorized",
|
||||
"soft_descriptor": "WPY*Wolverine",
|
||||
"auto_release": true,
|
||||
"create_time": 1463589958,
|
||||
"gross": 20.88,
|
||||
"reference_id": null,
|
||||
"callback_uri": null,
|
||||
"long_description": null,
|
||||
"delivery_type": null,
|
||||
"initiated_by": "merchant",
|
||||
"in_review": false,
|
||||
"fee": {
|
||||
"app_fee": 0,
|
||||
"processing_fee": 0.88,
|
||||
"fee_payer": "payer"
|
||||
},
|
||||
"chargeback": {
|
||||
"amount_charged_back": 0,
|
||||
"dispute_uri": null
|
||||
},
|
||||
"refund": {
|
||||
"amount_refunded": 0,
|
||||
"refund_reason": null
|
||||
},
|
||||
"payment_method": {
|
||||
"type": "credit_card",
|
||||
"credit_card": {
|
||||
"id": 1684847614,
|
||||
"data": {
|
||||
"emv_receipt": null,
|
||||
"signature_url": null
|
||||
},
|
||||
"auto_release": false
|
||||
}
|
||||
},
|
||||
"hosted_checkout": null,
|
||||
"payer": {
|
||||
"email": "test@example.com",
|
||||
"name": "Mr Smith",
|
||||
"home_address": null
|
||||
},
|
||||
"npo_information": null,
|
||||
"payment_error": null
|
||||
}
|
||||
*/
|
||||
|
||||
private function storePaymentMethod($response, $payment_method_id)
|
||||
{
|
||||
nlog('storing card');
|
||||
|
||||
$payment_meta = new \stdClass();
|
||||
$payment_meta->exp_month = (string) $response->expiration_month;
|
||||
$payment_meta->exp_year = (string) $response->expiration_year;
|
||||
$payment_meta->brand = (string) $response->credit_card_name;
|
||||
$payment_meta->last4 = (string) $response->last_four;
|
||||
$payment_meta->type = GatewayType::CREDIT_CARD;
|
||||
|
||||
$data = [
|
||||
'payment_meta' => $payment_meta,
|
||||
'token' => $response->credit_card_id,
|
||||
'payment_method_id' => $payment_method_id,
|
||||
];
|
||||
|
||||
$this->wepay_payment_driver->storeGatewayToken($data);
|
||||
}
|
||||
|
||||
public function tokenBilling($cgt, $payment_hash)
|
||||
{
|
||||
$amount = array_sum(array_column($this->wepay_payment_driver->payment_hash->invoices(), 'amount')) + $this->wepay_payment_driver->payment_hash->fee_total;
|
||||
|
||||
$app_fee = (config('ninja.wepay.fee_cc_multiplier') * $amount) + config('ninja.wepay.fee_fixed');
|
||||
// charge the credit card
|
||||
$response = $this->wepay_payment_driver->wepay->request('checkout/create', [
|
||||
'unique_id' => Str::random(40),
|
||||
'account_id' => $this->wepay_payment_driver->company_gateway->getConfigField('accountId'),
|
||||
'amount' => $amount,
|
||||
'currency' => $this->wepay_payment_driver->client->getCurrencyCode(),
|
||||
'short_description' => 'Goods and services',
|
||||
'type' => 'goods',
|
||||
'fee' => [
|
||||
'fee_payer' => config('ninja.wepay.fee_payer'),
|
||||
'app_fee' => $app_fee,
|
||||
],
|
||||
'payment_method' => [
|
||||
'type' => 'credit_card',
|
||||
'credit_card' => [
|
||||
'id' => $cgt->token,
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
/* Merge all data and store in the payment hash*/
|
||||
$state = [
|
||||
'server_response' => $response,
|
||||
'payment_hash' => $payment_hash,
|
||||
];
|
||||
|
||||
$this->wepay_payment_driver->payment_hash->data = array_merge((array) $this->wepay_payment_driver->payment_hash->data, $state);
|
||||
$this->wepay_payment_driver->payment_hash->save();
|
||||
|
||||
if (in_array($response->state, ['authorized', 'captured'])) {
|
||||
//success
|
||||
nlog('success');
|
||||
$payment_status = $response->state == 'authorized' ? Payment::STATUS_COMPLETED : Payment::STATUS_PENDING;
|
||||
|
||||
return $this->processSuccessfulPayment($response, $payment_status, GatewayType::CREDIT_CARD, true);
|
||||
}
|
||||
|
||||
if (in_array($response->state, ['released', 'cancelled', 'failed', 'expired'])) {
|
||||
//some type of failure
|
||||
nlog('failure');
|
||||
|
||||
$payment_status = $response->state == 'cancelled' ? Payment::STATUS_CANCELLED : Payment::STATUS_FAILED;
|
||||
|
||||
$this->processUnSuccessfulPayment($response, $payment_status);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\PaymentDrivers\WePay;
|
||||
|
||||
use App\PaymentDrivers\WePayPaymentDriver;
|
||||
|
||||
class Setup
|
||||
{
|
||||
public $wepay;
|
||||
|
||||
public function __construct(WePayPaymentDriver $wepay)
|
||||
{
|
||||
$this->wepay = $wepay;
|
||||
}
|
||||
|
||||
public function boot($data)
|
||||
{
|
||||
/*
|
||||
'user_id',
|
||||
'user_company',
|
||||
*/
|
||||
|
||||
return render('gateways.wepay.signup.index', $data);
|
||||
}
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\PaymentDrivers\WePay;
|
||||
|
||||
use App\Exceptions\PaymentFailed;
|
||||
use App\Jobs\Util\SystemLogger;
|
||||
use App\Models\GatewayType;
|
||||
use App\Models\PaymentType;
|
||||
use App\Models\SystemLog;
|
||||
|
||||
trait WePayCommon
|
||||
{
|
||||
private function processSuccessfulPayment($response, $payment_status, $gateway_type, $return_payment = false)
|
||||
{
|
||||
if ($gateway_type == GatewayType::BANK_TRANSFER) {
|
||||
$payment_type = PaymentType::ACH;
|
||||
} else {
|
||||
$payment_type = PaymentType::CREDIT_CARD_OTHER;
|
||||
}
|
||||
|
||||
$data = [
|
||||
'payment_type' => $payment_type,
|
||||
'amount' => $response->amount,
|
||||
'transaction_reference' => $response->checkout_id,
|
||||
'gateway_type_id' => $gateway_type,
|
||||
];
|
||||
|
||||
$payment = $this->wepay_payment_driver->createPayment($data, $payment_status);
|
||||
|
||||
SystemLogger::dispatch(
|
||||
['response' => $this->wepay_payment_driver->payment_hash->data->server_response, 'data' => $data],
|
||||
SystemLog::CATEGORY_GATEWAY_RESPONSE,
|
||||
SystemLog::EVENT_GATEWAY_SUCCESS,
|
||||
SystemLog::TYPE_WEPAY,
|
||||
$this->wepay_payment_driver->client,
|
||||
$this->wepay_payment_driver->client->company,
|
||||
);
|
||||
|
||||
if ($return_payment) {
|
||||
return $payment;
|
||||
}
|
||||
|
||||
return redirect()->route('client.payments.show', ['payment' => $this->wepay_payment_driver->encodePrimaryKey($payment->id)]);
|
||||
}
|
||||
|
||||
private function processUnSuccessfulPayment($response, $payment_status)
|
||||
{
|
||||
$this->wepay_payment_driver->sendFailureMail($response->state);
|
||||
|
||||
$message = [
|
||||
'server_response' => $response,
|
||||
'data' => $this->wepay_payment_driver->payment_hash->data,
|
||||
];
|
||||
|
||||
SystemLogger::dispatch(
|
||||
$message,
|
||||
SystemLog::CATEGORY_GATEWAY_RESPONSE,
|
||||
SystemLog::EVENT_GATEWAY_FAILURE,
|
||||
SystemLog::TYPE_WEPAY,
|
||||
$this->wepay_payment_driver->client,
|
||||
$this->wepay_payment_driver->client->company,
|
||||
);
|
||||
|
||||
throw new PaymentFailed('Failed to process the payment.', 500);
|
||||
}
|
||||
}
|
@ -17,13 +17,12 @@ use App\Models\GatewayType;
|
||||
use App\Models\Payment;
|
||||
use App\Models\PaymentHash;
|
||||
use App\Models\SystemLog;
|
||||
use App\PaymentDrivers\WePay\ACH;
|
||||
use App\PaymentDrivers\WePay\CreditCard;
|
||||
use App\PaymentDrivers\WePay\Setup;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Http\Request;
|
||||
use WePay;
|
||||
|
||||
/**
|
||||
* @deprecated 5.9
|
||||
*/
|
||||
class WePayPaymentDriver extends BaseDriver
|
||||
{
|
||||
use MakesHash;
|
||||
@ -45,27 +44,14 @@ class WePayPaymentDriver extends BaseDriver
|
||||
|
||||
/* Maps the Payment Gateway Type - to its implementation */
|
||||
public static $methods = [
|
||||
GatewayType::CREDIT_CARD => CreditCard::class,
|
||||
GatewayType::BANK_TRANSFER => ACH::class,
|
||||
];
|
||||
|
||||
public const SYSTEM_LOG_TYPE = SystemLog::TYPE_WEPAY;
|
||||
|
||||
public function init()
|
||||
{
|
||||
if (WePay::getEnvironment() == 'none') {
|
||||
if (config('ninja.wepay.environment') == 'staging') {
|
||||
WePay::useStaging(config('ninja.wepay.client_id'), config('ninja.wepay.client_secret'));
|
||||
} else {
|
||||
WePay::useProduction(config('ninja.wepay.client_id'), config('ninja.wepay.client_secret'));
|
||||
}
|
||||
}
|
||||
throw new \Exception("Gateway no longer supported", 500);
|
||||
|
||||
if ($this->company_gateway) {
|
||||
$this->wepay = new WePay($this->company_gateway->getConfigField('accessToken'));
|
||||
} else {
|
||||
$this->wepay = new WePay(null);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -93,7 +79,6 @@ class WePayPaymentDriver extends BaseDriver
|
||||
*/
|
||||
public function setup(array $data)
|
||||
{
|
||||
return (new Setup($this))->boot($data);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -168,140 +153,17 @@ class WePayPaymentDriver extends BaseDriver
|
||||
public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null)
|
||||
{
|
||||
$this->init();
|
||||
|
||||
$input = $request->all();
|
||||
|
||||
$config = $this->company_gateway->getConfig();
|
||||
|
||||
$accountId = $this->company_gateway->getConfigField('accountId');
|
||||
$objectId = false;
|
||||
$objectType = '';
|
||||
|
||||
foreach (array_keys($input) as $key) {
|
||||
if ('_id' == substr($key, -3)) {
|
||||
$objectType = substr($key, 0, -3);
|
||||
$objectId = $input[$key];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $objectId) {
|
||||
throw new \Exception('Could not find object id parameter');
|
||||
}
|
||||
|
||||
if ($objectType == 'credit_card') {
|
||||
$payment_method = ClientGatewayToken::where('token', $objectId)->first();
|
||||
|
||||
if (! $payment_method) {
|
||||
throw new \Exception('Unknown payment method');
|
||||
}
|
||||
|
||||
$source = $this->wepay->request('credit_card', [
|
||||
'client_id' => config('ninja.wepay.client_id'),
|
||||
'client_secret' => config('ninja.wepay.client_secret'),
|
||||
'credit_card_id' => (int) $objectId,
|
||||
]);
|
||||
|
||||
if ($source->state == 'deleted') {
|
||||
$payment_method->delete();
|
||||
} else {
|
||||
//$this->paymentService->convertPaymentMethodFromWePay($source, null, $paymentMethod)->save();
|
||||
}
|
||||
|
||||
return 'Processed successfully';
|
||||
} elseif ($objectType == 'account') {
|
||||
if ($accountId != $objectId) {
|
||||
throw new \Exception('Unknown account '.$accountId.' does not equal '.$objectId);
|
||||
}
|
||||
|
||||
$wepayAccount = $this->wepay->request('account', [
|
||||
'account_id' => (int) $objectId,
|
||||
]);
|
||||
|
||||
if ($wepayAccount->state == 'deleted') {
|
||||
$this->company_gateway->delete();
|
||||
} else {
|
||||
$config->state = $wepayAccount->state;
|
||||
$this->company_gateway->setConfig($config);
|
||||
$this->company_gateway->save();
|
||||
}
|
||||
|
||||
return ['message' => 'Processed successfully'];
|
||||
} elseif ($objectType == 'checkout') {
|
||||
/** @var \App\Models\Payment $payment */
|
||||
$payment = Payment::where('company_id', $this->company_gateway->company_id)
|
||||
->where('transaction_reference', '=', $objectId)
|
||||
->first();
|
||||
|
||||
if (! $payment) {
|
||||
throw new \Exception('Unknown payment');
|
||||
}
|
||||
|
||||
if ($payment->is_deleted) {
|
||||
throw new \Exception('Payment is deleted');
|
||||
}
|
||||
|
||||
$checkout = $this->wepay->request('checkout', [
|
||||
'checkout_id' => intval($objectId),
|
||||
]);
|
||||
|
||||
if ($checkout->state == 'captured') {
|
||||
$payment->status_id = Payment::STATUS_COMPLETED;
|
||||
$payment->save();
|
||||
} elseif ($checkout->state == 'cancelled') {
|
||||
$payment->service()->deletePayment()->save();
|
||||
} elseif ($checkout->state == 'failed') {
|
||||
$payment->status_id = Payment::STATUS_FAILED;
|
||||
$payment->save();
|
||||
}
|
||||
|
||||
return 'Processed successfully';
|
||||
} else {
|
||||
return 'Ignoring event';
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function refund(Payment $payment, $amount, $return_client_response = false)
|
||||
{
|
||||
$this->init();
|
||||
|
||||
$response = $this->wepay->request('checkout/refund', [
|
||||
'checkout_id' => $payment->transaction_reference,
|
||||
'refund_reason' => 'Refund by merchant',
|
||||
'amount' => $amount,
|
||||
]);
|
||||
|
||||
return [
|
||||
'transaction_reference' => $response->checkout_id,
|
||||
'transaction_response' => json_encode($response),
|
||||
'success' => $response->state == 'refunded' ? true : false,
|
||||
'description' => 'refund',
|
||||
'code' => 0,
|
||||
];
|
||||
}
|
||||
|
||||
public function detach(ClientGatewayToken $token)
|
||||
{
|
||||
/*Bank accounts cannot be deleted - only CC*/
|
||||
if ($token->gateway_type_id == 2) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$this->init();
|
||||
|
||||
$response = $this->wepay->request('/credit_card/delete', [
|
||||
'client_id' => config('ninja.wepay.client_id'),
|
||||
'client_secret' => config('ninja.wepay.client_secret'),
|
||||
'credit_card_id' => intval($token->token),
|
||||
]);
|
||||
|
||||
if ($response->state == 'deleted') {
|
||||
return true;
|
||||
} else {
|
||||
throw new \Exception(trans('texts.failed_remove_payment_method'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getClientRequiredFields(): array
|
||||
|
@ -86,7 +86,6 @@
|
||||
"sentry/sentry-laravel": "^3",
|
||||
"setasign/fpdf": "^1.8",
|
||||
"setasign/fpdi": "^2.3",
|
||||
"shopify/shopify-api": "^4.3",
|
||||
"socialiteproviders/apple": "dev-master",
|
||||
"socialiteproviders/microsoft": "^4.1",
|
||||
"spatie/laravel-data": "^3.5",
|
||||
@ -102,7 +101,6 @@
|
||||
"twig/twig": "^3",
|
||||
"twilio/sdk": "^6.40",
|
||||
"webpatser/laravel-countries": "dev-master#75992ad",
|
||||
"wepay/php-sdk": "^0.3",
|
||||
"wildbit/postmark-php": "^4.0",
|
||||
"hyvor/php-json-exporter": "^0.0.3",
|
||||
"invoiceninja/einvoice": "dev-main",
|
||||
|
116
composer.lock
generated
116
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "099e6ca9def262b87d6fbecb734f6c5d",
|
||||
"content-hash": "4a46c646e01374b4a5aaff1875fa9975",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adrienrn/php-mimetyper",
|
||||
@ -11693,69 +11693,6 @@
|
||||
],
|
||||
"time": "2023-12-11T16:03:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "shopify/shopify-api",
|
||||
"version": "v4.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Shopify/shopify-api-php.git",
|
||||
"reference": "80cde593a69acb9b9095235fa8f7748e9389294c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Shopify/shopify-api-php/zipball/80cde593a69acb9b9095235fa8f7748e9389294c",
|
||||
"reference": "80cde593a69acb9b9095235fa8f7748e9389294c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"doctrine/inflector": "^2.0",
|
||||
"ext-json": "*",
|
||||
"firebase/php-jwt": "^5.2 || ^6.2",
|
||||
"guzzlehttp/guzzle": "^7.0",
|
||||
"php": "^7.4 || ^8.0 || ^8.1",
|
||||
"psr/http-client": "^1.0",
|
||||
"psr/log": "^1.1 || ^2.0 || ^3.0",
|
||||
"ramsey/uuid": "^4.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"mikey179/vfsstream": "^1.6",
|
||||
"phpunit/phpunit": "^9",
|
||||
"squizlabs/php_codesniffer": "^3.6"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Shopify\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Shopify Inc.",
|
||||
"email": "dev-tools-education@shopify.com"
|
||||
}
|
||||
],
|
||||
"description": "Shopify API Library for PHP",
|
||||
"keywords": [
|
||||
"Storefront API",
|
||||
"admin api",
|
||||
"app",
|
||||
"graphql",
|
||||
"jwt",
|
||||
"node",
|
||||
"rest",
|
||||
"shopify",
|
||||
"webhook"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/Shopify/shopify-api-php/issues",
|
||||
"source": "https://github.com/Shopify/shopify-api-php/tree/v4.3.0"
|
||||
},
|
||||
"time": "2023-04-12T15:42:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "smalot/pdfparser",
|
||||
"version": "v0.19.0",
|
||||
@ -16428,57 +16365,6 @@
|
||||
},
|
||||
"time": "2023-02-08T11:09:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "wepay/php-sdk",
|
||||
"version": "0.3.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/wepay/PHP-SDK.git",
|
||||
"reference": "2a89ceb2954d117d082f869d3bfcb7864e6c2a7d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/wepay/PHP-SDK/zipball/2a89ceb2954d117d082f869d3bfcb7864e6c2a7d",
|
||||
"reference": "2a89ceb2954d117d082f869d3bfcb7864e6c2a7d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "0.2.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"wepay.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "WePay",
|
||||
"email": "api@wepay.com"
|
||||
}
|
||||
],
|
||||
"description": "WePay APIv2 SDK for PHP",
|
||||
"keywords": [
|
||||
"payment",
|
||||
"sdk",
|
||||
"wepay"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/wepay/PHP-SDK/issues",
|
||||
"source": "https://github.com/wepay/PHP-SDK/tree/master"
|
||||
},
|
||||
"time": "2017-01-21T07:03:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "wildbit/postmark-php",
|
||||
"version": "v4.0.5",
|
||||
|
@ -13,7 +13,6 @@ use App\Http\Controllers\Gateways\Mollie3dsController;
|
||||
use App\Http\Controllers\SetupController;
|
||||
use App\Http\Controllers\StripeConnectController;
|
||||
use App\Http\Controllers\UserController;
|
||||
use App\Http\Controllers\WePayController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('/', [BaseController::class, 'flutterRoute'])->middleware('guest');
|
||||
@ -31,9 +30,6 @@ Route::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEm
|
||||
Route::get('password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])->middleware(['domain_db', 'email_db'])->name('password.reset');
|
||||
Route::post('password/reset', [ResetPasswordController::class, 'reset'])->middleware('email_db')->name('password.update');
|
||||
|
||||
Route::get('wepay/signup/{token}', [WePayController::class, 'signup'])->name('wepay.signup');
|
||||
Route::get('wepay/finished', [WePayController::class, 'finished'])->name('wepay.finished');
|
||||
|
||||
Route::get('auth/{provider}', [LoginController::class, 'redirectToProvider']);
|
||||
|
||||
Route::middleware('url_db')->group(function () {
|
||||
|
Loading…
Reference in New Issue
Block a user