mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Paypal CC
This commit is contained in:
parent
0033fee578
commit
55059d1227
@ -41,7 +41,7 @@ class PayPalPPCPPaymentDriver extends BaseDriver
|
|||||||
|
|
||||||
private string $paypal_payment_method = '';
|
private string $paypal_payment_method = '';
|
||||||
|
|
||||||
protected ?string $access_token = null;
|
protected mixed $access_token = null;
|
||||||
|
|
||||||
protected ?Carbon $token_expiry = null;
|
protected ?Carbon $token_expiry = null;
|
||||||
|
|
||||||
@ -61,6 +61,12 @@ class PayPalPPCPPaymentDriver extends BaseDriver
|
|||||||
// 7 => 'sofort'
|
// 7 => 'sofort'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an array of
|
||||||
|
* enabled gateway payment methods
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
public function gatewayTypes(): array
|
public function gatewayTypes(): array
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -141,16 +147,27 @@ class PayPalPPCPPaymentDriver extends BaseDriver
|
|||||||
$this->init();
|
$this->init();
|
||||||
|
|
||||||
$data['gateway'] = $this;
|
$data['gateway'] = $this;
|
||||||
|
|
||||||
$this->payment_hash->data = array_merge((array) $this->payment_hash->data, ['amount' => $data['total']['amount_with_fee']]);
|
$this->payment_hash->data = array_merge((array) $this->payment_hash->data, ['amount' => $data['total']['amount_with_fee']]);
|
||||||
$this->payment_hash->save();
|
$this->payment_hash->save();
|
||||||
|
|
||||||
$data['client_id'] = $this->company_gateway->getConfigField('clientId');
|
$data['client_id'] = $this->company_gateway->getConfigField('clientId');
|
||||||
$data['token'] = $this->access_token;
|
$data['token'] = $this->getClientToken();
|
||||||
$data['order_id'] = $this->createOrder($data);
|
$data['order_id'] = $this->createOrder($data);
|
||||||
$data['funding_options'] = $this->paypal_payment_method;
|
$data['funding_options'] = $this->paypal_payment_method;
|
||||||
|
|
||||||
return render('gateways.paypal.pay', $data);
|
return render('gateways.paypal.credit_card.pay', $data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getClientToken(): string
|
||||||
|
{
|
||||||
|
|
||||||
|
$r = $this->gatewayRequest('/v1/identity/generate-token', 'post', ['body' => '']);
|
||||||
|
|
||||||
|
if($r->successful())
|
||||||
|
return $r->json()['client_token'];
|
||||||
|
|
||||||
|
throw new PaymentFailed('Unable to gain client token from Paypal. Check your configuration', 401);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,6 +303,8 @@ class PayPalPPCPPaymentDriver extends BaseDriver
|
|||||||
|
|
||||||
$r = $this->gatewayRequest('/v2/checkout/orders', 'post', $order);
|
$r = $this->gatewayRequest('/v2/checkout/orders', 'post', $order);
|
||||||
|
|
||||||
|
nlog($r->json());
|
||||||
|
|
||||||
return $r->json()['id'];
|
return $r->json()['id'];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.payment_type_credit_card'), 'card_title' => 'PayPal'])
|
||||||
|
|
||||||
|
@section('gateway_head')
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
type="text/css"
|
||||||
|
href="https://www.paypalobjects.com/webstatic/en_US/developer/docs/css/cardfields.css"
|
||||||
|
/>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('gateway_content')
|
||||||
|
<form action="{{ route('client.payments.response') }}" method="post" id="server_response">
|
||||||
|
@csrf
|
||||||
|
<input type="hidden" name="payment_hash" value="{{ $payment_hash }}">
|
||||||
|
<input type="hidden" name="company_gateway_id" value="{{ $gateway->company_gateway->id }}">
|
||||||
|
<input type="hidden" name="gateway_response" id="gateway_response">
|
||||||
|
<input type="hidden" name="amount_with_fee" id="amount_with_fee" value="{{ $total['amount_with_fee'] }}"/>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="alert alert-failure mb-4" hidden id="errors"></div>
|
||||||
|
|
||||||
|
<div id="paypal-button-container" class="paypal-button-container"></div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('gateway_footer')
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@push('footer')
|
||||||
|
|
||||||
|
<!-- Replace "test" with your own sandbox Business account app client ID -->
|
||||||
|
<script src="https://www.paypal.com/sdk/js?client-id={!! $client_id !!}&components=buttons,funding-eligibility&intent=capture" data-client-token="{!! $token !!}"></script>
|
||||||
|
<div id="paypal-button-container"></div>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
paypal.Buttons({
|
||||||
|
env: "{{ $gateway->company_gateway->getConfigField('testMode') ? 'sandbox' : 'production' }}",
|
||||||
|
fundingSource: "card",
|
||||||
|
client: {
|
||||||
|
@if($gateway->company_gateway->getConfigField('testMode'))
|
||||||
|
sandbox: "{{ $gateway->company_gateway->getConfigField('clientId') }}"
|
||||||
|
@else
|
||||||
|
production: "{{ $gateway->company_gateway->getConfigField('clientId') }}"
|
||||||
|
@endif
|
||||||
|
},
|
||||||
|
// Order is created on the server and the order id is returned
|
||||||
|
createOrder: function(data, actions) {
|
||||||
|
return "{!! $order_id !!}"
|
||||||
|
},
|
||||||
|
// Finalize the transaction on the server after payer approval
|
||||||
|
onApprove: function(data, actions) {
|
||||||
|
|
||||||
|
return actions.order.capture().then(function(details) {
|
||||||
|
|
||||||
|
document.getElementById("gateway_response").value =JSON.stringify( details );
|
||||||
|
document.getElementById("server_response").submit();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
onError: function(err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
}).render('#paypal-button-container');
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@endpush
|
Loading…
x
Reference in New Issue
Block a user