PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.33.0
GiveWP – Donation Plugin and Fundraising Platform v2.33.0
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 / PayPalCommerce / ScriptLoader.php
give / src / PaymentGateways / PayPalCommerce Last commit date
Banners 2 years ago DataTransferObjects 4 years ago Exceptions 3 years ago Migrations 2 years ago Models 2 years ago PayPalCheckoutSdk 2 years ago Repositories 2 years ago Webhooks 2 years ago AccountAdminNotices.php 4 years ago AdminSettingFields.php 2 years ago AdvancedCardFields.php 4 years ago AjaxRequestHandler.php 2 years ago DonationDetailsPage.php 4 years ago DonationFormPaymentMethod.php 4 years ago PayPalClient.php 2 years ago PayPalCommerce.php 2 years ago RefreshToken.php 2 years ago RefundPaymentHandler.php 4 years ago ScriptLoader.php 2 years ago Utils.php 4 years ago onBoardingRedirectHandler.php 2 years ago
ScriptLoader.php
252 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce;
4
5 use Give\PaymentGateways\PayPalCommerce\Models\MerchantDetail;
6 use Give\PaymentGateways\PayPalCommerce\Repositories\MerchantDetails;
7 use Give_Admin_Settings;
8
9 /**
10 * Class ScriptLoader
11 * @package Give\PaymentGateways\PayPalCommerce
12 *
13 * @since 2.9.0
14 */
15 class ScriptLoader
16 {
17 /**
18 * @since 2.9.0
19 *
20 * @var MerchantDetails
21 */
22 private $merchantRepository;
23
24 /**
25 * ScriptLoader constructor.
26 *
27 * @since 2.9.0
28 *
29 * @param MerchantDetails $merchantRepository
30 */
31 public function __construct(MerchantDetails $merchantRepository)
32 {
33 $this->merchantRepository = $merchantRepository;
34 }
35
36 /**
37 * Load admin scripts
38 *
39 * @since 2.9.0
40 */
41 public function loadAdminScripts()
42 {
43 if (!Give_Admin_Settings::is_setting_page('gateway', 'paypal')) {
44 return;
45 }
46
47 wp_enqueue_script(
48 'give-paypal-partner-js',
49 $this->getPartnerJsUrl(),
50 [],
51 null,
52 true
53 );
54
55 wp_enqueue_style(
56 'give-admin-paypal-commerce-css',
57 GIVE_PLUGIN_URL . 'assets/dist/css/admin-paypal-commerce.css',
58 [],
59 GIVE_VERSION
60 );
61
62 wp_localize_script(
63 'give-paypal-partner-js',
64 'givePayPalCommerce',
65 [
66 'translations' => [
67 'confirmPaypalAccountDisconnection' => esc_html__('Disconnect PayPal Account', 'give'),
68 'disconnectPayPalAccount' => esc_html__(
69 'Are you sure you want to disconnect your PayPal account?',
70 'give'
71 ),
72 'connectSuccessTitle' => esc_html__('You’re connected to PayPal! Here’s what’s next...', 'give'),
73 'pciWarning' => sprintf(
74 __(
75 'PayPal allows you to accept credit or debit cards directly on your website. Because of
76 this, your site needs to maintain <a href="%1$s" target="_blank">PCI-DDS compliance</a>.
77 GiveWP never stores sensitive information like card details to your server and works
78 seamlessly with SSL certificates. Compliance is comprised of, but not limited to:',
79 'give'
80 ),
81 'https://givewp.com/documentation/resources/pci-compliance/'
82 ),
83 'pciComplianceInstructions' => [
84 esc_html__(
85 'Using a trusted, secure hosting provider – preferably one which claims and actively promotes PCI compliance.',
86 'give'
87 ),
88 esc_html__(
89 'Maintain security best practices when setting passwords and limit access to your server.',
90 'give'
91 ),
92 esc_html__('Implement an SSL certificate to keep your donations secure.', 'give'),
93 esc_html__('Keep plugins up to date to ensure latest security fixes are present.', 'give'),
94 ]
95 ],
96 ]
97 );
98
99 $script = <<<EOT
100 function giveSandboxPayPalOnBoardedCallback(authCode, sharedId){
101 givePayPalOnBoardedCallback('sandbox', authCode, sharedId);
102 }
103
104 function giveLivePayPalOnBoardedCallback(authCode, sharedId){
105 givePayPalOnBoardedCallback('live', authCode, sharedId);
106 }
107
108 function givePayPalOnBoardedCallback(mode, authCode, sharedId) {
109 const query = '&mode=' + mode + '&authCode=' + authCode + '&sharedId=' + sharedId;
110
111 fetch( ajaxurl + '?action=give_paypal_commerce_user_on_boarded' + query )
112 .then(function(res){ return res.json() })
113 .then(function(res) {
114 if ( true !== res.success ) {
115 console.log(res);
116 alert('Something went wrong!');
117 return;
118 }
119
120 // Remove PayPal quick help container.
121 const paypalErrorQuickHelp = document.getElementById('give-paypal-onboarding-trouble-notice');
122 paypalErrorQuickHelp && paypalErrorQuickHelp.remove();
123 });
124 }
125 EOT;
126
127 wp_add_inline_script(
128 'give-paypal-partner-js',
129 $script
130 );
131 }
132
133 /**
134 * Load public assets.
135 *
136 * @since 2.32.0 Handle exception if client token is not generated.
137 * @since 2.9.0
138 */
139 public function loadPublicAssets()
140 {
141 if (!Utils::gatewayIsActive() || !Utils::isAccountReadyToAcceptPayment()) {
142 return;
143 }
144
145 /* @var MerchantDetail $merchant */
146 $merchant = give(MerchantDetail::class);
147
148 $scriptId = 'give-paypal-commerce-js';
149 $paymentFieldType = give_get_option('paypal_payment_field_type', 'auto');
150
151 // Add hosted fields if payment field type is auto.
152 $paymentComponents[] = 'buttons';
153 if( 'auto' === $paymentFieldType ) {
154 $paymentComponents[] = 'hosted-fields';
155 }
156
157 $clientToken = '';
158 try{
159 $clientToken = $this->merchantRepository->getClientToken();
160 } catch ( \Exception $exception ) {
161 give_set_error(
162 'give-paypal-commerce-client-token-error',
163 sprintf(
164 esc_html__(
165 'Unable to load PayPal Commerce client token. Please try again later. Error: %1$s',
166 'give'
167 ),
168 $exception->getMessage()
169 )
170 );
171 }
172
173 /**
174 * List of PayPal query parameters: https://developer.paypal.com/docs/checkout/reference/customize-sdk/#query-parameters
175 * @since 2.27.1 Removed locale query parameter.
176 */
177 $payPalSdkQueryParameters = [
178 'client-id' => $merchant->clientId,
179 'merchant-id' => $merchant->merchantIdInPayPal,
180 'components' => implode(',', $paymentComponents),
181 'disable-funding' => 'credit',
182 'vault' => true,
183 'data-partner-attribution-id' => give('PAYPAL_COMMERCE_ATTRIBUTION_ID'),
184 'data-client-token' => $clientToken,
185 ];
186
187 if (give_is_setting_enabled(give_get_option('paypal_commerce_accept_venmo', 'disabled'))) {
188 $payPalSdkQueryParameters['enable-funding'] = 'venmo';
189 }
190
191 wp_enqueue_script(
192 $scriptId,
193 GIVE_PLUGIN_URL . 'assets/dist/js/paypal-commerce.js',
194 [],
195 GIVE_VERSION,
196 true
197 );
198
199 wp_localize_script(
200 $scriptId,
201 'givePayPalCommerce',
202 [
203 'paypalCardInfoErrorPrefixes' => [
204 'expirationDateField' => esc_html__('Card Expiration Date:', 'give'),
205 'cardNumberField' => esc_html__('Card Number:', 'give'),
206 'cardCvcField' => esc_html__('Card CVC:', 'give'),
207 ],
208 'cardFieldPlaceholders' => [
209 'cardNumber' => esc_html__('Card Number', 'give'),
210 'cardCvc' => esc_html__('CVC', 'give'),
211 'expirationDate' => esc_html__('MM/YY', 'give'),
212 ],
213 'threeDsCardAuthenticationFailedNotice' => esc_html__(
214 'There was a problem authenticating your payment method. Please try again. If the problem persists, please try another payment method.',
215 'give'
216 ),
217 'errorCodeLabel' => esc_html__('Error Code', 'give'),
218 'genericDonorErrorMessage' => __(
219 'There was an error processing your donation. Please contact the administrator.',
220 'give'
221 ),
222 // List of style properties support by PayPal for advanced card fields: https://developer.paypal.com/docs/business/checkout/reference/style-guide/#style-the-card-payments-fields
223 'hostedCardFieldStyles' => apply_filters('give_paypal_commerce_hosted_field_style', []),
224 'supportsCustomPayments' => $merchant->supportsCustomPayments ? 1 : '',
225 'accountCountry' => $merchant->accountCountry,
226 'separatorLabel' => esc_html__('Or pay with card', 'give'),
227 'payPalSdkQueryParameters' => $payPalSdkQueryParameters,
228 'textForOverlayScreen' => sprintf(
229 '<h3>%1$s</h3><p>%2$s</p><p>%3$s</p>',
230 esc_html__('Donation Processing...', 'give'),
231 esc_html__('Checking donation status with PayPal.', 'give'),
232 esc_html__('This will only take a second!', 'give')
233 ),
234 'paymentFieldType' => $paymentFieldType,
235 ]
236 );
237 }
238
239 /**
240 * Get PayPal partner js url.
241 *
242 * @since 2.30.0 sandbox PayPal partner js loads slow. So we are using live url for now.
243 * @since 2.9.0
244 *
245 * @return string
246 */
247 private function getPartnerJsUrl()
248 {
249 return 'https://www.paypal.com/webapps/merchantboarding/js/lib/lightbox/partner.js';
250 }
251 }
252