mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 02:57: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