diff --git a/app/Models/Presenters/InvoicePresenter.php b/app/Models/Presenters/InvoicePresenter.php index 36a462148267..8951549aadda 100644 --- a/app/Models/Presenters/InvoicePresenter.php +++ b/app/Models/Presenters/InvoicePresenter.php @@ -41,4 +41,35 @@ class InvoicePresenter extends EntityPresenter return ''; } } + + public function rBits() + { + $properties = new \stdClass(); + $properties->terms_text = $this->terms; + $properties->note = $this->public_notes; + $properties->itemized_receipt = []; + + foreach ($this->line_items as $item) { + $properties->itemized_receipt[] = $this->itemRbits($item); + } + + $data = new stdClass(); + $data->receive_time = time(); + $data->type = 'transaction_details'; + $data->source = 'user'; + $data->properties = $properties; + + return [$data]; + } + + public function itemRbits($item) + { + $data = new stdClass(); + $data->description = $item->notes; + $data->item_price = floatval($item->cost); + $data->quantity = floatval($item->quantity); + $data->amount = round($data->item_price * $data->quantity, 2); + + return $data; + } } diff --git a/app/PaymentDrivers/WePay/ACH.php b/app/PaymentDrivers/WePay/ACH.php index 6ff5e32c5de6..521f853b08ad 100644 --- a/app/PaymentDrivers/WePay/ACH.php +++ b/app/PaymentDrivers/WePay/ACH.php @@ -12,20 +12,245 @@ namespace App\PaymentDrivers\WePay; +use App\Exceptions\PaymentFailed; +use Illuminate\Http\Request; +use App\Models\ClientGatewayToken; +use App\Models\GatewayType; use App\PaymentDrivers\WePayPaymentDriver; class ACH { - public $wepay; + public $wepay_payment_driver; - public function __construct(WePayPaymentDriver $wepay) + public function __construct(WePayPaymentDriver $wepay_payment_driver) { - $this->wepay = $wepay; + $this->wepay_payment_driver = $wepay_payment_driver; } public function authorizeView($data) { + $data['gateway'] = $this->wepay_payment_driver; + 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', + */ + + $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'], + ]); + + // 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) + { + + $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' => $request->input('transactions'), + ]); + + /* + { + "payment_bank_id": 12345, + "bank_name": "Wells Fargo", + "account_last_four": "6789", + "state": "authorized" + } + */ + + //$meta = $token->meta; + if($response->state == "authorized") + { + + $token->routing_number = $response->state; + $token->save(); + + redirect()->route('client.payment_methods.index'); + + } + else{ + redirect()->route('client.payment_methods.verification', ['id' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]) + ->withErrors(['errors', ctrans('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) + { + nlog($request->all()); + + redirect()->route('client.payment_methods.verification', ['id' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]); + + // $this->stripe->init(); + + // $source = ClientGatewayToken::query() + // ->where('id', $this->decodePrimaryKey($request->source)) + // ->where('company_id', auth('contact')->user()->client->company->id) + // ->first(); + + // if (!$source) { + // throw new PaymentFailed(ctrans('texts.payment_token_not_found'), 401); + // } + + // $state = [ + // 'payment_method' => $request->payment_method_id, + // 'gateway_type_id' => $request->company_gateway_id, + // 'amount' => $this->stripe->convertToStripeAmount($request->amount, $this->stripe->client->currency()->precision), + // 'currency' => $request->currency, + // 'customer' => $request->customer, + // ]; + + // $state = array_merge($state, $request->all()); + // $state['source'] = $source->token; + + // $this->stripe->payment_hash->data = array_merge((array)$this->stripe->payment_hash->data, $state); + // $this->stripe->payment_hash->save(); + + // try { + // $state['charge'] = \Stripe\Charge::create([ + // 'amount' => $state['amount'], + // 'currency' => $state['currency'], + // 'customer' => $state['customer'], + // 'source' => $state['source'], + // ], $this->stripe->stripe_connect_auth); + + // $state = array_merge($state, $request->all()); + + // $this->stripe->payment_hash->data = array_merge((array)$this->stripe->payment_hash->data, $state); + // $this->stripe->payment_hash->save(); + + // if ($state['charge']->status === 'pending' && is_null($state['charge']->failure_message)) { + // return $this->processPendingPayment($state); + // } + + // return $this->processUnsuccessfulPayment($state); + // } catch (Exception $e) { + // if ($e instanceof CardException) { + // return redirect()->route('client.payment_methods.verification', ['id' => ClientGatewayToken::first()->hashed_id, 'method' => GatewayType::BANK_TRANSFER]); + // } + + // throw new PaymentFailed($e->getMessage(), $e->getCode()); + // } + } + + + + + + + + + + + + + + + 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; + + $data = [ + 'payment_meta' => $payment_meta, + 'token' => $response->payment_bank_id, + 'payment_method_id' => $payment_method_id, + 'routing_number' => $response->state, + ]; + + $this->wepay_payment_driver->storeGatewayToken($data); + + } } diff --git a/app/PaymentDrivers/WePay/CreditCard.php b/app/PaymentDrivers/WePay/CreditCard.php index 2c1d76878db1..e75038976648 100644 --- a/app/PaymentDrivers/WePay/CreditCard.php +++ b/app/PaymentDrivers/WePay/CreditCard.php @@ -57,7 +57,7 @@ class CreditCard )); // display the response - //nlog($response); + // nlog($response); if(in_array($response->state, ['new', 'authorized'])){ diff --git a/resources/views/portal/ninja2020/gateways/wepay/authorize/bank_transfer.blade.php b/resources/views/portal/ninja2020/gateways/wepay/authorize/bank_transfer.blade.php new file mode 100644 index 000000000000..d1f837fec634 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/wepay/authorize/bank_transfer.blade.php @@ -0,0 +1,71 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.credit_card'), 'card_title' => ctrans('texts.bank_transfer')]) + +@section('gateway_head') + +@endsection + +@section('gateway_content') +
+ + + +@endsection + +@section('gateway_footer') + + + + + +@endsection \ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/wepay/authorize/verify.blade.php b/resources/views/portal/ninja2020/gateways/wepay/authorize/verify.blade.php new file mode 100644 index 000000000000..aa8328add490 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/wepay/authorize/verify.blade.php @@ -0,0 +1,24 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'ACH (Verification)', 'card_title' => 'ACH (Verification)']) + +@section('gateway_content') + @if(session()->has('error')) +