Version Description
Download this release
Release Info
| Developer | akeda |
| Plugin | |
| Version | 1.0.1 |
| Comparing to | |
| See all releases | |
Code changes from version 1.0.0 to 1.0.1
- includes/abstracts/abstract-wc-gateway-ppec-client-credential.php +18 -1
- includes/abstracts/abstract-wc-gateway-ppec.php +1 -1
- includes/class-wc-gateway-ppec-cart-handler.php +45 -19
- includes/class-wc-gateway-ppec-client-credential-certificate.php +100 -0
- includes/class-wc-gateway-ppec-client.php +7 -0
- includes/class-wc-gateway-ppec-plugin.php +19 -0
- includes/pem/bundle.pem +117 -0
- readme.txt +10 -3
- woocommerce-gateway-paypal-express-checkout.php +2 -2
includes/abstracts/abstract-wc-gateway-ppec-client-credential.php
CHANGED
|
@@ -95,7 +95,7 @@ abstract class WC_Gateway_PPEC_Client_Credential {
|
|
| 95 |
* @return array An array of name-value pairs containing the API credentials
|
| 96 |
* from this object.
|
| 97 |
*/
|
| 98 |
-
|
| 99 |
$params = array(
|
| 100 |
'USER' => $this->_username,
|
| 101 |
'PWD' => $this->_password,
|
|
@@ -107,4 +107,21 @@ abstract class WC_Gateway_PPEC_Client_Credential {
|
|
| 107 |
|
| 108 |
return $params;
|
| 109 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
}
|
| 95 |
* @return array An array of name-value pairs containing the API credentials
|
| 96 |
* from this object.
|
| 97 |
*/
|
| 98 |
+
public function get_request_params() {
|
| 99 |
$params = array(
|
| 100 |
'USER' => $this->_username,
|
| 101 |
'PWD' => $this->_password,
|
| 107 |
|
| 108 |
return $params;
|
| 109 |
}
|
| 110 |
+
|
| 111 |
+
/**
|
| 112 |
+
* Allow certificate-based credential to configure cURL, especially
|
| 113 |
+
* to set CURLOPT_SSLCERT and CURLOPT_SSLCERTPASSWD.
|
| 114 |
+
*
|
| 115 |
+
* @throws Exception
|
| 116 |
+
*
|
| 117 |
+
* @param resource &$handle The cURL handle returned by curl_init().
|
| 118 |
+
* @param array $r The HTTP request arguments.
|
| 119 |
+
* @param string $url The request URL.
|
| 120 |
+
*
|
| 121 |
+
* @return void
|
| 122 |
+
*/
|
| 123 |
+
public function configure_curl( $handle, $r, $url ) {
|
| 124 |
+
curl_setopt( $handle, CURLOPT_CAINFO, wc_gateway_ppec()->includes_path . 'pem/bundle.pem' );
|
| 125 |
+
curl_setopt( $handle, CURLOPT_SSL_CIPHER_LIST, 'TLSv1' );
|
| 126 |
+
}
|
| 127 |
}
|
includes/abstracts/abstract-wc-gateway-ppec.php
CHANGED
|
@@ -225,7 +225,7 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
| 225 |
$expires = __( 'expires on %s', 'woocommerce-gateway-paypal-express-checkout' );
|
| 226 |
}
|
| 227 |
|
| 228 |
-
$expires = sprintf( $
|
| 229 |
$out = sprintf( __( 'Certificate belongs to API username %1$s; %2$s', 'woocommerce-gateway-paypal-express-checkout' ), $certinfo['subject']['CN'], $expires );
|
| 230 |
} else {
|
| 231 |
$out = __( 'The certificate on file is not valid.', 'woocommerce-gateway-paypal-express-checkout' );
|
| 225 |
$expires = __( 'expires on %s', 'woocommerce-gateway-paypal-express-checkout' );
|
| 226 |
}
|
| 227 |
|
| 228 |
+
$expires = sprintf( $expires, date_i18n( get_option( 'date_format' ), $valid_until ) );
|
| 229 |
$out = sprintf( __( 'Certificate belongs to API username %1$s; %2$s', 'woocommerce-gateway-paypal-express-checkout' ), $certinfo['subject']['CN'], $expires );
|
| 230 |
} else {
|
| 231 |
$out = __( 'The certificate on file is not valid.', 'woocommerce-gateway-paypal-express-checkout' );
|
includes/class-wc-gateway-ppec-cart-handler.php
CHANGED
|
@@ -159,7 +159,7 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 159 |
|
| 160 |
$discounts = round( WC()->cart->get_cart_discount_total(), $decimals );
|
| 161 |
foreach ( WC()->cart->cart_contents as $cart_item_key => $values ) {
|
| 162 |
-
$amount = round( $values['
|
| 163 |
$item = array(
|
| 164 |
'name' => $values['data']->post->post_title,
|
| 165 |
'description' => $values['data']->post->post_content,
|
|
@@ -172,12 +172,9 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 172 |
$roundedPayPalTotal += round( $amount * $values['quantity'], $decimals );
|
| 173 |
}
|
| 174 |
|
| 175 |
-
$this->orderTax = round( WC()->cart->tax_total, $decimals );
|
| 176 |
$this->shipping = round( WC()->cart->shipping_total, $decimals );
|
| 177 |
-
|
| 178 |
-
$this->orderTax += round( WC()->cart->shipping_tax_total, $decimals );
|
| 179 |
-
}
|
| 180 |
-
$this->totalItemAmount = round( WC()->cart->cart_contents_total, $decimals );
|
| 181 |
$this->orderTotal = $this->totalItemAmount + $this->orderTax + $this->shipping;
|
| 182 |
|
| 183 |
// need to compare WC totals with what PayPal will calculate to see if they match
|
|
@@ -200,6 +197,8 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 200 |
);
|
| 201 |
|
| 202 |
$this->items[] = $modifyLineItem;
|
|
|
|
|
|
|
| 203 |
|
| 204 |
} elseif ( WC_Gateway_PPEC_Settings::subtotalMismatchBehaviorDropLineItems == $subtotalBehavior ) {
|
| 205 |
// ...
|
|
@@ -211,7 +210,7 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 211 |
|
| 212 |
// enter discount shenanigans. item total cannot be 0 so make modifications accordingly
|
| 213 |
if ( $this->totalItemAmount == $discounts ) {
|
| 214 |
-
$settings = wc_gateway_ppec()->loadSettings();
|
| 215 |
$behavior = $settings->zeroSubtotalBehavior;
|
| 216 |
|
| 217 |
if ( WC_Gateway_PPEC_Settings::zeroSubtotalBehaviorModifyItems == $behavior ) {
|
|
@@ -222,10 +221,10 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 222 |
'name' => 'Discount',
|
| 223 |
'description' => 'Discount Amount',
|
| 224 |
'quantity' => 1,
|
| 225 |
-
'amount' =>
|
| 226 |
);
|
| 227 |
|
| 228 |
-
$this->items[] = $
|
| 229 |
|
| 230 |
if ( $is_zdp_currency ) {
|
| 231 |
$discount = 1;
|
|
@@ -241,18 +240,23 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 241 |
);
|
| 242 |
|
| 243 |
$this->items[] = $modifyLineItem;
|
| 244 |
-
$this->shipDiscountAmount =
|
|
|
|
|
|
|
| 245 |
|
| 246 |
} elseif ( WC_Gateway_PPEC_Settings::zeroSubtotalBehaviorOmitLineItems == $behavior ) {
|
| 247 |
// ...
|
| 248 |
// Omit line items altogether
|
| 249 |
unset($this->items);
|
| 250 |
$this->shipDiscountAmount = 0;
|
|
|
|
|
|
|
| 251 |
|
| 252 |
} else {
|
| 253 |
// ...
|
| 254 |
// Increase SHIPDISCAMT by the amount of all the coupons in the cart
|
| 255 |
-
$this->shipDiscountAmount =
|
|
|
|
| 256 |
|
| 257 |
}
|
| 258 |
} else {
|
|
@@ -269,6 +273,15 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 269 |
}
|
| 270 |
|
| 271 |
$this->shipDiscountAmount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 272 |
}
|
| 273 |
|
| 274 |
// after all of the discount shenanigans, load up the other standard variables
|
|
@@ -280,7 +293,7 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 280 |
|
| 281 |
if ( ! is_numeric( $this->shipping ) )
|
| 282 |
$this->shipping = 0;
|
| 283 |
-
|
| 284 |
}
|
| 285 |
|
| 286 |
public function loadOrderDetails( $order_id ) {
|
|
@@ -301,7 +314,7 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 301 |
|
| 302 |
$discounts = round( $order->get_total_discount(), $decimals );
|
| 303 |
foreach ( $order->get_items() as $cart_item_key => $values ) {
|
| 304 |
-
$amount = round( $values['
|
| 305 |
$item = array(
|
| 306 |
'name' => $values['name'],
|
| 307 |
'quantity' => $values['qty'],
|
|
@@ -309,7 +322,7 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 309 |
);
|
| 310 |
|
| 311 |
$this->items[] = $item;
|
| 312 |
-
|
| 313 |
$roundedPayPalTotal += round( $amount * $values['qty'], $decimals );
|
| 314 |
}
|
| 315 |
|
|
@@ -363,10 +376,10 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 363 |
'name' => 'Discount',
|
| 364 |
'description' => 'Discount Amount',
|
| 365 |
'quantity' => 1,
|
| 366 |
-
'amount' =>
|
| 367 |
);
|
| 368 |
|
| 369 |
-
$this->items[] = $
|
| 370 |
|
| 371 |
if ( $is_zdp_currency ) {
|
| 372 |
$discount = 1;
|
|
@@ -382,19 +395,23 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 382 |
);
|
| 383 |
|
| 384 |
$this->items[] = $modifyLineItem;
|
| 385 |
-
$this->shipDiscountAmount =
|
|
|
|
|
|
|
| 386 |
|
| 387 |
} elseif ( WC_Gateway_PPEC_Settings::zeroSubtotalBehaviorOmitLineItems == $behavior ) {
|
| 388 |
// ...
|
| 389 |
// Omit line items altogether
|
| 390 |
unset($this->items);
|
| 391 |
$this->shipDiscountAmount = 0;
|
|
|
|
|
|
|
| 392 |
|
| 393 |
} else {
|
| 394 |
// ...
|
| 395 |
// Increase SHIPDISCAMT by the amount of all the coupons in the cart
|
| 396 |
-
$this->shipDiscountAmount =
|
| 397 |
-
|
| 398 |
}
|
| 399 |
} else {
|
| 400 |
// Build PayPal_Cart object as normal
|
|
@@ -407,10 +424,19 @@ class WC_Gateway_PPEC_Cart_Handler {
|
|
| 407 |
);
|
| 408 |
|
| 409 |
$this->items[] = $discLineItem;
|
|
|
|
|
|
|
| 410 |
}
|
| 411 |
|
| 412 |
$this->shipDiscountAmount = 0;
|
| 413 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 414 |
|
| 415 |
// after all of the discount shenanigans, load up the other standard variables
|
| 416 |
$this->insurance = 0;
|
| 159 |
|
| 160 |
$discounts = round( WC()->cart->get_cart_discount_total(), $decimals );
|
| 161 |
foreach ( WC()->cart->cart_contents as $cart_item_key => $values ) {
|
| 162 |
+
$amount = round( $values['line_subtotal'] / $values['quantity'] , $decimals );
|
| 163 |
$item = array(
|
| 164 |
'name' => $values['data']->post->post_title,
|
| 165 |
'description' => $values['data']->post->post_content,
|
| 172 |
$roundedPayPalTotal += round( $amount * $values['quantity'], $decimals );
|
| 173 |
}
|
| 174 |
|
| 175 |
+
$this->orderTax = round( WC()->cart->tax_total + WC()->cart->shipping_tax_total, $decimals );
|
| 176 |
$this->shipping = round( WC()->cart->shipping_total, $decimals );
|
| 177 |
+
$this->totalItemAmount = round( WC()->cart->cart_contents_total, $decimals ) + $discounts;
|
|
|
|
|
|
|
|
|
|
| 178 |
$this->orderTotal = $this->totalItemAmount + $this->orderTax + $this->shipping;
|
| 179 |
|
| 180 |
// need to compare WC totals with what PayPal will calculate to see if they match
|
| 197 |
);
|
| 198 |
|
| 199 |
$this->items[] = $modifyLineItem;
|
| 200 |
+
$this->totalItemAmount += $modifyLineItem[ 'amount' ];
|
| 201 |
+
$this->orderTotal += $modifyLineItem[ 'amount' ];
|
| 202 |
|
| 203 |
} elseif ( WC_Gateway_PPEC_Settings::subtotalMismatchBehaviorDropLineItems == $subtotalBehavior ) {
|
| 204 |
// ...
|
| 210 |
|
| 211 |
// enter discount shenanigans. item total cannot be 0 so make modifications accordingly
|
| 212 |
if ( $this->totalItemAmount == $discounts ) {
|
| 213 |
+
$settings = wc_gateway_ppec()->settings->loadSettings();
|
| 214 |
$behavior = $settings->zeroSubtotalBehavior;
|
| 215 |
|
| 216 |
if ( WC_Gateway_PPEC_Settings::zeroSubtotalBehaviorModifyItems == $behavior ) {
|
| 221 |
'name' => 'Discount',
|
| 222 |
'description' => 'Discount Amount',
|
| 223 |
'quantity' => 1,
|
| 224 |
+
'amount' => -$discounts
|
| 225 |
);
|
| 226 |
|
| 227 |
+
$this->items[] = $discountLineItem;
|
| 228 |
|
| 229 |
if ( $is_zdp_currency ) {
|
| 230 |
$discount = 1;
|
| 240 |
);
|
| 241 |
|
| 242 |
$this->items[] = $modifyLineItem;
|
| 243 |
+
$this->shipDiscountAmount = -$discount;
|
| 244 |
+
$this->totalItemAmount = $this->totalItemAmount - $discounts + $discount;
|
| 245 |
+
$this->orderTotal -= $discounts;
|
| 246 |
|
| 247 |
} elseif ( WC_Gateway_PPEC_Settings::zeroSubtotalBehaviorOmitLineItems == $behavior ) {
|
| 248 |
// ...
|
| 249 |
// Omit line items altogether
|
| 250 |
unset($this->items);
|
| 251 |
$this->shipDiscountAmount = 0;
|
| 252 |
+
$this->totalItemAmount -= $discounts;
|
| 253 |
+
$this->orderTotal -= $discounts;
|
| 254 |
|
| 255 |
} else {
|
| 256 |
// ...
|
| 257 |
// Increase SHIPDISCAMT by the amount of all the coupons in the cart
|
| 258 |
+
$this->shipDiscountAmount = -$discounts;
|
| 259 |
+
$this->orderTotal -= $discounts;
|
| 260 |
|
| 261 |
}
|
| 262 |
} else {
|
| 273 |
}
|
| 274 |
|
| 275 |
$this->shipDiscountAmount = 0;
|
| 276 |
+
$this->totalItemAmount -= $discounts;
|
| 277 |
+
$this->orderTotal -= $discounts;
|
| 278 |
+
}
|
| 279 |
+
|
| 280 |
+
// If the totals don't line up, adjust the tax to make it work (cause it's probably a tax mismatch).
|
| 281 |
+
$wooOrderTotal = round( WC()->cart->total, $decimals );
|
| 282 |
+
if( $wooOrderTotal != $this->orderTotal ) {
|
| 283 |
+
$this->orderTax += $wooOrderTotal - $this->orderTotal;
|
| 284 |
+
$this->orderTotal = $wooOrderTotal;
|
| 285 |
}
|
| 286 |
|
| 287 |
// after all of the discount shenanigans, load up the other standard variables
|
| 293 |
|
| 294 |
if ( ! is_numeric( $this->shipping ) )
|
| 295 |
$this->shipping = 0;
|
| 296 |
+
|
| 297 |
}
|
| 298 |
|
| 299 |
public function loadOrderDetails( $order_id ) {
|
| 314 |
|
| 315 |
$discounts = round( $order->get_total_discount(), $decimals );
|
| 316 |
foreach ( $order->get_items() as $cart_item_key => $values ) {
|
| 317 |
+
$amount = round( $values['line_subtotal'] / $values['qty'] , $decimals );
|
| 318 |
$item = array(
|
| 319 |
'name' => $values['name'],
|
| 320 |
'quantity' => $values['qty'],
|
| 322 |
);
|
| 323 |
|
| 324 |
$this->items[] = $item;
|
| 325 |
+
|
| 326 |
$roundedPayPalTotal += round( $amount * $values['qty'], $decimals );
|
| 327 |
}
|
| 328 |
|
| 376 |
'name' => 'Discount',
|
| 377 |
'description' => 'Discount Amount',
|
| 378 |
'quantity' => 1,
|
| 379 |
+
'amount' => -$discounts
|
| 380 |
);
|
| 381 |
|
| 382 |
+
$this->items[] = $discountLineItem;
|
| 383 |
|
| 384 |
if ( $is_zdp_currency ) {
|
| 385 |
$discount = 1;
|
| 395 |
);
|
| 396 |
|
| 397 |
$this->items[] = $modifyLineItem;
|
| 398 |
+
$this->shipDiscountAmount = -$discount;
|
| 399 |
+
$this->totalItemAmount = $this->totalItemAmount - $discounts + $discount;
|
| 400 |
+
$this->orderTotal -= $discounts;
|
| 401 |
|
| 402 |
} elseif ( WC_Gateway_PPEC_Settings::zeroSubtotalBehaviorOmitLineItems == $behavior ) {
|
| 403 |
// ...
|
| 404 |
// Omit line items altogether
|
| 405 |
unset($this->items);
|
| 406 |
$this->shipDiscountAmount = 0;
|
| 407 |
+
$this->totalItemAmount -= $discounts;
|
| 408 |
+
$this->orderTotal -= $discounts;
|
| 409 |
|
| 410 |
} else {
|
| 411 |
// ...
|
| 412 |
// Increase SHIPDISCAMT by the amount of all the coupons in the cart
|
| 413 |
+
$this->shipDiscountAmount = -$discounts;
|
| 414 |
+
$this->orderTotal -= $discounts;
|
| 415 |
}
|
| 416 |
} else {
|
| 417 |
// Build PayPal_Cart object as normal
|
| 424 |
);
|
| 425 |
|
| 426 |
$this->items[] = $discLineItem;
|
| 427 |
+
$this->totalItemAmount -= $discounts;
|
| 428 |
+
$this->orderTotal -= $discounts;
|
| 429 |
}
|
| 430 |
|
| 431 |
$this->shipDiscountAmount = 0;
|
| 432 |
}
|
| 433 |
+
|
| 434 |
+
// If the totals don't line up, adjust the tax to make it work (cause it's probably a tax mismatch).
|
| 435 |
+
$wooOrderTotal = round( $order->get_total(), $decimals );
|
| 436 |
+
if( $wooOrderTotal != $this->orderTotal ) {
|
| 437 |
+
$this->orderTax += $wooOrderTotal - $this->orderTotal;
|
| 438 |
+
$this->orderTotal = $wooOrderTotal;
|
| 439 |
+
}
|
| 440 |
|
| 441 |
// after all of the discount shenanigans, load up the other standard variables
|
| 442 |
$this->insurance = 0;
|
includes/class-wc-gateway-ppec-client-credential-certificate.php
CHANGED
|
@@ -43,4 +43,104 @@ class WC_Gateway_PPEC_Client_Credential_Certificate extends WC_Gateway_PPEC_Clie
|
|
| 43 |
public function get_certificate() {
|
| 44 |
return $this->_certificate;
|
| 45 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
}
|
| 43 |
public function get_certificate() {
|
| 44 |
return $this->_certificate;
|
| 45 |
}
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* Allow certificate-based credential to configure cURL, especially
|
| 49 |
+
* to set CURLOPT_SSLCERT and CURLOPT_SSLCERTPASSWD.
|
| 50 |
+
*
|
| 51 |
+
* @throws Exception
|
| 52 |
+
*
|
| 53 |
+
* @param resource &$handle The cURL handle returned by curl_init().
|
| 54 |
+
* @param array $r The HTTP request arguments.
|
| 55 |
+
* @param string $url The request URL.
|
| 56 |
+
*
|
| 57 |
+
* @return void
|
| 58 |
+
*/
|
| 59 |
+
public function configure_curl( $handle, $r, $url ) {
|
| 60 |
+
parent::configure_curl( $handle, $r, $url );
|
| 61 |
+
|
| 62 |
+
$password = uniqid();
|
| 63 |
+
$certificate_file = $this->_maybe_create_certificate_file( $password );
|
| 64 |
+
|
| 65 |
+
if ( false === curl_setopt( $handle, CURLOPT_SSLCERT, $certificate_file ) ) {
|
| 66 |
+
throw new Exception( __( 'Unable to accept certificate during cURL configuration', 'woocommerce-gateway-ppec' ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
if ( $this->_use_secure_transport() && false === curl_setopt( $handle, CURLOPT_SSLCERTPASSWD, $password ) ) {
|
| 70 |
+
throw new Exception( __( 'Unable to accept certificate password during cURL configuration', 'woocommerce-gateway-ppec' ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
| 71 |
+
}
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
/**
|
| 75 |
+
* Dump the certificate out to a temporary file, because cURL can't accept
|
| 76 |
+
* it any other way.
|
| 77 |
+
*
|
| 78 |
+
* @throws Exception
|
| 79 |
+
*
|
| 80 |
+
* @param string $password Password for certificate when using secure transport
|
| 81 |
+
*
|
| 82 |
+
* @return string Filepath of certificate file
|
| 83 |
+
*/
|
| 84 |
+
protected function _maybe_create_certificate_file( $password ) {
|
| 85 |
+
$temp_file = tempnam( sys_get_temp_dir(), 'pptmp_' );
|
| 86 |
+
if ( ! $temp_file ) {
|
| 87 |
+
throw new Exception( sprintf( __( 'Unable to write certificate file %s during cURL configuration', 'woocommerce-gateway-ppec' ), $temp_file ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
if ( $this->_use_secure_transport() ) {
|
| 91 |
+
$this->_maybe_create_secure_certificate_file( $temp_file, $password );
|
| 92 |
+
} else {
|
| 93 |
+
$this->_maybe_create_non_secure_certificate_file( $temp_file );
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
return $temp_file;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
/**
|
| 100 |
+
* If we're using SecureTransport, we have to translate the certificate to
|
| 101 |
+
* PKCS12 before passing it to cURL.
|
| 102 |
+
*
|
| 103 |
+
* @throws Exception
|
| 104 |
+
*
|
| 105 |
+
* @param string $temp_file Filepath to temporary certificate file
|
| 106 |
+
*
|
| 107 |
+
* @return void
|
| 108 |
+
*/
|
| 109 |
+
protected function _maybe_create_secure_certificate_file( $temp_file, $password ) {
|
| 110 |
+
$private_key = openssl_pkey_get_private( $this->_certificate );
|
| 111 |
+
|
| 112 |
+
if ( false === $private_key ) {
|
| 113 |
+
throw new Exception( __( 'Failed to retrieve private key during cURL configuration', 'woocommerce-gateway-ppec' ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
if ( ! openssl_pkcs12_export_to_file( $this->_certificate, $temp_file, $private_key, $password ) ) {
|
| 117 |
+
throw new Exception( __( 'Failed to export PKCS12 file during cURL configuration', 'woocommerce-gateway-ppec' ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
| 118 |
+
}
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
/**
|
| 122 |
+
* Create non-password certificate file. Basically just dump the certificate
|
| 123 |
+
* string to temporary file.
|
| 124 |
+
*
|
| 125 |
+
* @throws Exception
|
| 126 |
+
*
|
| 127 |
+
* @param string $temp_file Filepath to temporary certificate file
|
| 128 |
+
*
|
| 129 |
+
* @return void
|
| 130 |
+
*/
|
| 131 |
+
protected function _maybe_create_non_secure_certificate_file( $temp_file ) {
|
| 132 |
+
if ( false === file_put_contents( $temp_file, $this->_certificate ) ) {
|
| 133 |
+
throw new Exception( sprintf( __( 'Unable to write certificate file %s during cURL configuration', 'woocommerce-gateway-ppec' ), $temp_file ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
| 134 |
+
}
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
/**
|
| 138 |
+
* Returns true if secure transport is available in current cURL.
|
| 139 |
+
*
|
| 140 |
+
* @return bool
|
| 141 |
+
*/
|
| 142 |
+
protected function _use_secure_transport() {
|
| 143 |
+
$curl_version = curl_version();
|
| 144 |
+
return false !== strpos( $curl_version['ssl_version'], 'SecureTransport' );
|
| 145 |
+
}
|
| 146 |
}
|
includes/class-wc-gateway-ppec-client.php
CHANGED
|
@@ -115,6 +115,9 @@ class WC_Gateway_PPEC_Client {
|
|
| 115 |
'httpversion' => '1.1',
|
| 116 |
);
|
| 117 |
|
|
|
|
|
|
|
|
|
|
| 118 |
wc_gateway_ppec_log( sprintf( '%s: remote request to %s with args: %s', __METHOD__, $this->get_endpoint(), print_r( $args, true ) ) );
|
| 119 |
|
| 120 |
$resp = wp_safe_remote_post( $this->get_endpoint(), $args );
|
|
@@ -133,11 +136,15 @@ class WC_Gateway_PPEC_Client {
|
|
| 133 |
|
| 134 |
wc_gateway_ppec_log( sprintf( '%s: acknowleged response body: %s', __METHOD__, print_r( $result, true ) ) );
|
| 135 |
|
|
|
|
|
|
|
| 136 |
// Let the caller deals with the response.
|
| 137 |
return $result;
|
| 138 |
|
| 139 |
} catch ( Exception $e ) {
|
| 140 |
|
|
|
|
|
|
|
| 141 |
// TODO: Maybe returns WP_Error ?
|
| 142 |
$error = array(
|
| 143 |
'ACK' => 'Failure',
|
| 115 |
'httpversion' => '1.1',
|
| 116 |
);
|
| 117 |
|
| 118 |
+
// For cURL transport.
|
| 119 |
+
add_action( 'http_api_curl', array( $this->_credential, 'configure_curl' ), 10, 3 );
|
| 120 |
+
|
| 121 |
wc_gateway_ppec_log( sprintf( '%s: remote request to %s with args: %s', __METHOD__, $this->get_endpoint(), print_r( $args, true ) ) );
|
| 122 |
|
| 123 |
$resp = wp_safe_remote_post( $this->get_endpoint(), $args );
|
| 136 |
|
| 137 |
wc_gateway_ppec_log( sprintf( '%s: acknowleged response body: %s', __METHOD__, print_r( $result, true ) ) );
|
| 138 |
|
| 139 |
+
remove_action( 'http_api_curl', array( $this->_credential, 'configure_curl' ), 10 );
|
| 140 |
+
|
| 141 |
// Let the caller deals with the response.
|
| 142 |
return $result;
|
| 143 |
|
| 144 |
} catch ( Exception $e ) {
|
| 145 |
|
| 146 |
+
remove_action( 'http_api_curl', array( $this->_credential, 'configure_curl' ), 10 );
|
| 147 |
+
|
| 148 |
// TODO: Maybe returns WP_Error ?
|
| 149 |
$error = array(
|
| 150 |
'ACK' => 'Failure',
|
includes/class-wc-gateway-ppec-plugin.php
CHANGED
|
@@ -128,6 +128,25 @@ class WC_Gateway_PPEC_Plugin {
|
|
| 128 |
if ( version_compare( WC()->version, '2.5', '<' ) ) {
|
| 129 |
throw new Exception( __( 'WooCommerce Gateway PayPal Express Checkout requires WooCommerce version 2.5 or greater', 'woocommerce-gateway-paypal-express-checkout' ) );
|
| 130 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
}
|
| 132 |
|
| 133 |
/**
|
| 128 |
if ( version_compare( WC()->version, '2.5', '<' ) ) {
|
| 129 |
throw new Exception( __( 'WooCommerce Gateway PayPal Express Checkout requires WooCommerce version 2.5 or greater', 'woocommerce-gateway-paypal-express-checkout' ) );
|
| 130 |
}
|
| 131 |
+
|
| 132 |
+
if ( ! function_exists( 'curl_init' ) ) {
|
| 133 |
+
throw new Exception( __( 'WooCommerce Gateway PayPal Express Checkout requires cURL to be installed on your server', 'woocommerce-gateway-paypal-express-checkout' ) );
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
$openssl_warning = __( 'WooCommerce Gateway PayPal Express Checkout requires OpenSSL >= 1.0.1 to be installed on your server', 'woocommerce-gateway-paypal-express-checkout' );
|
| 137 |
+
if ( ! defined( 'OPENSSL_VERSION_TEXT' ) ) {
|
| 138 |
+
throw new Exception( $openssl_warning );
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
preg_match( '/^OpenSSL ([\d.]+)/', OPENSSL_VERSION_TEXT, $matches );
|
| 142 |
+
if ( empty( $matches[1] ) ) {
|
| 143 |
+
throw new Exception( $openssl_warning );
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
|
| 147 |
+
if ( ! version_compare( $matches[1], '1.0.1', '>=' ) ) {
|
| 148 |
+
throw new Exception( $openssl_warning );
|
| 149 |
+
}
|
| 150 |
}
|
| 151 |
|
| 152 |
/**
|
includes/pem/bundle.pem
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-----BEGIN CERTIFICATE-----
|
| 2 |
+
MIIFWDCCBECgAwIBAgIQB8o+TSd/21eGoIdLI1qp6zANBgkqhkiG9w0BAQUFADCB
|
| 3 |
+
tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
|
| 4 |
+
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug
|
| 5 |
+
YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMm
|
| 6 |
+
VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwHhcNMTMwODAx
|
| 7 |
+
MDAwMDAwWhcNMTUwOTE4MjM1OTU5WjCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
|
| 8 |
+
CkNhbGlmb3JuaWExETAPBgNVBAcUCFNhbiBKb3NlMRUwEwYDVQQKFAxQYXlQYWws
|
| 9 |
+
IEluYy4xGjAYBgNVBAsUEVBheVBhbCBQcm9kdWN0aW9uMSIwIAYDVQQDFBlhcGkt
|
| 10 |
+
M3Quc2FuZGJveC5wYXlwYWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
| 11 |
+
CgKCAQEAqpUTPy8lOveTpJd8RBUWI73HcyLtNw+RbS2sxXa+7t3XTc6IEF0bF6dS
|
| 12 |
+
55d4r4GjU+eiFKYXx9atIO7aNnIp7ebVtPJTBBdRLFHwzpKmOhNPbwOozrThfY5F
|
| 13 |
+
KKVAjniUS+5qnxrRVGB3c42W+EVLu8xagQvRnTKr5DYA1lSLHmiXYUcuGgpvSF6p
|
| 14 |
+
OcHy5iKM3FIVTc98rxgUdlbh4L3Sv0HdGaPbx4UPJ41ft7ZsjHqoCIjNP9tZuMBn
|
| 15 |
+
6m/l+eCIiTvZYVJgHXkwz6pm5WP92hqsl3Ts+V/7jyJYJIqg+aWUc/DjZVkU9JND
|
| 16 |
+
PqQUuj88uM695MZyzS2pdbPAeQZ57wIDAQABo4IBiTCCAYUwJAYDVR0RBB0wG4IZ
|
| 17 |
+
YXBpLTN0LnNhbmRib3gucGF5cGFsLmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQE
|
| 18 |
+
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwQwYDVR0gBDwwOjA4
|
| 19 |
+
BgpghkgBhvhFAQc2MCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWdu
|
| 20 |
+
LmNvbS9jcHMwHwYDVR0jBBgwFoAUDURcFlNEwYJ+HSCrJfQBY9i+eaUwRQYDVR0f
|
| 21 |
+
BD4wPDA6oDigNoY0aHR0cDovL1NWUlNlY3VyZS1HMy1jcmwudmVyaXNpZ24uY29t
|
| 22 |
+
L1NWUlNlY3VyZUczLmNybDB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGGGGh0
|
| 23 |
+
dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBABggrBgEFBQcwAoY0aHR0cDovL1NWUlNl
|
| 24 |
+
Y3VyZS1HMy1haWEudmVyaXNpZ24uY29tL1NWUlNlY3VyZUczLmNlcjANBgkqhkiG
|
| 25 |
+
9w0BAQUFAAOCAQEASUdxPQFgUi6sSDJ4Aw071gf0sHRiiFMdZSJazmVxQA8/bpiD
|
| 26 |
+
CFDq5rYEMR8jqQMx4bPfeUjAZVwmT0q7YlLRGnDEyur6fd7yv1pbCCN0anfwORE2
|
| 27 |
+
tn/6yxgBp9JPaOc4k8mWbYr/1p94V/tlvaqZ52Cz8gQ7pMuvmWLgJuAhk0hdtNXq
|
| 28 |
+
vktqDfGCxdv+8CgoUdTQOdqQEkcz7HueAQ7DLCXum530p+QpQQy0xKT2+EzIXnHC
|
| 29 |
+
erln4DHogkj8dWt+oehtRZwChX5Aczig1P3zBW8SBuZwS1b8XZKudr7kFpZg1/S3
|
| 30 |
+
U30gP7d3TEvbnVtXSjTl3xLT3848FbJbfGmNKg==
|
| 31 |
+
-----END CERTIFICATE-----
|
| 32 |
+
-----BEGIN CERTIFICATE-----
|
| 33 |
+
MIIF7DCCBNSgAwIBAgIQbsx6pacDIAm4zrz06VLUkTANBgkqhkiG9w0BAQUFADCB
|
| 34 |
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
|
| 35 |
+
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
|
| 36 |
+
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
|
| 37 |
+
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
|
| 38 |
+
aG9yaXR5IC0gRzUwHhcNMTAwMjA4MDAwMDAwWhcNMjAwMjA3MjM1OTU5WjCBtTEL
|
| 39 |
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
|
| 40 |
+
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg
|
| 41 |
+
aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMmVmVy
|
| 42 |
+
aVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwggEiMA0GCSqGSIb3
|
| 43 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCxh4QfwgxF9byrJZenraI+nLr2wTm4i8rCrFbG
|
| 44 |
+
5btljkRPTc5v7QlK1K9OEJxoiy6Ve4mbE8riNDTB81vzSXtig0iBdNGIeGwCU/m8
|
| 45 |
+
f0MmV1gzgzszChew0E6RJK2GfWQS3HRKNKEdCuqWHQsV/KNLO85jiND4LQyUhhDK
|
| 46 |
+
tpo9yus3nABINYYpUHjoRWPNGUFP9ZXse5jUxHGzUL4os4+guVOc9cosI6n9FAbo
|
| 47 |
+
GLSa6Dxugf3kzTU2s1HTaewSulZub5tXxYsU5w7HnO1KVGrJTcW/EbGuHGeBy0RV
|
| 48 |
+
M5l/JJs/U0V/hhrzPPptf4H1uErT9YU3HLWm0AnkGHs4TvoPAgMBAAGjggHfMIIB
|
| 49 |
+
2zA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlz
|
| 50 |
+
aWduLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEAMHAGA1UdIARpMGcwZQYLYIZIAYb4
|
| 51 |
+
RQEHFwMwVjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL2Nw
|
| 52 |
+
czAqBggrBgEFBQcCAjAeGhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMDQG
|
| 53 |
+
A1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMtZzUu
|
| 54 |
+
Y3JsMA4GA1UdDwEB/wQEAwIBBjBtBggrBgEFBQcBDARhMF+hXaBbMFkwVzBVFglp
|
| 55 |
+
bWFnZS9naWYwITAfMAcGBSsOAwIaBBSP5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNo
|
| 56 |
+
dHRwOi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dvLmdpZjAoBgNVHREEITAfpB0w
|
| 57 |
+
GzEZMBcGA1UEAxMQVmVyaVNpZ25NUEtJLTItNjAdBgNVHQ4EFgQUDURcFlNEwYJ+
|
| 58 |
+
HSCrJfQBY9i+eaUwHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwDQYJ
|
| 59 |
+
KoZIhvcNAQEFBQADggEBAAyDJO/dwwzZWJz+NrbrioBL0aP3nfPMU++CnqOh5pfB
|
| 60 |
+
WJ11bOAdG0z60cEtBcDqbrIicFXZIDNAMwfCZYP6j0M3m+oOmmxw7vacgDvZN/R6
|
| 61 |
+
bezQGH1JSsqZxxkoor7YdyT3hSaGbYcFQEFn0Sc67dxIHSLNCwuLvPSxe/20majp
|
| 62 |
+
dirhGi2HbnTTiN0eIsbfFrYrghQKlFzyUOyvzv9iNw2tZdMGQVPtAhTItVgooazg
|
| 63 |
+
W+yzf5VK+wPIrSbb5mZ4EkrZn0L74ZjmQoObj49nJOhhGbXdzbULJgWOw27EyHW4
|
| 64 |
+
Rs/iGAZeqa6ogZpHFt4MKGwlJ7net4RYxh84HqTEy2Y=
|
| 65 |
+
-----END CERTIFICATE-----
|
| 66 |
+
-----BEGIN CERTIFICATE-----
|
| 67 |
+
MIIFyTCCBTKgAwIBAgIQek8uV8VnNIp7IFhGnUesRTANBgkqhkiG9w0BAQUFADCB
|
| 68 |
+
wTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQL
|
| 69 |
+
EzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
| 70 |
+
IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1
|
| 71 |
+
dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
| 72 |
+
cmswHhcNMDYxMTA4MDAwMDAwWhcNMjExMTA3MjM1OTU5WjCByjELMAkGA1UEBhMC
|
| 73 |
+
VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
|
| 74 |
+
cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAt
|
| 75 |
+
IEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFz
|
| 76 |
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUw
|
| 77 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1nmAMqudLO07c
|
| 78 |
+
fLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbext0uz/o9+B1fs
|
| 79 |
+
70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhDY2pSS9KP
|
| 80 |
+
6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06
|
| 81 |
+
tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnk
|
| 82 |
+
jWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUV
|
| 83 |
+
AgMBAAGjggIxMIICLTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA9
|
| 84 |
+
BgNVHSAENjA0MDIGBFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVy
|
| 85 |
+
aXNpZ24uY29tL2NwczAdBgNVHQ4EFgQUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwbQYI
|
| 86 |
+
KwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQU
|
| 87 |
+
j+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29t
|
| 88 |
+
L3ZzbG9nby5naWYwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL2NybC52ZXJpc2ln
|
| 89 |
+
bi5jb20vcGNhMy1nMi5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
|
| 90 |
+
MIHnBgNVHSMEgd8wgdyhgcekgcQwgcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5W
|
| 91 |
+
ZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBD
|
| 92 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBW
|
| 93 |
+
ZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQL
|
| 94 |
+
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrghB92f4Hz6getxB5Z/uniTTGMA0GCSqG
|
| 95 |
+
SIb3DQEBBQUAA4GBACca3K/R32nu+7tGBJ42k7SZ2f8Qk1+WLePXvICJmPKoaa87
|
| 96 |
+
LDVJgn/0lLMfmSON8O9Y1Z3ERVtwScITLo8C3ycnXngGNOQgRQJ9+pGhjE7rPGhF
|
| 97 |
+
Gx57i4p49zVt5Xh9uE50iML9njdENzUc6Tgi7e3Pp9Z3RDZqA0WjAQ3vq/uC
|
| 98 |
+
-----END CERTIFICATE-----
|
| 99 |
+
-----BEGIN CERTIFICATE-----
|
| 100 |
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
| 101 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
| 102 |
+
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
| 103 |
+
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
| 104 |
+
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
| 105 |
+
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
| 106 |
+
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
|
| 107 |
+
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
| 108 |
+
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
| 109 |
+
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
| 110 |
+
AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
|
| 111 |
+
pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
|
| 112 |
+
13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
|
| 113 |
+
AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
|
| 114 |
+
U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
|
| 115 |
+
F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
|
| 116 |
+
oJ2daZH9
|
| 117 |
+
-----END CERTIFICATE-----
|
readme.txt
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
=== WooCommerce PayPal Express Checkout Payment Gateway ===
|
| 2 |
-
Contributors: automattic, woothemes, akeda, dwainm, royho, allendav, slash1andy, woosteve, spraveenitpro, mikedmoore, fernashes, shellbeezy
|
| 3 |
Tags: ecommerce, e-commerce, commerce, woothemes, wordpress ecommerce, store, sales, sell, shop, shopping, cart, checkout, configurable, paypal
|
| 4 |
Requires at least: 4.4
|
| 5 |
Tested up to: 4.4
|
| 6 |
-
Stable tag: 1.0.
|
| 7 |
License: GPLv3
|
| 8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
| 9 |
|
|
@@ -56,7 +56,7 @@ Yes it does - production and sandbox mode is driven by how you connect. You may
|
|
| 56 |
|
| 57 |
= Where can I find documentation? =
|
| 58 |
|
| 59 |
-
For help setting up and configuring, please refer to our [user guide](
|
| 60 |
|
| 61 |
= Where can I get support or talk to other users? =
|
| 62 |
|
|
@@ -80,6 +80,13 @@ New feature requests and bugs reports can be made in the plugin forum.
|
|
| 80 |
|
| 81 |
== Changelog ==
|
| 82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
= 1.0.0 =
|
| 84 |
* Initial stable release
|
| 85 |
|
| 1 |
=== WooCommerce PayPal Express Checkout Payment Gateway ===
|
| 2 |
+
Contributors: automattic, woothemes, akeda, dwainm, royho, allendav, slash1andy, woosteve, spraveenitpro, mikedmoore, fernashes, shellbeezy, danieldudzic, mikaey
|
| 3 |
Tags: ecommerce, e-commerce, commerce, woothemes, wordpress ecommerce, store, sales, sell, shop, shopping, cart, checkout, configurable, paypal
|
| 4 |
Requires at least: 4.4
|
| 5 |
Tested up to: 4.4
|
| 6 |
+
Stable tag: 1.0.1
|
| 7 |
License: GPLv3
|
| 8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
| 9 |
|
| 56 |
|
| 57 |
= Where can I find documentation? =
|
| 58 |
|
| 59 |
+
For help setting up and configuring, please refer to our [user guide](https://www.woothemes.com/products/woocommerce-gateway-paypal-express-checkout/)
|
| 60 |
|
| 61 |
= Where can I get support or talk to other users? =
|
| 62 |
|
| 80 |
|
| 81 |
== Changelog ==
|
| 82 |
|
| 83 |
+
= 1.0.1
|
| 84 |
+
* Fix - Make sure OpenSSL is installed with 1.0.1 as the minium required version, otherwise display warning
|
| 85 |
+
* Fix - Make sure cURL transport is available for WP HTTP API, otherwise display warning
|
| 86 |
+
* Fix - Unhandled certificate-style API credential
|
| 87 |
+
* Fix - Fixed calculated tax and coupons data that sent over to PayPal
|
| 88 |
+
* Fix - Fixed calculated shipping discount data that sent over to PayPal
|
| 89 |
+
|
| 90 |
= 1.0.0 =
|
| 91 |
* Initial stable release
|
| 92 |
|
woocommerce-gateway-paypal-express-checkout.php
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
* Plugin Name: WooCommerce PayPal Express Checkout Gateway
|
| 4 |
* Plugin URI: https://woothemes.com
|
| 5 |
* Description: A payment gateway for PayPal Express Checkout ( https://www.paypal.com/us/webapps/mpp/express-checkout ). Requires WC 2.5+
|
| 6 |
-
* Version: 1.0.
|
| 7 |
* Author: Automattic/WooCommerce
|
| 8 |
* Author URI: https://woocommerce.com
|
| 9 |
* Copyright: © 2016 WooCommerce / PayPal.
|
|
@@ -36,7 +36,7 @@ function wc_gateway_ppec() {
|
|
| 36 |
if ( ! isset( $plugin ) ) {
|
| 37 |
require_once( 'includes/class-wc-gateway-ppec-plugin.php' );
|
| 38 |
|
| 39 |
-
$plugin = new WC_Gateway_PPEC_Plugin( __FILE__, '1.0.
|
| 40 |
}
|
| 41 |
|
| 42 |
return $plugin;
|
| 3 |
* Plugin Name: WooCommerce PayPal Express Checkout Gateway
|
| 4 |
* Plugin URI: https://woothemes.com
|
| 5 |
* Description: A payment gateway for PayPal Express Checkout ( https://www.paypal.com/us/webapps/mpp/express-checkout ). Requires WC 2.5+
|
| 6 |
+
* Version: 1.0.1
|
| 7 |
* Author: Automattic/WooCommerce
|
| 8 |
* Author URI: https://woocommerce.com
|
| 9 |
* Copyright: © 2016 WooCommerce / PayPal.
|
| 36 |
if ( ! isset( $plugin ) ) {
|
| 37 |
require_once( 'includes/class-wc-gateway-ppec-plugin.php' );
|
| 38 |
|
| 39 |
+
$plugin = new WC_Gateway_PPEC_Plugin( __FILE__, '1.0.1' );
|
| 40 |
}
|
| 41 |
|
| 42 |
return $plugin;
|
