Version Description
- Fix - Make sure translations are loaded properly.
- Fix - Added IPN (Instant Payment Notification) handler.
- Fix - Make sure guest payment is enabled by default.
Download this release
Release Info
Developer | akeda |
Plugin | WooCommerce PayPal Express Checkout Payment Gateway |
Version | 1.1.2 |
Comparing to | |
See all releases |
Code changes from version 1.1.1 to 1.1.2
- includes/abstracts/abstract-wc-gateway-ppec-paypal-request-handler.php +83 -0
- includes/abstracts/abstract-wc-gateway-ppec.php +2 -5
- includes/class-wc-gateway-ppec-checkout-handler.php +14 -10
- includes/class-wc-gateway-ppec-client-credential-certificate.php +6 -6
- includes/class-wc-gateway-ppec-client.php +5 -5
- includes/class-wc-gateway-ppec-ipn-handler.php +344 -0
- includes/class-wc-gateway-ppec-plugin.php +12 -0
- includes/class-wc-gateway-ppec-settings.php +16 -2
- includes/class-wc-gateway-ppec-with-paypal.php +5 -0
- includes/functions.php +4 -0
- languages/woocommerce-gateway-paypal-express-checkout.pot +845 -0
- readme.txt +6 -1
- woocommerce-gateway-paypal-express-checkout.php +2 -2
includes/abstracts/abstract-wc-gateway-ppec-paypal-request-handler.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Base class to handle request from PayPal.
|
9 |
+
*
|
10 |
+
* @since 1.1.2
|
11 |
+
*/
|
12 |
+
abstract class WC_Gateway_PPEC_PayPal_Request_Handler {
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Gateway instance.
|
16 |
+
*
|
17 |
+
* @var WC_Gateway_PPEC
|
18 |
+
*/
|
19 |
+
protected $gateway;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Constructor.
|
23 |
+
*
|
24 |
+
* @param WC_Gateway_PPEC $gateway PPEC gateway instance
|
25 |
+
*/
|
26 |
+
public function __construct( WC_Gateway_PPEC $gateway ) {
|
27 |
+
$this->gateway = $gateway;
|
28 |
+
}
|
29 |
+
|
30 |
+
abstract protected function handle();
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Get the order from the PayPal 'Custom' variable.
|
34 |
+
*
|
35 |
+
* @param string $raw_custom JSON Data passed back by PayPal
|
36 |
+
* @return bool|WC_Order Order object or false
|
37 |
+
*/
|
38 |
+
protected function get_paypal_order( $raw_custom ) {
|
39 |
+
// We have the data in the correct format, so get the order.
|
40 |
+
if ( ( $custom = json_decode( $raw_custom ) ) && is_object( $custom ) ) {
|
41 |
+
$order_id = $custom->order_id;
|
42 |
+
$order_key = $custom->order_key;
|
43 |
+
} else {
|
44 |
+
wc_gateway_ppec_log( sprintf( '%s: %s', __FUNCTION__, 'Error: Order ID and key were not found in "custom".' ) );
|
45 |
+
return false;
|
46 |
+
}
|
47 |
+
|
48 |
+
if ( ! $order = wc_get_order( $order_id ) ) {
|
49 |
+
// We have an invalid $order_id, probably because invoice_prefix has changed.
|
50 |
+
$order_id = wc_get_order_id_by_order_key( $order_key );
|
51 |
+
$order = wc_get_order( $order_id );
|
52 |
+
}
|
53 |
+
if ( ! $order || $order->order_key !== $order_key ) {
|
54 |
+
wc_gateway_ppec_log( sprintf( '%s: %s', __FUNCTION__, 'Error: Order Keys do not match.' ) );
|
55 |
+
return false;
|
56 |
+
}
|
57 |
+
return $order;
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Complete order, add transaction ID and note.
|
62 |
+
*
|
63 |
+
* @param WC_Order $order Order object
|
64 |
+
* @param string $txn_id Transaction ID
|
65 |
+
* @param string $note Order note
|
66 |
+
*/
|
67 |
+
protected function payment_complete( $order, $txn_id = '', $note = '' ) {
|
68 |
+
$order->add_order_note( $note );
|
69 |
+
$order->payment_complete( $txn_id );
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Hold order and add note.
|
74 |
+
*
|
75 |
+
* @param WC_Order $order Order object
|
76 |
+
* @param string $reason On-hold reason
|
77 |
+
*/
|
78 |
+
protected function payment_on_hold( $order, $reason = '' ) {
|
79 |
+
$order->update_status( 'on-hold', $reason );
|
80 |
+
wc_reduce_stock_levels( $order_id );
|
81 |
+
WC()->cart->empty_cart();
|
82 |
+
}
|
83 |
+
}
|
includes/abstracts/abstract-wc-gateway-ppec.php
CHANGED
@@ -234,7 +234,7 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
234 |
if ( ! empty( $username ) ) {
|
235 |
|
236 |
if ( empty( $password ) ) {
|
237 |
-
WC_Admin_Settings::add_error(
|
238 |
return false;
|
239 |
}
|
240 |
|
@@ -455,9 +455,6 @@ abstract class WC_Gateway_PPEC extends WC_Payment_Gateway {
|
|
455 |
* @return bool
|
456 |
*/
|
457 |
public function is_available() {
|
458 |
-
|
459 |
-
return false;
|
460 |
-
}
|
461 |
-
return true;
|
462 |
}
|
463 |
}
|
234 |
if ( ! empty( $username ) ) {
|
235 |
|
236 |
if ( empty( $password ) ) {
|
237 |
+
WC_Admin_Settings::add_error( __( 'Error: You must enter API password.', 'woocommerce-gateway-paypal-express-checkout' ) );
|
238 |
return false;
|
239 |
}
|
240 |
|
455 |
* @return bool
|
456 |
*/
|
457 |
public function is_available() {
|
458 |
+
return 'yes' === $this->enabled;
|
|
|
|
|
|
|
459 |
}
|
460 |
}
|
includes/class-wc-gateway-ppec-checkout-handler.php
CHANGED
@@ -406,12 +406,19 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
406 |
return $params;
|
407 |
}
|
408 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
409 |
protected function is_success( $response ) {
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
}
|
416 |
|
417 |
/**
|
@@ -549,7 +556,7 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
549 |
|
550 |
$response = wc_gateway_ppec()->client->get_express_checkout_details( $token );
|
551 |
|
552 |
-
if (
|
553 |
$checkout_details = new PayPal_Checkout_Details();
|
554 |
$checkout_details->loadFromGetECResponse( $response );
|
555 |
return $checkout_details;
|
@@ -574,11 +581,8 @@ class WC_Gateway_PPEC_Checkout_Handler {
|
|
574 |
|
575 |
// Generate params to send to paypal, then do request
|
576 |
$response = wc_gateway_ppec()->client->do_express_checkout_payment( array_merge(
|
577 |
-
$settings->get_do_express_checkout_params(),
|
578 |
$this->getDoExpressCheckoutParameters( $token, $payerID ),
|
579 |
-
|
580 |
-
'PAYMENTREQUEST_0_INVNUM' => $settings->invoice_prefix . $order->get_order_number(),
|
581 |
-
)
|
582 |
) );
|
583 |
|
584 |
if ( $this->is_success( $response ) ) {
|
406 |
return $params;
|
407 |
}
|
408 |
|
409 |
+
/**
|
410 |
+
* Whether PayPal response indicates an okay message.
|
411 |
+
*
|
412 |
+
* @param array $response Response from PayPal
|
413 |
+
*
|
414 |
+
* @return bool True if it's okay
|
415 |
+
*/
|
416 |
protected function is_success( $response ) {
|
417 |
+
return (
|
418 |
+
isset( $response['ACK'] )
|
419 |
+
&&
|
420 |
+
in_array( $response['ACK'], array( 'Success', 'SuccessWithWarning' ) )
|
421 |
+
);
|
422 |
}
|
423 |
|
424 |
/**
|
556 |
|
557 |
$response = wc_gateway_ppec()->client->get_express_checkout_details( $token );
|
558 |
|
559 |
+
if ( $this->is_success( $response ) ) {
|
560 |
$checkout_details = new PayPal_Checkout_Details();
|
561 |
$checkout_details->loadFromGetECResponse( $response );
|
562 |
return $checkout_details;
|
581 |
|
582 |
// Generate params to send to paypal, then do request
|
583 |
$response = wc_gateway_ppec()->client->do_express_checkout_payment( array_merge(
|
|
|
584 |
$this->getDoExpressCheckoutParameters( $token, $payerID ),
|
585 |
+
$settings->get_do_express_checkout_params( $order )
|
|
|
|
|
586 |
) );
|
587 |
|
588 |
if ( $this->is_success( $response ) ) {
|
includes/class-wc-gateway-ppec-client-credential-certificate.php
CHANGED
@@ -63,11 +63,11 @@ class WC_Gateway_PPEC_Client_Credential_Certificate extends WC_Gateway_PPEC_Clie
|
|
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-
|
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-
|
71 |
}
|
72 |
}
|
73 |
|
@@ -84,7 +84,7 @@ class WC_Gateway_PPEC_Client_Credential_Certificate extends WC_Gateway_PPEC_Clie
|
|
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-
|
88 |
}
|
89 |
|
90 |
if ( $this->_use_secure_transport() ) {
|
@@ -110,11 +110,11 @@ class WC_Gateway_PPEC_Client_Credential_Certificate extends WC_Gateway_PPEC_Clie
|
|
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-
|
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-
|
118 |
}
|
119 |
}
|
120 |
|
@@ -130,7 +130,7 @@ class WC_Gateway_PPEC_Client_Credential_Certificate extends WC_Gateway_PPEC_Clie
|
|
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-
|
134 |
}
|
135 |
}
|
136 |
|
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-paypal-express-checkout' ), 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-paypal-express-checkout' ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
71 |
}
|
72 |
}
|
73 |
|
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-paypal-express-checkout' ), $temp_file ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
88 |
}
|
89 |
|
90 |
if ( $this->_use_secure_transport() ) {
|
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-paypal-express-checkout' ), 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-paypal-express-checkout' ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
118 |
}
|
119 |
}
|
120 |
|
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-paypal-express-checkout' ), $temp_file ), WC_Gateway_PPEC_Client::INVALID_ENVIRONMENT_ERROR );
|
134 |
}
|
135 |
}
|
136 |
|
includes/class-wc-gateway-ppec-client.php
CHANGED
@@ -118,15 +118,15 @@ class WC_Gateway_PPEC_Client {
|
|
118 |
|
119 |
// Make sure $_credential and $_environment have been configured.
|
120 |
if ( ! $this->_credential ) {
|
121 |
-
throw new Exception( __( 'Missing credential', 'woocommerce-gateway-
|
122 |
}
|
123 |
|
124 |
if ( ! is_a( $this->_credential, 'WC_Gateway_PPEC_Client_Credential' ) ) {
|
125 |
-
throw new Exception( __( 'Invalid credential object', 'woocommerce-gateway-
|
126 |
}
|
127 |
|
128 |
if ( ! in_array( $this->_environment, array( 'live', 'sandbox' ) ) ) {
|
129 |
-
throw new Exception( __( 'Invalid environment', 'woocommerce-gateway-
|
130 |
}
|
131 |
|
132 |
// First, add in the necessary credential parameters.
|
@@ -149,13 +149,13 @@ class WC_Gateway_PPEC_Client {
|
|
149 |
wc_gateway_ppec_log( sprintf( '%s: response from remote request to %s: %s', __METHOD__, $this->get_endpoint(), print_r( $resp, true ) ) );
|
150 |
|
151 |
if ( is_wp_error( $resp ) ) {
|
152 |
-
throw new Exception( sprintf( __( 'An error occurred while trying to connect to PayPal: %s', 'woocommerce-gateway-
|
153 |
}
|
154 |
|
155 |
parse_str( wp_remote_retrieve_body( $resp ), $result );
|
156 |
|
157 |
if ( ! array_key_exists( 'ACK', $result ) ) {
|
158 |
-
throw new Exception( __( 'Malformed response received from PayPal', 'woocommerce-gateway-
|
159 |
}
|
160 |
|
161 |
wc_gateway_ppec_log( sprintf( '%s: acknowleged response body: %s', __METHOD__, print_r( $result, true ) ) );
|
118 |
|
119 |
// Make sure $_credential and $_environment have been configured.
|
120 |
if ( ! $this->_credential ) {
|
121 |
+
throw new Exception( __( 'Missing credential', 'woocommerce-gateway-paypal-express-checkout' ), self::INVALID_CREDENTIAL_ERROR );
|
122 |
}
|
123 |
|
124 |
if ( ! is_a( $this->_credential, 'WC_Gateway_PPEC_Client_Credential' ) ) {
|
125 |
+
throw new Exception( __( 'Invalid credential object', 'woocommerce-gateway-paypal-express-checkout' ), self::INVALID_CREDENTIAL_ERROR );
|
126 |
}
|
127 |
|
128 |
if ( ! in_array( $this->_environment, array( 'live', 'sandbox' ) ) ) {
|
129 |
+
throw new Exception( __( 'Invalid environment', 'woocommerce-gateway-paypal-express-checkout' ), self::INVALID_ENVIRONMENT_ERROR );
|
130 |
}
|
131 |
|
132 |
// First, add in the necessary credential parameters.
|
149 |
wc_gateway_ppec_log( sprintf( '%s: response from remote request to %s: %s', __METHOD__, $this->get_endpoint(), print_r( $resp, true ) ) );
|
150 |
|
151 |
if ( is_wp_error( $resp ) ) {
|
152 |
+
throw new Exception( sprintf( __( 'An error occurred while trying to connect to PayPal: %s', 'woocommerce-gateway-paypal-express-checkout' ), $resp->get_error_message() ), self::REQUEST_ERROR );
|
153 |
}
|
154 |
|
155 |
parse_str( wp_remote_retrieve_body( $resp ), $result );
|
156 |
|
157 |
if ( ! array_key_exists( 'ACK', $result ) ) {
|
158 |
+
throw new Exception( __( 'Malformed response received from PayPal', 'woocommerce-gateway-paypal-express-checkout' ), self::REQUEST_ERROR );
|
159 |
}
|
160 |
|
161 |
wc_gateway_ppec_log( sprintf( '%s: acknowleged response body: %s', __METHOD__, print_r( $result, true ) ) );
|
includes/class-wc-gateway-ppec-ipn-handler.php
ADDED
@@ -0,0 +1,344 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
/**
|
8 |
+
* WC_Gateway_PPEC_Cart_Handler handles button display in the cart.
|
9 |
+
*
|
10 |
+
* @see https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNImplementation/
|
11 |
+
* @since 1.1.2
|
12 |
+
*/
|
13 |
+
class WC_Gateway_PPEC_IPN_Handler extends WC_Gateway_PPEC_PayPal_Request_Handler {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Handle the IPN request.
|
17 |
+
*/
|
18 |
+
public function handle() {
|
19 |
+
add_action( 'woocommerce_api_wc_gateway_ppec', array( $this, 'check_request' ) );
|
20 |
+
add_action( 'woocommerce_paypal_express_checkout_valid_ipn_request', array( $this, 'handle_valid_ipn' ) );
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Check request.
|
25 |
+
*/
|
26 |
+
public function check_request() {
|
27 |
+
try {
|
28 |
+
|
29 |
+
if ( empty( $_POST ) ) {
|
30 |
+
throw new Exception( esc_html__( 'Empty POST data.', 'woocommerce-gateway-paypal-express-checkout' ) );
|
31 |
+
}
|
32 |
+
|
33 |
+
if ( $this->is_valid_ipn_request( $_POST ) ) {
|
34 |
+
wc_gateway_ppec_log( 'IPN request is valid according to PayPal.' );
|
35 |
+
do_action( 'woocommerce_paypal_express_checkout_valid_ipn_request', wp_unslash( $_POST ) );
|
36 |
+
exit;
|
37 |
+
} else {
|
38 |
+
wc_gateway_ppec_log( 'IPN request is NOT valid according to PayPal.' );
|
39 |
+
throw new Exception( esc_html__( 'Invalid IPN request.' , 'woocommerce-gateway-paypal-express-checkout' ) );
|
40 |
+
}
|
41 |
+
|
42 |
+
} catch ( Exception $e ) {
|
43 |
+
|
44 |
+
wp_die( $e->getMessage(), esc_html__( 'PayPal IPN Request Failure', 'woocommerce-gateway-paypal-express-checkout' ), array( 'response' => 500 ) );
|
45 |
+
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Check with PayPal whether posted data is valid IPN request.
|
51 |
+
*
|
52 |
+
* @throws Exception
|
53 |
+
*
|
54 |
+
* @param array $posted_data Posted data
|
55 |
+
* @return bool True if posted_data is valid IPN request
|
56 |
+
*/
|
57 |
+
public function is_valid_ipn_request( array $posted_data ) {
|
58 |
+
wc_gateway_ppec_log( sprintf( '%s: %s', __FUNCTION__, 'Checking IPN request validity' ) );
|
59 |
+
|
60 |
+
$ipn_request = array(
|
61 |
+
'cmd' => '_notify-validate',
|
62 |
+
);
|
63 |
+
$ipn_request += wp_unslash( $posted_data );
|
64 |
+
|
65 |
+
$params = array(
|
66 |
+
'body' => $ipn_request,
|
67 |
+
'timeout' => 60,
|
68 |
+
'httpversion' => '1.1',
|
69 |
+
'compress' => false,
|
70 |
+
'decompress' => false,
|
71 |
+
'user-agent' => get_class( $this->gateway ),
|
72 |
+
);
|
73 |
+
|
74 |
+
// Post back to PayPal to check validity of IPN request.
|
75 |
+
$response = wp_safe_remote_post( $this->get_validator_url(), $params );
|
76 |
+
|
77 |
+
wc_gateway_ppec_log( sprintf( '%s: %s: %s', __FUNCTION__, 'Verify IPN request', print_r( $params, true ) ) );
|
78 |
+
wc_gateway_ppec_log( sprintf( '%s: %s: %s', __FUNCTION__, 'Response for the IPN request', print_r( $response, true ) ) );
|
79 |
+
|
80 |
+
if ( is_wp_error( $response ) ) {
|
81 |
+
throw new Exception( $response->get_error_message() );
|
82 |
+
}
|
83 |
+
|
84 |
+
return (
|
85 |
+
$response['response']['code'] >= 200
|
86 |
+
&&
|
87 |
+
$response['response']['code'] < 300
|
88 |
+
&&
|
89 |
+
strstr( $response['body'], 'VERIFIED' )
|
90 |
+
);
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Handle valid IPN request.
|
95 |
+
*
|
96 |
+
* @param array $posted_data Posted data
|
97 |
+
*/
|
98 |
+
public function handle_valid_ipn( $posted_data ) {
|
99 |
+
if ( ! empty( $posted_data['custom'] ) && ( $order = $this->get_paypal_order( $posted_data['custom'] ) ) ) {
|
100 |
+
|
101 |
+
// Lowercase returned variables.
|
102 |
+
$posted_data['payment_status'] = strtolower( $posted_data['payment_status'] );
|
103 |
+
|
104 |
+
// Sandbox fix.
|
105 |
+
if ( isset( $posted_data['test_ipn'] ) && 1 == $posted_data['test_ipn'] && 'pending' == $posted_data['payment_status'] ) {
|
106 |
+
$posted_data['payment_status'] = 'completed';
|
107 |
+
}
|
108 |
+
|
109 |
+
wc_gateway_ppec_log( 'Found order #' . $order->id );
|
110 |
+
wc_gateway_ppec_log( 'Payment status: ' . $posted_data['payment_status'] );
|
111 |
+
|
112 |
+
if ( method_exists( $this, 'payment_status_' . $posted_data['payment_status'] ) ) {
|
113 |
+
call_user_func( array( $this, 'payment_status_' . $posted_data['payment_status'] ), $order, $posted_data );
|
114 |
+
}
|
115 |
+
|
116 |
+
} else {
|
117 |
+
wc_gateway_ppec_log( sprintf( '%s: %s', __FUNCTION__, 'No order data being passed' ) );
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Check for a valid transaction type.
|
123 |
+
*
|
124 |
+
* @param string $txn_type Transaction type
|
125 |
+
*/
|
126 |
+
protected function validate_transaction_type( $txn_type ) {
|
127 |
+
$accepted_types = array( 'cart', 'instant', 'express_checkout', 'web_accept', 'masspay', 'send_money' );
|
128 |
+
if ( ! in_array( strtolower( $txn_type ), $accepted_types ) ) {
|
129 |
+
wc_gateway_ppec_log( 'Aborting, Invalid type:' . $txn_type );
|
130 |
+
exit;
|
131 |
+
}
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Check currency from IPN matches the order.
|
136 |
+
*
|
137 |
+
* @param WC_Order $order Order object
|
138 |
+
* @param string $currency Currency
|
139 |
+
*/
|
140 |
+
protected function validate_currency( $order, $currency ) {
|
141 |
+
if ( $order->order_currency !== $currency ) {
|
142 |
+
wc_gateway_ppec_log( 'Payment error: Currencies do not match (sent "' . $order->order_currency . '" | returned "' . $currency . '")' );
|
143 |
+
// Put this order on-hold for manual checking.
|
144 |
+
$order->update_status( 'on-hold', sprintf( __( 'Validation error: PayPal currencies do not match (code %s).', 'woocommerce-gateway-paypal-express-checkout' ), $currency ) );
|
145 |
+
exit;
|
146 |
+
}
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Check payment amount from IPN matches the order.
|
151 |
+
*
|
152 |
+
* @param WC_Order $order Order object
|
153 |
+
* @param int $amount Amount
|
154 |
+
*/
|
155 |
+
protected function validate_amount( $order, $amount ) {
|
156 |
+
if ( number_format( $order->get_total(), 2, '.', '' ) != number_format( $amount, 2, '.', '' ) ) {
|
157 |
+
wc_gateway_ppec_log( 'Payment error: Amounts do not match (gross ' . $amount . ')' );
|
158 |
+
// Put this order on-hold for manual checking.
|
159 |
+
$order->update_status( 'on-hold', sprintf( __( 'Validation error: PayPal amounts do not match (gross %s).', 'woocommerce-gateway-paypal-express-checkout' ), $amount ) );
|
160 |
+
exit;
|
161 |
+
}
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Handle a completed payment.
|
166 |
+
*
|
167 |
+
* @param WC_Order $order Order object
|
168 |
+
* @param array $posted_data Posted data
|
169 |
+
*/
|
170 |
+
protected function payment_status_completed( $order, $posted_data ) {
|
171 |
+
if ( $order->has_status( array( 'processing', 'completed' ) ) ) {
|
172 |
+
wc_gateway_ppec_log( 'Aborting, Order #' . $order->id . ' is already complete.' );
|
173 |
+
exit;
|
174 |
+
}
|
175 |
+
|
176 |
+
$this->validate_transaction_type( $posted_data['txn_type'] );
|
177 |
+
$this->validate_currency( $order, $posted_data['mc_currency'] );
|
178 |
+
$this->validate_amount( $order, $posted_data['mc_gross'] );
|
179 |
+
$this->save_paypal_meta_data( $order, $posted_data );
|
180 |
+
|
181 |
+
if ( 'completed' === $posted_data['payment_status'] ) {
|
182 |
+
$this->payment_complete( $order, ( ! empty( $posted_data['txn_id'] ) ? wc_clean( $posted_data['txn_id'] ) : '' ), __( 'IPN payment completed', 'woocommerce-gateway-paypal-express-checkout' ) );
|
183 |
+
if ( ! empty( $posted_data['mc_fee'] ) ) {
|
184 |
+
// Log paypal transaction fee.
|
185 |
+
update_post_meta( $order->id, 'PayPal Transaction Fee', wc_clean( $posted_data['mc_fee'] ) );
|
186 |
+
}
|
187 |
+
} else {
|
188 |
+
if ( 'authorization' === $posted_data['pending_reason'] ) {
|
189 |
+
$this->payment_on_hold( $order, __( 'Payment authorized. Change payment status to processing or complete to capture funds.', 'woocommerce-gateway-paypal-express-checkout' ) );
|
190 |
+
} else {
|
191 |
+
$this->payment_on_hold( $order, sprintf( __( 'Payment pending (%s).', 'woocommerce-gateway-paypal-express-checkout' ), $posted_data['pending_reason'] ) );
|
192 |
+
}
|
193 |
+
}
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
* Handle a pending payment.
|
198 |
+
*
|
199 |
+
* @param WC_Order $order Order object
|
200 |
+
* @param array $posted_data Posted data
|
201 |
+
*/
|
202 |
+
protected function payment_status_pending( $order, $posted_data ) {
|
203 |
+
$this->payment_status_completed( $order, $posted_data );
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Handle a failed payment.
|
208 |
+
*
|
209 |
+
* @param WC_Order $order Order object
|
210 |
+
* @param array $posted_data Posted data
|
211 |
+
*/
|
212 |
+
protected function payment_status_failed( $order, $posted_data ) {
|
213 |
+
$order->update_status( 'failed', sprintf( __( 'Payment %s via IPN.', 'woocommerce-gateway-paypal-express-checkout' ), wc_clean( $posted_data['payment_status'] ) ) );
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Handle a denied payment.
|
218 |
+
*
|
219 |
+
* @param WC_Order $order Order object
|
220 |
+
* @param array $posted_data Posted data
|
221 |
+
*/
|
222 |
+
protected function payment_status_denied( $order, $posted_data ) {
|
223 |
+
$this->payment_status_failed( $order, $posted_data );
|
224 |
+
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Handle an expired payment.
|
228 |
+
*
|
229 |
+
* @param WC_Order $order Order object
|
230 |
+
* @param array $posted_data Posted data
|
231 |
+
*/
|
232 |
+
protected function payment_status_expired( $order, $posted_data ) {
|
233 |
+
$this->payment_status_failed( $order, $posted_data );
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* Handle a voided payment.
|
238 |
+
*
|
239 |
+
* @param WC_Order $order Order object
|
240 |
+
* @param array $posted_data Posted data
|
241 |
+
*/
|
242 |
+
protected function payment_status_voided( $order, $posted_data ) {
|
243 |
+
$this->payment_status_failed( $order, $posted_data );
|
244 |
+
}
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Handle a refunded order.
|
248 |
+
*
|
249 |
+
* @param WC_Order $order Order object
|
250 |
+
* @param array $posted_data Posted data
|
251 |
+
*/
|
252 |
+
protected function payment_status_refunded( $order, $posted_data ) {
|
253 |
+
// Only handle full refunds, not partial.
|
254 |
+
if ( $order->get_total() == ( $posted_data['mc_gross'] * -1 ) ) {
|
255 |
+
// Mark order as refunded.
|
256 |
+
$order->update_status( 'refunded', sprintf( __( 'Payment %s via IPN.', 'woocommerce-gateway-paypal-express-checkout' ), strtolower( $posted_data['payment_status'] ) ) );
|
257 |
+
$this->send_ipn_email_notification(
|
258 |
+
sprintf( __( 'Payment for order %s refunded', 'woocommerce-gateway-paypal-express-checkout' ), '<a class="link" href="' . esc_url( admin_url( 'post.php?post=' . $order->id . '&action=edit' ) ) . '">' . $order->get_order_number() . '</a>' ),
|
259 |
+
sprintf( __( 'Order #%s has been marked as refunded - PayPal reason code: %s', 'woocommerce-gateway-paypal-express-checkout' ), $order->get_order_number(), $posted_data['reason_code'] )
|
260 |
+
);
|
261 |
+
}
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Handle a reveral.
|
266 |
+
*
|
267 |
+
* @param WC_Order $order Order object
|
268 |
+
* @param array $posted_data Posted data
|
269 |
+
*/
|
270 |
+
protected function payment_status_reversed( $order, $posted_data ) {
|
271 |
+
$order->update_status( 'on-hold', sprintf( __( 'Payment %s via IPN.', 'woocommerce-gateway-paypal-express-checkout' ), wc_clean( $posted_data['payment_status'] ) ) );
|
272 |
+
$this->send_ipn_email_notification(
|
273 |
+
sprintf( __( 'Payment for order %s reversed', 'woocommerce-gateway-paypal-express-checkout' ), '<a class="link" href="' . esc_url( admin_url( 'post.php?post=' . $order->id . '&action=edit' ) ) . '">' . $order->get_order_number() . '</a>' ),
|
274 |
+
sprintf( __( 'Order #%s has been marked on-hold due to a reversal - PayPal reason code: %s', 'woocommerce-gateway-paypal-express-checkout' ), $order->get_order_number(), wc_clean( $posted_data['reason_code'] ) )
|
275 |
+
);
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* Handle a cancelled reveral.
|
280 |
+
*
|
281 |
+
* @param WC_Order $order Order object
|
282 |
+
* @param array $posted_data Posted data
|
283 |
+
*/
|
284 |
+
protected function payment_status_canceled_reversal( $order, $posted_data ) {
|
285 |
+
$this->send_ipn_email_notification(
|
286 |
+
sprintf( __( 'Reversal cancelled for order #%s', 'woocommerce-gateway-paypal-express-checkout' ), $order->get_order_number() ),
|
287 |
+
sprintf( __( 'Order #%s has had a reversal cancelled. Please check the status of payment and update the order status accordingly here: %s', 'woocommerce-gateway-paypal-express-checkout' ), $order->get_order_number(), esc_url( admin_url( 'post.php?post=' . $order->id . '&action=edit' ) ) )
|
288 |
+
);
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* Save important data from the IPN to the order.
|
293 |
+
*
|
294 |
+
* @param WC_Order $order Order object
|
295 |
+
* @param array $posted_data Posted data
|
296 |
+
*/
|
297 |
+
protected function save_paypal_meta_data( $order, $posted_data ) {
|
298 |
+
if ( ! empty( $posted_data['payer_email'] ) ) {
|
299 |
+
update_post_meta( $order->id, 'Payer PayPal address', wc_clean( $posted_data['payer_email'] ) );
|
300 |
+
}
|
301 |
+
if ( ! empty( $posted_data['first_name'] ) ) {
|
302 |
+
update_post_meta( $order->id, 'Payer first name', wc_clean( $posted_data['first_name'] ) );
|
303 |
+
}
|
304 |
+
if ( ! empty( $posted_data['last_name'] ) ) {
|
305 |
+
update_post_meta( $order->id, 'Payer last name', wc_clean( $posted_data['last_name'] ) );
|
306 |
+
}
|
307 |
+
if ( ! empty( $posted_data['payment_type'] ) ) {
|
308 |
+
update_post_meta( $order->id, 'Payment type', wc_clean( $posted_data['payment_type'] ) );
|
309 |
+
}
|
310 |
+
if ( ! empty( $posted_data['txn_id'] ) ) {
|
311 |
+
update_post_meta( $order->id, '_transaction_id', wc_clean( $posted_data['txn_id'] ) );
|
312 |
+
}
|
313 |
+
if ( ! empty( $posted_data['payment_status'] ) ) {
|
314 |
+
update_post_meta( $order->id, '_paypal_status', wc_clean( $posted_data['payment_status'] ) );
|
315 |
+
}
|
316 |
+
}
|
317 |
+
|
318 |
+
/**
|
319 |
+
* Send a notification to the user handling orders.
|
320 |
+
*
|
321 |
+
* @param string $subject Email subject
|
322 |
+
* @param string $message Email message
|
323 |
+
*/
|
324 |
+
protected function send_ipn_email_notification( $subject, $message ) {
|
325 |
+
$new_order_settings = get_option( 'woocommerce_new_order_settings', array() );
|
326 |
+
$mailer = WC()->mailer();
|
327 |
+
$message = $mailer->wrap_message( $subject, $message );
|
328 |
+
$mailer->send( ! empty( $new_order_settings['recipient'] ) ? $new_order_settings['recipient'] : get_option( 'admin_email' ), strip_tags( $subject ), $message );
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Get IPN request validator URL.
|
333 |
+
*
|
334 |
+
* @return string PayPal IPN request validator URL
|
335 |
+
*/
|
336 |
+
public function get_validator_url() {
|
337 |
+
$url = 'https://www.paypal.com/cgi-bin/webscr';
|
338 |
+
if ( 'sandbox' === $this->gateway->environment ) {
|
339 |
+
$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
|
340 |
+
}
|
341 |
+
|
342 |
+
return $url;
|
343 |
+
}
|
344 |
+
}
|
includes/class-wc-gateway-ppec-plugin.php
CHANGED
@@ -144,6 +144,7 @@ class WC_Gateway_PPEC_Plugin {
|
|
144 |
|
145 |
add_action( 'plugins_loaded', array( $this, 'bootstrap' ) );
|
146 |
add_filter( 'allowed_redirect_hosts' , array( $this, 'whitelist_paypal_domains_for_redirect' ) );
|
|
|
147 |
}
|
148 |
|
149 |
public function bootstrap() {
|
@@ -286,6 +287,8 @@ class WC_Gateway_PPEC_Plugin {
|
|
286 |
require_once( $this->includes_path . 'class-wc-gateway-ppec-checkout-handler.php' );
|
287 |
require_once( $this->includes_path . 'class-wc-gateway-ppec-cart-handler.php' );
|
288 |
require_once( $this->includes_path . 'class-wc-gateway-ppec-ips-handler.php' );
|
|
|
|
|
289 |
|
290 |
$this->settings = new WC_Gateway_PPEC_Settings();
|
291 |
$this->gateway_loader = new WC_Gateway_PPEC_Gateway_Loader();
|
@@ -336,4 +339,13 @@ class WC_Gateway_PPEC_Plugin {
|
|
336 |
$domains[] = 'sandbox.paypal.com';
|
337 |
return $domains;
|
338 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
339 |
}
|
144 |
|
145 |
add_action( 'plugins_loaded', array( $this, 'bootstrap' ) );
|
146 |
add_filter( 'allowed_redirect_hosts' , array( $this, 'whitelist_paypal_domains_for_redirect' ) );
|
147 |
+
add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
|
148 |
}
|
149 |
|
150 |
public function bootstrap() {
|
287 |
require_once( $this->includes_path . 'class-wc-gateway-ppec-checkout-handler.php' );
|
288 |
require_once( $this->includes_path . 'class-wc-gateway-ppec-cart-handler.php' );
|
289 |
require_once( $this->includes_path . 'class-wc-gateway-ppec-ips-handler.php' );
|
290 |
+
require_once( $this->includes_path . 'abstracts/abstract-wc-gateway-ppec-paypal-request-handler.php' );
|
291 |
+
require_once( $this->includes_path . 'class-wc-gateway-ppec-ipn-handler.php' );
|
292 |
|
293 |
$this->settings = new WC_Gateway_PPEC_Settings();
|
294 |
$this->gateway_loader = new WC_Gateway_PPEC_Gateway_Loader();
|
339 |
$domains[] = 'sandbox.paypal.com';
|
340 |
return $domains;
|
341 |
}
|
342 |
+
|
343 |
+
/**
|
344 |
+
* Load localisation files.
|
345 |
+
*
|
346 |
+
* @since 1.1.2
|
347 |
+
*/
|
348 |
+
public function load_plugin_textdomain() {
|
349 |
+
load_plugin_textdomain( 'woocommerce-gateway-paypal-express-checkout', false, plugin_basename( $this->plugin_path ) . '/languages' );
|
350 |
+
}
|
351 |
}
|
includes/class-wc-gateway-ppec-settings.php
CHANGED
@@ -114,7 +114,7 @@ class WC_Gateway_PPEC_Settings {
|
|
114 |
$params['LOGOIMG'] = $this->logo_image_url;
|
115 |
}
|
116 |
|
117 |
-
if (
|
118 |
$params['SOLUTIONTYPE'] = 'Sole';
|
119 |
}
|
120 |
|
@@ -174,7 +174,18 @@ class WC_Gateway_PPEC_Settings {
|
|
174 |
|
175 |
return $params;
|
176 |
}
|
177 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
$params = array();
|
179 |
if ( ! is_array( $buckets ) ) {
|
180 |
$numBuckets = $buckets;
|
@@ -185,7 +196,10 @@ class WC_Gateway_PPEC_Settings {
|
|
185 |
}
|
186 |
|
187 |
foreach ( $buckets as $bucketNum ) {
|
|
|
188 |
$params[ 'PAYMENTREQUEST_' . $bucketNum . '_PAYMENTACTION' ] = $this->get_paymentaction();
|
|
|
|
|
189 |
}
|
190 |
|
191 |
return $params;
|
114 |
$params['LOGOIMG'] = $this->logo_image_url;
|
115 |
}
|
116 |
|
117 |
+
if ( apply_filters( 'woocommerce_paypal_express_checkout_allow_guests', true ) ) {
|
118 |
$params['SOLUTIONTYPE'] = 'Sole';
|
119 |
}
|
120 |
|
174 |
|
175 |
return $params;
|
176 |
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Get base parameters, based on settings instance, for DoExpressCheckoutCheckout NVP call.
|
180 |
+
*
|
181 |
+
* @see https://developer.paypal.com/docs/classic/api/merchant/DoExpressCheckoutPayment_API_Operation_NVP/
|
182 |
+
*
|
183 |
+
* @param WC_Order $order Order object
|
184 |
+
* @param int|array $buckets Number of buckets or list of bucket
|
185 |
+
*
|
186 |
+
* @return array DoExpressCheckoutPayment parameters
|
187 |
+
*/
|
188 |
+
public function get_do_express_checkout_params( WC_Order $order, $buckets = 1 ) {
|
189 |
$params = array();
|
190 |
if ( ! is_array( $buckets ) ) {
|
191 |
$numBuckets = $buckets;
|
196 |
}
|
197 |
|
198 |
foreach ( $buckets as $bucketNum ) {
|
199 |
+
$params[ 'PAYMENTREQUEST_' . $bucketNum . '_NOTIFYURL' ] = WC()->api_request_url( 'WC_Gateway_PPEC' );
|
200 |
$params[ 'PAYMENTREQUEST_' . $bucketNum . '_PAYMENTACTION' ] = $this->get_paymentaction();
|
201 |
+
$params[ 'PAYMENTREQUEST_' . $bucketNum . '_INVNUM' ] = $this->invoice_prefix . $order->get_order_number();
|
202 |
+
$params[ 'PAYMENTREQUEST_' . $bucketNum . '_CUSTOM' ] = json_encode( array( 'order_id' => $order->id, 'order_key' => $order->order_key ) );
|
203 |
}
|
204 |
|
205 |
return $params;
|
includes/class-wc-gateway-ppec-with-paypal.php
CHANGED
@@ -8,5 +8,10 @@ class WC_Gateway_PPEC_With_PayPal extends WC_Gateway_PPEC {
|
|
8 |
public function __construct() {
|
9 |
$this->id = 'ppec_paypal';
|
10 |
parent::__construct();
|
|
|
|
|
|
|
|
|
|
|
11 |
}
|
12 |
}
|
8 |
public function __construct() {
|
9 |
$this->id = 'ppec_paypal';
|
10 |
parent::__construct();
|
11 |
+
|
12 |
+
if ( $this->is_available() ) {
|
13 |
+
$ipn_handler = new WC_Gateway_PPEC_IPN_Handler( $this );
|
14 |
+
$ipn_handler->handle();
|
15 |
+
}
|
16 |
}
|
17 |
}
|
includes/functions.php
CHANGED
@@ -63,4 +63,8 @@ function wc_gateway_ppec_log( $message ) {
|
|
63 |
}
|
64 |
|
65 |
$wc_ppec_logger->add( 'wc_gateway_ppec', $message );
|
|
|
|
|
|
|
|
|
66 |
}
|
63 |
}
|
64 |
|
65 |
$wc_ppec_logger->add( 'wc_gateway_ppec', $message );
|
66 |
+
|
67 |
+
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
68 |
+
error_log( $message );
|
69 |
+
}
|
70 |
}
|
languages/woocommerce-gateway-paypal-express-checkout.pot
ADDED
@@ -0,0 +1,845 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2016 Automattic
|
2 |
+
# This file is distributed under the GNU General Public License v3.0.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: WooCommerce PayPal Express Checkout Gateway 1.1.1\n"
|
6 |
+
"Report-Msgid-Bugs-To: "
|
7 |
+
"https://github.com/woothemes/woocommerce-gateway-paypal-express-checkout/"
|
8 |
+
"issues\n"
|
9 |
+
"POT-Creation-Date: 2016-08-20 20:23:39+00:00\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=utf-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
|
14 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
15 |
+
"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
|
16 |
+
"X-Generator: grunt-wp-i18n 0.5.4\n"
|
17 |
+
|
18 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:19
|
19 |
+
#: includes/settings/settings-ppec.php:135
|
20 |
+
msgid "PayPal Express Checkout"
|
21 |
+
msgstr ""
|
22 |
+
|
23 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:20
|
24 |
+
msgid "Allow customers to conveniently checkout directly with PayPal."
|
25 |
+
msgstr ""
|
26 |
+
|
27 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:23
|
28 |
+
msgid "Continue to payment"
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:120
|
32 |
+
msgid ""
|
33 |
+
"Sorry, an error occurred while trying to process your payment. Please try "
|
34 |
+
"again."
|
35 |
+
msgstr ""
|
36 |
+
|
37 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:150
|
38 |
+
msgid "No API certificate on file."
|
39 |
+
msgstr ""
|
40 |
+
|
41 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:162
|
42 |
+
msgid "expired on %s"
|
43 |
+
msgstr ""
|
44 |
+
|
45 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:165
|
46 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:168
|
47 |
+
msgid "expires on %s"
|
48 |
+
msgstr ""
|
49 |
+
|
50 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:172
|
51 |
+
msgid "Certificate belongs to API username %1$s; %2$s"
|
52 |
+
msgstr ""
|
53 |
+
|
54 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:174
|
55 |
+
msgid "The certificate on file is not valid."
|
56 |
+
msgstr ""
|
57 |
+
|
58 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:189
|
59 |
+
msgid "Error: The logo image URL you provided is not valid and cannot be used."
|
60 |
+
msgstr ""
|
61 |
+
|
62 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:237
|
63 |
+
msgid "Error: You must enter API password."
|
64 |
+
msgstr ""
|
65 |
+
|
66 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:248
|
67 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:283
|
68 |
+
msgid ""
|
69 |
+
"Error: The %s credentials you provided are not valid. Please double-check "
|
70 |
+
"that you entered them correctly and try again."
|
71 |
+
msgstr ""
|
72 |
+
|
73 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:253
|
74 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:288
|
75 |
+
msgid ""
|
76 |
+
"An error occurred while trying to validate your %s API credentials. Unable "
|
77 |
+
"to verify that your API credentials are correct."
|
78 |
+
msgstr ""
|
79 |
+
|
80 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:261
|
81 |
+
msgid "Error: The %s API certificate is not valid."
|
82 |
+
msgstr ""
|
83 |
+
|
84 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:269
|
85 |
+
msgid "Error: The %s API certificate has expired."
|
86 |
+
msgstr ""
|
87 |
+
|
88 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:274
|
89 |
+
msgid ""
|
90 |
+
"Error: The API username does not match the name in the API certificate. "
|
91 |
+
"Make sure that you have the correct API certificate."
|
92 |
+
msgstr ""
|
93 |
+
|
94 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:293
|
95 |
+
msgid "Error: You must provide a %s API signature or certificate."
|
96 |
+
msgstr ""
|
97 |
+
|
98 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:311
|
99 |
+
msgid ""
|
100 |
+
"The \"require billing address\" option is not enabled by your account and "
|
101 |
+
"has been disabled."
|
102 |
+
msgstr ""
|
103 |
+
|
104 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:324
|
105 |
+
msgid "Refund Error: You need to specify a refund amount."
|
106 |
+
msgstr ""
|
107 |
+
|
108 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:347
|
109 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:370
|
110 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:421
|
111 |
+
msgid "PayPal refund completed; transaction ID = %s"
|
112 |
+
msgstr ""
|
113 |
+
|
114 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:354
|
115 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:377
|
116 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:427
|
117 |
+
msgid "Error: %1$s - %2$s"
|
118 |
+
msgstr ""
|
119 |
+
|
120 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:394
|
121 |
+
msgid ""
|
122 |
+
"Refund Error: All transactions have been fully refunded. There is no amount "
|
123 |
+
"left to refund"
|
124 |
+
msgstr ""
|
125 |
+
|
126 |
+
#: includes/abstracts/abstract-wc-gateway-ppec.php:396
|
127 |
+
msgid ""
|
128 |
+
"Refund Error: The requested refund amount is too large. The refund amount "
|
129 |
+
"must be less than or equal to %s."
|
130 |
+
msgstr ""
|
131 |
+
|
132 |
+
#: includes/class-wc-gateway-ppec-admin-handler.php:49
|
133 |
+
msgid "Capture Charge"
|
134 |
+
msgstr ""
|
135 |
+
|
136 |
+
#: includes/class-wc-gateway-ppec-admin-handler.php:73
|
137 |
+
msgid ""
|
138 |
+
"NOTE: PayPal does not accept decimal places for the currency in which you "
|
139 |
+
"are transacting. The \"Number of Decimals\" option in WooCommerce has "
|
140 |
+
"automatically been set to 0 for you."
|
141 |
+
msgstr ""
|
142 |
+
|
143 |
+
#: includes/class-wc-gateway-ppec-admin-handler.php:156
|
144 |
+
msgid "Unable to capture charge!"
|
145 |
+
msgstr ""
|
146 |
+
|
147 |
+
#: includes/class-wc-gateway-ppec-admin-handler.php:158
|
148 |
+
msgid "PayPal Express Checkout charge complete (Charge ID: %s)"
|
149 |
+
msgstr ""
|
150 |
+
|
151 |
+
#: includes/class-wc-gateway-ppec-admin-handler.php:197
|
152 |
+
msgid "Unable to void charge!"
|
153 |
+
msgstr ""
|
154 |
+
|
155 |
+
#: includes/class-wc-gateway-ppec-admin-handler.php:199
|
156 |
+
msgid "PayPal Express Checkout charge voided (Charge ID: %s)"
|
157 |
+
msgstr ""
|
158 |
+
|
159 |
+
#: includes/class-wc-gateway-ppec-api-error.php:22
|
160 |
+
msgid "Unable to communicate with PayPal. Please try your payment again."
|
161 |
+
msgstr ""
|
162 |
+
|
163 |
+
#: includes/class-wc-gateway-ppec-api-error.php:23
|
164 |
+
msgid ""
|
165 |
+
"PayPal rejected your email address because it is not valid. Please "
|
166 |
+
"double-check your email address and try again."
|
167 |
+
msgstr ""
|
168 |
+
|
169 |
+
#: includes/class-wc-gateway-ppec-api-error.php:26
|
170 |
+
msgid "Your PayPal checkout session is invalid. Please check out again."
|
171 |
+
msgstr ""
|
172 |
+
|
173 |
+
#: includes/class-wc-gateway-ppec-api-error.php:27
|
174 |
+
msgid "Your PayPal checkout session has expired. Please check out again."
|
175 |
+
msgstr ""
|
176 |
+
|
177 |
+
#: includes/class-wc-gateway-ppec-api-error.php:29
|
178 |
+
msgid ""
|
179 |
+
"Your PayPal payment has already been completed. Please contact the store "
|
180 |
+
"owner for more information."
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: includes/class-wc-gateway-ppec-api-error.php:30
|
184 |
+
msgid ""
|
185 |
+
"Your PayPal payment could not be processed. Please check out again or "
|
186 |
+
"contact PayPal for assistance."
|
187 |
+
msgstr ""
|
188 |
+
|
189 |
+
#: includes/class-wc-gateway-ppec-api-error.php:31
|
190 |
+
msgid ""
|
191 |
+
"Your PayPal payment could not be processed. Please select an alternative "
|
192 |
+
"method of payment or contact PayPal for assistance."
|
193 |
+
msgstr ""
|
194 |
+
|
195 |
+
#: includes/class-wc-gateway-ppec-api-error.php:33
|
196 |
+
msgid ""
|
197 |
+
"Your PayPal payment could not be processed. Please return to PayPal and "
|
198 |
+
"select a new method of payment."
|
199 |
+
msgstr ""
|
200 |
+
|
201 |
+
#: includes/class-wc-gateway-ppec-api-error.php:35
|
202 |
+
msgid ""
|
203 |
+
"You have not approved this transaction on the PayPal website. Please check "
|
204 |
+
"out again and be sure to complete all steps of the PayPal checkout process."
|
205 |
+
msgstr ""
|
206 |
+
|
207 |
+
#: includes/class-wc-gateway-ppec-api-error.php:36
|
208 |
+
msgid ""
|
209 |
+
"Your shipping address may not be in a different country than your country "
|
210 |
+
"of residence. Please double-check your shipping address and try again."
|
211 |
+
msgstr ""
|
212 |
+
|
213 |
+
#: includes/class-wc-gateway-ppec-api-error.php:37
|
214 |
+
msgid ""
|
215 |
+
"This store does not accept transactions from buyers in your country. "
|
216 |
+
"Please contact the store owner for assistance."
|
217 |
+
msgstr ""
|
218 |
+
|
219 |
+
#: includes/class-wc-gateway-ppec-api-error.php:38
|
220 |
+
msgid ""
|
221 |
+
"The transaction is over the threshold allowed by this store. Please "
|
222 |
+
"contact the store owner for assistance."
|
223 |
+
msgstr ""
|
224 |
+
|
225 |
+
#: includes/class-wc-gateway-ppec-api-error.php:40
|
226 |
+
msgid ""
|
227 |
+
"Your transaction was declined. Please contact the store owner for "
|
228 |
+
"assistance."
|
229 |
+
msgstr ""
|
230 |
+
|
231 |
+
#: includes/class-wc-gateway-ppec-api-error.php:41
|
232 |
+
#: includes/class-wc-gateway-ppec-api-error.php:46
|
233 |
+
msgid ""
|
234 |
+
"The country in your shipping address is not valid. Please double-check "
|
235 |
+
"your shipping address and try again."
|
236 |
+
msgstr ""
|
237 |
+
|
238 |
+
#: includes/class-wc-gateway-ppec-api-error.php:42
|
239 |
+
msgid ""
|
240 |
+
"The street address in your shipping address is not valid. Please "
|
241 |
+
"double-check your shipping address and try again."
|
242 |
+
msgstr ""
|
243 |
+
|
244 |
+
#: includes/class-wc-gateway-ppec-api-error.php:43
|
245 |
+
msgid ""
|
246 |
+
"The city in your shipping address is not valid. Please double-check your "
|
247 |
+
"shipping address and try again."
|
248 |
+
msgstr ""
|
249 |
+
|
250 |
+
#: includes/class-wc-gateway-ppec-api-error.php:44
|
251 |
+
msgid ""
|
252 |
+
"The state in your shipping address is not valid. Please double-check your "
|
253 |
+
"shipping address and try again."
|
254 |
+
msgstr ""
|
255 |
+
|
256 |
+
#: includes/class-wc-gateway-ppec-api-error.php:45
|
257 |
+
msgid ""
|
258 |
+
"The ZIP code or postal code in your shipping address is not valid. Please "
|
259 |
+
"double-check your shipping address and try again."
|
260 |
+
msgstr ""
|
261 |
+
|
262 |
+
#: includes/class-wc-gateway-ppec-api-error.php:47
|
263 |
+
msgid ""
|
264 |
+
"PayPal rejected your shipping address because the city, state, and/or ZIP "
|
265 |
+
"code are incorrect. Please double-check that they are all spelled "
|
266 |
+
"correctly and try again."
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: includes/class-wc-gateway-ppec-api-error.php:49
|
270 |
+
msgid ""
|
271 |
+
"Your PayPal payment could not be processed. Please contact PayPal for "
|
272 |
+
"assistance."
|
273 |
+
msgstr ""
|
274 |
+
|
275 |
+
#: includes/class-wc-gateway-ppec-api-error.php:51
|
276 |
+
msgid ""
|
277 |
+
"The redemption code(s) you entered on PayPal cannot be used at this time. "
|
278 |
+
"Please return to PayPal and remove them."
|
279 |
+
msgstr ""
|
280 |
+
|
281 |
+
#: includes/class-wc-gateway-ppec-api-error.php:54
|
282 |
+
msgid ""
|
283 |
+
"Your funding instrument is invalid. Please check out again and select a "
|
284 |
+
"new funding source."
|
285 |
+
msgstr ""
|
286 |
+
|
287 |
+
#: includes/class-wc-gateway-ppec-api-error.php:55
|
288 |
+
msgid ""
|
289 |
+
"An error (%s) occurred while processing your PayPal payment. Please "
|
290 |
+
"contact the store owner for assistance."
|
291 |
+
msgstr ""
|
292 |
+
|
293 |
+
#: includes/class-wc-gateway-ppec-cart-handler.php:74
|
294 |
+
msgid "— or —"
|
295 |
+
msgstr ""
|
296 |
+
|
297 |
+
#: includes/class-wc-gateway-ppec-cart-handler.php:79
|
298 |
+
#: includes/class-wc-gateway-ppec-cart-handler.php:97
|
299 |
+
msgid "Check out with PayPal"
|
300 |
+
msgstr ""
|
301 |
+
|
302 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:66
|
303 |
+
msgid "Confirm your PayPal order"
|
304 |
+
msgstr ""
|
305 |
+
|
306 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:100
|
307 |
+
msgid "Billing details"
|
308 |
+
msgstr ""
|
309 |
+
|
310 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:103
|
311 |
+
msgid "Address:"
|
312 |
+
msgstr ""
|
313 |
+
|
314 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:105
|
315 |
+
msgid "Name:"
|
316 |
+
msgstr ""
|
317 |
+
|
318 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:109
|
319 |
+
msgid "Email:"
|
320 |
+
msgstr ""
|
321 |
+
|
322 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:113
|
323 |
+
msgid "Tel:"
|
324 |
+
msgstr ""
|
325 |
+
|
326 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:131
|
327 |
+
msgid "Shipping details"
|
328 |
+
msgstr ""
|
329 |
+
|
330 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:198
|
331 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:235
|
332 |
+
msgid "Your PayPal checkout session has expired. Please check out again."
|
333 |
+
msgstr ""
|
334 |
+
|
335 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:230
|
336 |
+
msgid ""
|
337 |
+
"Sorry, an error occurred while trying to retrieve your information from "
|
338 |
+
"PayPal. Please try again."
|
339 |
+
msgstr ""
|
340 |
+
|
341 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:282
|
342 |
+
msgid "Cancel"
|
343 |
+
msgstr ""
|
344 |
+
|
345 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:290
|
346 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:291
|
347 |
+
msgid ""
|
348 |
+
"You have cancelled Checkout with PayPal. Please try to process your order "
|
349 |
+
"again."
|
350 |
+
msgstr ""
|
351 |
+
|
352 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:644
|
353 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:189
|
354 |
+
msgid ""
|
355 |
+
"Payment authorized. Change payment status to processing or complete to "
|
356 |
+
"capture funds."
|
357 |
+
msgstr ""
|
358 |
+
|
359 |
+
#: includes/class-wc-gateway-ppec-checkout-handler.php:646
|
360 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:191
|
361 |
+
msgid "Payment pending (%s)."
|
362 |
+
msgstr ""
|
363 |
+
|
364 |
+
#: includes/class-wc-gateway-ppec-client-credential-certificate.php:66
|
365 |
+
msgid "Unable to accept certificate during cURL configuration"
|
366 |
+
msgstr ""
|
367 |
+
|
368 |
+
#: includes/class-wc-gateway-ppec-client-credential-certificate.php:70
|
369 |
+
msgid "Unable to accept certificate password during cURL configuration"
|
370 |
+
msgstr ""
|
371 |
+
|
372 |
+
#: includes/class-wc-gateway-ppec-client-credential-certificate.php:87
|
373 |
+
#: includes/class-wc-gateway-ppec-client-credential-certificate.php:133
|
374 |
+
msgid "Unable to write certificate file %s during cURL configuration"
|
375 |
+
msgstr ""
|
376 |
+
|
377 |
+
#: includes/class-wc-gateway-ppec-client-credential-certificate.php:113
|
378 |
+
msgid "Failed to retrieve private key during cURL configuration"
|
379 |
+
msgstr ""
|
380 |
+
|
381 |
+
#: includes/class-wc-gateway-ppec-client-credential-certificate.php:117
|
382 |
+
msgid "Failed to export PKCS12 file during cURL configuration"
|
383 |
+
msgstr ""
|
384 |
+
|
385 |
+
#: includes/class-wc-gateway-ppec-client.php:121
|
386 |
+
msgid "Missing credential"
|
387 |
+
msgstr ""
|
388 |
+
|
389 |
+
#: includes/class-wc-gateway-ppec-client.php:125
|
390 |
+
msgid "Invalid credential object"
|
391 |
+
msgstr ""
|
392 |
+
|
393 |
+
#: includes/class-wc-gateway-ppec-client.php:129
|
394 |
+
msgid "Invalid environment"
|
395 |
+
msgstr ""
|
396 |
+
|
397 |
+
#: includes/class-wc-gateway-ppec-client.php:152
|
398 |
+
msgid "An error occurred while trying to connect to PayPal: %s"
|
399 |
+
msgstr ""
|
400 |
+
|
401 |
+
#: includes/class-wc-gateway-ppec-client.php:158
|
402 |
+
msgid "Malformed response received from PayPal"
|
403 |
+
msgstr ""
|
404 |
+
|
405 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:30
|
406 |
+
msgid "Empty POST data."
|
407 |
+
msgstr ""
|
408 |
+
|
409 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:39
|
410 |
+
msgid "Invalid IPN request."
|
411 |
+
msgstr ""
|
412 |
+
|
413 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:44
|
414 |
+
msgid "PayPal IPN Request Failure"
|
415 |
+
msgstr ""
|
416 |
+
|
417 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:144
|
418 |
+
msgid "Validation error: PayPal currencies do not match (code %s)."
|
419 |
+
msgstr ""
|
420 |
+
|
421 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:159
|
422 |
+
msgid "Validation error: PayPal amounts do not match (gross %s)."
|
423 |
+
msgstr ""
|
424 |
+
|
425 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:182
|
426 |
+
msgid "IPN payment completed"
|
427 |
+
msgstr ""
|
428 |
+
|
429 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:213
|
430 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:256
|
431 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:271
|
432 |
+
msgid "Payment %s via IPN."
|
433 |
+
msgstr ""
|
434 |
+
|
435 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:258
|
436 |
+
msgid "Payment for order %s refunded"
|
437 |
+
msgstr ""
|
438 |
+
|
439 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:259
|
440 |
+
msgid "Order #%s has been marked as refunded - PayPal reason code: %s"
|
441 |
+
msgstr ""
|
442 |
+
|
443 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:273
|
444 |
+
msgid "Payment for order %s reversed"
|
445 |
+
msgstr ""
|
446 |
+
|
447 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:274
|
448 |
+
msgid "Order #%s has been marked on-hold due to a reversal - PayPal reason code: %s"
|
449 |
+
msgstr ""
|
450 |
+
|
451 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:286
|
452 |
+
msgid "Reversal cancelled for order #%s"
|
453 |
+
msgstr ""
|
454 |
+
|
455 |
+
#: includes/class-wc-gateway-ppec-ipn-handler.php:287
|
456 |
+
msgid ""
|
457 |
+
"Order #%s has had a reversal cancelled. Please check the status of payment "
|
458 |
+
"and update the order status accordingly here: %s"
|
459 |
+
msgstr ""
|
460 |
+
|
461 |
+
#: includes/class-wc-gateway-ppec-ips-handler.php:140
|
462 |
+
msgid "Invalid connection request"
|
463 |
+
msgstr ""
|
464 |
+
|
465 |
+
#: includes/class-wc-gateway-ppec-ips-handler.php:150
|
466 |
+
#: includes/class-wc-gateway-ppec-ips-handler.php:158
|
467 |
+
msgid "Sorry, Easy Setup encountered an error. Please try again."
|
468 |
+
msgstr ""
|
469 |
+
|
470 |
+
#: includes/class-wc-gateway-ppec-ips-handler.php:173
|
471 |
+
msgid ""
|
472 |
+
"Easy Setup was able to obtain your API credentials, but was unable to "
|
473 |
+
"verify that they work correctly. Please make sure your PayPal account is "
|
474 |
+
"set up properly and try Easy Setup again."
|
475 |
+
msgstr ""
|
476 |
+
|
477 |
+
#: includes/class-wc-gateway-ppec-ips-handler.php:178
|
478 |
+
msgid ""
|
479 |
+
"Easy Setup was able to obtain your API credentials, but an error occurred "
|
480 |
+
"while trying to verify that they work correctly. Please try Easy Setup "
|
481 |
+
"again."
|
482 |
+
msgstr ""
|
483 |
+
|
484 |
+
#: includes/class-wc-gateway-ppec-ips-handler.php:183
|
485 |
+
msgid "Success! Your PayPal account has been set up successfully."
|
486 |
+
msgstr ""
|
487 |
+
|
488 |
+
#: includes/class-wc-gateway-ppec-plugin.php:153
|
489 |
+
msgid ""
|
490 |
+
"%s in WooCommerce Gateway PayPal Express Checkout plugin can only be called "
|
491 |
+
"once"
|
492 |
+
msgstr ""
|
493 |
+
|
494 |
+
#: includes/class-wc-gateway-ppec-plugin.php:208
|
495 |
+
msgid ""
|
496 |
+
"WooCommerce Gateway PayPal Express Checkout requires WooCommerce to be "
|
497 |
+
"activated"
|
498 |
+
msgstr ""
|
499 |
+
|
500 |
+
#: includes/class-wc-gateway-ppec-plugin.php:212
|
501 |
+
msgid ""
|
502 |
+
"WooCommerce Gateway PayPal Express Checkout requires WooCommerce version "
|
503 |
+
"2.5 or greater"
|
504 |
+
msgstr ""
|
505 |
+
|
506 |
+
#: includes/class-wc-gateway-ppec-plugin.php:216
|
507 |
+
msgid ""
|
508 |
+
"WooCommerce Gateway PayPal Express Checkout requires cURL to be installed "
|
509 |
+
"on your server"
|
510 |
+
msgstr ""
|
511 |
+
|
512 |
+
#: includes/class-wc-gateway-ppec-plugin.php:219
|
513 |
+
msgid ""
|
514 |
+
"WooCommerce Gateway PayPal Express Checkout requires OpenSSL >= 1.0.1 to be "
|
515 |
+
"installed on your server"
|
516 |
+
msgstr ""
|
517 |
+
|
518 |
+
#: includes/functions.php:45
|
519 |
+
msgid "Payment error:"
|
520 |
+
msgstr ""
|
521 |
+
|
522 |
+
#: includes/settings/settings-ppec.php:15
|
523 |
+
msgid "Setup or link an existing PayPal account"
|
524 |
+
msgstr ""
|
525 |
+
|
526 |
+
#: includes/settings/settings-ppec.php:16
|
527 |
+
msgid ""
|
528 |
+
"%s or <a href=\"#\" class=\"ppec-toggle-settings\">click here to toggle "
|
529 |
+
"manual API credential input</a>."
|
530 |
+
msgstr ""
|
531 |
+
|
532 |
+
#: includes/settings/settings-ppec.php:22
|
533 |
+
msgid "Setup or link an existing PayPal Sandbox account"
|
534 |
+
msgstr ""
|
535 |
+
|
536 |
+
#: includes/settings/settings-ppec.php:23
|
537 |
+
msgid ""
|
538 |
+
"%s or <a href=\"#\" class=\"ppec-toggle-sandbox-settings\">click here to "
|
539 |
+
"toggle manual API credential input</a>."
|
540 |
+
msgstr ""
|
541 |
+
|
542 |
+
#: includes/settings/settings-ppec.php:91
|
543 |
+
msgid "Enable/Disable"
|
544 |
+
msgstr ""
|
545 |
+
|
546 |
+
#: includes/settings/settings-ppec.php:93
|
547 |
+
msgid "Enable PayPal Express Checkout"
|
548 |
+
msgstr ""
|
549 |
+
|
550 |
+
#: includes/settings/settings-ppec.php:94
|
551 |
+
msgid ""
|
552 |
+
"This enables PayPal Express Checkout which allows customers to checkout "
|
553 |
+
"directly via PayPal from your cart page."
|
554 |
+
msgstr ""
|
555 |
+
|
556 |
+
#: includes/settings/settings-ppec.php:99
|
557 |
+
msgid "Button Size"
|
558 |
+
msgstr ""
|
559 |
+
|
560 |
+
#: includes/settings/settings-ppec.php:102
|
561 |
+
msgid ""
|
562 |
+
"PayPal offers different sizes of the \"PayPal Checkout\" buttons, allowing "
|
563 |
+
"you to select a size that best fits your site's theme. This setting will "
|
564 |
+
"allow you to choose which size button(s) appear on your cart page."
|
565 |
+
msgstr ""
|
566 |
+
|
567 |
+
#: includes/settings/settings-ppec.php:106
|
568 |
+
msgid "Small"
|
569 |
+
msgstr ""
|
570 |
+
|
571 |
+
#: includes/settings/settings-ppec.php:107
|
572 |
+
msgid "Medium"
|
573 |
+
msgstr ""
|
574 |
+
|
575 |
+
#: includes/settings/settings-ppec.php:108
|
576 |
+
msgid "Large"
|
577 |
+
msgstr ""
|
578 |
+
|
579 |
+
#: includes/settings/settings-ppec.php:112
|
580 |
+
msgid "Environment"
|
581 |
+
msgstr ""
|
582 |
+
|
583 |
+
#: includes/settings/settings-ppec.php:115
|
584 |
+
msgid ""
|
585 |
+
"This setting specifies whether you will process live transactions, or "
|
586 |
+
"whether you will process simulated transactions using the PayPal Sandbox."
|
587 |
+
msgstr ""
|
588 |
+
|
589 |
+
#: includes/settings/settings-ppec.php:119
|
590 |
+
msgid "Live"
|
591 |
+
msgstr ""
|
592 |
+
|
593 |
+
#: includes/settings/settings-ppec.php:120
|
594 |
+
msgid "Sandbox"
|
595 |
+
msgstr ""
|
596 |
+
|
597 |
+
#: includes/settings/settings-ppec.php:124
|
598 |
+
msgid "PayPal Mark"
|
599 |
+
msgstr ""
|
600 |
+
|
601 |
+
#: includes/settings/settings-ppec.php:126
|
602 |
+
msgid "Enable the PayPal Mark on regular checkout"
|
603 |
+
msgstr ""
|
604 |
+
|
605 |
+
#: includes/settings/settings-ppec.php:127
|
606 |
+
msgid ""
|
607 |
+
"This enables the PayPal mark, which can be shown on regular WooCommerce "
|
608 |
+
"checkout to use PayPal Express Checkout like a regular WooCommerce gateway."
|
609 |
+
msgstr ""
|
610 |
+
|
611 |
+
#: includes/settings/settings-ppec.php:132
|
612 |
+
msgid "Title"
|
613 |
+
msgstr ""
|
614 |
+
|
615 |
+
#: includes/settings/settings-ppec.php:134
|
616 |
+
msgid "This controls the title which the user sees during checkout."
|
617 |
+
msgstr ""
|
618 |
+
|
619 |
+
#: includes/settings/settings-ppec.php:139
|
620 |
+
msgid "Description"
|
621 |
+
msgstr ""
|
622 |
+
|
623 |
+
#: includes/settings/settings-ppec.php:142
|
624 |
+
msgid "This controls the description which the user sees during checkout."
|
625 |
+
msgstr ""
|
626 |
+
|
627 |
+
#: includes/settings/settings-ppec.php:143
|
628 |
+
msgid ""
|
629 |
+
"Pay using either your PayPal account or credit card. All credit card "
|
630 |
+
"payments will be processed by PayPal."
|
631 |
+
msgstr ""
|
632 |
+
|
633 |
+
#: includes/settings/settings-ppec.php:147
|
634 |
+
msgid "API Credentials"
|
635 |
+
msgstr ""
|
636 |
+
|
637 |
+
#: includes/settings/settings-ppec.php:152
|
638 |
+
msgid "Live API Username"
|
639 |
+
msgstr ""
|
640 |
+
|
641 |
+
#: includes/settings/settings-ppec.php:154
|
642 |
+
#: includes/settings/settings-ppec.php:161
|
643 |
+
#: includes/settings/settings-ppec.php:168
|
644 |
+
#: includes/settings/settings-ppec.php:196
|
645 |
+
#: includes/settings/settings-ppec.php:203
|
646 |
+
#: includes/settings/settings-ppec.php:210
|
647 |
+
#: includes/settings/settings-ppec.php:217
|
648 |
+
msgid "Get your API credentials from PayPal."
|
649 |
+
msgstr ""
|
650 |
+
|
651 |
+
#: includes/settings/settings-ppec.php:159
|
652 |
+
msgid "Live API Password"
|
653 |
+
msgstr ""
|
654 |
+
|
655 |
+
#: includes/settings/settings-ppec.php:166
|
656 |
+
msgid "Live API Signature"
|
657 |
+
msgstr ""
|
658 |
+
|
659 |
+
#: includes/settings/settings-ppec.php:171
|
660 |
+
msgid "Optional if you provide a certificate below"
|
661 |
+
msgstr ""
|
662 |
+
|
663 |
+
#: includes/settings/settings-ppec.php:174
|
664 |
+
msgid "Live API Certificate"
|
665 |
+
msgstr ""
|
666 |
+
|
667 |
+
#: includes/settings/settings-ppec.php:180
|
668 |
+
msgid "Live API Subject"
|
669 |
+
msgstr ""
|
670 |
+
|
671 |
+
#: includes/settings/settings-ppec.php:182
|
672 |
+
#: includes/settings/settings-ppec.php:224
|
673 |
+
msgid ""
|
674 |
+
"If you're processing transactions on behalf of someone else's PayPal "
|
675 |
+
"account, enter their email address or Secure Merchant Account ID (also "
|
676 |
+
"known as a Payer ID) here. Generally, you must have API permissions in "
|
677 |
+
"place with the other account in order to process anything other than "
|
678 |
+
"\"sale\" transactions for them."
|
679 |
+
msgstr ""
|
680 |
+
|
681 |
+
#: includes/settings/settings-ppec.php:185
|
682 |
+
#: includes/settings/settings-ppec.php:227
|
683 |
+
#: includes/settings/settings-ppec.php:284
|
684 |
+
msgid "Optional"
|
685 |
+
msgstr ""
|
686 |
+
|
687 |
+
#: includes/settings/settings-ppec.php:189
|
688 |
+
msgid "Sandbox API Credentials"
|
689 |
+
msgstr ""
|
690 |
+
|
691 |
+
#: includes/settings/settings-ppec.php:194
|
692 |
+
msgid "Sandbox API Username"
|
693 |
+
msgstr ""
|
694 |
+
|
695 |
+
#: includes/settings/settings-ppec.php:201
|
696 |
+
msgid "Sandbox API Password"
|
697 |
+
msgstr ""
|
698 |
+
|
699 |
+
#: includes/settings/settings-ppec.php:208
|
700 |
+
msgid "Sandbox API Signature"
|
701 |
+
msgstr ""
|
702 |
+
|
703 |
+
#: includes/settings/settings-ppec.php:215
|
704 |
+
msgid "Sandbox API Certificate"
|
705 |
+
msgstr ""
|
706 |
+
|
707 |
+
#: includes/settings/settings-ppec.php:222
|
708 |
+
msgid "Sandbox API Subject"
|
709 |
+
msgstr ""
|
710 |
+
|
711 |
+
#: includes/settings/settings-ppec.php:231
|
712 |
+
msgid "Advanced Settings"
|
713 |
+
msgstr ""
|
714 |
+
|
715 |
+
#: includes/settings/settings-ppec.php:236
|
716 |
+
msgid "Debug Log"
|
717 |
+
msgstr ""
|
718 |
+
|
719 |
+
#: includes/settings/settings-ppec.php:238
|
720 |
+
msgid "Enable Logging"
|
721 |
+
msgstr ""
|
722 |
+
|
723 |
+
#: includes/settings/settings-ppec.php:241
|
724 |
+
msgid "Log PayPal events, such as IPN requests."
|
725 |
+
msgstr ""
|
726 |
+
|
727 |
+
#: includes/settings/settings-ppec.php:244
|
728 |
+
msgid "Invoice Prefix"
|
729 |
+
msgstr ""
|
730 |
+
|
731 |
+
#: includes/settings/settings-ppec.php:246
|
732 |
+
msgid ""
|
733 |
+
"Please enter a prefix for your invoice numbers. If you use your PayPal "
|
734 |
+
"account for multiple stores ensure this prefix is unique as PayPal will not "
|
735 |
+
"allow orders with the same invoice number."
|
736 |
+
msgstr ""
|
737 |
+
|
738 |
+
#: includes/settings/settings-ppec.php:251
|
739 |
+
msgid "Billing Addresses"
|
740 |
+
msgstr ""
|
741 |
+
|
742 |
+
#: includes/settings/settings-ppec.php:253
|
743 |
+
msgid "Require Billing Address"
|
744 |
+
msgstr ""
|
745 |
+
|
746 |
+
#: includes/settings/settings-ppec.php:256
|
747 |
+
msgid ""
|
748 |
+
"PayPal does not share buyer billing details with you. However, there are "
|
749 |
+
"times when you must collect the buyer billing address to fulfill an "
|
750 |
+
"essential business function (such as determining whether you must charge "
|
751 |
+
"the buyer tax). Enable this function to collect the address before payment "
|
752 |
+
"is taken."
|
753 |
+
msgstr ""
|
754 |
+
|
755 |
+
#: includes/settings/settings-ppec.php:259
|
756 |
+
msgid "Payment Action"
|
757 |
+
msgstr ""
|
758 |
+
|
759 |
+
#: includes/settings/settings-ppec.php:262
|
760 |
+
msgid ""
|
761 |
+
"Choose whether you wish to capture funds immediately or authorize payment "
|
762 |
+
"only."
|
763 |
+
msgstr ""
|
764 |
+
|
765 |
+
#: includes/settings/settings-ppec.php:266
|
766 |
+
msgid "Sale"
|
767 |
+
msgstr ""
|
768 |
+
|
769 |
+
#: includes/settings/settings-ppec.php:267
|
770 |
+
msgid "Authorize"
|
771 |
+
msgstr ""
|
772 |
+
|
773 |
+
#: includes/settings/settings-ppec.php:271
|
774 |
+
msgid "Instant Payments"
|
775 |
+
msgstr ""
|
776 |
+
|
777 |
+
#: includes/settings/settings-ppec.php:273
|
778 |
+
msgid "Require Instant Payment"
|
779 |
+
msgstr ""
|
780 |
+
|
781 |
+
#: includes/settings/settings-ppec.php:276
|
782 |
+
msgid ""
|
783 |
+
"If you enable this setting, PayPal will be instructed not to allow the "
|
784 |
+
"buyer to use funding sources that take additional time to complete (for "
|
785 |
+
"example, eChecks). Instead, the buyer will be required to use an instant "
|
786 |
+
"funding source, such as an instant transfer, a credit/debit card, or PayPal "
|
787 |
+
"Credit."
|
788 |
+
msgstr ""
|
789 |
+
|
790 |
+
#: includes/settings/settings-ppec.php:279
|
791 |
+
msgid "Logo Image URL"
|
792 |
+
msgstr ""
|
793 |
+
|
794 |
+
#: includes/settings/settings-ppec.php:281
|
795 |
+
msgid ""
|
796 |
+
"If you want PayPal to co-brand the checkout page with your logo, enter the "
|
797 |
+
"URL of your logo image here.<br/>The image must be no larger than 190x60, "
|
798 |
+
"GIF, PNG, or JPG format, and should be served over HTTPS."
|
799 |
+
msgstr ""
|
800 |
+
|
801 |
+
#: includes/settings/settings-ppec.php:287
|
802 |
+
msgid "Subtotal Mismatch Behavior"
|
803 |
+
msgstr ""
|
804 |
+
|
805 |
+
#: includes/settings/settings-ppec.php:290
|
806 |
+
msgid ""
|
807 |
+
"Internally, WC calculates line item prices and taxes out to four decimal "
|
808 |
+
"places; however, PayPal can only handle amounts out to two decimal places "
|
809 |
+
"(or, depending on the currency, no decimal places at all). Occasionally, "
|
810 |
+
"this can cause discrepancies between the way WooCommerce calculates prices "
|
811 |
+
"versus the way PayPal calculates them. If a mismatch occurs, this option "
|
812 |
+
"controls how the order is dealt with so payment can still be taken."
|
813 |
+
msgstr ""
|
814 |
+
|
815 |
+
#: includes/settings/settings-ppec.php:294
|
816 |
+
msgid "Add another line item"
|
817 |
+
msgstr ""
|
818 |
+
|
819 |
+
#: includes/settings/settings-ppec.php:295
|
820 |
+
msgid "Do not send line items to PayPal"
|
821 |
+
msgstr ""
|
822 |
+
|
823 |
+
#. Plugin Name of the plugin/theme
|
824 |
+
msgid "WooCommerce PayPal Express Checkout Gateway"
|
825 |
+
msgstr ""
|
826 |
+
|
827 |
+
#. Plugin URI of the plugin/theme
|
828 |
+
msgid ""
|
829 |
+
"https://www.woothemes.com/products/woocommerce-gateway-paypal-express-"
|
830 |
+
"checkout/"
|
831 |
+
msgstr ""
|
832 |
+
|
833 |
+
#. Description of the plugin/theme
|
834 |
+
msgid ""
|
835 |
+
"A payment gateway for PayPal Express Checkout "
|
836 |
+
"(https://www.paypal.com/us/webapps/mpp/express-checkout)."
|
837 |
+
msgstr ""
|
838 |
+
|
839 |
+
#. Author of the plugin/theme
|
840 |
+
msgid "Automattic"
|
841 |
+
msgstr ""
|
842 |
+
|
843 |
+
#. Author URI of the plugin/theme
|
844 |
+
msgid "https://woocommerce.com"
|
845 |
+
msgstr ""
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: automattic, woothemes, akeda, dwainm, royho, allendav, slash1andy,
|
|
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.1.
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
@@ -85,6 +85,11 @@ https://gist.github.com/mikejolley/ad2ecc286c9ad6cefbb7065ba6dfef48
|
|
85 |
|
86 |
== Changelog ==
|
87 |
|
|
|
|
|
|
|
|
|
|
|
88 |
= 1.1.1 =
|
89 |
* Fixed fatal error prior to PHP 5.5 caused by passing empty() a non-variables.
|
90 |
|
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.1.2
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
85 |
|
86 |
== Changelog ==
|
87 |
|
88 |
+
= 1.1.2 =
|
89 |
+
* Fix - Make sure translations are loaded properly.
|
90 |
+
* Fix - Added IPN (Instant Payment Notification) handler.
|
91 |
+
* Fix - Make sure guest payment is enabled by default.
|
92 |
+
|
93 |
= 1.1.1 =
|
94 |
* Fixed fatal error prior to PHP 5.5 caused by passing empty() a non-variables.
|
95 |
|
woocommerce-gateway-paypal-express-checkout.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: WooCommerce PayPal Express Checkout Gateway
|
4 |
* Plugin URI: https://www.woothemes.com/products/woocommerce-gateway-paypal-express-checkout/
|
5 |
* Description: A payment gateway for PayPal Express Checkout (https://www.paypal.com/us/webapps/mpp/express-checkout).
|
6 |
-
* Version: 1.1.
|
7 |
* Author: Automattic
|
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.1.
|
40 |
}
|
41 |
|
42 |
return $plugin;
|
3 |
* Plugin Name: WooCommerce PayPal Express Checkout Gateway
|
4 |
* Plugin URI: https://www.woothemes.com/products/woocommerce-gateway-paypal-express-checkout/
|
5 |
* Description: A payment gateway for PayPal Express Checkout (https://www.paypal.com/us/webapps/mpp/express-checkout).
|
6 |
+
* Version: 1.1.2
|
7 |
* Author: Automattic
|
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.1.2' );
|
40 |
}
|
41 |
|
42 |
return $plugin;
|