mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
paypapl
This commit is contained in:
parent
b9c8d42327
commit
9017382ea9
@ -166,6 +166,9 @@ class PayPalRestPaymentDriver extends BaseDriver
|
|||||||
$data['gateway_type_id'] = $this->gateway_type_id;
|
$data['gateway_type_id'] = $this->gateway_type_id;
|
||||||
$data['currency'] = $this->client->currency()->code;
|
$data['currency'] = $this->client->currency()->code;
|
||||||
|
|
||||||
|
|
||||||
|
// return render('gateways.paypal.ppcp.card', $data);
|
||||||
|
|
||||||
return render('gateways.paypal.pay', $data);
|
return render('gateways.paypal.pay', $data);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,142 @@
|
|||||||
|
@extends('portal.ninja2020.layout.payments', ['gateway_title' => ctrans('texts.payment_type_credit_card'), 'card_title' => 'PayPal'])
|
||||||
|
|
||||||
|
@section('gateway_head')
|
||||||
|
|
||||||
|
@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_type_id" id="gateway_type_id" value="{{ $gateway_type_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>
|
||||||
|
<div id="checkout-form">
|
||||||
|
<!-- Containers for Card Fields hosted by PayPal -->
|
||||||
|
<div id="card-name-field-container"></div>
|
||||||
|
<div id="card-number-field-container"></div>
|
||||||
|
<div id="card-expiry-field-container"></div>
|
||||||
|
<div id="card-cvv-field-container"></div>
|
||||||
|
|
||||||
|
<button id="card-field-submit-button" type="button">
|
||||||
|
Pay now with Card Fields
|
||||||
|
</button>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('gateway_footer')
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@push('footer')
|
||||||
|
|
||||||
|
<script src="https://www.paypal.com/sdk/js?client-id={!! $client_id !!}&components=card-fields&debug=true" data-partner-attribution-id="invoiceninja_SP_PPCP"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
const clientId = "{{ $client_id }}";
|
||||||
|
const orderId = "{!! $order_id !!}";
|
||||||
|
|
||||||
|
const cardField = paypal.CardFields({
|
||||||
|
// env: 'production',
|
||||||
|
// fundingSource: fundingSource,
|
||||||
|
client: clientId,
|
||||||
|
createOrder: function(data, actions) {
|
||||||
|
return orderId;
|
||||||
|
},
|
||||||
|
onApprove: function(data, actions) {
|
||||||
|
|
||||||
|
var errorDetail = Array.isArray(data.details) && data.details[0];
|
||||||
|
if (errorDetail && ['INSTRUMENT_DECLINED', 'PAYER_ACTION_REQUIRED'].includes(errorDetail.issue)) {
|
||||||
|
return actions.restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("gateway_response").value =JSON.stringify( data );
|
||||||
|
document.getElementById("server_response").submit();
|
||||||
|
|
||||||
|
},
|
||||||
|
onCancel: function() {
|
||||||
|
window.location.href = "/client/invoices/";
|
||||||
|
},
|
||||||
|
onError: function(error) {
|
||||||
|
document.getElementById("gateway_response").value = error;
|
||||||
|
document.getElementById("server_response").submit();
|
||||||
|
},
|
||||||
|
onClick: function (){
|
||||||
|
// document.getElementById('paypal-button-container').hidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
.render('#paypal-button-container');
|
||||||
|
// .render('#paypal-button-container').catch(function(err) {
|
||||||
|
|
||||||
|
// document.getElementById('errors').textContent = err;
|
||||||
|
// document.getElementById('errors').hidden = false;
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
document.getElementById("server_response").addEventListener('submit', (e) => {
|
||||||
|
if (document.getElementById("server_response").classList.contains('is-submitting')) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("server_response").classList.add('is-submitting');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Render each field after checking for eligibility
|
||||||
|
if (cardField.isEligible()) {
|
||||||
|
const nameField = cardField.NameField();
|
||||||
|
nameField.render("#card-name-field-container");
|
||||||
|
|
||||||
|
const numberField = cardField.NumberField();
|
||||||
|
numberField.render("#card-number-field-container");
|
||||||
|
|
||||||
|
const cvvField = cardField.CVVField();
|
||||||
|
cvvField.render("#card-cvv-field-container");
|
||||||
|
|
||||||
|
const expiryField = cardField.ExpiryField();
|
||||||
|
expiryField.render("#card-expiry-field-container");
|
||||||
|
|
||||||
|
// Add click listener to submit button and call the submit function on the CardField component
|
||||||
|
document
|
||||||
|
.getElementById("card-field-submit-button")
|
||||||
|
.addEventListener("click", () => {
|
||||||
|
cardField.submit({
|
||||||
|
// From your billing address fields
|
||||||
|
billingAddress: {
|
||||||
|
addressLine1: document.getElementById(
|
||||||
|
"card-billing-address-line-1",
|
||||||
|
).value,
|
||||||
|
addressLine2: document.getElementById(
|
||||||
|
"card-billing-address-line-2",
|
||||||
|
).value,
|
||||||
|
adminArea1: document.getElementById(
|
||||||
|
"card-billing-address-admin-area-line-1",
|
||||||
|
).value,
|
||||||
|
adminArea2: document.getElementById(
|
||||||
|
"card-billing-address-admin-area-line-2",
|
||||||
|
).value,
|
||||||
|
countryCode: document.getElementById(
|
||||||
|
"card-billing-address-country-code",
|
||||||
|
).value,
|
||||||
|
postalCode: document.getElementById(
|
||||||
|
"card-billing-address-postal-code",
|
||||||
|
).value,
|
||||||
|
}
|
||||||
|
}).then(() => {
|
||||||
|
// submit successful
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("i must not be eligible?");
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@endpush
|
Loading…
x
Reference in New Issue
Block a user