PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / PaymentGateways / Gateways / PayPalCommerce / PayPalCommerceGateway.php
give / src / PaymentGateways / Gateways / PayPalCommerce Last commit date
resources 1 year ago PayPalCommerceGateway.php 11 months ago payPalCommerceGateway.tsx 1 year ago types.ts 11 months ago
PayPalCommerceGateway.php
148 lines
1 <?php
2
3 namespace Give\PaymentGateways\Gateways\PayPalCommerce;
4
5 use Exception;
6 use Give\DonationForms\Actions\GenerateDonationFormValidationRouteUrl;
7 use Give\Framework\Support\Scripts\Concerns\HasScriptAssetFile;
8 use Give\Helpers\Form\Utils;
9 use Give\Helpers\Language;
10 use Give\PaymentGateways\PayPalCommerce\Models\MerchantDetail;
11 use Give\PaymentGateways\PayPalCommerce\PayPalCommerce;
12 use Give\PaymentGateways\PayPalCommerce\Repositories\MerchantDetails;
13
14 /**
15 * An extension of the PayPalCommerce gateway in GiveWP that supports the NextGenPaymentGatewayInterface.
16 */
17 class PayPalCommerceGateway extends PayPalCommerce
18 {
19 use HasScriptAssetFile;
20
21 /**
22 * This function uses to render the credit card form for v2 donation forms.
23 *
24 * @since 3.0.0
25 *
26 * @param int $formId
27 * @param array $args
28 *
29 * @return string
30 */
31 public function getLegacyFormFieldMarkup(int $formId, array $args): string
32 {
33 return parent::getLegacyFormFieldMarkup($formId, $args);
34 }
35
36 /**
37 * @since 3.1.0 set translations for script
38 * @since 3.0.0
39 */
40 public function enqueueScript(int $formId)
41 {
42 $assets = $this->getScriptAsset(GIVE_PLUGIN_DIR . 'build/payPalCommerceGateway.asset.php');
43 $handle = $this::id();
44
45 wp_enqueue_script(
46 $handle,
47 GIVE_PLUGIN_URL . 'build/payPalCommerceGateway.js',
48 $assets['dependencies'],
49 $assets['version'],
50 true
51 );
52
53 Language::setScriptTranslations($handle);
54 }
55
56 /**
57 * @since 3.19.1 Add validate URL
58 *
59 * @throws Exception
60 */
61 public function formSettings(int $formId): array
62 {
63 return [
64 'ajaxUrl' => admin_url('admin-ajax.php'),
65 'donationFormId' => $formId,
66 'donationFormNonce' => wp_create_nonce("give_donation_form_nonce_{$formId}"),
67 'sdkOptions' => $this->getPayPalSDKOptions($formId),
68 'validateUrl' => (new GenerateDonationFormValidationRouteUrl())(),
69 ];
70 }
71
72 /**
73 * List of PayPal query parameters: https://developer.paypal.com/docs/checkout/reference/customize-sdk/#query-parameters
74 *
75 * @since 4.6.0 Removed data-client-token from the SDK options for v3 forms. For v2 forms, we still need to pass the client token only when hosted fields are enabled.
76 * @since 4.5.0 Add support for disabling credit card funding via Smart Buttons Only.
77 * @since 3.0.0
78 * @throws Exception
79 */
80 private function getPayPalSDKOptions(int $formId): array
81 {
82 /* @var MerchantDetail $merchantDetailModel */
83 $merchantDetailModel = give(MerchantDetail::class);
84
85 /* @var MerchantDetails $merchantDetailRepository */
86 $merchantDetailRepository = give(MerchantDetails::class);
87
88 // Add hosted fields if payment field type is auto and connect account type supports custom payments.
89 $paymentFieldType = give_get_option('paypal_payment_field_type', 'auto');
90 $acceptCreditCard = give_is_setting_enabled(give_get_option('paypal_commerce_accept_credit_card', 'enabled'));
91
92 $paymentComponents[] = 'buttons';
93
94 $formIsV3 = Utils::isV3Form($formId);
95 $venmoEnabled = give_is_setting_enabled(give_get_option('paypal_commerce_accept_venmo', 'disabled'));
96 $fieldsEnabled = 'auto' === $paymentFieldType && $merchantDetailModel->supportsCustomPayments;
97
98 $disableFunding = ['credit'];
99 if (!$acceptCreditCard && !$fieldsEnabled) {
100 $disableFunding[] = 'card';
101 }
102
103 $data = [
104 'intent' => 'capture',
105 'vault' => 'false',
106 'currency' => give_get_currency($formId),
107 ];
108
109 if ($formIsV3) {
110 if ($fieldsEnabled) {
111 $paymentComponents[] = 'card-fields';
112 }
113
114 $data = array_merge($data, [
115 'dataNamespace' => 'givewp/paypal-commerce',
116 'clientId' => $merchantDetailModel->clientId,
117 'disableFunding' => $disableFunding,
118 'dataPartnerAttributionId' => give('PAYPAL_COMMERCE_ATTRIBUTION_ID'),
119 'components' => implode(',', $paymentComponents),
120 ]);
121
122 if ($venmoEnabled){
123 $data['enableFunding'] = 'venmo';
124 }
125 } else {
126 if ($fieldsEnabled) {
127 $paymentComponents[] = 'hosted-fields';
128 $data['data-client-token'] = $merchantDetailRepository->getClientToken();
129 }
130
131 $data = array_merge($data, [
132 // data-namespace is required for multiple PayPal SDKs to load in harmony.
133 'data-namespace' => 'givewp/paypal-commerce',
134 'client-id' => $merchantDetailModel->clientId,
135 'disable-funding' => $disableFunding,
136 'data-partner-attribution-id' => give('PAYPAL_COMMERCE_ATTRIBUTION_ID'),
137 'components' => implode(',', $paymentComponents),
138 ]);
139
140 if ($venmoEnabled){
141 $data['enable-funding'] = 'venmo';
142 }
143 }
144
145 return $data;
146 }
147 }
148