diff --git a/app/Http/Controllers/WePayController.php b/app/Http/Controllers/WePayController.php deleted file mode 100644 index b8669efd85..0000000000 --- a/app/Http/Controllers/WePayController.php +++ /dev/null @@ -1,56 +0,0 @@ -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'); - } -} diff --git a/app/Livewire/WepaySignup.php b/app/Livewire/WepaySignup.php deleted file mode 100644 index 7ed96676e2..0000000000 --- a/app/Livewire/WepaySignup.php +++ /dev/null @@ -1,215 +0,0 @@ - ['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' => ''.ctrans('texts.terms_of_service').'', - 'privacy_policy' => ''.ctrans('texts.privacy_policy').'', - ]); - } - - 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'); - } -} diff --git a/app/Notifications/Ninja/WePayFailureNotification.php b/app/Notifications/Ninja/WePayFailureNotification.php deleted file mode 100644 index 74199a4eb1..0000000000 --- a/app/Notifications/Ninja/WePayFailureNotification.php +++ /dev/null @@ -1,79 +0,0 @@ -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}"); - } -} diff --git a/app/PaymentDrivers/Sample/resources/pay.blade.php b/app/PaymentDrivers/Sample/resources/pay.blade.php index ea05015e1c..1734c9f328 100644 --- a/app/PaymentDrivers/Sample/resources/pay.blade.php +++ b/app/PaymentDrivers/Sample/resources/pay.blade.php @@ -45,7 +45,7 @@ @include('portal.ninja2020.gateways.includes.save_card') - @include('portal.ninja2020.gateways.wepay.includes.credit_card') + @include('portal.ninja2020.gateways.stripe.includes.credit_card') @include('portal.ninja2020.gateways.includes.pay_now') diff --git a/app/PaymentDrivers/WePay/ACH.php b/app/PaymentDrivers/WePay/ACH.php deleted file mode 100644 index d6dea4e464..0000000000 --- a/app/PaymentDrivers/WePay/ACH.php +++ /dev/null @@ -1,354 +0,0 @@ -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); - } - } -} diff --git a/app/PaymentDrivers/WePay/CreditCard.php b/app/PaymentDrivers/WePay/CreditCard.php deleted file mode 100644 index 2e15012d7c..0000000000 --- a/app/PaymentDrivers/WePay/CreditCard.php +++ /dev/null @@ -1,346 +0,0 @@ -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); - } - } -} diff --git a/app/PaymentDrivers/WePay/Setup.php b/app/PaymentDrivers/WePay/Setup.php deleted file mode 100644 index 19b04e95c2..0000000000 --- a/app/PaymentDrivers/WePay/Setup.php +++ /dev/null @@ -1,34 +0,0 @@ -wepay = $wepay; - } - - public function boot($data) - { - /* - 'user_id', - 'user_company', - */ - - return render('gateways.wepay.signup.index', $data); - } -} diff --git a/app/PaymentDrivers/WePay/WePayCommon.php b/app/PaymentDrivers/WePay/WePayCommon.php deleted file mode 100644 index ab3365f416..0000000000 --- a/app/PaymentDrivers/WePay/WePayCommon.php +++ /dev/null @@ -1,75 +0,0 @@ - $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); - } -} diff --git a/app/PaymentDrivers/WePayPaymentDriver.php b/app/PaymentDrivers/WePayPaymentDriver.php index 4b7254344e..2cd93f7905 100644 --- a/app/PaymentDrivers/WePayPaymentDriver.php +++ b/app/PaymentDrivers/WePayPaymentDriver.php @@ -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 diff --git a/composer.json b/composer.json index 90fcc62845..801f0decb2 100644 --- a/composer.json +++ b/composer.json @@ -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", diff --git a/composer.lock b/composer.lock index 690aa59029..08e04f6681 100644 --- a/composer.lock +++ b/composer.lock @@ -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", diff --git a/routes/web.php b/routes/web.php index 68878ac686..1d56f5d883 100644 --- a/routes/web.php +++ b/routes/web.php @@ -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 () {