Version Description
- 2019-07-18 =
- Fix - Ignore "payment failed" webhooks if they come after another payment has already succeeded for that order.
- Fix - Correctly transition an order to "On Hold" if the payment was put under review by Stripe Radar, and back to "Processing" when the review is approved.
- Tweak - Make the publishable key fields be plain text instead of "password".
- Fix - Fix successful retries of 3ds failing.
See changelog for all versions.
=
Download this release
Release Info
Developer | woothemes |
Plugin | WooCommerce Stripe Payment Gateway |
Version | 4.2.3 |
Comparing to | |
See all releases |
Code changes from version 4.2.2 to 4.2.3
- assets/js/stripe-admin.js +7 -1
- assets/js/stripe-admin.min.js +1 -1
- changelog.txt +6 -0
- includes/admin/stripe-settings.php +16 -2
- includes/class-wc-gateway-stripe.php +1 -1
- includes/class-wc-stripe-webhook-handler.php +63 -12
- languages/woocommerce-gateway-stripe.pot +65 -51
- readme.txt +6 -3
- woocommerce-gateway-stripe.php +2 -2
assets/js/stripe-admin.js
CHANGED
@@ -24,19 +24,25 @@ jQuery( function( $ ) {
|
|
24 |
$( document.body ).on( 'change', '#woocommerce_stripe_testmode', function() {
|
25 |
var test_secret_key = $( '#woocommerce_stripe_test_secret_key' ).parents( 'tr' ).eq( 0 ),
|
26 |
test_publishable_key = $( '#woocommerce_stripe_test_publishable_key' ).parents( 'tr' ).eq( 0 ),
|
|
|
27 |
live_secret_key = $( '#woocommerce_stripe_secret_key' ).parents( 'tr' ).eq( 0 ),
|
28 |
-
live_publishable_key = $( '#woocommerce_stripe_publishable_key' ).parents( 'tr' ).eq( 0 )
|
|
|
29 |
|
30 |
if ( $( this ).is( ':checked' ) ) {
|
31 |
test_secret_key.show();
|
32 |
test_publishable_key.show();
|
|
|
33 |
live_secret_key.hide();
|
34 |
live_publishable_key.hide();
|
|
|
35 |
} else {
|
36 |
test_secret_key.hide();
|
37 |
test_publishable_key.hide();
|
|
|
38 |
live_secret_key.show();
|
39 |
live_publishable_key.show();
|
|
|
40 |
}
|
41 |
} );
|
42 |
|
24 |
$( document.body ).on( 'change', '#woocommerce_stripe_testmode', function() {
|
25 |
var test_secret_key = $( '#woocommerce_stripe_test_secret_key' ).parents( 'tr' ).eq( 0 ),
|
26 |
test_publishable_key = $( '#woocommerce_stripe_test_publishable_key' ).parents( 'tr' ).eq( 0 ),
|
27 |
+
test_webhook_secret = $( '#woocommerce_stripe_test_webhook_secret' ).parents( 'tr' ).eq( 0 ),
|
28 |
live_secret_key = $( '#woocommerce_stripe_secret_key' ).parents( 'tr' ).eq( 0 ),
|
29 |
+
live_publishable_key = $( '#woocommerce_stripe_publishable_key' ).parents( 'tr' ).eq( 0 ),
|
30 |
+
live_webhook_secret = $( '#woocommerce_stripe_webhook_secret' ).parents( 'tr' ).eq( 0 );
|
31 |
|
32 |
if ( $( this ).is( ':checked' ) ) {
|
33 |
test_secret_key.show();
|
34 |
test_publishable_key.show();
|
35 |
+
test_webhook_secret.show();
|
36 |
live_secret_key.hide();
|
37 |
live_publishable_key.hide();
|
38 |
+
live_webhook_secret.hide();
|
39 |
} else {
|
40 |
test_secret_key.hide();
|
41 |
test_publishable_key.hide();
|
42 |
+
test_webhook_secret.hide();
|
43 |
live_secret_key.show();
|
44 |
live_publishable_key.show();
|
45 |
+
live_webhook_secret.show();
|
46 |
}
|
47 |
} );
|
48 |
|
assets/js/stripe-admin.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(function(
|
1 |
+
jQuery(function(_){"use strict";var e={isTestMode:function(){return _("#woocommerce_stripe_testmode").is(":checked")},getSecretKey:function(){return e.isTestMode()?_("#woocommerce_stripe_test_secret_key").val():_("#woocommerce_stripe_secret_key").val()},init:function(){_(document.body).on("change","#woocommerce_stripe_testmode",function(){var e=_("#woocommerce_stripe_test_secret_key").parents("tr").eq(0),t=_("#woocommerce_stripe_test_publishable_key").parents("tr").eq(0),o=_("#woocommerce_stripe_test_webhook_secret").parents("tr").eq(0),s=_("#woocommerce_stripe_secret_key").parents("tr").eq(0),r=_("#woocommerce_stripe_publishable_key").parents("tr").eq(0),c=_("#woocommerce_stripe_webhook_secret").parents("tr").eq(0);_(this).is(":checked")?(e.show(),t.show(),o.show(),s.hide(),r.hide(),c.hide()):(e.hide(),t.hide(),o.hide(),s.show(),r.show(),c.show())}),_("#woocommerce_stripe_testmode").change(),_("#woocommerce_stripe_payment_request").change(function(){_(this).is(":checked")?_("#woocommerce_stripe_payment_request_button_theme, #woocommerce_stripe_payment_request_button_type, #woocommerce_stripe_payment_request_button_height").closest("tr").show():_("#woocommerce_stripe_payment_request_button_theme, #woocommerce_stripe_payment_request_button_type, #woocommerce_stripe_payment_request_button_height").closest("tr").hide()}).change(),_(".wc-stripe-3ds-missing").each(function(){var e=_(this);e.find(".notice-dismiss").on("click.wc-stripe-dismiss-notice",function(){_.ajax({type:"head",url:window.location.href+"&stripe_dismiss_3ds="+e.data("nonce")})})})}};e.init()});
|
changelog.txt
CHANGED
@@ -1,5 +1,11 @@
|
|
1 |
*** Changelog ***
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
= 4.2.2 - 2019-06-26 =
|
4 |
* Fix - Changing an order status to "Cancelled" or "Refunded" will no longer refund the payment, will only void the payment if it was just authorized.
|
5 |
|
1 |
*** Changelog ***
|
2 |
|
3 |
+
= 4.2.3 - 2019-07-18 =
|
4 |
+
* Fix - Ignore "payment failed" webhooks if they come after another payment has already succeeded for that order.
|
5 |
+
* Fix - Correctly transition an order to "On Hold" if the payment was put under review by Stripe Radar, and back to "Processing" when the review is approved.
|
6 |
+
* Tweak - Make the publishable key fields be plain text instead of "password".
|
7 |
+
* Fix - Fix successful retries of 3ds failing.
|
8 |
+
|
9 |
= 4.2.2 - 2019-06-26 =
|
10 |
* Fix - Changing an order status to "Cancelled" or "Refunded" will no longer refund the payment, will only void the payment if it was just authorized.
|
11 |
|
includes/admin/stripe-settings.php
CHANGED
@@ -43,7 +43,7 @@ return apply_filters(
|
|
43 |
),
|
44 |
'test_publishable_key' => array(
|
45 |
'title' => __( 'Test Publishable Key', 'woocommerce-gateway-stripe' ),
|
46 |
-
'type' => '
|
47 |
'description' => __( 'Get your API keys from your stripe account.', 'woocommerce-gateway-stripe' ),
|
48 |
'default' => '',
|
49 |
'desc_tip' => true,
|
@@ -55,9 +55,16 @@ return apply_filters(
|
|
55 |
'default' => '',
|
56 |
'desc_tip' => true,
|
57 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
'publishable_key' => array(
|
59 |
'title' => __( 'Live Publishable Key', 'woocommerce-gateway-stripe' ),
|
60 |
-
'type' => '
|
61 |
'description' => __( 'Get your API keys from your stripe account.', 'woocommerce-gateway-stripe' ),
|
62 |
'default' => '',
|
63 |
'desc_tip' => true,
|
@@ -69,6 +76,13 @@ return apply_filters(
|
|
69 |
'default' => '',
|
70 |
'desc_tip' => true,
|
71 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
'inline_cc_form' => array(
|
73 |
'title' => __( 'Inline Credit Card Form', 'woocommerce-gateway-stripe' ),
|
74 |
'type' => 'checkbox',
|
43 |
),
|
44 |
'test_publishable_key' => array(
|
45 |
'title' => __( 'Test Publishable Key', 'woocommerce-gateway-stripe' ),
|
46 |
+
'type' => 'text',
|
47 |
'description' => __( 'Get your API keys from your stripe account.', 'woocommerce-gateway-stripe' ),
|
48 |
'default' => '',
|
49 |
'desc_tip' => true,
|
55 |
'default' => '',
|
56 |
'desc_tip' => true,
|
57 |
),
|
58 |
+
'test_webhook_secret' => array(
|
59 |
+
'title' => __( 'Test Webhook Secret', 'woocommerce-gateway-stripe' ),
|
60 |
+
'type' => 'password',
|
61 |
+
'description' => __( 'Get your webhook signing secret from the webhooks section in your stripe account.', 'woocommerce-gateway-stripe' ),
|
62 |
+
'default' => '',
|
63 |
+
'desc_tip' => true,
|
64 |
+
),
|
65 |
'publishable_key' => array(
|
66 |
'title' => __( 'Live Publishable Key', 'woocommerce-gateway-stripe' ),
|
67 |
+
'type' => 'text',
|
68 |
'description' => __( 'Get your API keys from your stripe account.', 'woocommerce-gateway-stripe' ),
|
69 |
'default' => '',
|
70 |
'desc_tip' => true,
|
76 |
'default' => '',
|
77 |
'desc_tip' => true,
|
78 |
),
|
79 |
+
'webhook_secret' => array(
|
80 |
+
'title' => __( 'Webhook Secret', 'woocommerce-gateway-stripe' ),
|
81 |
+
'type' => 'password',
|
82 |
+
'description' => __( 'Get your webhook signing secret from the webhooks section in your stripe account.', 'woocommerce-gateway-stripe' ),
|
83 |
+
'default' => '',
|
84 |
+
'desc_tip' => true,
|
85 |
+
),
|
86 |
'inline_cc_form' => array(
|
87 |
'title' => __( 'Inline Credit Card Form', 'woocommerce-gateway-stripe' ),
|
88 |
'type' => 'checkbox',
|
includes/class-wc-gateway-stripe.php
CHANGED
@@ -985,7 +985,7 @@ class WC_Gateway_Stripe extends WC_Stripe_Payment_Gateway {
|
|
985 |
return;
|
986 |
}
|
987 |
|
988 |
-
if ( 'succeeded' === $intent->status ) {
|
989 |
// Proceed with the payment completion.
|
990 |
$this->process_response( end( $intent->charges->data ), $order );
|
991 |
} else if ( 'requires_payment_method' === $intent->status ) {
|
985 |
return;
|
986 |
}
|
987 |
|
988 |
+
if ( 'succeeded' === $intent->status || 'requires_capture' === $intent->status ) {
|
989 |
// Proceed with the payment completion.
|
990 |
$this->process_response( end( $intent->charges->data ), $order );
|
991 |
} else if ( 'requires_payment_method' === $intent->status ) {
|
includes/class-wc-stripe-webhook-handler.php
CHANGED
@@ -24,6 +24,13 @@ class WC_Stripe_Webhook_Handler extends WC_Stripe_Payment_Gateway {
|
|
24 |
*/
|
25 |
public $testmode;
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
/**
|
28 |
* Constructor.
|
29 |
*
|
@@ -34,6 +41,9 @@ class WC_Stripe_Webhook_Handler extends WC_Stripe_Payment_Gateway {
|
|
34 |
$this->retry_interval = 2;
|
35 |
$stripe_settings = get_option( 'woocommerce_stripe_settings', array() );
|
36 |
$this->testmode = ( ! empty( $stripe_settings['testmode'] ) && 'yes' === $stripe_settings['testmode'] ) ? true : false;
|
|
|
|
|
|
|
37 |
add_action( 'woocommerce_api_wc_stripe', array( $this, 'check_for_webhook' ) );
|
38 |
}
|
39 |
|
@@ -85,6 +95,29 @@ class WC_Stripe_Webhook_Handler extends WC_Stripe_Payment_Gateway {
|
|
85 |
return false;
|
86 |
}
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
return true;
|
89 |
}
|
90 |
|
@@ -503,11 +536,20 @@ class WC_Stripe_Webhook_Handler extends WC_Stripe_Payment_Gateway {
|
|
503 |
* @param object $notification
|
504 |
*/
|
505 |
public function process_review_opened( $notification ) {
|
506 |
-
|
|
|
507 |
|
508 |
-
|
509 |
-
|
510 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
511 |
}
|
512 |
|
513 |
/* translators: 1) The URL to the order. 2) The reason type. */
|
@@ -527,11 +569,20 @@ class WC_Stripe_Webhook_Handler extends WC_Stripe_Payment_Gateway {
|
|
527 |
* @param object $notification
|
528 |
*/
|
529 |
public function process_review_closed( $notification ) {
|
530 |
-
|
|
|
531 |
|
532 |
-
|
533 |
-
|
534 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
535 |
}
|
536 |
|
537 |
/* translators: 1) The reason type. */
|
@@ -610,16 +661,16 @@ class WC_Stripe_Webhook_Handler extends WC_Stripe_Payment_Gateway {
|
|
610 |
return;
|
611 |
}
|
612 |
|
|
|
|
|
|
|
|
|
613 |
if ( $this->lock_order_payment( $order, $intent ) ) {
|
614 |
return;
|
615 |
}
|
616 |
|
617 |
$order_id = WC_Stripe_Helper::is_wc_lt( '3.0' ) ? $order->id : $order->get_id();
|
618 |
if ( 'payment_intent.succeeded' === $notification->type || 'payment_intent.amount_capturable_updated' === $notification->type ) {
|
619 |
-
if ( 'pending' !== $order->get_status() && 'failed' !== $order->get_status() ) {
|
620 |
-
return;
|
621 |
-
}
|
622 |
-
|
623 |
$charge = end( $intent->charges->data );
|
624 |
WC_Stripe_Logger::log( "Stripe PaymentIntent $intent->id succeeded for order $order_id" );
|
625 |
|
24 |
*/
|
25 |
public $testmode;
|
26 |
|
27 |
+
/**
|
28 |
+
* The secret to use when verifying webhooks.
|
29 |
+
*
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
protected $secret;
|
33 |
+
|
34 |
/**
|
35 |
* Constructor.
|
36 |
*
|
41 |
$this->retry_interval = 2;
|
42 |
$stripe_settings = get_option( 'woocommerce_stripe_settings', array() );
|
43 |
$this->testmode = ( ! empty( $stripe_settings['testmode'] ) && 'yes' === $stripe_settings['testmode'] ) ? true : false;
|
44 |
+
$secret_key = ( $this->testmode ? 'test_' : '' ) . 'webhook_secret';
|
45 |
+
$this->secret = ! empty( $stripe_settings[ $secret_key ] ) ? $stripe_settings[ $secret_key ] : false;
|
46 |
+
|
47 |
add_action( 'woocommerce_api_wc_stripe', array( $this, 'check_for_webhook' ) );
|
48 |
}
|
49 |
|
95 |
return false;
|
96 |
}
|
97 |
|
98 |
+
if ( ! empty( $this->secret ) ) {
|
99 |
+
// Check for a valid signature.
|
100 |
+
$signature_format = '/^t=(?P<timestamp>\d+)(?P<signatures>(,v\d+=[a-z0-9]+){1,2})$/';
|
101 |
+
if ( empty( $request_headers['STRIPE-SIGNATURE'] ) || ! preg_match( $signature_format, $request_headers['STRIPE-SIGNATURE'], $matches ) ) {
|
102 |
+
return false;
|
103 |
+
}
|
104 |
+
|
105 |
+
// Verify the timestamp.
|
106 |
+
$timestamp = intval( $matches['timestamp'] );
|
107 |
+
if ( abs( $timestamp - time() ) > MINUTE_IN_SECONDS ) {
|
108 |
+
return;
|
109 |
+
}
|
110 |
+
|
111 |
+
// Generate the expected signature.
|
112 |
+
$signed_payload = $timestamp . '.' . $request_body;
|
113 |
+
$expected_signature = hash_hmac( 'sha256', $signed_payload, $this->secret );
|
114 |
+
|
115 |
+
// Check if the expected signature is present.
|
116 |
+
if ( ! preg_match( '/,v\d+=' . preg_quote( $expected_signature, '/' ) . '/', $matches['signatures'] ) ) {
|
117 |
+
return false;
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
return true;
|
122 |
}
|
123 |
|
536 |
* @param object $notification
|
537 |
*/
|
538 |
public function process_review_opened( $notification ) {
|
539 |
+
if ( isset( $notification->data->object->payment_intent ) ) {
|
540 |
+
$order = WC_Stripe_Helper::get_order_by_intent_id( $notification->data->object->payment_intent );
|
541 |
|
542 |
+
if ( ! $order ) {
|
543 |
+
WC_Stripe_Logger::log( '[Review Opened] Could not find order via intent ID: ' . $notification->data->object->payment_intent );
|
544 |
+
return;
|
545 |
+
}
|
546 |
+
} else {
|
547 |
+
$order = WC_Stripe_Helper::get_order_by_charge_id( $notification->data->object->charge );
|
548 |
+
|
549 |
+
if ( ! $order ) {
|
550 |
+
WC_Stripe_Logger::log( '[Review Opened] Could not find order via charge ID: ' . $notification->data->object->charge );
|
551 |
+
return;
|
552 |
+
}
|
553 |
}
|
554 |
|
555 |
/* translators: 1) The URL to the order. 2) The reason type. */
|
569 |
* @param object $notification
|
570 |
*/
|
571 |
public function process_review_closed( $notification ) {
|
572 |
+
if ( isset( $notification->data->object->payment_intent ) ) {
|
573 |
+
$order = WC_Stripe_Helper::get_order_by_intent_id( $notification->data->object->payment_intent );
|
574 |
|
575 |
+
if ( ! $order ) {
|
576 |
+
WC_Stripe_Logger::log( '[Review Closed] Could not find order via intent ID: ' . $notification->data->object->payment_intent );
|
577 |
+
return;
|
578 |
+
}
|
579 |
+
} else {
|
580 |
+
$order = WC_Stripe_Helper::get_order_by_charge_id( $notification->data->object->charge );
|
581 |
+
|
582 |
+
if ( ! $order ) {
|
583 |
+
WC_Stripe_Logger::log( '[Review Closed] Could not find order via charge ID: ' . $notification->data->object->charge );
|
584 |
+
return;
|
585 |
+
}
|
586 |
}
|
587 |
|
588 |
/* translators: 1) The reason type. */
|
661 |
return;
|
662 |
}
|
663 |
|
664 |
+
if ( 'pending' !== $order->get_status() && 'failed' !== $order->get_status() ) {
|
665 |
+
return;
|
666 |
+
}
|
667 |
+
|
668 |
if ( $this->lock_order_payment( $order, $intent ) ) {
|
669 |
return;
|
670 |
}
|
671 |
|
672 |
$order_id = WC_Stripe_Helper::is_wc_lt( '3.0' ) ? $order->id : $order->get_id();
|
673 |
if ( 'payment_intent.succeeded' === $notification->type || 'payment_intent.amount_capturable_updated' === $notification->type ) {
|
|
|
|
|
|
|
|
|
674 |
$charge = end( $intent->charges->data );
|
675 |
WC_Stripe_Logger::log( "Stripe PaymentIntent $intent->id succeeded for order $order_id" );
|
676 |
|
languages/woocommerce-gateway-stripe.pot
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
# This file is distributed under the same license as the WooCommerce Stripe Gateway package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: WooCommerce Stripe Gateway 4.2.
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://wordpress.org/support/plugin/woocommerce-gateway-stripe\n"
|
8 |
-
"POT-Creation-Date: 2019-
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -56,8 +56,8 @@ msgstr ""
|
|
56 |
|
57 |
#: includes/abstracts/abstract-wc-stripe-payment-gateway.php:439
|
58 |
#: includes/class-wc-stripe-order-handler.php:296
|
59 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
60 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
61 |
#. translators: transaction id
|
62 |
msgid "Stripe charge complete (Charge ID: %s)"
|
63 |
msgstr ""
|
@@ -558,7 +558,7 @@ msgid "Test Publishable Key"
|
|
558 |
msgstr ""
|
559 |
|
560 |
#: includes/admin/stripe-settings.php:47 includes/admin/stripe-settings.php:54
|
561 |
-
#: includes/admin/stripe-settings.php:
|
562 |
msgid "Get your API keys from your stripe account."
|
563 |
msgstr ""
|
564 |
|
@@ -567,152 +567,166 @@ msgid "Test Secret Key"
|
|
567 |
msgstr ""
|
568 |
|
569 |
#: includes/admin/stripe-settings.php:59
|
570 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
571 |
msgstr ""
|
572 |
|
573 |
#: includes/admin/stripe-settings.php:66
|
574 |
-
msgid "Live
|
575 |
msgstr ""
|
576 |
|
577 |
#: includes/admin/stripe-settings.php:73
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
578 |
msgid "Inline Credit Card Form"
|
579 |
msgstr ""
|
580 |
|
581 |
-
#: includes/admin/stripe-settings.php:
|
582 |
msgid ""
|
583 |
"Choose the style you want to show for your credit card form. When "
|
584 |
"unchecked, the credit card form will display separate credit card number "
|
585 |
"field, expiry date field and cvc field."
|
586 |
msgstr ""
|
587 |
|
588 |
-
#: includes/admin/stripe-settings.php:
|
589 |
msgid "Statement Descriptor"
|
590 |
msgstr ""
|
591 |
|
592 |
-
#: includes/admin/stripe-settings.php:
|
593 |
msgid ""
|
594 |
"Statement descriptors are limited to 22 characters, cannot use the special "
|
595 |
"characters >, <, \", \\, ', *, and must not consist solely of numbers. This "
|
596 |
"will appear on your customer's statement in capital letters."
|
597 |
msgstr ""
|
598 |
|
599 |
-
#: includes/admin/stripe-settings.php:
|
600 |
msgid "Capture"
|
601 |
msgstr ""
|
602 |
|
603 |
-
#: includes/admin/stripe-settings.php:
|
604 |
msgid "Capture charge immediately"
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: includes/admin/stripe-settings.php:
|
608 |
msgid ""
|
609 |
"Whether or not to immediately capture the charge. When unchecked, the "
|
610 |
"charge issues an authorization and will need to be captured later. "
|
611 |
"Uncaptured charges expire in 7 days."
|
612 |
msgstr ""
|
613 |
|
614 |
-
#: includes/admin/stripe-settings.php:
|
615 |
msgid "Payment Request Buttons"
|
616 |
msgstr ""
|
617 |
|
618 |
-
#: includes/admin/stripe-settings.php:
|
619 |
#. translators: 1) br tag 2) opening anchor tag 3) closing anchor tag
|
620 |
msgid ""
|
621 |
"Enable Payment Request Buttons. (Apple Pay/Chrome Payment Request API) "
|
622 |
"%1$sBy using Apple Pay, you agree to %2$s and %3$s's terms of service."
|
623 |
msgstr ""
|
624 |
|
625 |
-
#: includes/admin/stripe-settings.php:
|
626 |
msgid ""
|
627 |
"If enabled, users will be able to pay using Apple Pay or Chrome Payment "
|
628 |
"Request if supported by the browser."
|
629 |
msgstr ""
|
630 |
|
631 |
-
#: includes/admin/stripe-settings.php:
|
632 |
msgid "Payment Request Button Type"
|
633 |
msgstr ""
|
634 |
|
635 |
-
#: includes/admin/stripe-settings.php:
|
636 |
msgid "Button Type"
|
637 |
msgstr ""
|
638 |
|
639 |
-
#: includes/admin/stripe-settings.php:
|
640 |
msgid "Select the button type you would like to show."
|
641 |
msgstr ""
|
642 |
|
643 |
-
#: includes/admin/stripe-settings.php:
|
644 |
msgid "Default"
|
645 |
msgstr ""
|
646 |
|
647 |
-
#: includes/admin/stripe-settings.php:
|
648 |
msgid "Buy"
|
649 |
msgstr ""
|
650 |
|
651 |
-
#: includes/admin/stripe-settings.php:
|
652 |
msgid "Donate"
|
653 |
msgstr ""
|
654 |
|
655 |
-
#: includes/admin/stripe-settings.php:
|
656 |
msgid "Payment Request Button Theme"
|
657 |
msgstr ""
|
658 |
|
659 |
-
#: includes/admin/stripe-settings.php:
|
660 |
msgid "Button Theme"
|
661 |
msgstr ""
|
662 |
|
663 |
-
#: includes/admin/stripe-settings.php:
|
664 |
msgid "Select the button theme you would like to show."
|
665 |
msgstr ""
|
666 |
|
667 |
-
#: includes/admin/stripe-settings.php:
|
668 |
msgid "Dark"
|
669 |
msgstr ""
|
670 |
|
671 |
-
#: includes/admin/stripe-settings.php:
|
672 |
msgid "Light"
|
673 |
msgstr ""
|
674 |
|
675 |
-
#: includes/admin/stripe-settings.php:
|
676 |
msgid "Light-Outline"
|
677 |
msgstr ""
|
678 |
|
679 |
-
#: includes/admin/stripe-settings.php:
|
680 |
msgid "Payment Request Button Height"
|
681 |
msgstr ""
|
682 |
|
683 |
-
#: includes/admin/stripe-settings.php:
|
684 |
msgid "Button Height"
|
685 |
msgstr ""
|
686 |
|
687 |
-
#: includes/admin/stripe-settings.php:
|
688 |
msgid ""
|
689 |
"Enter the height you would like the button to be in pixels. Width will "
|
690 |
"always be 100%."
|
691 |
msgstr ""
|
692 |
|
693 |
-
#: includes/admin/stripe-settings.php:
|
694 |
msgid "Saved Cards"
|
695 |
msgstr ""
|
696 |
|
697 |
-
#: includes/admin/stripe-settings.php:
|
698 |
msgid "Enable Payment via Saved Cards"
|
699 |
msgstr ""
|
700 |
|
701 |
-
#: includes/admin/stripe-settings.php:
|
702 |
msgid ""
|
703 |
"If enabled, users will be able to pay with a saved card during checkout. "
|
704 |
"Card details are saved on Stripe servers, not on your store."
|
705 |
msgstr ""
|
706 |
|
707 |
-
#: includes/admin/stripe-settings.php:
|
708 |
msgid "Logging"
|
709 |
msgstr ""
|
710 |
|
711 |
-
#: includes/admin/stripe-settings.php:
|
712 |
msgid "Log debug messages"
|
713 |
msgstr ""
|
714 |
|
715 |
-
#: includes/admin/stripe-settings.php:
|
716 |
msgid "Save debug messages to the WooCommerce System Status log."
|
717 |
msgstr ""
|
718 |
|
@@ -839,7 +853,7 @@ msgstr ""
|
|
839 |
|
840 |
#: includes/class-wc-gateway-stripe.php:810
|
841 |
#: includes/class-wc-stripe-order-handler.php:162
|
842 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
843 |
#: includes/compat/class-wc-stripe-sepa-subs-compat.php:263
|
844 |
#: includes/compat/class-wc-stripe-subs-compat.php:244
|
845 |
#: includes/payment-methods/class-wc-gateway-stripe-sepa.php:373
|
@@ -857,7 +871,7 @@ msgid ""
|
|
857 |
msgstr ""
|
858 |
|
859 |
#: includes/class-wc-gateway-stripe.php:1015
|
860 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
861 |
#. translators: 1) The error message that was received from Stripe.
|
862 |
msgid "Stripe SCA authentication failed. Reason: %s"
|
863 |
msgstr ""
|
@@ -990,7 +1004,7 @@ msgid "Payment verification error: %s"
|
|
990 |
msgstr ""
|
991 |
|
992 |
#: includes/class-wc-stripe-order-handler.php:144
|
993 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
994 |
#: includes/payment-methods/class-wc-gateway-stripe-sepa.php:353
|
995 |
msgid "This card is no longer available and has been removed."
|
996 |
msgstr ""
|
@@ -1017,7 +1031,7 @@ msgstr ""
|
|
1017 |
msgid "SEPA IBAN ending in %s"
|
1018 |
msgstr ""
|
1019 |
|
1020 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1021 |
#. translators: 1) The URL to the order.
|
1022 |
msgid ""
|
1023 |
"A dispute was created for this order. Response is needed. Please go to your "
|
@@ -1025,34 +1039,34 @@ msgid ""
|
|
1025 |
"Dashboard</a> to review this dispute."
|
1026 |
msgstr ""
|
1027 |
|
1028 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1029 |
#. translators: partial captured amount
|
1030 |
msgid "This charge was partially captured via Stripe Dashboard in the amount of: %s"
|
1031 |
msgstr ""
|
1032 |
|
1033 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1034 |
msgid "This payment failed to clear."
|
1035 |
msgstr ""
|
1036 |
|
1037 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1038 |
msgid "This payment has cancelled."
|
1039 |
msgstr ""
|
1040 |
|
1041 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1042 |
msgid "Refunded via Stripe Dashboard"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1046 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1047 |
msgid "Pre-Authorization Released via Stripe Dashboard"
|
1048 |
msgstr ""
|
1049 |
|
1050 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1051 |
#. translators: 1) dollar amount 2) transaction id 3) refund message
|
1052 |
msgid "Refunded %1$s - Refund ID: %2$s - %3$s"
|
1053 |
msgstr ""
|
1054 |
|
1055 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1056 |
#. translators: 1) The URL to the order. 2) The reason type.
|
1057 |
msgid ""
|
1058 |
"A review has been opened for this order. Action is needed. Please go to "
|
@@ -1060,7 +1074,7 @@ msgid ""
|
|
1060 |
"Dashboard</a> to review the issue. Reason: (%2$s)"
|
1061 |
msgstr ""
|
1062 |
|
1063 |
-
#: includes/class-wc-stripe-webhook-handler.php:
|
1064 |
#. translators: 1) The reason type.
|
1065 |
msgid "The opened review for this order is now closed. Reason: (%s)"
|
1066 |
msgstr ""
|
@@ -1328,4 +1342,4 @@ msgstr ""
|
|
1328 |
|
1329 |
#. Author URI of the plugin/theme
|
1330 |
msgid "https://woocommerce.com/"
|
1331 |
-
msgstr ""
|
2 |
# This file is distributed under the same license as the WooCommerce Stripe Gateway package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: WooCommerce Stripe Gateway 4.2.3\n"
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://wordpress.org/support/plugin/woocommerce-gateway-stripe\n"
|
8 |
+
"POT-Creation-Date: 2019-07-12 15:21:21+00:00\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
56 |
|
57 |
#: includes/abstracts/abstract-wc-stripe-payment-gateway.php:439
|
58 |
#: includes/class-wc-stripe-order-handler.php:296
|
59 |
+
#: includes/class-wc-stripe-webhook-handler.php:340
|
60 |
+
#: includes/class-wc-stripe-webhook-handler.php:392
|
61 |
#. translators: transaction id
|
62 |
msgid "Stripe charge complete (Charge ID: %s)"
|
63 |
msgstr ""
|
558 |
msgstr ""
|
559 |
|
560 |
#: includes/admin/stripe-settings.php:47 includes/admin/stripe-settings.php:54
|
561 |
+
#: includes/admin/stripe-settings.php:68 includes/admin/stripe-settings.php:75
|
562 |
msgid "Get your API keys from your stripe account."
|
563 |
msgstr ""
|
564 |
|
567 |
msgstr ""
|
568 |
|
569 |
#: includes/admin/stripe-settings.php:59
|
570 |
+
msgid "Test Webhook Secret"
|
571 |
+
msgstr ""
|
572 |
+
|
573 |
+
#: includes/admin/stripe-settings.php:61 includes/admin/stripe-settings.php:82
|
574 |
+
msgid ""
|
575 |
+
"Get your webhook signing secret from the webhooks section in your stripe "
|
576 |
+
"account."
|
577 |
msgstr ""
|
578 |
|
579 |
#: includes/admin/stripe-settings.php:66
|
580 |
+
msgid "Live Publishable Key"
|
581 |
msgstr ""
|
582 |
|
583 |
#: includes/admin/stripe-settings.php:73
|
584 |
+
msgid "Live Secret Key"
|
585 |
+
msgstr ""
|
586 |
+
|
587 |
+
#: includes/admin/stripe-settings.php:80
|
588 |
+
msgid "Webhook Secret"
|
589 |
+
msgstr ""
|
590 |
+
|
591 |
+
#: includes/admin/stripe-settings.php:87
|
592 |
msgid "Inline Credit Card Form"
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: includes/admin/stripe-settings.php:89
|
596 |
msgid ""
|
597 |
"Choose the style you want to show for your credit card form. When "
|
598 |
"unchecked, the credit card form will display separate credit card number "
|
599 |
"field, expiry date field and cvc field."
|
600 |
msgstr ""
|
601 |
|
602 |
+
#: includes/admin/stripe-settings.php:94
|
603 |
msgid "Statement Descriptor"
|
604 |
msgstr ""
|
605 |
|
606 |
+
#: includes/admin/stripe-settings.php:96
|
607 |
msgid ""
|
608 |
"Statement descriptors are limited to 22 characters, cannot use the special "
|
609 |
"characters >, <, \", \\, ', *, and must not consist solely of numbers. This "
|
610 |
"will appear on your customer's statement in capital letters."
|
611 |
msgstr ""
|
612 |
|
613 |
+
#: includes/admin/stripe-settings.php:101
|
614 |
msgid "Capture"
|
615 |
msgstr ""
|
616 |
|
617 |
+
#: includes/admin/stripe-settings.php:102
|
618 |
msgid "Capture charge immediately"
|
619 |
msgstr ""
|
620 |
|
621 |
+
#: includes/admin/stripe-settings.php:104
|
622 |
msgid ""
|
623 |
"Whether or not to immediately capture the charge. When unchecked, the "
|
624 |
"charge issues an authorization and will need to be captured later. "
|
625 |
"Uncaptured charges expire in 7 days."
|
626 |
msgstr ""
|
627 |
|
628 |
+
#: includes/admin/stripe-settings.php:109
|
629 |
msgid "Payment Request Buttons"
|
630 |
msgstr ""
|
631 |
|
632 |
+
#: includes/admin/stripe-settings.php:111
|
633 |
#. translators: 1) br tag 2) opening anchor tag 3) closing anchor tag
|
634 |
msgid ""
|
635 |
"Enable Payment Request Buttons. (Apple Pay/Chrome Payment Request API) "
|
636 |
"%1$sBy using Apple Pay, you agree to %2$s and %3$s's terms of service."
|
637 |
msgstr ""
|
638 |
|
639 |
+
#: includes/admin/stripe-settings.php:113
|
640 |
msgid ""
|
641 |
"If enabled, users will be able to pay using Apple Pay or Chrome Payment "
|
642 |
"Request if supported by the browser."
|
643 |
msgstr ""
|
644 |
|
645 |
+
#: includes/admin/stripe-settings.php:118
|
646 |
msgid "Payment Request Button Type"
|
647 |
msgstr ""
|
648 |
|
649 |
+
#: includes/admin/stripe-settings.php:119
|
650 |
msgid "Button Type"
|
651 |
msgstr ""
|
652 |
|
653 |
+
#: includes/admin/stripe-settings.php:121
|
654 |
msgid "Select the button type you would like to show."
|
655 |
msgstr ""
|
656 |
|
657 |
+
#: includes/admin/stripe-settings.php:125
|
658 |
msgid "Default"
|
659 |
msgstr ""
|
660 |
|
661 |
+
#: includes/admin/stripe-settings.php:126
|
662 |
msgid "Buy"
|
663 |
msgstr ""
|
664 |
|
665 |
+
#: includes/admin/stripe-settings.php:127
|
666 |
msgid "Donate"
|
667 |
msgstr ""
|
668 |
|
669 |
+
#: includes/admin/stripe-settings.php:131
|
670 |
msgid "Payment Request Button Theme"
|
671 |
msgstr ""
|
672 |
|
673 |
+
#: includes/admin/stripe-settings.php:132
|
674 |
msgid "Button Theme"
|
675 |
msgstr ""
|
676 |
|
677 |
+
#: includes/admin/stripe-settings.php:134
|
678 |
msgid "Select the button theme you would like to show."
|
679 |
msgstr ""
|
680 |
|
681 |
+
#: includes/admin/stripe-settings.php:138
|
682 |
msgid "Dark"
|
683 |
msgstr ""
|
684 |
|
685 |
+
#: includes/admin/stripe-settings.php:139
|
686 |
msgid "Light"
|
687 |
msgstr ""
|
688 |
|
689 |
+
#: includes/admin/stripe-settings.php:140
|
690 |
msgid "Light-Outline"
|
691 |
msgstr ""
|
692 |
|
693 |
+
#: includes/admin/stripe-settings.php:144
|
694 |
msgid "Payment Request Button Height"
|
695 |
msgstr ""
|
696 |
|
697 |
+
#: includes/admin/stripe-settings.php:145
|
698 |
msgid "Button Height"
|
699 |
msgstr ""
|
700 |
|
701 |
+
#: includes/admin/stripe-settings.php:147
|
702 |
msgid ""
|
703 |
"Enter the height you would like the button to be in pixels. Width will "
|
704 |
"always be 100%."
|
705 |
msgstr ""
|
706 |
|
707 |
+
#: includes/admin/stripe-settings.php:152
|
708 |
msgid "Saved Cards"
|
709 |
msgstr ""
|
710 |
|
711 |
+
#: includes/admin/stripe-settings.php:153
|
712 |
msgid "Enable Payment via Saved Cards"
|
713 |
msgstr ""
|
714 |
|
715 |
+
#: includes/admin/stripe-settings.php:155
|
716 |
msgid ""
|
717 |
"If enabled, users will be able to pay with a saved card during checkout. "
|
718 |
"Card details are saved on Stripe servers, not on your store."
|
719 |
msgstr ""
|
720 |
|
721 |
+
#: includes/admin/stripe-settings.php:160
|
722 |
msgid "Logging"
|
723 |
msgstr ""
|
724 |
|
725 |
+
#: includes/admin/stripe-settings.php:161
|
726 |
msgid "Log debug messages"
|
727 |
msgstr ""
|
728 |
|
729 |
+
#: includes/admin/stripe-settings.php:163
|
730 |
msgid "Save debug messages to the WooCommerce System Status log."
|
731 |
msgstr ""
|
732 |
|
853 |
|
854 |
#: includes/class-wc-gateway-stripe.php:810
|
855 |
#: includes/class-wc-stripe-order-handler.php:162
|
856 |
+
#: includes/class-wc-stripe-webhook-handler.php:231
|
857 |
#: includes/compat/class-wc-stripe-sepa-subs-compat.php:263
|
858 |
#: includes/compat/class-wc-stripe-subs-compat.php:244
|
859 |
#: includes/payment-methods/class-wc-gateway-stripe-sepa.php:373
|
871 |
msgstr ""
|
872 |
|
873 |
#: includes/class-wc-gateway-stripe.php:1015
|
874 |
+
#: includes/class-wc-stripe-webhook-handler.php:660
|
875 |
#. translators: 1) The error message that was received from Stripe.
|
876 |
msgid "Stripe SCA authentication failed. Reason: %s"
|
877 |
msgstr ""
|
1004 |
msgstr ""
|
1005 |
|
1006 |
#: includes/class-wc-stripe-order-handler.php:144
|
1007 |
+
#: includes/class-wc-stripe-webhook-handler.php:212
|
1008 |
#: includes/payment-methods/class-wc-gateway-stripe-sepa.php:353
|
1009 |
msgid "This card is no longer available and has been removed."
|
1010 |
msgstr ""
|
1031 |
msgid "SEPA IBAN ending in %s"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
+
#: includes/class-wc-stripe-webhook-handler.php:289
|
1035 |
#. translators: 1) The URL to the order.
|
1036 |
msgid ""
|
1037 |
"A dispute was created for this order. Response is needed. Please go to your "
|
1039 |
"Dashboard</a> to review this dispute."
|
1040 |
msgstr ""
|
1041 |
|
1042 |
+
#: includes/class-wc-stripe-webhook-handler.php:335
|
1043 |
#. translators: partial captured amount
|
1044 |
msgid "This charge was partially captured via Stripe Dashboard in the amount of: %s"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
+
#: includes/class-wc-stripe-webhook-handler.php:421
|
1048 |
msgid "This payment failed to clear."
|
1049 |
msgstr ""
|
1050 |
|
1051 |
+
#: includes/class-wc-stripe-webhook-handler.php:454
|
1052 |
msgid "This payment has cancelled."
|
1053 |
msgstr ""
|
1054 |
|
1055 |
+
#: includes/class-wc-stripe-webhook-handler.php:489
|
1056 |
msgid "Refunded via Stripe Dashboard"
|
1057 |
msgstr ""
|
1058 |
|
1059 |
+
#: includes/class-wc-stripe-webhook-handler.php:489
|
1060 |
+
#: includes/class-wc-stripe-webhook-handler.php:517
|
1061 |
msgid "Pre-Authorization Released via Stripe Dashboard"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
+
#: includes/class-wc-stripe-webhook-handler.php:517
|
1065 |
#. translators: 1) dollar amount 2) transaction id 3) refund message
|
1066 |
msgid "Refunded %1$s - Refund ID: %2$s - %3$s"
|
1067 |
msgstr ""
|
1068 |
|
1069 |
+
#: includes/class-wc-stripe-webhook-handler.php:539
|
1070 |
#. translators: 1) The URL to the order. 2) The reason type.
|
1071 |
msgid ""
|
1072 |
"A review has been opened for this order. Action is needed. Please go to "
|
1074 |
"Dashboard</a> to review the issue. Reason: (%2$s)"
|
1075 |
msgstr ""
|
1076 |
|
1077 |
+
#: includes/class-wc-stripe-webhook-handler.php:563
|
1078 |
#. translators: 1) The reason type.
|
1079 |
msgid "The opened review for this order is now closed. Reason: (%s)"
|
1080 |
msgstr ""
|
1342 |
|
1343 |
#. Author URI of the plugin/theme
|
1344 |
msgid "https://woocommerce.com/"
|
1345 |
+
msgstr ""
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Tags: credit card, stripe, apple pay, payment request, google pay, sepa, sofort,
|
|
4 |
Requires at least: 4.4
|
5 |
Tested up to: 5.2.1
|
6 |
Requires PHP: 5.6
|
7 |
-
Stable tag: 4.2.
|
8 |
License: GPLv3
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
Attributions: thorsten-stripe
|
@@ -113,8 +113,11 @@ If you get stuck, you can ask for help in the Plugin Forum.
|
|
113 |
|
114 |
== Changelog ==
|
115 |
|
116 |
-
= 4.2.
|
117 |
-
* Fix -
|
|
|
|
|
|
|
118 |
|
119 |
[See changelog for all versions](https://raw.githubusercontent.com/woocommerce/woocommerce-gateway-stripe/master/changelog.txt).
|
120 |
|
4 |
Requires at least: 4.4
|
5 |
Tested up to: 5.2.1
|
6 |
Requires PHP: 5.6
|
7 |
+
Stable tag: 4.2.3
|
8 |
License: GPLv3
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
Attributions: thorsten-stripe
|
113 |
|
114 |
== Changelog ==
|
115 |
|
116 |
+
= 4.2.3 - 2019-07-18 =
|
117 |
+
* Fix - Ignore "payment failed" webhooks if they come after another payment has already succeeded for that order.
|
118 |
+
* Fix - Correctly transition an order to "On Hold" if the payment was put under review by Stripe Radar, and back to "Processing" when the review is approved.
|
119 |
+
* Tweak - Make the publishable key fields be plain text instead of "password".
|
120 |
+
* Fix - Fix successful retries of 3ds failing.
|
121 |
|
122 |
[See changelog for all versions](https://raw.githubusercontent.com/woocommerce/woocommerce-gateway-stripe/master/changelog.txt).
|
123 |
|
woocommerce-gateway-stripe.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Description: Take credit card payments on your store using Stripe.
|
6 |
* Author: WooCommerce
|
7 |
* Author URI: https://woocommerce.com/
|
8 |
-
* Version: 4.2.
|
9 |
* Requires at least: 4.4
|
10 |
* Tested up to: 5.2.1
|
11 |
* WC requires at least: 2.6
|
@@ -46,7 +46,7 @@ function woocommerce_gateway_stripe_init() {
|
|
46 |
/**
|
47 |
* Required minimums and constants
|
48 |
*/
|
49 |
-
define( 'WC_STRIPE_VERSION', '4.2.
|
50 |
define( 'WC_STRIPE_MIN_PHP_VER', '5.6.0' );
|
51 |
define( 'WC_STRIPE_MIN_WC_VER', '2.6.0' );
|
52 |
define( 'WC_STRIPE_MAIN_FILE', __FILE__ );
|
5 |
* Description: Take credit card payments on your store using Stripe.
|
6 |
* Author: WooCommerce
|
7 |
* Author URI: https://woocommerce.com/
|
8 |
+
* Version: 4.2.3
|
9 |
* Requires at least: 4.4
|
10 |
* Tested up to: 5.2.1
|
11 |
* WC requires at least: 2.6
|
46 |
/**
|
47 |
* Required minimums and constants
|
48 |
*/
|
49 |
+
define( 'WC_STRIPE_VERSION', '4.2.3' );
|
50 |
define( 'WC_STRIPE_MIN_PHP_VER', '5.6.0' );
|
51 |
define( 'WC_STRIPE_MIN_WC_VER', '2.6.0' );
|
52 |
define( 'WC_STRIPE_MAIN_FILE', __FILE__ );
|