mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 11:07:31 -04:00 
			
		
		
		
	Merge pull request #4365 from turbo124/authorize_refactor
Authorize refactor
This commit is contained in:
		
						commit
						e57eee713a
					
				| @ -155,19 +155,19 @@ class InvoiceSum | |||||||
|     { |     { | ||||||
|         $this->total += $this->total_taxes; |         $this->total += $this->total_taxes; | ||||||
| 
 | 
 | ||||||
|         if (is_numeric($this->invoice->custom_value1) && $this->invoice->custom_value1 > 0) { |         if (is_numeric($this->invoice->custom_value1)) { | ||||||
|             $this->total += $this->invoice->custom_value1; |             $this->total += $this->invoice->custom_value1; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (is_numeric($this->invoice->custom_value2) && $this->invoice->custom_value2 > 0) { |         if (is_numeric($this->invoice->custom_value2)) { | ||||||
|             $this->total += $this->invoice->custom_value2; |             $this->total += $this->invoice->custom_value2; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (is_numeric($this->invoice->custom_value3) && $this->invoice->custom_value3 > 0) { |         if (is_numeric($this->invoice->custom_value3)) { | ||||||
|             $this->total += $this->invoice->custom_value3; |             $this->total += $this->invoice->custom_value3; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (is_numeric($this->invoice->custom_value4) && $this->invoice->custom_value4 > 0) { |         if (is_numeric($this->invoice->custom_value4)) { | ||||||
|             $this->total += $this->invoice->custom_value4; |             $this->total += $this->invoice->custom_value4; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -166,19 +166,19 @@ class InvoiceSumInclusive | |||||||
|     { |     { | ||||||
|         //$this->total += $this->total_taxes;
 |         //$this->total += $this->total_taxes;
 | ||||||
| 
 | 
 | ||||||
|         if (is_numeric($this->invoice->custom_value1) && $this->invoice->custom_value1 > 0) { |         if (is_numeric($this->invoice->custom_value1)) { | ||||||
|             $this->total += $this->invoice->custom_value1; |             $this->total += $this->invoice->custom_value1; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (is_numeric($this->invoice->custom_value2) && $this->invoice->custom_value2 > 0) { |         if (is_numeric($this->invoice->custom_value2)) { | ||||||
|             $this->total += $this->invoice->custom_value2; |             $this->total += $this->invoice->custom_value2; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (is_numeric($this->invoice->custom_value3) && $this->invoice->custom_value3 > 0) { |         if (is_numeric($this->invoice->custom_value3)) { | ||||||
|             $this->total += $this->invoice->custom_value3; |             $this->total += $this->invoice->custom_value3; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (is_numeric($this->invoice->custom_value4) && $this->invoice->custom_value4 > 0) { |         if (is_numeric($this->invoice->custom_value4)) { | ||||||
|             $this->total += $this->invoice->custom_value4; |             $this->total += $this->invoice->custom_value4; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -11,15 +11,24 @@ | |||||||
| 
 | 
 | ||||||
| namespace App\PaymentDrivers; | namespace App\PaymentDrivers; | ||||||
| 
 | 
 | ||||||
|  | use App\Models\ClientGatewayToken; | ||||||
| use App\Models\Payment; | use App\Models\Payment; | ||||||
|  | use App\Models\PaymentHash; | ||||||
|  | use Illuminate\Http\Request; | ||||||
| 
 | 
 | ||||||
| abstract class AbstractPaymentDriver | abstract class AbstractPaymentDriver | ||||||
| { | { | ||||||
|     abstract public function authorize($payment_method); |     abstract public function authorizeView(array $data); | ||||||
| 
 | 
 | ||||||
|     abstract public function purchase($amount, $return_client_response = false); |     abstract public function authorizeResponse(Request $request); | ||||||
|  | 
 | ||||||
|  |     abstract public function processPaymentView(array $data); | ||||||
|  | 
 | ||||||
|  |     abstract public function processPaymentResponse(Request $request); | ||||||
| 
 | 
 | ||||||
|     abstract public function refund(Payment $payment, $refund_amount, $return_client_response = false); |     abstract public function refund(Payment $payment, $refund_amount, $return_client_response = false); | ||||||
| 
 | 
 | ||||||
|  |     abstract public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash); | ||||||
|  | 
 | ||||||
|     abstract public function setPaymentMethod($payment_method_id); |     abstract public function setPaymentMethod($payment_method_id); | ||||||
| } | } | ||||||
|  | |||||||
| @ -95,18 +95,31 @@ class AuthorizeCreditCard | |||||||
| 
 | 
 | ||||||
|         $data = (new ChargePaymentProfile($this->authorize))->chargeCustomerProfile($cgt->gateway_customer_reference, $cgt->token, $amount); |         $data = (new ChargePaymentProfile($this->authorize))->chargeCustomerProfile($cgt->gateway_customer_reference, $cgt->token, $amount); | ||||||
| 
 | 
 | ||||||
|  |         /*Refactor and push to BaseDriver*/ | ||||||
|         if ($data['response'] != null && $data['response']->getMessages()->getResultCode() == 'Ok') { |         if ($data['response'] != null && $data['response']->getMessages()->getResultCode() == 'Ok') { | ||||||
|             $payment = $this->createPaymentRecord($data, $amount); |  | ||||||
|             $payment->meta = $cgt->meta; |  | ||||||
|             $payment->save(); |  | ||||||
| 
 | 
 | ||||||
|             $payment_hash->payment_id = $payment->id; |             // $response = $data['response'];
 | ||||||
|             $payment_hash->save(); |  | ||||||
| 
 | 
 | ||||||
|             $this->authorize->attachInvoices($payment, $payment_hash); |             // $payment_record = [];
 | ||||||
|             $payment->service()->updateInvoicePayment($payment_hash); |             // $payment_record['amount'] = $amount;
 | ||||||
|  |             // $payment_record['payment_type'] = PaymentType::CREDIT_CARD_OTHER;;
 | ||||||
|  |             // $payment_record['transaction_reference'] = $response->getTransactionResponse()->getTransId();
 | ||||||
| 
 | 
 | ||||||
|             event(new PaymentWasCreated($payment, $payment->company, Ninja::eventVars())); |             // $this->authorize->createPayment($payment_record);
 | ||||||
|  |              | ||||||
|  |             $this->storePayment($payment_hash, $data); | ||||||
|  |              | ||||||
|  |             // $payment = $this->createPaymentRecord($data, $amount);
 | ||||||
|  |             // $payment->meta = $cgt->meta;
 | ||||||
|  |             // $payment->save();
 | ||||||
|  |              | ||||||
|  |             // $payment_hash->payment_id = $payment->id;
 | ||||||
|  |             // $payment_hash->save();
 | ||||||
|  | 
 | ||||||
|  |             // $this->authorize->attachInvoices($payment, $payment_hash);
 | ||||||
|  |             // $payment->service()->updateInvoicePayment($payment_hash);
 | ||||||
|  | 
 | ||||||
|  |             // event(new PaymentWasCreated($payment, $payment->company, Ninja::eventVars()));
 | ||||||
| 
 | 
 | ||||||
|             $vars = [ |             $vars = [ | ||||||
|                 'hashed_ids' => $invoice->hashed_id, |                 'hashed_ids' => $invoice->hashed_id, | ||||||
| @ -126,6 +139,12 @@ class AuthorizeCreditCard | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     private function handleResponse($data, $request) |     private function handleResponse($data, $request) | ||||||
|     { |     { | ||||||
|         $response = $data['response']; |         $response = $data['response']; | ||||||
| @ -143,16 +162,14 @@ class AuthorizeCreditCard | |||||||
|     { |     { | ||||||
|         $amount = array_sum(array_column($payment_hash->invoices(), 'amount')) + $payment_hash->fee_total; |         $amount = array_sum(array_column($payment_hash->invoices(), 'amount')) + $payment_hash->fee_total; | ||||||
| 
 | 
 | ||||||
|         $payment = $this->createPaymentRecord($data, $amount); |         $response = $data['response']; | ||||||
| 
 | 
 | ||||||
|         $payment_hash->payment_id = $payment->id; |         $payment_record = []; | ||||||
|         $payment_hash->save(); |         $payment_record['amount'] = $amount; | ||||||
|  |         $payment_record['payment_type'] = PaymentType::CREDIT_CARD_OTHER;; | ||||||
|  |         $payment_record['transaction_reference'] = $response->getTransactionResponse()->getTransId(); | ||||||
| 
 | 
 | ||||||
|         $this->authorize->attachInvoices($payment, $payment_hash); |         $payment = $this->authorize->createPayment($payment_record); | ||||||
| 
 |  | ||||||
|         $payment->service()->updateInvoicePayment($payment_hash); |  | ||||||
| 
 |  | ||||||
|         event(new PaymentWasCreated($payment, $payment->company, Ninja::eventVars())); |  | ||||||
| 
 | 
 | ||||||
|         return $payment; |         return $payment; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -16,6 +16,8 @@ use App\Exceptions\GenericPaymentDriverFailure; | |||||||
| use App\Models\ClientGatewayToken; | use App\Models\ClientGatewayToken; | ||||||
| use App\Models\GatewayType; | use App\Models\GatewayType; | ||||||
| use App\PaymentDrivers\AuthorizePaymentDriver; | use App\PaymentDrivers\AuthorizePaymentDriver; | ||||||
|  | use App\PaymentDrivers\Authorize\AuthorizeCreateCustomer; | ||||||
|  | use App\PaymentDrivers\Authorize\AuthorizeCreditCard; | ||||||
| use net\authorize\api\contract\v1\CreateCustomerPaymentProfileRequest; | use net\authorize\api\contract\v1\CreateCustomerPaymentProfileRequest; | ||||||
| use net\authorize\api\contract\v1\CustomerAddressType; | use net\authorize\api\contract\v1\CustomerAddressType; | ||||||
| use net\authorize\api\contract\v1\CustomerPaymentProfileType; | use net\authorize\api\contract\v1\CustomerPaymentProfileType; | ||||||
| @ -35,34 +37,37 @@ class AuthorizePaymentMethod | |||||||
| 
 | 
 | ||||||
|     public $payment_method; |     public $payment_method; | ||||||
| 
 | 
 | ||||||
|  |     private $payment_method_id; | ||||||
|  | 
 | ||||||
|     public function __construct(AuthorizePaymentDriver $authorize) |     public function __construct(AuthorizePaymentDriver $authorize) | ||||||
|     { |     { | ||||||
|         $this->authorize = $authorize; |         $this->authorize = $authorize; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function authorizeView($payment_method) |     public function authorizeView() | ||||||
|     { |     { | ||||||
|         $this->payment_method = $payment_method; |         if($this->authorize->payment_method instanceof AuthorizeCreditCard){ | ||||||
| 
 | 
 | ||||||
|         switch ($payment_method) { |             $this->payment_method_id = GatewayType::CREDIT_CARD; | ||||||
|             case GatewayType::CREDIT_CARD: | 
 | ||||||
|                 return $this->authorizeCreditCard(); |             return $this->authorizeCreditCard(); | ||||||
|                 break; |  | ||||||
|             case GatewayType::BANK_TRANSFER: |  | ||||||
|                 return $this->authorizeBankTransfer(); |  | ||||||
|                 break; |  | ||||||
| 
 | 
 | ||||||
|             default: |  | ||||||
|                 // code...
 |  | ||||||
|                 break; |  | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         // case GatewayType::BANK_TRANSFER:
 | ||||||
|  |         //     return $this->authorizeBankTransfer();
 | ||||||
|  |         //     break;
 | ||||||
|  | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function authorizeResponseView($data) |     public function authorizeResponseView($request) | ||||||
|     { |     { | ||||||
|         $this->payment_method = $data['payment_method_id']; |         $data = $request->all(); | ||||||
|          |          | ||||||
|         switch ($this->payment_method) { |         $this->payment_method_id = $data['method']; | ||||||
|  | 
 | ||||||
|  |         switch ($this->payment_method_id) { | ||||||
|             case GatewayType::CREDIT_CARD: |             case GatewayType::CREDIT_CARD: | ||||||
|                 return $this->authorizeCreditCardResponse($data); |                 return $this->authorizeCreditCardResponse($data); | ||||||
|                 break; |                 break; | ||||||
| @ -111,19 +116,17 @@ class AuthorizePaymentMethod | |||||||
| 
 | 
 | ||||||
|     public function createClientGatewayToken($payment_profile, $gateway_customer_reference) |     public function createClientGatewayToken($payment_profile, $gateway_customer_reference) | ||||||
|     { |     { | ||||||
|         //  info(print_r($payment_profile,1));
 |  | ||||||
| 
 | 
 | ||||||
|         $client_gateway_token = new ClientGatewayToken(); |         $data = []; | ||||||
|         $client_gateway_token->company_id = $this->authorize->client->company_id; |         $additonal = []; | ||||||
|         $client_gateway_token->client_id = $this->authorize->client->id; |  | ||||||
|         $client_gateway_token->token = $payment_profile->getPaymentProfile()->getCustomerPaymentProfileId(); |  | ||||||
|         $client_gateway_token->company_gateway_id = $this->authorize->company_gateway->id; |  | ||||||
|         $client_gateway_token->gateway_type_id = $this->payment_method; |  | ||||||
|         $client_gateway_token->gateway_customer_reference = $gateway_customer_reference; |  | ||||||
|         $client_gateway_token->meta = $this->buildPaymentMethod($payment_profile); |  | ||||||
|         $client_gateway_token->save(); |  | ||||||
| 
 | 
 | ||||||
|         return $client_gateway_token; |         $data['token'] = $payment_profile->getPaymentProfile()->getCustomerPaymentProfileId(); | ||||||
|  |         $data['payment_method_id'] = $this->payment_method_id; | ||||||
|  |         $data['payment_meta'] = $this->buildPaymentMethod($payment_profile); | ||||||
|  | 
 | ||||||
|  |         $additional['gateway_customer_reference'] = $gateway_customer_reference; | ||||||
|  | 
 | ||||||
|  |         $this->authorize->storeGatewayToken($data, $additional); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function buildPaymentMethod($payment_profile) |     public function buildPaymentMethod($payment_profile) | ||||||
|  | |||||||
| @ -63,6 +63,38 @@ class AuthorizePaymentDriver extends BaseDriver | |||||||
|         return $types; |         return $types; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public function authorizeView($payment_method) | ||||||
|  |     { | ||||||
|  |         return (new AuthorizePaymentMethod($this))->authorizeView(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function authorizeResponse($request) | ||||||
|  |     { | ||||||
|  |         return (new AuthorizePaymentMethod($this))->authorizeResponseView($request); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function processPaymentView($data) | ||||||
|  |     { | ||||||
|  |         return $this->payment_method->processPaymentView($data); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function processPaymentResponse($request) | ||||||
|  |     { | ||||||
|  |         return $this->payment_method->processPaymentResponse($request); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function refund(Payment $payment, $refund_amount, $return_client_response = false) | ||||||
|  |     { | ||||||
|  |         return (new RefundTransaction($this))->refundTransaction($payment, $refund_amount); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) | ||||||
|  |     { | ||||||
|  |         $this->setPaymentMethod($cgt->gateway_type_id); | ||||||
|  | 
 | ||||||
|  |         return $this->payment_method->tokenBilling($cgt, $payment_hash); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public function init() |     public function init() | ||||||
|     { |     { | ||||||
|         error_reporting(E_ALL & ~E_DEPRECATED); |         error_reporting(E_ALL & ~E_DEPRECATED); | ||||||
| @ -94,59 +126,6 @@ class AuthorizePaymentDriver extends BaseDriver | |||||||
|         return $env = ANetEnvironment::PRODUCTION; |         return $env = ANetEnvironment::PRODUCTION; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function authorizeView($payment_method) |  | ||||||
|     { |  | ||||||
|         if (count($this->required_fields) > 0) { |  | ||||||
|             return redirect() |  | ||||||
|                 ->route('client.profile.edit', ['client_contact' => auth()->user()->hashed_id]) |  | ||||||
|                 ->with('missing_required_fields', $this->required_fields); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return (new AuthorizePaymentMethod($this))->authorizeView($payment_method); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function authorizeResponseView(array $data) |  | ||||||
|     { |  | ||||||
|         return (new AuthorizePaymentMethod($this))->authorizeResponseView($data); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function authorize($payment_method) |  | ||||||
|     { |  | ||||||
|         return $this->authorizeView($payment_method); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function processPaymentView($data) |  | ||||||
|     { |  | ||||||
|         if (count($this->required_fields) > 0) { |  | ||||||
|             return redirect() |  | ||||||
|                 ->route('client.profile.edit', ['client_contact' => auth()->user()->hashed_id]) |  | ||||||
|                 ->with('missing_required_fields', $this->required_fields); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return $this->payment_method->processPaymentView($data); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function processPaymentResponse($request) |  | ||||||
|     { |  | ||||||
|         if (count($this->required_fields) > 0) { |  | ||||||
|             return redirect() |  | ||||||
|                 ->route('client.profile.edit', ['client_contact' => auth()->user()->hashed_id]) |  | ||||||
|                 ->with('missing_required_fields', $this->required_fields); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return $this->payment_method->processPaymentResponse($request); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function purchase($amount, $return_client_response = false) |  | ||||||
|     { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function refund(Payment $payment, $refund_amount, $return_client_response = false) |  | ||||||
|     { |  | ||||||
|         return (new RefundTransaction($this))->refundTransaction($payment, $refund_amount); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function findClientGatewayRecord() :?ClientGatewayToken |     public function findClientGatewayRecord() :?ClientGatewayToken | ||||||
|     { |     { | ||||||
|         return ClientGatewayToken::where('client_id', $this->client->id) |         return ClientGatewayToken::where('client_id', $this->client->id) | ||||||
| @ -154,12 +133,6 @@ class AuthorizePaymentDriver extends BaseDriver | |||||||
|                                  ->first(); |                                  ->first(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) |  | ||||||
|     { |  | ||||||
|         $this->setPaymentMethod($cgt->gateway_type_id); |  | ||||||
| 
 |  | ||||||
|         return $this->payment_method->tokenBilling($cgt, $payment_hash); |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Detach payment method from Authorize.net. |      * Detach payment method from Authorize.net. | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ use App\Utils\Traits\SystemLogTrait; | |||||||
| use Checkout\Library\Exceptions\CheckoutHttpException; | use Checkout\Library\Exceptions\CheckoutHttpException; | ||||||
| use Exception; | use Exception; | ||||||
| use Illuminate\Support\Carbon; | use Illuminate\Support\Carbon; | ||||||
| use Illuminate\Support\Str; | use Illuminate\Http\Request; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Class BaseDriver. |  * Class BaseDriver. | ||||||
| @ -60,14 +60,13 @@ class BaseDriver extends AbstractPaymentDriver | |||||||
|     /* The client */ |     /* The client */ | ||||||
|     public $client; |     public $client; | ||||||
| 
 | 
 | ||||||
|     /* The initiated gateway driver class*/ |     /* The initialized gateway driver class*/ | ||||||
|     public $payment_method; |     public $payment_method; | ||||||
| 
 | 
 | ||||||
|     /** |     /* PaymentHash */ | ||||||
|      * @var PaymentHash |  | ||||||
|      */ |  | ||||||
|     public $payment_hash; |     public $payment_hash; | ||||||
| 
 | 
 | ||||||
|  |     /* Array of payment methods */ | ||||||
|     public static $methods = []; |     public static $methods = []; | ||||||
|      |      | ||||||
|     /** @var array */ |     /** @var array */ | ||||||
| @ -76,9 +75,7 @@ class BaseDriver extends AbstractPaymentDriver | |||||||
|     public function __construct(CompanyGateway $company_gateway, Client $client = null, $invitation = false) |     public function __construct(CompanyGateway $company_gateway, Client $client = null, $invitation = false) | ||||||
|     { |     { | ||||||
|         $this->company_gateway = $company_gateway; |         $this->company_gateway = $company_gateway; | ||||||
| 
 |  | ||||||
|         $this->invitation = $invitation; |         $this->invitation = $invitation; | ||||||
| 
 |  | ||||||
|         $this->client = $client; |         $this->client = $client; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -86,23 +83,35 @@ class BaseDriver extends AbstractPaymentDriver | |||||||
|      * Authorize a payment method. |      * Authorize a payment method. | ||||||
|      * |      * | ||||||
|      * Returns a reusable token for storage for future payments |      * Returns a reusable token for storage for future payments | ||||||
|      * @param const $payment_method The GatewayType::constant |      *  | ||||||
|      * @return void Return a view for collecting payment method information |      * @param array $data | ||||||
|  |      * @return mixed Return a view for collecting payment method information | ||||||
|      */ |      */ | ||||||
|     public function authorize($payment_method) |     public function authorizeView(array $data) {} | ||||||
|     { |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Executes purchase attempt for a given amount. |      * The payment authorization response | ||||||
|      *          |      *          | ||||||
|      * @param  float   $amount                  The amount to be collected |      * @param  Request $request  | ||||||
|      * @param  bool $return_client_response     Whether the method needs to return a response (otherwise we assume an unattended payment) |      * @return mixed Return a response for collecting payment method information | ||||||
|      * @return mixed |  | ||||||
|      */ |      */ | ||||||
|     public function purchase($amount, $return_client_response = false) |     public function authorizeResponse(Request $request) {} | ||||||
|     { | 
 | ||||||
|     } |     /** | ||||||
|  |      * Process a payment | ||||||
|  |      *  | ||||||
|  |      * @param  array $data  | ||||||
|  |      * @return mixed Return a view for the payment | ||||||
|  |      */ | ||||||
|  |     public function processPaymentView(array $data) {} | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Process payment response | ||||||
|  |      *  | ||||||
|  |      * @param  Request $request | ||||||
|  |      * @return mixed   Return a response for the payment | ||||||
|  |      */ | ||||||
|  |     public function processPaymentResponse(Request $request) {} | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Executes a refund attempt for a given amount with a transaction_reference. |      * Executes a refund attempt for a given amount with a transaction_reference. | ||||||
| @ -112,23 +121,30 @@ class BaseDriver extends AbstractPaymentDriver | |||||||
|      * @param  bool $return_client_response    Whether the method needs to return a response (otherwise we assume an unattended payment) |      * @param  bool $return_client_response    Whether the method needs to return a response (otherwise we assume an unattended payment) | ||||||
|      * @return mixed |      * @return mixed | ||||||
|      */ |      */ | ||||||
|     public function refund(Payment $payment, $amount, $return_client_response = false) |     public function refund(Payment $payment, $amount, $return_client_response = false) {} | ||||||
|     { | 
 | ||||||
|     } |     /** | ||||||
|  |      * Process an unattended payment. | ||||||
|  |      * | ||||||
|  |      * @param ClientGatewayToken $cgt The client gateway token object | ||||||
|  |      * @param PaymentHash $payment_hash The Payment hash containing the payment meta data | ||||||
|  |      * @return void The payment response | ||||||
|  |      */ | ||||||
|  |     public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash){} | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Set the inbound request payment method type for access. |      * Set the inbound request payment method type for access. | ||||||
|      * |      * | ||||||
|      * @param int $payment_method_id The Payment Method ID |      * @param int $payment_method_id The Payment Method ID | ||||||
|      */ |      */ | ||||||
|     public function setPaymentMethod($payment_method_id) |     public function setPaymentMethod($payment_method_id){} | ||||||
|     { | 
 | ||||||
|     } | 
 | ||||||
|  |     /************************** Helper methods *************************************/ | ||||||
| 
 | 
 | ||||||
|     public function setPaymentHash(PaymentHash $payment_hash) |     public function setPaymentHash(PaymentHash $payment_hash) | ||||||
|     { |     { | ||||||
|         $this->payment_hash = $payment_hash; |         $this->payment_hash = $payment_hash; | ||||||
| 
 |  | ||||||
|         return $this; |         return $this; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -189,17 +205,6 @@ class BaseDriver extends AbstractPaymentDriver | |||||||
|         return $payment->service()->applyNumber()->save(); |         return $payment->service()->applyNumber()->save(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |  | ||||||
|      * Process an unattended payment. |  | ||||||
|      * |  | ||||||
|      * @param ClientGatewayToken $cgt The client gateway token object |  | ||||||
|      * @param PaymentHash $payment_hash The Payment hash containing the payment meta data |  | ||||||
|      * @return void The payment response |  | ||||||
|      */ |  | ||||||
|     public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) |  | ||||||
|     { |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |     /** | ||||||
|      * When a successful payment is made, we need to append the gateway fee |      * When a successful payment is made, we need to append the gateway fee | ||||||
|      * to an invoice. |      * to an invoice. | ||||||
| @ -215,7 +220,7 @@ class BaseDriver extends AbstractPaymentDriver | |||||||
|         /*Payment invoices*/ |         /*Payment invoices*/ | ||||||
|         $payment_invoices = $payment_hash->invoices(); |         $payment_invoices = $payment_hash->invoices(); | ||||||
| 
 | 
 | ||||||
|         // /*Fee charged at gateway*/
 |         /*Fee charged at gateway*/ | ||||||
|         $fee_total = $payment_hash->fee_total; |         $fee_total = $payment_hash->fee_total; | ||||||
| 
 | 
 | ||||||
|         // Sum of invoice amounts
 |         // Sum of invoice amounts
 | ||||||
| @ -265,7 +270,6 @@ class BaseDriver extends AbstractPaymentDriver | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     /** |     /** | ||||||
|      * Store payment method as company gateway token. |      * Store payment method as company gateway token. | ||||||
|      * |      * | ||||||
|  | |||||||
							
								
								
									
										73
									
								
								app/PaymentDrivers/DriverTemplate.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								app/PaymentDrivers/DriverTemplate.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * Invoice Ninja (https://invoiceninja.com). | ||||||
|  |  * | ||||||
|  |  * @link https://github.com/invoiceninja/invoiceninja source repository | ||||||
|  |  * | ||||||
|  |  * @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com) | ||||||
|  |  * | ||||||
|  |  * @license https://opensource.org/licenses/AAL | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace App\PaymentDrivers; | ||||||
|  | 
 | ||||||
|  | use App\Utils\Traits\MakesHash; | ||||||
|  | 
 | ||||||
|  | class YourGatewayPaymentDriver extends BaseDriver | ||||||
|  | { | ||||||
|  |     use MakesHash; | ||||||
|  | 
 | ||||||
|  |     public $refundable = true; //does this gateway support refunds?
 | ||||||
|  | 
 | ||||||
|  |     public $token_billing = true; //does this gateway support token billing?
 | ||||||
|  | 
 | ||||||
|  |     public $can_authorise_credit_card = true; //does this gateway support authorizations?
 | ||||||
|  | 
 | ||||||
|  |     public $gateway; //initialized gateway
 | ||||||
|  | 
 | ||||||
|  |     public $payment_method; //initialized payment method
 | ||||||
|  | 
 | ||||||
|  |     public static $methods = [ | ||||||
|  |         GatewayType::CREDIT_CARD => CreditCard::class, //maps GatewayType => Implementation class
 | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     const SYSTEM_LOG_TYPE = SystemLog::TYPE_STRIPE; | ||||||
|  | 
 | ||||||
|  |     public function setPaymentMethod($payment_method_id) | ||||||
|  |     { | ||||||
|  |         $class = self::$methods[$payment_method_id]; | ||||||
|  |         $this->payment_method = new $class($this); | ||||||
|  |         return $this; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function authorizeView(array $data) | ||||||
|  |     { | ||||||
|  |         return $this->payment_method->authorizeView($data); //this is your custom implementation from here
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function authorizeResponse($request) | ||||||
|  |     { | ||||||
|  |         return $this->payment_method->authorizeResponse($request);  //this is your custom implementation from here
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function processPaymentView(array $data) | ||||||
|  |     { | ||||||
|  |         return $this->payment_method->paymentView($data);  //this is your custom implementation from here
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function processPaymentResponse($request)  | ||||||
|  |     { | ||||||
|  |         return $this->payment_method->paymentResponse($request); //this is your custom implementation from here
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function refund(Payment $payment, $amount, $return_client_response = false) | ||||||
|  |     { | ||||||
|  |     	return $this->payment_method->yourRefundImplementationHere(); //this is your custom implementation from here
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) | ||||||
|  |     { | ||||||
|  |         return $this->payment_method->yourTokenBillingImplmentation(); //this is your custom implementation from here
 | ||||||
|  |     } | ||||||
|  |      | ||||||
|  | } | ||||||
| @ -75,6 +75,8 @@ class Phantom | |||||||
|         $phantom_url = "https://phantomjscloud.com/api/browser/v2/{$key}/?request=%7Burl:%22{$url}%22,renderType:%22pdf%22%7D"; |         $phantom_url = "https://phantomjscloud.com/api/browser/v2/{$key}/?request=%7Burl:%22{$url}%22,renderType:%22pdf%22%7D"; | ||||||
|         $pdf = CurlUtils::get($phantom_url); |         $pdf = CurlUtils::get($phantom_url); | ||||||
| 
 | 
 | ||||||
|  |         //info($pdf);
 | ||||||
|  | 
 | ||||||
|         Storage::makeDirectory($path, 0775); |         Storage::makeDirectory($path, 0775); | ||||||
| 
 | 
 | ||||||
|         $instance = Storage::disk(config('filesystems.default'))->put($file_path, $pdf); |         $instance = Storage::disk(config('filesystems.default'))->put($file_path, $pdf); | ||||||
|  | |||||||
| @ -60,7 +60,8 @@ return [ | |||||||
| 
 | 
 | ||||||
|         'public' => [ |         'public' => [ | ||||||
|             'driver' => 'local', |             'driver' => 'local', | ||||||
|             'root' => storage_path('app/public'), |             'root' => 'storage/', | ||||||
|  |             // 'root' => storage_path('app/public'),
 | ||||||
|             'url' => env('APP_URL').'/storage', |             'url' => env('APP_URL').'/storage', | ||||||
|             'visibility' => 'public', |             'visibility' => 'public', | ||||||
|             'permissions' => [ |             'permissions' => [ | ||||||
|  | |||||||
| @ -17,7 +17,8 @@ | |||||||
| @endpush | @endpush | ||||||
| 
 | 
 | ||||||
| @section('body') | @section('body') | ||||||
| <form action="{{ route('client.payment_methods.store') }}" method="post" id="server_response"> | <form action="{{ route('client.payment_methods.store', ['method' => App\Models\GatewayType::CREDIT_CARD]) }}" method="post" id="server_response"> | ||||||
|  | 
 | ||||||
|     @csrf |     @csrf | ||||||
|     <input type="hidden" name="company_gateway_id" value="{{ $gateway->id }}"> |     <input type="hidden" name="company_gateway_id" value="{{ $gateway->id }}"> | ||||||
|     <input type="hidden" name="payment_method_id" value="1"> |     <input type="hidden" name="payment_method_id" value="1"> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user