PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / simple-payments / paypal-express-checkout.js
jetpack / modules / simple-payments Last commit date
paypal-express-checkout.js 1 year ago simple-payments.css 7 months ago simple-payments.php 7 months ago
paypal-express-checkout.js
248 lines
1 /**
2 * This PaypalExpressCheckout global is included by wp_enqueue_script( 'jetpack-paypal-express-checkout' );
3 * It handles communication with Paypal Express checkout and public-api.wordpress.com for the purposes
4 * of simple-payments module.
5 */
6
7 /* global paypal */
8 /* exported PaypalExpressCheckout */
9 var PaypalExpressCheckout = {
10 primaryCssClassName: 'jetpack-simple-payments',
11 messageCssClassName: 'jetpack-simple-payments-purchase-message',
12
13 wpRestAPIHost: 'https://public-api.wordpress.com',
14 wpRestAPIVersion: '/wpcom/v2',
15
16 getEnvironment: function () {
17 if (
18 localStorage &&
19 localStorage.getItem &&
20 localStorage.getItem( 'simple-payments-env' ) === 'sandbox'
21 ) {
22 return 'sandbox';
23 }
24 return 'production';
25 },
26
27 getCreatePaymentEndpoint: function ( blogId ) {
28 return (
29 PaypalExpressCheckout.wpRestAPIHost +
30 PaypalExpressCheckout.wpRestAPIVersion +
31 '/sites/' +
32 blogId +
33 '/simple-payments/paypal/payment'
34 );
35 },
36
37 getExecutePaymentEndpoint: function ( blogId, paymentId ) {
38 return (
39 PaypalExpressCheckout.wpRestAPIHost +
40 PaypalExpressCheckout.wpRestAPIVersion +
41 '/sites/' +
42 blogId +
43 '/simple-payments/paypal/' +
44 paymentId +
45 '/execute'
46 );
47 },
48
49 getNumberOfItems: function ( field, enableMultiple ) {
50 if ( enableMultiple !== '1' ) {
51 return 1;
52 }
53
54 var numberField = document.getElementById( field );
55
56 if ( ! numberField ) {
57 return 1;
58 }
59
60 var number = Number( numberField.value );
61
62 if ( isNaN( number ) ) {
63 return 1;
64 }
65 return number;
66 },
67
68 /**
69 * Get the DOM element-placeholder used to show message
70 * about the transaction. If it doesn't exist then the function will create a new one.
71 *
72 * @param string domId id of the payment button placeholder
73 * @return Element the dom element to print the message
74 */
75 getMessageContainer: function ( domId ) {
76 return document.getElementById( domId + '-message-container' );
77 },
78
79 /**
80 * Show a messange close to the Paypal button.
81 * Use this function to give feedback to the user according
82 * to the transaction result.
83 *
84 * @param {String} message message to show
85 * @param {String} domId paypal-button element dom identifier
86 * @param {Boolean} [error] defines if it's a message error. Not TRUE as default.
87 */
88 showMessage: function ( message, domId, isError ) {
89 var domEl = PaypalExpressCheckout.getMessageContainer( domId );
90
91 // set css classes
92 var cssClasses = PaypalExpressCheckout.messageCssClassName + ' show ';
93 cssClasses += isError ? 'error' : 'success';
94
95 // show message 1s after PayPal popup is closed
96 setTimeout( function () {
97 domEl.innerHTML = message;
98 domEl.setAttribute( 'class', cssClasses );
99 }, 1000 );
100 },
101
102 showError: function ( message, domId ) {
103 PaypalExpressCheckout.showMessage( message, domId, true );
104 },
105
106 processErrorMessage: function ( errorResponse ) {
107 var error = errorResponse ? errorResponse.responseJSON : null;
108 var defaultMessage = 'There was an issue processing your payment.';
109
110 if ( ! error ) {
111 return '<p>' + defaultMessage + '</p>';
112 }
113
114 if ( error.additional_errors ) {
115 var messages = [];
116 error.additional_errors.forEach( function ( additionalError ) {
117 if ( additionalError.message ) {
118 messages.push( '<p>' + additionalError.message.toString() + '</p>' );
119 }
120 } );
121 return messages.join( '' );
122 }
123
124 return '<p>' + ( error.message || defaultMessage ) + '</p>';
125 },
126
127 processSuccessMessage: function ( successResponse ) {
128 var message = successResponse.message;
129 var defaultMessage = 'Thank you. Your purchase was successful!';
130
131 if ( ! message ) {
132 return '<p>' + defaultMessage + '</p>';
133 }
134
135 return '<p>' + message + '</p>';
136 },
137
138 cleanAndHideMessage: function ( domId ) {
139 var domEl = PaypalExpressCheckout.getMessageContainer( domId );
140 domEl.setAttribute( 'class', PaypalExpressCheckout.messageCssClassName );
141 domEl.innerHTML = '';
142 },
143
144 renderButton: function ( blogId, buttonId, domId, enableMultiple ) {
145 var env = PaypalExpressCheckout.getEnvironment();
146
147 if ( ! paypal ) {
148 throw new Error( 'PayPal module is required by PaypalExpressCheckout' );
149 }
150
151 var buttonDomId = domId + '_button';
152
153 paypal.Button.render(
154 {
155 env: env,
156 commit: true,
157
158 style: {
159 label: 'pay',
160 shape: 'rect',
161 color: 'silver',
162 size: 'responsive',
163 fundingicons: true,
164 },
165
166 payment: function () {
167 PaypalExpressCheckout.cleanAndHideMessage( domId );
168
169 var payload = {
170 number: PaypalExpressCheckout.getNumberOfItems( domId + '_number', enableMultiple ),
171 buttonId: buttonId,
172 env: env,
173 };
174
175 return new paypal.Promise( function ( resolve, reject ) {
176 jQuery
177 .post( PaypalExpressCheckout.getCreatePaymentEndpoint( blogId ), payload )
178 .done( function ( paymentResponse ) {
179 if ( ! paymentResponse ) {
180 PaypalExpressCheckout.showError(
181 PaypalExpressCheckout.processErrorMessage(),
182 domId
183 );
184 return reject( new Error( 'server_error' ) );
185 }
186
187 resolve( paymentResponse.id );
188 } )
189 .fail( function ( paymentError ) {
190 var paymentErrorMessage = PaypalExpressCheckout.processErrorMessage( paymentError );
191 PaypalExpressCheckout.showError( paymentErrorMessage, domId );
192
193 var code =
194 paymentError.responseJSON && paymentError.responseJSON.code
195 ? paymentError.responseJSON.code
196 : 'server_error';
197
198 reject( new Error( code ) );
199 } );
200 } );
201 },
202
203 onAuthorize: function ( onAuthData ) {
204 var payload = {
205 buttonId: buttonId,
206 payerId: onAuthData.payerID,
207 env: env,
208 };
209 return new paypal.Promise( function ( resolve, reject ) {
210 jQuery
211 .post(
212 PaypalExpressCheckout.getExecutePaymentEndpoint( blogId, onAuthData.paymentID ),
213 payload
214 )
215 .done( function ( authResponse ) {
216 if ( ! authResponse ) {
217 PaypalExpressCheckout.showError(
218 PaypalExpressCheckout.processErrorMessage(),
219 domId
220 );
221 return reject( new Error( 'server_error' ) );
222 }
223
224 PaypalExpressCheckout.showMessage(
225 PaypalExpressCheckout.processSuccessMessage( authResponse ),
226 domId
227 );
228 resolve();
229 } )
230 .fail( function ( authError ) {
231 var authErrorMessage = PaypalExpressCheckout.processErrorMessage( authError );
232 PaypalExpressCheckout.showError( authErrorMessage, domId );
233
234 var code =
235 authError.responseJSON && authError.responseJSON.code
236 ? authError.responseJSON.code
237 : 'server_error';
238
239 reject( new Error( code ) );
240 } );
241 } );
242 },
243 },
244 buttonDomId
245 );
246 },
247 };
248