Simple Membership - Version 3.9.2

Version Description

  • Spanish translation language files updated.
  • Added more debug logging statement in the IPN handling script for easier troubleshooting.
  • Fixed an issue with the new SCA stripe subscription cancellation webhook.
Download this release

Release Info

Developer mra13
Plugin Icon 128x128 Simple Membership
Version 3.9.2
Comparing to
See all releases

Code changes from version 3.8.9 to 3.9.2

Files changed (149) hide show
  1. classes/class.swpm-access-control.php +2 -2
  2. classes/class.swpm-auth.php +3 -3
  3. classes/class.swpm-utils-misc.php +9 -0
  4. classes/class.swpm-wp-loaded-tasks.php +102 -83
  5. classes/shortcode-related/class.swpm-shortcodes-handler.php +1 -0
  6. ipn/swpm-stripe-buy-now-ipn.php +2 -4
  7. ipn/swpm-stripe-sca-buy-now-ipn.php +225 -0
  8. ipn/swpm-stripe-sca-subscription-ipn.php +208 -0
  9. ipn/swpm-stripe-subscription-ipn.php +2 -4
  10. ipn/swpm_handle_subsc_ipn.php +11 -5
  11. languages/simple-membership-es_ES.mo +0 -0
  12. languages/simple-membership-es_ES.po +1868 -1012
  13. lib/stripe-gateway/.editorconfig +14 -0
  14. lib/stripe-gateway/.gitignore +17 -0
  15. lib/stripe-gateway/CHANGELOG.md +732 -0
  16. lib/stripe-gateway/LICENSE +21 -0
  17. lib/stripe-gateway/README.md +257 -0
  18. lib/stripe-gateway/VERSION +1 -0
  19. lib/stripe-gateway/build.php +36 -0
  20. lib/stripe-gateway/composer.json +37 -0
  21. lib/stripe-gateway/data/ca-certificates.crt +421 -694
  22. lib/stripe-gateway/init.php +79 -3
  23. lib/stripe-gateway/lib/Account.php +302 -41
  24. lib/stripe-gateway/lib/AccountLink.php +20 -0
  25. lib/stripe-gateway/lib/AlipayAccount.php +59 -1
  26. lib/stripe-gateway/lib/ApiOperations/All.php +34 -0
  27. lib/stripe-gateway/lib/ApiOperations/Create.php +28 -0
  28. lib/stripe-gateway/lib/ApiOperations/Delete.php +27 -0
  29. lib/stripe-gateway/lib/ApiOperations/NestedResource.php +118 -0
  30. lib/stripe-gateway/lib/ApiOperations/Request.php +61 -0
  31. lib/stripe-gateway/lib/ApiOperations/Retrieve.php +27 -0
  32. lib/stripe-gateway/lib/ApiOperations/Update.php +46 -0
  33. lib/stripe-gateway/lib/ApiRequestor.php +307 -43
  34. lib/stripe-gateway/lib/ApiResource.php +40 -133
  35. lib/stripe-gateway/lib/ApiResponse.php +3 -1
  36. lib/stripe-gateway/lib/ApplePayDomain.php +27 -0
  37. lib/stripe-gateway/lib/ApplicationFee.php +50 -22
  38. lib/stripe-gateway/lib/ApplicationFeeRefund.php +15 -0
  39. lib/stripe-gateway/lib/Balance.php +7 -4
  40. lib/stripe-gateway/lib/BalanceTransaction.php +35 -27
  41. lib/stripe-gateway/lib/BankAccount.php +87 -4
  42. lib/stripe-gateway/lib/BitcoinReceiver.php +17 -54
  43. lib/stripe-gateway/lib/BitcoinTransaction.php +1 -1
  44. lib/stripe-gateway/lib/Capability.php +82 -0
  45. lib/stripe-gateway/lib/Card.php +117 -1
  46. lib/stripe-gateway/lib/Charge.php +86 -64
  47. lib/stripe-gateway/lib/Checkout/Session.php +39 -0
  48. lib/stripe-gateway/lib/Collection.php +31 -11
  49. lib/stripe-gateway/lib/CountrySpec.php +12 -31
  50. lib/stripe-gateway/lib/Coupon.php +22 -64
  51. lib/stripe-gateway/lib/CreditNote.php +73 -0
  52. lib/stripe-gateway/lib/Customer.php +203 -74
  53. lib/stripe-gateway/lib/CustomerBalanceTransaction.php +88 -0
  54. lib/stripe-gateway/lib/Discount.php +20 -0
  55. lib/stripe-gateway/lib/Dispute.php +32 -38
  56. lib/stripe-gateway/lib/EphemeralKey.php +40 -0
  57. lib/stripe-gateway/lib/Error/Base.php +9 -0
  58. lib/stripe-gateway/lib/Error/Card.php +6 -7
  59. lib/stripe-gateway/lib/Error/Idempotency.php +7 -0
  60. lib/stripe-gateway/lib/Error/OAuth/InvalidClient.php +10 -0
  61. lib/stripe-gateway/lib/Error/OAuth/InvalidGrant.php +13 -0
  62. lib/stripe-gateway/lib/Error/OAuth/InvalidRequest.php +11 -0
  63. lib/stripe-gateway/lib/Error/OAuth/InvalidScope.php +10 -0
  64. lib/stripe-gateway/lib/Error/OAuth/OAuthBase.php +23 -0
  65. lib/stripe-gateway/lib/Error/OAuth/UnsupportedGrantType.php +11 -0
  66. lib/stripe-gateway/lib/Error/OAuth/UnsupportedResponseType.php +11 -0
  67. lib/stripe-gateway/lib/Error/Permission.php +7 -0
  68. lib/stripe-gateway/lib/Error/SignatureVerification.php +20 -0
  69. lib/stripe-gateway/lib/Event.php +147 -23
  70. lib/stripe-gateway/lib/ExchangeRate.php +16 -0
  71. lib/stripe-gateway/lib/File.php +62 -0
  72. lib/stripe-gateway/lib/FileLink.php +28 -0
  73. lib/stripe-gateway/lib/FileUpload.php +2 -57
  74. lib/stripe-gateway/lib/HttpClient/ClientInterface.php +5 -2
  75. lib/stripe-gateway/lib/HttpClient/CurlClient.php +258 -96
  76. lib/stripe-gateway/lib/Invoice.php +137 -27
  77. lib/stripe-gateway/lib/InvoiceItem.php +26 -64
  78. lib/stripe-gateway/lib/InvoiceLineItem.php +32 -0
  79. lib/stripe-gateway/lib/IssuerFraudRecord.php +24 -0
  80. lib/stripe-gateway/lib/Issuing/Authorization.php +68 -0
  81. lib/stripe-gateway/lib/Issuing/Card.php +51 -0
  82. lib/stripe-gateway/lib/Issuing/CardDetails.php +21 -0
  83. lib/stripe-gateway/lib/Issuing/Cardholder.php +30 -0
  84. lib/stripe-gateway/lib/Issuing/Dispute.php +30 -0
  85. lib/stripe-gateway/lib/Issuing/Transaction.php +35 -0
  86. lib/stripe-gateway/lib/LoginLink.php +17 -0
  87. lib/stripe-gateway/lib/OAuth.php +93 -0
  88. lib/stripe-gateway/lib/Order.php +29 -53
  89. lib/stripe-gateway/lib/OrderItem.php +21 -0
  90. lib/stripe-gateway/lib/OrderReturn.php +13 -20
  91. lib/stripe-gateway/lib/PaymentIntent.php +106 -0
  92. lib/stripe-gateway/lib/PaymentMethod.php +59 -0
  93. lib/stripe-gateway/lib/Payout.php +92 -0
  94. lib/stripe-gateway/lib/Person.php +107 -0
  95. lib/stripe-gateway/lib/Plan.php +26 -64
  96. lib/stripe-gateway/lib/Product.php +30 -61
  97. lib/stripe-gateway/lib/Radar/EarlyFraudWarning.php +36 -0
  98. lib/stripe-gateway/lib/Radar/ValueList.php +32 -0
  99. lib/stripe-gateway/lib/Radar/ValueListItem.php +26 -0
  100. lib/stripe-gateway/lib/Recipient.php +22 -67
  101. lib/stripe-gateway/lib/RecipientTransfer.php +38 -0
  102. lib/stripe-gateway/lib/Refund.php +30 -49
  103. lib/stripe-gateway/lib/Reporting/ReportRun.php +28 -0
  104. lib/stripe-gateway/lib/Reporting/ReportType.php +24 -0
  105. lib/stripe-gateway/lib/RequestTelemetry.php +27 -0
  106. lib/stripe-gateway/lib/Review.php +57 -0
  107. lib/stripe-gateway/lib/SKU.php +21 -64
  108. lib/stripe-gateway/lib/SetupIntent.php +74 -0
  109. lib/stripe-gateway/lib/Sigma/ScheduledQueryRun.php +33 -0
  110. lib/stripe-gateway/lib/SingletonApiResource.php +3 -1
  111. lib/stripe-gateway/lib/Source.php +122 -13
  112. lib/stripe-gateway/lib/SourceTransaction.php +22 -0
  113. lib/stripe-gateway/lib/Stripe.php +167 -2
  114. lib/stripe-gateway/lib/StripeObject.php +347 -117
  115. lib/stripe-gateway/lib/Subscription.php +59 -57
  116. lib/stripe-gateway/lib/SubscriptionItem.php +59 -0
  117. lib/stripe-gateway/lib/SubscriptionSchedule.php +68 -0
  118. lib/stripe-gateway/lib/TaxId.php +80 -0
  119. lib/stripe-gateway/lib/TaxRate.php +30 -0
  120. lib/stripe-gateway/lib/Terminal/ConnectionToken.php +17 -0
  121. lib/stripe-gateway/lib/Terminal/Location.php +25 -0
  122. lib/stripe-gateway/lib/Terminal/Reader.php +30 -0
  123. lib/stripe-gateway/lib/ThreeDSecure.php +5 -11
  124. lib/stripe-gateway/lib/Token.php +13 -21
  125. lib/stripe-gateway/lib/Topup.php +59 -0
  126. lib/stripe-gateway/lib/Transfer.php +61 -56
  127. lib/stripe-gateway/lib/TransferReversal.php +9 -1
  128. lib/stripe-gateway/lib/UsageRecord.php +43 -0
  129. lib/stripe-gateway/lib/UsageRecordSummary.php +21 -0
  130. lib/stripe-gateway/lib/Util/AutoPagingIterator.php +3 -3
  131. lib/stripe-gateway/lib/Util/CaseInsensitiveArray.php +62 -0
  132. lib/stripe-gateway/lib/Util/DefaultLogger.php +18 -0
  133. lib/stripe-gateway/lib/Util/LoggerInterface.php +36 -0
  134. lib/stripe-gateway/lib/Util/RandomGenerator.php +34 -0
  135. lib/stripe-gateway/lib/Util/RequestOptions.php +34 -5
  136. lib/stripe-gateway/lib/Util/Set.php +2 -2
  137. lib/stripe-gateway/lib/Util/Util.php +260 -41
  138. lib/stripe-gateway/lib/Webhook.php +40 -0
  139. lib/stripe-gateway/lib/WebhookEndpoint.php +28 -0
  140. lib/stripe-gateway/lib/WebhookSignature.php +133 -0
  141. lib/stripe-gateway/update_certs.php +19 -0
  142. lib/stripe-util-functions.php +2 -4
  143. readme.txt +15 -2
  144. simple-wp-membership.php +2 -2
  145. views/payments/admin_create_payment_buttons.php +65 -59
  146. views/payments/admin_edit_payment_buttons.php +27 -25
  147. views/payments/payment-gateway/admin_stripe_sca_buy_now_button.php +440 -0
  148. views/payments/payment-gateway/admin_stripe_sca_subscription_button.php +339 -0
  149. views/payments/payment-gateway/stripe_sca_button_shortcode_view.php +327 -0
classes/class.swpm-access-control.php CHANGED
@@ -63,7 +63,7 @@ class SwpmAccessControl {
63
  $protect_older_posts = apply_filters('swpm_should_protect_older_post', false, $id);
64
  if ($protect_older_posts){
65
  //This post falls under the older post protection condition. No access to it.
66
- $text = SwpmUtils::_('This content can only be viewed by members who joined on or before ' . SwpmUtils::get_formatted_date_according_to_wp_settings($post->post_date));
67
  $error_msg = '<div class="swpm-post-older-post-msg">'.$text.'</div>';
68
  $this->lastError = apply_filters ('swpm_restricted_post_msg_older_post', $error_msg);
69
  return false;
@@ -135,7 +135,7 @@ class SwpmAccessControl {
135
  $protect_older_posts = apply_filters('swpm_should_protect_older_post', false, $post_id);
136
  if ($protect_older_posts){
137
  //This comment is protected due to the older post protection addon settings configuration.
138
- $text = SwpmUtils::_('This content can only be viewed by members who joined on or before ' . SwpmUtils::get_formatted_date_according_to_wp_settings($post->post_date));
139
  $error_msg = '<div class="swpm-comment-older-post-msg">'.$text.'</div>';
140
  $this->lastError = apply_filters ('swpm_restricted_comment_older_post', $error_msg);
141
  return false;
63
  $protect_older_posts = apply_filters('swpm_should_protect_older_post', false, $id);
64
  if ($protect_older_posts){
65
  //This post falls under the older post protection condition. No access to it.
66
+ $text = SwpmUtils::_('This content can only be viewed by members who joined on or before ') . SwpmUtils::get_formatted_and_translated_date_according_to_wp_settings($post->post_date);
67
  $error_msg = '<div class="swpm-post-older-post-msg">'.$text.'</div>';
68
  $this->lastError = apply_filters ('swpm_restricted_post_msg_older_post', $error_msg);
69
  return false;
135
  $protect_older_posts = apply_filters('swpm_should_protect_older_post', false, $post_id);
136
  if ($protect_older_posts){
137
  //This comment is protected due to the older post protection addon settings configuration.
138
+ $text = SwpmUtils::_('This content can only be viewed by members who joined on or before ') . SwpmUtils::get_formatted_and_translated_date_according_to_wp_settings($post->post_date);
139
  $error_msg = '<div class="swpm-comment-older-post-msg">'.$text.'</div>';
140
  $this->lastError = apply_filters ('swpm_restricted_comment_older_post', $error_msg);
141
  return false;
classes/class.swpm-auth.php CHANGED
@@ -385,9 +385,9 @@ class SwpmAuth {
385
  ; //Use live API key
386
  }
387
  //Include the Stripe library.
388
- if ( ! class_exists( '\Stripe\Stripe' ) ) {
389
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
390
- } \Stripe\Stripe::setApiKey($secret_key);
391
  // Let's try to cancel subscription
392
  try {
393
  $sub = \Stripe\Subscription::retrieve($subscr_id);
385
  ; //Use live API key
386
  }
387
  //Include the Stripe library.
388
+ SwpmMiscUtils::load_stripe_lib();
389
+
390
+ \Stripe\Stripe::setApiKey($secret_key);
391
  // Let's try to cancel subscription
392
  try {
393
  $sub = \Stripe\Subscription::retrieve($subscr_id);
classes/class.swpm-utils-misc.php CHANGED
@@ -475,6 +475,8 @@ class SwpmMiscUtils {
475
  'pp_smart_checkout' => SwpmUtils::_('PayPal Smart Checkout'),
476
  'stripe_buy_now' => SwpmUtils::_('Stripe Buy Now'),
477
  'stripe_subscription' => SwpmUtils::_('Stripe Subscription'),
 
 
478
  'braintree_buy_now' => SwpmUtils::_('Braintree Buy Now')
479
  );
480
 
@@ -496,4 +498,11 @@ class SwpmMiscUtils {
496
  return $formatted;
497
  }
498
 
 
 
 
 
 
 
 
499
  }
475
  'pp_smart_checkout' => SwpmUtils::_('PayPal Smart Checkout'),
476
  'stripe_buy_now' => SwpmUtils::_('Stripe Buy Now'),
477
  'stripe_subscription' => SwpmUtils::_('Stripe Subscription'),
478
+ 'stripe_sca_buy_now' => SwpmUtils::_('Stripe SCA Buy Now'),
479
+ 'stripe_sca_subscription' => SwpmUtils::_('Stripe SCA Subscription'),
480
  'braintree_buy_now' => SwpmUtils::_('Braintree Buy Now')
481
  );
482
 
498
  return $formatted;
499
  }
500
 
501
+ public static function load_stripe_lib() {
502
+ //this function loads Stripe PHP SDK and ensures only once instance is loaded
503
+ if ( ! class_exists( '\Stripe\Stripe' ) ) {
504
+ require_once(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
505
+ }
506
+ }
507
+
508
  }
classes/class.swpm-wp-loaded-tasks.php CHANGED
@@ -1,83 +1,102 @@
1
- <?php
2
-
3
- class SwpmWpLoadedTasks {
4
-
5
- public function __construct() {
6
-
7
- }
8
-
9
- /*
10
- * This is triggered after all plugins, themes and WP has loaded.
11
- * It is triggered after init, plugins_loaded etc.
12
- */
13
- public function do_wp_loaded_tasks() {
14
- $this->synchronise_swpm_logout_for_wp_users();
15
-
16
- //IPN listener
17
- $this->swpm_ipn_listener();
18
-
19
- }
20
-
21
- /*
22
- * Logs out the user from the swpm session if they are logged out of the WP user session
23
- */
24
- public function synchronise_swpm_logout_for_wp_users() {
25
- if (!is_user_logged_in()) {
26
- /* WP user is logged out. So logout the SWPM user (if applicable) */
27
- if (SwpmMemberUtils::is_member_logged_in()) {
28
-
29
- //Check if force WP user login sync is enabled or not
30
- $force_wp_user_sync = SwpmSettings::get_instance()->get_value('force-wp-user-sync');
31
- if (empty($force_wp_user_sync)) {
32
- return "";
33
- }
34
- /* Force WP user login sync is enabled. */
35
- /* SWPM user is logged in the system. Log him out. */
36
- SwpmLog::log_auth_debug("synchronise_swpm_logout_for_wp_users() - Force wp user login sync is enabled. ", true);
37
- SwpmLog::log_auth_debug("WP user session is logged out for this user. So logging out of the swpm session also.", true);
38
- wp_logout();
39
- }
40
- }
41
- }
42
-
43
- /* Payment Gateway IPN listener */
44
-
45
- public function swpm_ipn_listener() {
46
-
47
- //Listen and handle PayPal IPN
48
- $swpm_process_ipn = filter_input(INPUT_GET, 'swpm_process_ipn');
49
- if ($swpm_process_ipn == '1') {
50
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_pp_ipn.php');
51
- exit;
52
- }
53
-
54
- //Listen and handle Stripe Buy Now IPN
55
- $swpm_process_stripe_buy_now = filter_input(INPUT_GET, 'swpm_process_stripe_buy_now');
56
- if ($swpm_process_stripe_buy_now == '1') {
57
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-buy-now-ipn.php');
58
- exit;
59
- }
60
-
61
- //Listen and handle Stripe Subscription IPN
62
- $swpm_process_stripe_subscription = filter_input(INPUT_GET, 'swpm_process_stripe_subscription');
63
- if ($swpm_process_stripe_subscription == '1') {
64
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-subscription-ipn.php');
65
- exit;
66
- }
67
-
68
- //Listen and handle Braintree Buy Now IPN
69
- $swpm_process_braintree_buy_now = filter_input(INPUT_GET, 'swpm_process_braintree_buy_now');
70
- if ($swpm_process_braintree_buy_now == '1') {
71
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-braintree-buy-now-ipn.php');
72
- exit;
73
- }
74
-
75
- //Listen and handle smart paypal checkout IPN
76
- if (wp_doing_ajax()) {
77
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-smart-checkout-ipn.php');
78
- add_action('wp_ajax_swpm_process_pp_smart_checkout', 'swpm_pp_smart_checkout_ajax_hanlder');
79
- add_action('wp_ajax_nopriv_swpm_process_pp_smart_checkout', 'swpm_pp_smart_checkout_ajax_hanlder');
80
- }
81
- }
82
-
83
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SwpmWpLoadedTasks {
4
+
5
+ public function __construct() {
6
+
7
+ }
8
+
9
+ /*
10
+ * This is triggered after all plugins, themes and WP has loaded.
11
+ * It is triggered after init, plugins_loaded etc.
12
+ */
13
+ public function do_wp_loaded_tasks() {
14
+ $this->synchronise_swpm_logout_for_wp_users();
15
+
16
+ //IPN listener
17
+ $this->swpm_ipn_listener();
18
+
19
+ }
20
+
21
+ /*
22
+ * Logs out the user from the swpm session if they are logged out of the WP user session
23
+ */
24
+ public function synchronise_swpm_logout_for_wp_users() {
25
+ if ( ! is_user_logged_in() ) {
26
+ /* WP user is logged out. So logout the SWPM user (if applicable) */
27
+ if ( SwpmMemberUtils::is_member_logged_in() ) {
28
+
29
+ //Check if force WP user login sync is enabled or not
30
+ $force_wp_user_sync = SwpmSettings::get_instance()->get_value( 'force-wp-user-sync' );
31
+ if ( empty( $force_wp_user_sync ) ) {
32
+ return '';
33
+ }
34
+ /* Force WP user login sync is enabled. */
35
+ /* SWPM user is logged in the system. Log him out. */
36
+ SwpmLog::log_auth_debug( 'synchronise_swpm_logout_for_wp_users() - Force wp user login sync is enabled. ', true );
37
+ SwpmLog::log_auth_debug( 'WP user session is logged out for this user. So logging out of the swpm session also.', true );
38
+ wp_logout();
39
+ }
40
+ }
41
+ }
42
+
43
+ /* Payment Gateway IPN listener */
44
+
45
+ public function swpm_ipn_listener() {
46
+
47
+ //Listen and handle PayPal IPN
48
+ $swpm_process_ipn = filter_input( INPUT_GET, 'swpm_process_ipn' );
49
+ if ( $swpm_process_ipn == '1' ) {
50
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_pp_ipn.php';
51
+ exit;
52
+ }
53
+
54
+ //Listen and handle Stripe Buy Now IPN
55
+ $swpm_process_stripe_buy_now = filter_input( INPUT_GET, 'swpm_process_stripe_buy_now' );
56
+ if ( $swpm_process_stripe_buy_now == '1' ) {
57
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-buy-now-ipn.php';
58
+ exit;
59
+ }
60
+
61
+ //Listen and handle Stripe SCA Buy Now IPN
62
+ $swpm_process_stripe_sca_buy_now = filter_input( INPUT_GET, 'swpm_process_stripe_sca_buy_now' );
63
+ if ( $swpm_process_stripe_sca_buy_now == '1' ) {
64
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-sca-buy-now-ipn.php';
65
+ exit;
66
+ }
67
+
68
+ //Listen and handle Stripe Subscription IPN
69
+ $swpm_process_stripe_subscription = filter_input( INPUT_GET, 'swpm_process_stripe_subscription' );
70
+ if ( $swpm_process_stripe_subscription == '1' ) {
71
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-subscription-ipn.php';
72
+ exit;
73
+ }
74
+
75
+ //Listen and handle Stripe SCA Subscription IPN
76
+ $swpm_process_stripe_sca_subscription = filter_input( INPUT_GET, 'swpm_process_stripe_sca_subscription' );
77
+ $hook = filter_input( INPUT_GET, 'hook', FILTER_SANITIZE_NUMBER_INT );
78
+ if ( $swpm_process_stripe_sca_subscription == '1' ) {
79
+ if ( $hook ) {
80
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-subscription-ipn.php';
81
+ } else {
82
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-stripe-sca-subscription-ipn.php';
83
+ }
84
+ exit;
85
+ }
86
+
87
+ //Listen and handle Braintree Buy Now IPN
88
+ $swpm_process_braintree_buy_now = filter_input( INPUT_GET, 'swpm_process_braintree_buy_now' );
89
+ if ( $swpm_process_braintree_buy_now == '1' ) {
90
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-braintree-buy-now-ipn.php';
91
+ exit;
92
+ }
93
+
94
+ //Listen and handle smart paypal checkout IPN
95
+ if ( wp_doing_ajax() ) {
96
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm-smart-checkout-ipn.php';
97
+ add_action( 'wp_ajax_swpm_process_pp_smart_checkout', 'swpm_pp_smart_checkout_ajax_hanlder' );
98
+ add_action( 'wp_ajax_nopriv_swpm_process_pp_smart_checkout', 'swpm_pp_smart_checkout_ajax_hanlder' );
99
+ }
100
+ }
101
+
102
+ }
classes/shortcode-related/class.swpm-shortcodes-handler.php CHANGED
@@ -37,6 +37,7 @@ class SwpmShortcodesHandler {
37
 
38
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/paypal_button_shortcode_view.php');
39
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/stripe_button_shortcode_view.php');
 
40
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/braintree_button_shortcode_view.php');
41
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php');
42
 
37
 
38
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/paypal_button_shortcode_view.php');
39
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/stripe_button_shortcode_view.php');
40
+ include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/stripe_sca_button_shortcode_view.php');
41
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/braintree_button_shortcode_view.php');
42
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php');
43
 
ipn/swpm-stripe-buy-now-ipn.php CHANGED
@@ -14,10 +14,8 @@ class SwpmStripeBuyNowIpnHandler {
14
  // SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
15
 
16
  // Include the Stripe library.
17
- if ( ! class_exists( '\Stripe\Stripe' ) ) {
18
- include SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php';
19
- }
20
-
21
  // Read and sanitize the request parameters.
22
  $button_id = sanitize_text_field( $_REQUEST['item_number'] );
23
  $button_id = absint( $button_id );
14
  // SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
15
 
16
  // Include the Stripe library.
17
+ SwpmMiscUtils::load_stripe_lib();
18
+
 
 
19
  // Read and sanitize the request parameters.
20
  $button_id = sanitize_text_field( $_REQUEST['item_number'] );
21
  $button_id = absint( $button_id );
ipn/swpm-stripe-sca-buy-now-ipn.php ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_subsc_ipn.php';
4
+
5
+ class SwpmStripeSCABuyNowIpnHandler {
6
+
7
+ public function __construct() {
8
+
9
+ $this->handle_stripe_ipn();
10
+ }
11
+
12
+ public function handle_stripe_ipn() {
13
+ SwpmLog::log_simple_debug( 'Stripe SCA Buy Now IPN received. Processing request...', true );
14
+ // SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
15
+
16
+ // Read and sanitize the request parameters.
17
+
18
+ $ref_id = filter_input( INPUT_GET, 'ref_id', FILTER_SANITIZE_STRING );
19
+
20
+ if ( empty( $ref_id ) ) {
21
+ //no ref id provided, cannot proceed
22
+ SwpmLog::log_simple_debug( 'Fatal Error! No ref_id provied.', false );
23
+ wp_die( esc_html( 'Fatal Error! No ref_id provied.' ) );
24
+
25
+ }
26
+
27
+ $trans_info = explode( '|', $ref_id );
28
+ $button_id = isset( $trans_info[1] ) ? absint( $trans_info[1] ) : false;
29
+
30
+ // Retrieve the CPT for this button
31
+ $button_cpt = get_post( $button_id );
32
+ if ( ! $button_cpt ) {
33
+ // Fatal error. Could not find this payment button post object.
34
+ SwpmLog::log_simple_debug( 'Fatal Error! Failed to retrieve the payment button post object for the given button ID: ' . $button_id, false );
35
+ wp_die( esc_html( sprintf( 'Fatal Error! Payment button (ID: %d) does not exist. This request will fail.', $button_id ) ) );
36
+ }
37
+
38
+ $settings = SwpmSettings::get_instance();
39
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
40
+
41
+ if ( $sandbox_enabled ) {
42
+ SwpmLog::log_simple_debug( 'Sandbox payment mode is enabled. Using test API key details.', true );
43
+ $secret_key = get_post_meta( $button_id, 'stripe_test_secret_key', true );
44
+ // Use sandbox API key
45
+ } else {
46
+ $secret_key = get_post_meta( $button_id, 'stripe_live_secret_key', true );
47
+ // Use live API key
48
+ }
49
+
50
+ // Include the Stripe library.
51
+ SwpmMiscUtils::load_stripe_lib();
52
+
53
+ try {
54
+ \Stripe\Stripe::setApiKey( $secret_key );
55
+
56
+ $events = \Stripe\Event::all(
57
+ array(
58
+ 'type' => 'checkout.session.completed',
59
+ 'created' => array(
60
+ 'gte' => time() - 60 * 60,
61
+ ),
62
+ )
63
+ );
64
+
65
+ $sess = false;
66
+
67
+ foreach ( $events->autoPagingIterator() as $event ) {
68
+ $session = $event->data->object;
69
+ if ( isset( $session->client_reference_id ) && $session->client_reference_id === $ref_id ) {
70
+ $sess = $session;
71
+ break;
72
+ }
73
+ }
74
+
75
+ if ( false === $sess ) {
76
+ // Can't find session.
77
+ $error_msg = sprintf( "Fatal error! Payment with ref_id %s can't be found", $ref_id );
78
+ SwpmLog::log_simple_debug( $error_msg, false );
79
+ wp_die( esc_html( $error_msg ) );
80
+ }
81
+
82
+ $pi_id = $sess->payment_intent;
83
+
84
+ $pi = \Stripe\PaymentIntent::retrieve( $pi_id );
85
+ } catch ( Exception $e ) {
86
+ $err = 'Error occurred: ' . $e->getMessage();
87
+ SwpmLog::log_simple_debug( $error_msg, false );
88
+ wp_die( esc_html( $error_msg ) );
89
+ }
90
+
91
+ $charge = $pi->charges;
92
+
93
+ // Grab the charge ID and set it as the transaction ID.
94
+ $txn_id = $charge->data[0]->id;
95
+ // The charge ID can be used to retrieve the transaction details using hte following call.
96
+ // \Stripe\Charge::retrieve($charge->$data[0]->id);
97
+
98
+ //check if this payment has already been processed
99
+ $payment = get_posts(
100
+ array(
101
+ 'meta_key' => 'txn_id',
102
+ 'meta_value' => $txn_id,
103
+ 'posts_per_page' => 1,
104
+ 'offset' => 0,
105
+ 'post_type' => 'swpm_transactions',
106
+ )
107
+ );
108
+ wp_reset_postdata();
109
+
110
+ if ( $payment ) {
111
+ //payment has already been processed. Redirecting user to return_url
112
+ $return_url = get_post_meta( $button_id, 'return_url', true );
113
+ if ( empty( $return_url ) ) {
114
+ $return_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL;
115
+ }
116
+ SwpmMiscUtils::redirect_to_url( $return_url );
117
+ return;
118
+ }
119
+
120
+ $price_in_cents = floatval( $pi->amount_received );
121
+ $currency_code = strtoupper( $pi->currency );
122
+
123
+ $zero_cents = unserialize( SIMPLE_WP_MEMBERSHIP_STRIPE_ZERO_CENTS );
124
+ if ( in_array( $currency_code, $zero_cents, true ) ) {
125
+ $payment_amount = $price_in_cents;
126
+ } else {
127
+ $payment_amount = $price_in_cents / 100;// The amount (in cents). This value is used in Stripe API.
128
+ }
129
+
130
+ $payment_amount = floatval( $payment_amount );
131
+
132
+ $stripe_email = $charge->data[0]->billing_details->email;
133
+
134
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
135
+
136
+ // Validate and verify some of the main values.
137
+ $true_payment_amount = get_post_meta( $button_id, 'payment_amount', true );
138
+ $true_payment_amount = apply_filters( 'swpm_payment_amount_filter', $true_payment_amount, $button_id );
139
+ $true_payment_amount = floatval( $true_payment_amount );
140
+
141
+ if ( $payment_amount !== $true_payment_amount ) {
142
+ // Fatal error. Payment amount may have been tampered with.
143
+ $error_msg = 'Fatal Error! Received payment amount (' . $payment_amount . ') does not match with the original amount (' . $true_payment_amount . ')';
144
+ SwpmLog::log_simple_debug( $error_msg, false );
145
+ wp_die( esc_html( $error_msg ) );
146
+ }
147
+ $true_currency_code = get_post_meta( $button_id, 'payment_currency', true );
148
+ if ( $currency_code !== $true_currency_code ) {
149
+ // Fatal error. Currency code may have been tampered with.
150
+ $error_msg = 'Fatal Error! Received currency code (' . $currency_code . ') does not match with the original code (' . $true_currency_code . ')';
151
+ SwpmLog::log_simple_debug( $error_msg, false );
152
+ wp_die( esc_html( $error_msg ) );
153
+ }
154
+
155
+ // Everything went ahead smoothly with the charge.
156
+ SwpmLog::log_simple_debug( 'Stripe SCA Buy Now charge successful.', true );
157
+
158
+ $user_ip = SwpmUtils::get_user_ip_address();
159
+
160
+ //Custom field data
161
+ $custom_field_value = 'subsc_ref=' . $membership_level_id;
162
+ $custom_field_value .= '&user_ip=' . $user_ip;
163
+ if ( SwpmMemberUtils::is_member_logged_in() ) {
164
+ $custom_field_value .= '&swpm_id=' . SwpmMemberUtils::get_logged_in_members_id();
165
+ }
166
+ $custom_field_value = apply_filters( 'swpm_custom_field_value_filter', $custom_field_value );
167
+
168
+ $custom = $custom_field_value;
169
+
170
+ $custom_var = SwpmTransactions::parse_custom_var( $custom );
171
+ $swpm_id = isset( $custom_var['swpm_id'] ) ? $custom_var['swpm_id'] : '';
172
+
173
+ // Let's try to get first_name and last_name from full name
174
+ $name = trim( $charge->data[0]->billing_details->name );
175
+ $last_name = ( strpos( $name, ' ' ) === false ) ? '' : preg_replace( '#.*\s([\w-]*)$#', '$1', $name );
176
+ $first_name = trim( preg_replace( '#' . $last_name . '#', '', $name ) );
177
+
178
+ // Create the $ipn_data array.
179
+ $ipn_data = array();
180
+ $ipn_data['mc_gross'] = $payment_amount;
181
+ $ipn_data['first_name'] = $first_name;
182
+ $ipn_data['last_name'] = $last_name;
183
+ $ipn_data['payer_email'] = $stripe_email;
184
+ $ipn_data['membership_level'] = $membership_level_id;
185
+ $ipn_data['txn_id'] = $txn_id;
186
+ $ipn_data['subscr_id'] = '';
187
+ $ipn_data['swpm_id'] = $swpm_id;
188
+ $ipn_data['ip'] = $custom_var['user_ip'];
189
+ $ipn_data['custom'] = $custom;
190
+ $ipn_data['gateway'] = 'stripe-sca';
191
+ $ipn_data['status'] = 'completed';
192
+
193
+ $bd_addr = $charge->data[0]->billing_details->address;
194
+
195
+ $ipn_data['address_street'] = isset( $bd_addr->line1 ) ? $bd_addr->line1 : '';
196
+ $ipn_data['address_city'] = isset( $bd_addr->city ) ? $bd_addr->city : '';
197
+ $ipn_data['address_state'] = isset( $bd_addr->state ) ? $bd_addr->state : '';
198
+ $ipn_data['address_zipcode'] = isset( $bd_addr->postal_code ) ? $bd_addr->postal_code : '';
199
+ $ipn_data['address_country'] = isset( $bd_addr->country ) ? $bd_addr->country : '';
200
+
201
+ // Handle the membership signup related tasks.
202
+ swpm_handle_subsc_signup_stand_alone( $ipn_data, $membership_level_id, $txn_id, $swpm_id );
203
+
204
+ // Save the transaction record
205
+ SwpmTransactions::save_txn_record( $ipn_data );
206
+ SwpmLog::log_simple_debug( 'Transaction data saved.', true );
207
+
208
+ // Trigger the stripe IPN processed action hook (so other plugins can can listen for this event).
209
+ do_action( 'swpm_stripe_sca_ipn_processed', $ipn_data );
210
+
211
+ do_action( 'swpm_payment_ipn_processed', $ipn_data );
212
+
213
+ // Redirect the user to the return URL (or to the homepage if a return URL is not specified for this payment button).
214
+ $return_url = get_post_meta( $button_id, 'return_url', true );
215
+ if ( empty( $return_url ) ) {
216
+ $return_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL;
217
+ }
218
+ SwpmLog::log_simple_debug( 'Redirecting customer to: ' . $return_url, true );
219
+ SwpmLog::log_simple_debug( 'End of Stripe SCA Buy Now IPN processing.', true, true );
220
+ SwpmMiscUtils::redirect_to_url( $return_url );
221
+
222
+ }
223
+ }
224
+
225
+ new SwpmStripeSCABuyNowIpnHandler();
ipn/swpm-stripe-sca-subscription-ipn.php ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_subsc_ipn.php';
4
+
5
+ class SwpmStripeSCASubscriptionIpnHandler {
6
+
7
+ public function __construct() {
8
+
9
+ $this->handle_stripe_ipn();
10
+ }
11
+
12
+ public function handle_stripe_ipn() {
13
+ SwpmLog::log_simple_debug( 'Stripe SCA Subscription IPN received. Processing request...', true );
14
+ // SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
15
+
16
+ // Read and sanitize the request parameters.
17
+
18
+ $ref_id = filter_input( INPUT_GET, 'ref_id', FILTER_SANITIZE_STRING );
19
+
20
+ if ( empty( $ref_id ) ) {
21
+ //no ref id provided, cannot proceed
22
+ SwpmLog::log_simple_debug( 'Fatal Error! No ref_id provied.', false );
23
+ wp_die( esc_html( 'Fatal Error! No ref_id provied.' ) );
24
+
25
+ }
26
+
27
+ $trans_info = explode( '|', $ref_id );
28
+ $button_id = isset( $trans_info[1] ) ? absint( $trans_info[1] ) : false;
29
+
30
+ // Retrieve the CPT for this button
31
+ $button_cpt = get_post( $button_id );
32
+ if ( ! $button_cpt ) {
33
+ // Fatal error. Could not find this payment button post object.
34
+ SwpmLog::log_simple_debug( 'Fatal Error! Failed to retrieve the payment button post object for the given button ID: ' . $button_id, false );
35
+ wp_die( esc_html( sprintf( 'Fatal Error! Payment button (ID: %d) does not exist. This request will fail.', $button_id ) ) );
36
+ }
37
+
38
+ $settings = SwpmSettings::get_instance();
39
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
40
+
41
+ if ( $sandbox_enabled ) {
42
+ SwpmLog::log_simple_debug( 'Sandbox payment mode is enabled. Using test API key details.', true );
43
+ $secret_key = get_post_meta( $button_id, 'stripe_test_secret_key', true );
44
+ // Use sandbox API key
45
+ } else {
46
+ $secret_key = get_post_meta( $button_id, 'stripe_live_secret_key', true );
47
+ // Use live API key
48
+ }
49
+
50
+ // Include the Stripe library.
51
+ SwpmMiscUtils::load_stripe_lib();
52
+
53
+ try {
54
+ \Stripe\Stripe::setApiKey( $secret_key );
55
+
56
+ $events = \Stripe\Event::all(
57
+ array(
58
+ 'type' => 'checkout.session.completed',
59
+ 'created' => array(
60
+ 'gte' => time() - 60 * 60,
61
+ ),
62
+ )
63
+ );
64
+
65
+ $sess = false;
66
+
67
+ foreach ( $events->autoPagingIterator() as $event ) {
68
+ $session = $event->data->object;
69
+ if ( isset( $session->client_reference_id ) && $session->client_reference_id === $ref_id ) {
70
+ $sess = $session;
71
+ break;
72
+ }
73
+ }
74
+
75
+ if ( false === $sess ) {
76
+ // Can't find session.
77
+ $error_msg = sprintf( "Fatal error! Payment with ref_id %s can't be found", $ref_id );
78
+ SwpmLog::log_simple_debug( $error_msg, false );
79
+ wp_die( esc_html( $error_msg ) );
80
+ }
81
+
82
+ $sub_id = $sess->subscription;
83
+
84
+ $sub = \Stripe\Subscription::retrieve( $sub_id );
85
+ } catch ( Exception $e ) {
86
+ $error_msg = 'Error occurred: ' . $e->getMessage();
87
+ SwpmLog::log_simple_debug( $error_msg, false );
88
+ wp_die( esc_html( $error_msg ) );
89
+ }
90
+
91
+ $pm = \Stripe\PaymentMethod::retrieve( $sub->default_payment_method );
92
+
93
+ // Grab the charge ID and set it as the transaction ID.
94
+ $txn_id = $sub->customer;
95
+ // The charge ID can be used to retrieve the transaction details using hte following call.
96
+ // \Stripe\Charge::retrieve($charge->$data[0]->id);
97
+
98
+ //check if this payment has already been processed
99
+ $payment = get_posts(
100
+ array(
101
+ 'meta_key' => 'txn_id',
102
+ 'meta_value' => $txn_id,
103
+ 'posts_per_page' => 1,
104
+ 'offset' => 0,
105
+ 'post_type' => 'swpm_transactions',
106
+ )
107
+ );
108
+ wp_reset_postdata();
109
+
110
+ if ( $payment ) {
111
+ //payment has already been processed. Redirecting user to return_url
112
+ $return_url = get_post_meta( $button_id, 'return_url', true );
113
+ if ( empty( $return_url ) ) {
114
+ $return_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL;
115
+ }
116
+ SwpmMiscUtils::redirect_to_url( $return_url );
117
+ return;
118
+ }
119
+
120
+ $price_in_cents = $sub->plan->amount;
121
+ $currency_code = strtoupper( $sub->plan->currency );
122
+
123
+ $zero_cents = unserialize( SIMPLE_WP_MEMBERSHIP_STRIPE_ZERO_CENTS );
124
+ if ( in_array( $currency_code, $zero_cents, true ) ) {
125
+ $payment_amount = $price_in_cents;
126
+ } else {
127
+ $payment_amount = $price_in_cents / 100;// The amount (in cents). This value is used in Stripe API.
128
+ }
129
+
130
+ $payment_amount = floatval( $payment_amount );
131
+
132
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
133
+
134
+ // Everything went ahead smoothly with the charge.
135
+ SwpmLog::log_simple_debug( 'Stripe SCA Subscription charge successful.', true );
136
+
137
+ $customer = \Stripe\Customer::retrieve( $txn_id );
138
+
139
+ $stripe_email = $customer->email;
140
+
141
+ $user_ip = SwpmUtils::get_user_ip_address();
142
+
143
+ //Custom field data
144
+ $custom_field_value = 'subsc_ref=' . $membership_level_id;
145
+ $custom_field_value .= '&user_ip=' . $user_ip;
146
+ if ( SwpmMemberUtils::is_member_logged_in() ) {
147
+ $custom_field_value .= '&swpm_id=' . SwpmMemberUtils::get_logged_in_members_id();
148
+ }
149
+ $custom_field_value = apply_filters( 'swpm_custom_field_value_filter', $custom_field_value );
150
+
151
+ $custom = $custom_field_value;
152
+
153
+ $custom_var = SwpmTransactions::parse_custom_var( $custom );
154
+ $swpm_id = isset( $custom_var['swpm_id'] ) ? $custom_var['swpm_id'] : '';
155
+
156
+ // Let's try to get first_name and last_name from full name
157
+ $name = $pm->billing_details->name;
158
+ $last_name = ( strpos( $name, ' ' ) === false ) ? '' : preg_replace( '#.*\s([\w-]*)$#', '$1', $name );
159
+ $first_name = trim( preg_replace( '#' . $last_name . '#', '', $name ) );
160
+
161
+ // Create the $ipn_data array.
162
+ $ipn_data = array();
163
+ $ipn_data['mc_gross'] = $payment_amount;
164
+ $ipn_data['first_name'] = $first_name;
165
+ $ipn_data['last_name'] = $last_name;
166
+ $ipn_data['payer_email'] = $stripe_email;
167
+ $ipn_data['membership_level'] = $membership_level_id;
168
+ $ipn_data['txn_id'] = $txn_id;
169
+ $ipn_data['subscr_id'] = $sub_id;
170
+ $ipn_data['swpm_id'] = $swpm_id;
171
+ $ipn_data['ip'] = $custom_var['user_ip'];
172
+ $ipn_data['custom'] = $custom;
173
+ $ipn_data['gateway'] = 'stripe-sca-subs';
174
+ $ipn_data['status'] = 'completed';
175
+
176
+ $bd_addr = $pm->billing_details->address;
177
+
178
+ $ipn_data['address_street'] = isset( $bd_addr->line1 ) ? $bd_addr->line1 : '';
179
+ $ipn_data['address_city'] = isset( $bd_addr->city ) ? $bd_addr->city : '';
180
+ $ipn_data['address_state'] = isset( $bd_addr->state ) ? $bd_addr->state : '';
181
+ $ipn_data['address_zipcode'] = isset( $bd_addr->postal_code ) ? $bd_addr->postal_code : '';
182
+ $ipn_data['address_country'] = isset( $bd_addr->country ) ? $bd_addr->country : '';
183
+
184
+ // Handle the membership signup related tasks.
185
+ swpm_handle_subsc_signup_stand_alone( $ipn_data, $membership_level_id, $txn_id, $swpm_id );
186
+
187
+ // Save the transaction record
188
+ SwpmTransactions::save_txn_record( $ipn_data );
189
+ SwpmLog::log_simple_debug( 'Transaction data saved.', true );
190
+
191
+ // Trigger the stripe IPN processed action hook (so other plugins can can listen for this event).
192
+ do_action( 'swpm_stripe_sca_ipn_processed', $ipn_data );
193
+
194
+ do_action( 'swpm_payment_ipn_processed', $ipn_data );
195
+
196
+ // Redirect the user to the return URL (or to the homepage if a return URL is not specified for this payment button).
197
+ $return_url = get_post_meta( $button_id, 'return_url', true );
198
+ if ( empty( $return_url ) ) {
199
+ $return_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL;
200
+ }
201
+ SwpmLog::log_simple_debug( 'Redirecting customer to: ' . $return_url, true );
202
+ SwpmLog::log_simple_debug( 'End of Stripe SCA Subscription IPN processing.', true, true );
203
+ SwpmMiscUtils::redirect_to_url( $return_url );
204
+
205
+ }
206
+ }
207
+
208
+ new SwpmStripeSCASubscriptionIpnHandler();
ipn/swpm-stripe-subscription-ipn.php CHANGED
@@ -30,7 +30,7 @@ class SwpmStripeSubscriptionIpnHandler {
30
 
31
  if ( 'customer.subscription.deleted' === $type || 'charge.refunded' === $type ) {
32
  // Subscription expired or refunded event
33
- SwpmLog::log_simple_debug( 'Stripe Subscription Webhook received. Processing request...', true );
34
  // Let's form minimal ipn_data array for swpm_handle_subsc_cancel_stand_alone
35
  $customer = $event_json->data->object->customer;
36
  $subscr_id = $event_json->data->object->id;
@@ -47,9 +47,7 @@ class SwpmStripeSubscriptionIpnHandler {
47
  SwpmLog::log_simple_debug( 'Stripe Subscription IPN received. Processing request...', true );
48
  // SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
49
  // Include the Stripe library.
50
- if ( ! class_exists( '\Stripe\Stripe' ) ) {
51
- include SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php';
52
- }
53
  // Read and sanitize the request parameters.
54
  $button_id = sanitize_text_field( $_REQUEST['item_number'] );
55
  $button_id = absint( $button_id );
30
 
31
  if ( 'customer.subscription.deleted' === $type || 'charge.refunded' === $type ) {
32
  // Subscription expired or refunded event
33
+ SwpmLog::log_simple_debug( sprintf( 'Stripe Subscription Webhook %s received. Processing request...', $type ), true );
34
  // Let's form minimal ipn_data array for swpm_handle_subsc_cancel_stand_alone
35
  $customer = $event_json->data->object->customer;
36
  $subscr_id = $event_json->data->object->id;
47
  SwpmLog::log_simple_debug( 'Stripe Subscription IPN received. Processing request...', true );
48
  // SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
49
  // Include the Stripe library.
50
+ SwpmMiscUtils::load_stripe_lib();
 
 
51
  // Read and sanitize the request parameters.
52
  $button_id = sanitize_text_field( $_REQUEST['item_number'] );
53
  $button_id = absint( $button_id );
ipn/swpm_handle_subsc_ipn.php CHANGED
@@ -175,8 +175,12 @@ function swpm_handle_subsc_signup_stand_alone( $ipn_data, $subsc_ref, $unique_re
175
 
176
  $subject = apply_filters( 'swpm_email_complete_registration_subject', $subject );
177
  $email_body = apply_filters( 'swpm_email_complete_registration_body', $email_body );
178
- wp_mail( $email, $subject, $email_body, $headers );
179
- swpm_debug_log_subsc( 'Member signup (prompt to complete registration) email successfully sent to: ' . $email, true );
 
 
 
 
180
  }
181
 
182
  }
@@ -241,8 +245,10 @@ function swpm_handle_subsc_cancel_stand_alone( $ipn_data, $refund = false ) {
241
  swpm_debug_log_subsc( 'Membership level ID of the member is: ' . $level_id, true );
242
  $level_row = SwpmUtils::get_membership_level_row_by_id( $level_id );
243
  $subs_duration_type = $level_row->subscription_duration_type;
244
-
245
- if ( SwpmMembershipLevel::NO_EXPIRY === $subs_duration_type ) {
 
 
246
  // This is a level with "no expiry" or "until cancelled" duration.
247
  swpm_debug_log_subsc( 'This is a level with "no expiry" or "until cancelled" duration', true );
248
 
@@ -250,7 +256,7 @@ function swpm_handle_subsc_cancel_stand_alone( $ipn_data, $refund = false ) {
250
  $account_state = 'inactive';
251
  SwpmMemberUtils::update_account_state( $member_id, $account_state );
252
  swpm_debug_log_subsc( 'Subscription cancellation or end of term received! Member account deactivated. Member ID: ' . $member_id, true );
253
- } elseif ( SwpmMembershipLevel::FIXED_DATE === $subs_duration_type ) {
254
  // This is a level with a "fixed expiry date" duration.
255
  swpm_debug_log_subsc( 'This is a level with a "fixed expiry date" duration.', true );
256
  swpm_debug_log_subsc( 'Nothing to do here. The account will expire on the fixed set date.', true );
175
 
176
  $subject = apply_filters( 'swpm_email_complete_registration_subject', $subject );
177
  $email_body = apply_filters( 'swpm_email_complete_registration_body', $email_body );
178
+ if (empty( $email_body )){
179
+ swpm_debug_log_subsc( 'Notice: Member signup (prompt to complete registration) email body has been set empty via the filter hook. No email will be sent.', true );
180
+ } else {
181
+ wp_mail( $email, $subject, $email_body, $headers );
182
+ swpm_debug_log_subsc( 'Member signup (prompt to complete registration) email successfully sent to: ' . $email, true );
183
+ }
184
  }
185
 
186
  }
245
  swpm_debug_log_subsc( 'Membership level ID of the member is: ' . $level_id, true );
246
  $level_row = SwpmUtils::get_membership_level_row_by_id( $level_id );
247
  $subs_duration_type = $level_row->subscription_duration_type;
248
+
249
+ swpm_debug_log_subsc( 'Subscription duration type: ' . $subs_duration_type, true );
250
+
251
+ if ( SwpmMembershipLevel::NO_EXPIRY == $subs_duration_type ) {
252
  // This is a level with "no expiry" or "until cancelled" duration.
253
  swpm_debug_log_subsc( 'This is a level with "no expiry" or "until cancelled" duration', true );
254
 
256
  $account_state = 'inactive';
257
  SwpmMemberUtils::update_account_state( $member_id, $account_state );
258
  swpm_debug_log_subsc( 'Subscription cancellation or end of term received! Member account deactivated. Member ID: ' . $member_id, true );
259
+ } else if ( SwpmMembershipLevel::FIXED_DATE == $subs_duration_type ) {
260
  // This is a level with a "fixed expiry date" duration.
261
  swpm_debug_log_subsc( 'This is a level with a "fixed expiry date" duration.', true );
262
  swpm_debug_log_subsc( 'Nothing to do here. The account will expire on the fixed set date.', true );
languages/simple-membership-es_ES.mo CHANGED
Binary file
languages/simple-membership-es_ES.po CHANGED
@@ -3,8 +3,8 @@
3
  msgid ""
4
  msgstr ""
5
  "Project-Id-Version: Plugins - Simple Membership - Development (trunk)\n"
6
- "POT-Creation-Date: 2017-07-21 09:53+1000\n"
7
- "PO-Revision-Date: 2017-07-23 13:01+1000\n"
8
  "Last-Translator: \n"
9
  "Language-Team: \n"
10
  "Language: es\n"
@@ -12,665 +12,821 @@ msgstr ""
12
  "Content-Type: text/plain; charset=UTF-8\n"
13
  "Content-Transfer-Encoding: 8bit\n"
14
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
15
- "X-Generator: Poedit 2.0.2\n"
16
 
17
- #: simple-membership/classes/class.simple-wp-membership.php:173
18
  msgid "The admin of this site does not allow users to access the wp dashboard."
19
  msgstr ""
20
- "El administrador de este sitio no permite a los usuarios acceder al "
21
  "escritorio de wp."
22
 
23
- #: simple-membership/classes/class.simple-wp-membership.php:174
24
  msgid "Go back to the home page by "
25
- msgstr "Volver a la página principal por "
26
 
27
- #: simple-membership/classes/class.simple-wp-membership.php:174
28
  msgid "clicking here"
29
  msgstr "haciendo clic aquí"
30
 
31
- #: simple-membership/classes/class.simple-wp-membership.php:312
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  msgid "You are not logged in."
33
  msgstr "No estás conectado."
34
 
35
- #: simple-membership/classes/class.simple-wp-membership.php:363
36
  msgid ""
37
  "You have the sandbox payment mode enabled in plugin settings. Make sure to "
38
  "turn off the sandbox mode when you want to do live transactions."
39
  msgstr ""
40
- "Tiene habilitado el modo de pago de sandbox en la configuración del "
41
- "complemento. Asegúrese de desactivar el modo sandbox cuando desee realizar "
42
  "transacciones en vivo."
43
 
44
- #: simple-membership/classes/class.simple-wp-membership.php:378
45
  msgid "Simple WP Membership Protection"
46
  msgstr "Protección de Simple WP Membership"
47
 
48
- #: simple-membership/classes/class.simple-wp-membership.php:390
49
  msgid "Simple Membership Protection options"
50
  msgstr "Opciones de protección de Simple Membership"
51
 
52
- #: simple-membership/classes/class.simple-wp-membership.php:408
53
  msgid "Do you want to protect this content?"
54
  msgstr "¿Quieres proteger este contenido?"
55
 
56
- #: simple-membership/classes/class.simple-wp-membership.php:413
 
 
 
 
 
 
 
 
57
  msgid "Select the membership level that can access this content:"
58
- msgstr ""
59
- "Selecciona los niveles de membresía que pueden acceder a este contenido:"
60
 
61
- #: simple-membership/classes/class.simple-wp-membership.php:546
62
- #: simple-membership/classes/class.simple-wp-membership.php:550
63
  msgid "Validating, please wait"
64
  msgstr "Validando, por favor espere"
65
 
66
- #: simple-membership/classes/class.simple-wp-membership.php:553
67
  msgid "Invalid email address"
68
- msgstr "Dirección de correo electrónico no válida"
69
 
70
- #: simple-membership/classes/class.simple-wp-membership.php:556
71
  msgid "This field is required"
72
- msgstr "Este campo es obligatorio"
 
 
 
 
 
 
73
 
74
- #: simple-membership/classes/class.simple-wp-membership.php:559
75
- #: simple-membership/classes/class.swpm-auth.php:260
 
 
 
 
 
76
  msgid "Invalid Username"
77
- msgstr "Nombre de usuario no válido"
 
 
 
 
78
 
79
- #: simple-membership/classes/class.simple-wp-membership.php:562
80
  msgid "Minimum "
81
- msgstr "Minimo "
82
 
83
- #: simple-membership/classes/class.simple-wp-membership.php:563
84
  msgid " characters required"
85
- msgstr " Caracteres requeridos"
86
 
87
- #: simple-membership/classes/class.simple-wp-membership.php:566
88
  msgid "Apostrophe character is not allowed"
89
  msgstr "El carácter de apóstrofo no está permitido"
90
 
91
- #: simple-membership/classes/class.simple-wp-membership.php:597
92
  msgid "WP Membership"
93
  msgstr "WP Membership"
94
 
95
- #: simple-membership/classes/class.simple-wp-membership.php:598
96
- #: simple-membership/classes/class.swpm-members.php:11
97
- #: simple-membership/classes/class.swpm-members.php:579
98
  msgid "Members"
99
  msgstr "Miembros"
100
 
101
- #: simple-membership/classes/class.simple-wp-membership.php:599
102
- #: simple-membership/classes/class.swpm-category-list.php:20
103
- #: simple-membership/classes/class.swpm-membership-levels.php:12
104
- #: simple-membership/classes/class.swpm-membership-levels.php:257
 
105
  msgid "Membership Levels"
106
  msgstr "Niveles de membresía"
107
 
108
- #: simple-membership/classes/class.simple-wp-membership.php:600
109
  msgid "Settings"
110
  msgstr "Ajustes"
111
 
112
- #: simple-membership/classes/class.simple-wp-membership.php:601
113
  msgid "Payments"
114
  msgstr "Pagos"
115
 
116
- #: simple-membership/classes/class.simple-wp-membership.php:602
117
  msgid "Add-ons"
118
  msgstr "Extensiones"
119
 
120
- #: simple-membership/classes/class.swpm-access-control.php:47
121
- #: simple-membership/classes/class.swpm-access-control.php:120
122
  msgid "You need to login to view this content. "
123
- msgstr "Necesita iniciar sesión para ver éste contenido. "
124
 
125
- #: simple-membership/classes/class.swpm-access-control.php:56
126
- #: simple-membership/classes/class.swpm-access-control.php:128
127
- #: simple-membership/classes/class.swpm-access-control.php:212
128
  msgid "Your account has expired. "
129
- msgstr "Su cuenta ha caducado. "
130
 
131
- #: simple-membership/classes/class.swpm-access-control.php:66
132
- #: simple-membership/classes/class.swpm-access-control.php:138
133
  msgid "This content can only be viewed by members who joined on or before "
134
  msgstr ""
135
- "Este contenido sólo puede ser visto por los miembros que se unieron en o "
136
- "antes "
137
 
138
- #: simple-membership/classes/class.swpm-access-control.php:79
139
- #: simple-membership/classes/class.swpm-access-control.php:148
140
  msgid "This content is not permitted for your membership level."
141
- msgstr "Este contenido no está disponible para su nivel de membresía."
142
 
143
- #: simple-membership/classes/class.swpm-access-control.php:204
144
  msgid "You need to login to view the rest of the content. "
145
- msgstr "Debes iniciar sesión para ver el resto del contenido. "
146
 
147
- #: simple-membership/classes/class.swpm-access-control.php:217
148
  msgid " The rest of the content is not permitted for your membership level."
149
  msgstr " El resto del contenido no está disponible para tu nivel de membresía."
150
 
151
- #: simple-membership/classes/class.swpm-admin-registration.php:25
152
  msgid "Error! Nonce verification failed for user registration from admin end."
153
  msgstr ""
154
- "¡Error! la verificación de nonce falló para el registro de usuario desde el "
155
- "extremo de administración."
156
 
157
- #: simple-membership/classes/class.swpm-admin-registration.php:71
158
  msgid "Member record added successfully."
159
- msgstr "Registro de miembros agregado correctamente."
160
 
161
- #: simple-membership/classes/class.swpm-admin-registration.php:76
162
- #: simple-membership/classes/class.swpm-admin-registration.php:107
163
- #: simple-membership/classes/class.swpm-admin-registration.php:133
164
- #: simple-membership/classes/class.swpm-membership-level.php:69
165
- #: simple-membership/classes/class.swpm-membership-level.php:97
166
  msgid "Please correct the following:"
167
  msgstr "Por favor, corrige lo siguiente:"
168
 
169
- #: simple-membership/classes/class.swpm-admin-registration.php:87
170
  msgid "Error! Nonce verification failed for user edit from admin end."
171
  msgstr ""
172
  "¡Error! La verificación de nonce falló para la edición del usuario desde el "
173
- "extremo del admin."
174
 
175
- #: simple-membership/classes/class.swpm-admin-registration.php:122
176
  msgid "Your current password"
177
  msgstr "Tu contraseña actual"
178
 
179
- #: simple-membership/classes/class.swpm-ajax.php:14
180
  msgid "Invalid Email Address"
181
- msgstr "Dirección de correo electrónico no válida"
182
 
183
- #: simple-membership/classes/class.swpm-ajax.php:21
184
- #: simple-membership/classes/class.swpm-ajax.php:36
185
  msgid "Aready taken"
186
  msgstr "Ya está cogido"
187
 
188
- #: simple-membership/classes/class.swpm-ajax.php:30
189
  msgid "Name contains invalid character"
190
  msgstr "El nombre contiene un carácter no válido"
191
 
192
- #: simple-membership/classes/class.swpm-ajax.php:37
193
  msgid "Available"
194
  msgstr "Disponible"
195
 
196
- #: simple-membership/classes/class.swpm-auth.php:46
197
  msgid ""
198
  "Warning! Simple Membership plugin cannot process this login request to "
199
  "prevent you from getting logged out of WP Admin accidentally."
200
  msgstr ""
201
  "¡Advertencia! El plugin Simple Membership no puede procesar esta solicitud "
202
- "de inicio de sesión para evitar que se desconecte de WP Admin "
203
  "accidentalmente."
204
 
205
- #: simple-membership/classes/class.swpm-auth.php:47
 
 
 
 
 
 
 
 
206
  msgid ""
207
  "You are logged into the site as an ADMIN user in this browser. First, logout "
208
- "from WP Admin then you will be able to log in as a member."
209
  msgstr ""
210
- "Ha iniciado sesión en el sitio como usuario de ADMIN en este navegador. "
211
- "Primero, cierre la sesión de WP Admin y luego podrá iniciar sesión como "
212
- "miembro."
213
 
214
- #: simple-membership/classes/class.swpm-auth.php:48
215
  msgid ""
216
  "Alternatively, you can use a different browser (where you are not logged-in "
217
  "as ADMIN) to test the membership login."
218
  msgstr ""
219
- "Como alternativa, puede utilizar un navegador diferente (donde no ha "
220
- "iniciado sesión como ADMIN) para probar el inicio de sesión de membresía."
221
 
222
- #: simple-membership/classes/class.swpm-auth.php:49
223
  msgid ""
224
  "Your normal visitors or members will never see this message. This message is "
225
  "ONLY for ADMIN user."
226
  msgstr ""
227
- "Sus visitantes o miembros normales nunca verán este mensaje. Este mensaje es "
228
- "SOLO para el usuario ADMIN."
229
 
230
- #: simple-membership/classes/class.swpm-auth.php:56
231
  msgid "Captcha validation failed on login form."
232
- msgstr "Error de validación de Captcha en el formulario de inicio de sesión."
233
 
234
- #: simple-membership/classes/class.swpm-auth.php:81
235
  msgid "User Not Found."
236
- msgstr "Usuario no encontrado."
237
 
238
- #: simple-membership/classes/class.swpm-auth.php:88
239
  msgid "Password Empty or Invalid."
240
  msgstr "Contraseña vacía o no válida."
241
 
242
- #: simple-membership/classes/class.swpm-auth.php:125
243
  msgid "Account is inactive."
244
  msgstr "La cuenta está inactiva."
245
 
246
- #: simple-membership/classes/class.swpm-auth.php:128
247
- #: simple-membership/classes/class.swpm-auth.php:146
248
  msgid "Account has expired."
249
  msgstr "Tu cuenta ha caducado."
250
 
251
- #: simple-membership/classes/class.swpm-auth.php:131
252
  msgid "Account is pending."
253
- msgstr "La cuenta aún no está activa."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
 
255
- #: simple-membership/classes/class.swpm-auth.php:154
256
  msgid "You are logged in as:"
257
- msgstr "Conectado como:"
258
 
259
- #: simple-membership/classes/class.swpm-auth.php:200
260
  msgid "Logged Out Successfully."
261
- msgstr "Desconectado con éxito."
262
 
263
- #: simple-membership/classes/class.swpm-auth.php:251
264
  msgid "Session Expired."
265
  msgstr "Sesión caducada."
266
 
267
- #: simple-membership/classes/class.swpm-auth.php:268
268
  msgid "Please login again."
269
- msgstr "Por favor, inicia sesión de nuevo."
270
-
271
- #: simple-membership/classes/class.swpm-category-list.php:19
272
- #: simple-membership/classes/class.swpm-members.php:24
273
- #: simple-membership/classes/class.swpm-membership-levels.php:11
274
- #: simple-membership/classes/class.swpm-membership-levels.php:21
275
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:85
276
- #: simple-membership/views/add.php:31
277
- #: simple-membership/views/admin_member_form_common_part.php:2
278
- #: simple-membership/views/edit.php:61
279
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:50
280
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:34
281
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:217
282
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:35
283
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:307
284
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:47
285
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:259
286
  msgid "Membership Level"
287
  msgstr "Nivel de membresía"
288
 
289
- #: simple-membership/classes/class.swpm-category-list.php:33
290
  msgid "Category ID"
291
  msgstr "ID de categoría"
292
 
293
- #: simple-membership/classes/class.swpm-category-list.php:34
294
  msgid "Category Name"
295
  msgstr "Nombre de categoría"
296
 
297
- #: simple-membership/classes/class.swpm-category-list.php:35
298
  msgid "Category Type (Taxonomy)"
299
  msgstr "Tipo de categoría (Taxonomía)"
300
 
301
- #: simple-membership/classes/class.swpm-category-list.php:36
302
  msgid "Description"
303
  msgstr "Descripción"
304
 
305
- #: simple-membership/classes/class.swpm-category-list.php:37
306
  msgid "Count"
307
  msgstr "Contar"
308
 
309
- #: simple-membership/classes/class.swpm-category-list.php:92
310
  msgid "Category protection updated!"
311
- msgstr "¡Protección de categoría actualizada!"
312
 
313
- #: simple-membership/classes/class.swpm-category-list.php:130
314
  msgid "No category found."
315
- msgstr "No se encontró ninguna categoría."
316
 
317
- #: simple-membership/classes/class.swpm-comment-form-related.php:15
318
  msgid "Please login to comment."
319
- msgstr "Por favor inicie sesión para comentar."
320
 
321
- #: simple-membership/classes/class.swpm-comment-form-related.php:40
322
  msgid "Please Login to Comment."
323
- msgstr "Por favor inicie sesión para comentar."
324
 
325
- #: simple-membership/classes/class.swpm-comment-form-related.php:79
326
  msgid "Comments not allowed by a non-member."
327
- msgstr "Comentarios no permitidos por un no miembro."
328
 
329
- #: simple-membership/classes/class.swpm-form.php:29
330
  msgid ""
331
  "Wordpress account exists with given username. But given email doesn't match."
332
  msgstr ""
333
- "La cuenta de WordPress existe con nombre de usuario dado. Pero el correo "
334
  "electrónico dado no coincide."
335
 
336
- #: simple-membership/classes/class.swpm-form.php:34
 
 
 
 
 
 
 
 
 
 
 
337
  msgid ""
338
  "Wordpress account exists with given email. But given username doesn't match."
339
  msgstr ""
340
- "La cuenta de Wordpress existe con el correo electrónico dado. Pero el nombre "
341
- "de usuario dado no coincide."
 
 
 
 
 
 
 
 
 
 
 
342
 
343
- #: simple-membership/classes/class.swpm-form.php:43
344
  msgid "Username is required"
345
- msgstr "Se requiere nombre de usuario"
346
 
347
- #: simple-membership/classes/class.swpm-form.php:47
348
  msgid "Username contains invalid character"
349
  msgstr "El nombre de usuario contiene un carácter no válido"
350
 
351
- #: simple-membership/classes/class.swpm-form.php:55
352
  msgid "Username already exists."
353
- msgstr "Nombre de usuario ya existe."
354
 
355
- #: simple-membership/classes/class.swpm-form.php:78
356
  msgid "Password is required"
357
  msgstr "La contraseña es obligatoria"
358
 
359
- #: simple-membership/classes/class.swpm-form.php:85
360
  msgid "Password mismatch"
361
- msgstr "Las contraseñas no coinciden"
362
 
363
- #: simple-membership/classes/class.swpm-form.php:96
364
  msgid "Email is required"
365
  msgstr "El correo electrónico es obligatorio"
366
 
367
- #: simple-membership/classes/class.swpm-form.php:100
368
  msgid "Email is invalid"
369
  msgstr "El correo electrónico no es válido"
370
 
371
- #: simple-membership/classes/class.swpm-form.php:116
372
  msgid "Email is already used."
373
- msgstr "El Correo electrónico ya está en uso."
374
 
375
- #: simple-membership/classes/class.swpm-form.php:173
376
  msgid "Member since field is invalid"
377
- msgstr "El campo \"Miembro desde\" no es válido"
378
 
379
- #: simple-membership/classes/class.swpm-form.php:184
380
  msgid "Access starts field is invalid"
381
  msgstr "La fecha de comienzo no es válida"
382
 
383
- #: simple-membership/classes/class.swpm-form.php:194
384
  msgid "Gender field is invalid"
385
- msgstr "El valor introducido en el campo \"Sexo\" no es válido"
386
 
387
- #: simple-membership/classes/class.swpm-form.php:205
388
  msgid "Account state field is invalid"
389
  msgstr "El valor introducido en el campo \"Estado de la cuenta\" no es válido"
390
 
391
- #: simple-membership/classes/class.swpm-form.php:212
392
  msgid "Invalid membership level"
393
- msgstr "Nivel de membresía no válido"
394
 
395
- #: simple-membership/classes/class.swpm-front-registration.php:33
396
  msgid ""
397
  "Error! Invalid Request. Could not find a match for the given security code "
398
  "and the user ID."
399
  msgstr ""
400
  "¡Error! Solicitud no válida. No se pudo encontrar una coincidencia para el "
401
- "código de seguridad especificado y el ID de usuario."
402
 
403
- #: simple-membership/classes/class.swpm-front-registration.php:45
404
- #: simple-membership/classes/class.swpm-utils-misc.php:236
405
- #: simple-membership/views/login.php:36
406
  msgid "Join Us"
407
  msgstr "Únete a nosotros"
408
 
409
- #: simple-membership/classes/class.swpm-front-registration.php:47
410
  msgid ""
411
  "Free membership is disabled on this site. Please make a payment from the "
412
  msgstr ""
413
- "La membresía gratuita está inhabilitada en este sitio. Realice un pago desde "
414
- "el "
 
 
 
 
415
 
416
- #: simple-membership/classes/class.swpm-front-registration.php:49
417
  msgid ""
418
  "You will receive a unique link via email after the payment. You will be able "
419
  "to use that link to complete the premium membership registration."
420
  msgstr ""
421
- "Recibirá un enlace único por correo electrónico después del pago. Podrá "
422
- "utilizar ese enlace para completar el registro de membresía premium."
423
 
424
- #: simple-membership/classes/class.swpm-front-registration.php:77
425
  msgid "Security check: captcha validation failed."
426
  msgstr "Comprobación de seguridad: la validación del captcha ha fallado."
427
 
428
- #: simple-membership/classes/class.swpm-front-registration.php:100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
429
  msgid "Registration Successful. "
430
  msgstr "Registro con éxito. "
431
 
432
- #: simple-membership/classes/class.swpm-front-registration.php:100
433
- #: simple-membership/classes/class.swpm-utils-misc.php:235
434
- #: simple-membership/classes/class.swpm-utils-misc.php:247
435
  msgid "Please"
436
- msgstr "Por Favor"
437
 
438
- #: simple-membership/classes/class.swpm-front-registration.php:100
439
- #: simple-membership/classes/class.swpm-utils-misc.php:235
440
- #: simple-membership/views/login.php:30
441
  msgid "Login"
442
- msgstr "Acceder"
443
 
444
- #: simple-membership/classes/class.swpm-front-registration.php:113
445
  msgid "Please correct the following"
446
  msgstr "Por favor, corrige lo siguiente"
447
 
448
- #: simple-membership/classes/class.swpm-front-registration.php:158
449
  msgid "Membership Level Couldn't be found."
450
  msgstr "No se ha encontrado el nivel de membresía."
451
 
452
- #: simple-membership/classes/class.swpm-front-registration.php:209
453
  msgid "Error! Nonce verification failed for front end profile edit."
454
  msgstr ""
455
- "¡Error! La verificación de nonce falló para el perfil extremo delantero de "
456
- "edición."
457
 
458
- #: simple-membership/classes/class.swpm-front-registration.php:217
459
  msgid "Profile updated successfully."
460
- msgstr "Perfil actualizado correctamente."
461
 
462
- #: simple-membership/classes/class.swpm-front-registration.php:226
463
  msgid ""
464
  "Profile updated successfully. You will need to re-login since you changed "
465
  "your password."
466
  msgstr ""
467
- "Perfil actualizado correctamente. Tendrás que volver a iniciar sesión porque "
468
- "has cambiado la contraseña."
469
 
470
- #: simple-membership/classes/class.swpm-front-registration.php:238
471
  msgid "Please correct the following."
472
- msgstr "Por favor corrija lo siguiente."
473
 
474
- #: simple-membership/classes/class.swpm-front-registration.php:250
475
  msgid "Captcha validation failed."
476
- msgstr "Error de validación de Captcha."
477
 
478
- #: simple-membership/classes/class.swpm-front-registration.php:258
479
  msgid "Email address not valid."
480
- msgstr "Dirección de correo electrónico no válida."
481
 
482
- #: simple-membership/classes/class.swpm-front-registration.php:269
483
  msgid "No user found with that email address."
484
- msgstr ""
485
- "No se han encontrado ningún usuario con esa dirección de correo electrónico."
486
 
487
- #: simple-membership/classes/class.swpm-front-registration.php:270
488
- #: simple-membership/classes/class.swpm-front-registration.php:299
489
  msgid "Email Address: "
490
  msgstr "Dirección de correo electrónico: "
491
 
492
- #: simple-membership/classes/class.swpm-front-registration.php:298
493
  msgid "New password has been sent to your email address."
494
- msgstr "La nueva contraseña ha sido enviada a su correo electrónico."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
495
 
496
- #: simple-membership/classes/class.swpm-init-time-tasks.php:112
497
  msgid "Sorry, Nonce verification failed."
498
- msgstr "Lo siento, la verificación del Nonce falló."
499
 
500
- #: simple-membership/classes/class.swpm-init-time-tasks.php:119
501
  msgid "Sorry, Password didn't match."
502
  msgstr "Lo siento, la contraseña no coincide."
503
 
504
- #: simple-membership/classes/class.swpm-level-form.php:47
505
  msgid "Date format is not valid."
506
  msgstr "El formato de fecha no es válido."
507
 
508
- #: simple-membership/classes/class.swpm-level-form.php:55
509
  msgid "Access duration must be > 0."
510
  msgstr "La duración del acceso debe ser mayor a 0."
511
 
512
- #: simple-membership/classes/class.swpm-members.php:10
513
  msgid "Member"
514
  msgstr "Miembro"
515
 
516
- #: simple-membership/classes/class.swpm-members.php:19
517
- #: simple-membership/classes/class.swpm-membership-levels.php:20
518
  msgid "ID"
519
  msgstr "ID"
520
 
521
- #: simple-membership/classes/class.swpm-members.php:20
522
- #: simple-membership/views/add.php:7 simple-membership/views/admin_add.php:11
523
- #: simple-membership/views/admin_edit.php:14
524
- #: simple-membership/views/edit.php:13
525
  msgid "Username"
526
  msgstr "Nombre de usuario"
527
 
528
- #: simple-membership/classes/class.swpm-members.php:21
529
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:78
530
- #: simple-membership/views/add.php:23
531
- #: simple-membership/views/admin_member_form_common_part.php:15
532
- #: simple-membership/views/edit.php:29
533
  msgid "First Name"
534
  msgstr "Nombre"
535
 
536
- #: simple-membership/classes/class.swpm-members.php:22
537
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:79
538
- #: simple-membership/views/add.php:27
539
- #: simple-membership/views/admin_member_form_common_part.php:19
540
- #: simple-membership/views/edit.php:33
541
  msgid "Last Name"
542
- msgstr "Apellido"
543
 
544
- #: simple-membership/classes/class.swpm-members.php:23
545
- #: simple-membership/views/add.php:11 simple-membership/views/edit.php:17
546
  msgid "Email"
547
  msgstr "Correo electrónico"
548
 
549
- #: simple-membership/classes/class.swpm-members.php:25
550
- #: simple-membership/views/admin_member_form_common_part.php:11
551
  msgid "Access Starts"
552
  msgstr "El acceso comienza"
553
 
554
- #: simple-membership/classes/class.swpm-members.php:26
555
  msgid "Account State"
556
  msgstr "Estado de la cuenta"
557
 
558
- #: simple-membership/classes/class.swpm-members.php:44
559
- #: simple-membership/classes/class.swpm-membership-levels.php:36
560
- #: simple-membership/classes/admin-includes/class.swpm-payment-buttons-list-table.php:94
561
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:102
 
 
 
 
562
  msgid "Delete"
563
  msgstr "Borrar"
564
 
565
- #: simple-membership/classes/class.swpm-members.php:45
566
  msgid "Set Status to Active"
567
- msgstr "Establecer el estatus como activo"
568
 
569
- #: simple-membership/classes/class.swpm-members.php:46
570
  msgid "Set Status to Active and Notify"
571
- msgstr "Establecer el estatus como activo y notificarlo"
572
 
573
- #: simple-membership/classes/class.swpm-members.php:47
574
  msgid "Set Status to Inactive"
575
- msgstr "Establecer el estatus como inactivo"
576
 
577
- #: simple-membership/classes/class.swpm-members.php:48
578
  msgid "Set Status to Pending"
579
- msgstr "Establecer el estatus en espera"
580
 
581
- #: simple-membership/classes/class.swpm-members.php:49
582
  msgid "Set Status to Expired"
583
- msgstr "Establecer el estatus en caducado"
584
 
585
- #: simple-membership/classes/class.swpm-members.php:70
586
  msgid "incomplete"
587
  msgstr "incompleto"
588
 
589
- #: simple-membership/classes/class.swpm-members.php:189
590
  msgid "No member found."
591
- msgstr "No se ha encontrado ningún miembro."
592
 
593
- #: simple-membership/classes/class.swpm-members.php:335
594
  msgid "Error! Nonce verification failed for user delete from admin end."
595
  msgstr ""
596
- "¡Error! La verificación de nonce falló para el usuario eliminado de la "
597
- "administración."
598
 
599
- #: simple-membership/classes/class.swpm-members.php:404
600
- #: simple-membership/classes/class.swpm-members.php:434
601
  msgid "Error! Please select a membership level first."
602
  msgstr "¡Error! Seleccione primero un nivel de membresía."
603
 
604
- #: simple-membership/classes/class.swpm-members.php:421
605
  msgid "Membership level change operation completed successfully."
606
  msgstr ""
607
- "La operación de cambio de nivel de membresía se ha completado correctamente."
608
 
609
- #: simple-membership/classes/class.swpm-members.php:451
610
  msgid "Access starts date change operation successfully completed."
611
- msgstr ""
612
- "El acceso inicia la operación de cambio de fecha completada "
613
- "satisfactoriamente."
614
 
615
- #: simple-membership/classes/class.swpm-members.php:460
616
  msgid "Bulk Update Membership Level of Members"
617
- msgstr "Actualización masiva Nivel de Membresía de Miembros"
618
 
619
- #: simple-membership/classes/class.swpm-members.php:463
620
  msgid ""
621
  "You can manually change the membership level of any member by editing the "
622
  "record from the members menu. "
623
  msgstr ""
624
- "Puede cambiar manualmente el nivel de membresía de cualquier miembro "
625
  "editando el registro en el menú de miembros. "
626
 
627
- #: simple-membership/classes/class.swpm-members.php:464
628
  msgid ""
629
  "You can use the following option to bulk update the membership level of "
630
  "users who belong to the level you select below."
631
  msgstr ""
632
- "Se puede utilizar la siguiente opción de actualización masiva del nivel de "
633
- "membresía de los usuarios que pertenecen al nivel que seleccione a "
634
  "continuación."
635
 
636
- #: simple-membership/classes/class.swpm-members.php:470
637
- #: simple-membership/classes/class.swpm-members.php:518
638
  msgid "Membership Level: "
639
  msgstr "Nivel de membresía: "
640
 
641
- #: simple-membership/classes/class.swpm-members.php:474
642
  msgid "Select Current Level"
643
- msgstr "Seleccione el nivel actual"
644
 
645
- #: simple-membership/classes/class.swpm-members.php:477
646
  msgid ""
647
  "Select the current membership level (the membership level of all members who "
648
  "are in this level will be updated)."
649
  msgstr ""
650
- "Seleccione el nivel de membresía actual (el nivel de membresía de todos los "
651
- "miembros que se encuentren en este nivel se actualizará)."
652
 
653
- #: simple-membership/classes/class.swpm-members.php:483
654
  msgid "Level to Change to: "
655
  msgstr "Nivel a cambiar a: "
656
 
657
- #: simple-membership/classes/class.swpm-members.php:487
658
  msgid "Select Target Level"
659
- msgstr "Seleccione el nivel de destino"
660
 
661
- #: simple-membership/classes/class.swpm-members.php:490
662
  msgid "Select the new membership level."
663
  msgstr "Seleccione el nuevo nivel de membresía."
664
 
665
- #: simple-membership/classes/class.swpm-members.php:496
666
  msgid "Bulk Change Membership Level"
667
- msgstr "Cambio masivo de nivel de membresía"
668
 
669
- #: simple-membership/classes/class.swpm-members.php:506
670
  msgid "Bulk Update Access Starts Date of Members"
671
- msgstr "El acceso a la actualización masiva comienza la fecha de los miembros"
 
672
 
673
- #: simple-membership/classes/class.swpm-members.php:510
674
  msgid ""
675
  "The access starts date of a member is set to the day the user registers. "
676
  "This date value is used to calculate how long the member can access your "
@@ -679,10 +835,10 @@ msgid ""
679
  msgstr ""
680
  "La fecha de inicio de acceso de un miembro se establece en el día en que el "
681
  "usuario se registra. Este valor de fecha se utiliza para calcular el tiempo "
682
- "que el miembro puede acceder a su contenido que están protegidos con una "
683
- "protección de tipo duración en el nivel de membresía. "
684
 
685
- #: simple-membership/classes/class.swpm-members.php:511
686
  msgid ""
687
  "You can manually set a specific access starts date value of all members who "
688
  "belong to a particular level using the following option."
@@ -691,518 +847,836 @@ msgstr ""
691
  "específico de todos los miembros que pertenezcan a un nivel determinado "
692
  "mediante la siguiente opción."
693
 
694
- #: simple-membership/classes/class.swpm-members.php:521
695
  msgid "Select Level"
696
- msgstr "Seleccione el nivel"
697
 
698
- #: simple-membership/classes/class.swpm-members.php:524
699
  msgid ""
700
  "Select the Membership level (the access start date of all members who are in "
701
  "this level will be updated)."
702
  msgstr ""
703
- "Seleccione el nivel de Membresía (la fecha de inicio de acceso de todos los "
704
- "miembros que están en este nivel se actualizará)."
705
 
706
- #: simple-membership/classes/class.swpm-members.php:533
707
  msgid "Specify the access starts date value."
708
- msgstr "Especifique el valor de fecha de inicio de acceso."
709
 
710
- #: simple-membership/classes/class.swpm-members.php:539
711
  msgid "Bulk Change Access Starts Date"
712
- msgstr "Comienza la fecha de acceso de cambio masivo"
713
 
714
- #: simple-membership/classes/class.swpm-members.php:574
715
  msgid "Simple WP Membership::Members"
716
  msgstr "Simple WP Membership::Miembros"
717
 
718
- #: simple-membership/classes/class.swpm-members.php:575
719
- #: simple-membership/classes/class.swpm-membership-levels.php:225
720
- #: simple-membership/views/admin_members_list.php:43
721
  msgid "Add New"
722
  msgstr "Añadir nuevo"
723
 
724
- #: simple-membership/classes/class.swpm-members.php:580
725
- #: simple-membership/views/admin_add.php:6
726
  msgid "Add Member"
727
  msgstr "Añadir miembro"
728
 
729
- #: simple-membership/classes/class.swpm-members.php:581
730
  msgid "Bulk Operation"
731
- msgstr "Operación masiva"
732
 
733
- #: simple-membership/classes/class.swpm-membership-level.php:52
734
  msgid ""
735
  "Error! Nonce verification failed for membership level creation from admin "
736
  "end."
737
  msgstr ""
738
  "¡Error! La verificación de Nonce falló en la creación de nivel de membresía "
739
- "desde admin end."
740
 
741
- #: simple-membership/classes/class.swpm-membership-level.php:64
742
  msgid "Membership Level Creation Successful."
743
- msgstr "Nivel de membresía creado correctamente."
744
 
745
- #: simple-membership/classes/class.swpm-membership-level.php:80
746
  msgid ""
747
  "Error! Nonce verification failed for membership level edit from admin end."
748
  msgstr ""
749
- "¡Error! La verificación de Nonce falló para la edición de nivel de membresía "
750
- "desde admin end."
751
 
752
- #: simple-membership/classes/class.swpm-membership-level.php:92
753
  msgid "Membership Level Updated Successfully."
754
- msgstr "Nivel de membresía actualizado con éxito."
755
 
756
- #: simple-membership/classes/class.swpm-membership-levels.php:22
757
  msgid "Role"
758
- msgstr "Rol"
759
 
760
- #: simple-membership/classes/class.swpm-membership-levels.php:23
761
  msgid "Access Valid For/Until"
762
  msgstr "Acceso válido durante/hasta"
763
 
764
- #: simple-membership/classes/class.swpm-membership-levels.php:133
765
  msgid "No membership levels found."
766
  msgstr "No se encontraron niveles de membresía."
767
 
768
- #: simple-membership/classes/class.swpm-membership-levels.php:196
769
  msgid ""
770
  "Error! Nonce verification failed for membership level delete from admin end."
771
  msgstr ""
772
- "¡Error! La verificación de nonce falló para el nivel de membresía eliminar "
773
- "desde el extremo de administración."
774
 
775
- #: simple-membership/classes/class.swpm-membership-levels.php:215
776
- #: simple-membership/views/admin_members_list.php:30
777
- #: simple-membership/views/payments/admin_all_payment_transactions.php:16
778
  msgid "Search"
779
  msgstr "Buscar"
780
 
781
- #: simple-membership/classes/class.swpm-membership-levels.php:253
782
  msgid "Simple WP Membership::Membership Levels"
783
  msgstr "Simple WP Membership::Nivel de membresía"
784
 
785
- #: simple-membership/classes/class.swpm-membership-levels.php:258
786
  msgid "Add Level"
787
  msgstr "Añadir nivel"
788
 
789
- #: simple-membership/classes/class.swpm-membership-levels.php:259
790
  msgid "Manage Content Protection"
791
- msgstr "Administrar la protección de contenido"
792
 
793
- #: simple-membership/classes/class.swpm-membership-levels.php:260
794
  msgid "Category Protection"
795
  msgstr "Protección de categoría"
796
 
797
- #: simple-membership/classes/class.swpm-settings.php:27
798
- #: simple-membership/classes/class.swpm-settings.php:55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
799
  msgid "General Settings"
800
  msgstr "Ajustes generales"
801
 
802
- #: simple-membership/classes/class.swpm-settings.php:28
803
  msgid "Payment Settings"
804
  msgstr "Ajustes de pago"
805
 
806
- #: simple-membership/classes/class.swpm-settings.php:29
807
  msgid "Email Settings"
808
- msgstr "Configuración del correo electrónico"
809
 
810
- #: simple-membership/classes/class.swpm-settings.php:30
811
  msgid "Tools"
812
  msgstr "Herramientas"
813
 
814
- #: simple-membership/classes/class.swpm-settings.php:31
815
- #: simple-membership/classes/class.swpm-settings.php:189
816
  msgid "Advanced Settings"
817
  msgstr "Ajustes avanzados"
818
 
819
- #: simple-membership/classes/class.swpm-settings.php:32
820
  msgid "Addons Settings"
821
  msgstr "Ajustes de extensiones"
822
 
823
- #: simple-membership/classes/class.swpm-settings.php:54
824
  msgid "Plugin Documentation"
825
  msgstr "Documentación del plugin"
826
 
827
- #: simple-membership/classes/class.swpm-settings.php:56
828
  msgid "Enable Free Membership"
829
  msgstr "Activar membresía gratis"
830
 
831
- #: simple-membership/classes/class.swpm-settings.php:57
832
  msgid ""
833
  "Enable/disable registration for free membership level. When you enable this "
834
  "option, make sure to specify a free membership level ID in the field below."
835
  msgstr ""
836
- "Activar/desactivar el registro para el nivel de membresía gratis. Al "
837
- "habilitar esta opción, asegúrate de especificar un ID de nivel de membresía "
838
- "gratuita en el siguiente campo."
839
 
840
- #: simple-membership/classes/class.swpm-settings.php:58
841
  msgid "Free Membership Level ID"
842
  msgstr "ID de la membresía gratuita"
843
 
844
- #: simple-membership/classes/class.swpm-settings.php:59
845
  msgid "Assign free membership level ID"
846
  msgstr "Asignar el ID de la membresía gratuita"
847
 
848
- #: simple-membership/classes/class.swpm-settings.php:60
849
  msgid "Enable More Tag Protection"
850
- msgstr "Activar más protección de etiquetas"
851
 
852
- #: simple-membership/classes/class.swpm-settings.php:61
853
  msgid ""
854
  "Enables or disables \"more\" tag protection in the posts and pages. Anything "
855
  "after the More tag is protected. Anything before the more tag is teaser "
856
  "content."
857
  msgstr ""
858
- "Activa o desactiva la protección de la etiqueta \"more\" de las entradas y "
859
- "páginas. Todo lo que se incluya bajo la etiqueta \"more\" es restringido, lo "
860
- "que se incluya por encima es visible para todos."
861
 
862
- #: simple-membership/classes/class.swpm-settings.php:62
863
  msgid "Hide Adminbar"
864
  msgstr "Ocultar la barra de administración"
865
 
866
- #: simple-membership/classes/class.swpm-settings.php:63
867
  msgid ""
868
  "WordPress shows an admin toolbar to the logged in users of the site. Check "
869
  "this if you want to hide that admin toolbar in the frontend of your site."
870
  msgstr ""
871
  "WordPress muestra una barra de herramientas de administración para los "
872
- "usuarios registrados en el sitio. Marque esto si desea ocultar esa barra de "
873
- "herramientas de administración en el frontend de su sitio."
874
 
875
- #: simple-membership/classes/class.swpm-settings.php:64
876
  msgid "Show Adminbar to Admin"
877
- msgstr "Mostrar barra de administración en Admin"
878
 
879
- #: simple-membership/classes/class.swpm-settings.php:65
880
  msgid ""
881
  "Use this option if you want to show the admin toolbar to admin users only. "
882
  "The admin toolbar will be hidden for all other users."
883
  msgstr ""
884
- "Utilice esta opción si desea mostrar la barra de herramientas de "
885
  "administración sólo a usuarios administradores. La barra de herramientas de "
886
  "administración se ocultará para todos los demás usuarios."
887
 
888
- #: simple-membership/classes/class.swpm-settings.php:66
889
  msgid "Disable Access to WP Dashboard"
890
- msgstr "Deshabilitar el acceso aa escritorio de WP"
891
 
892
- #: simple-membership/classes/class.swpm-settings.php:67
893
  msgid ""
894
- "WordPress allows a sandard wp user to be able to go to the wp-admin URL and "
895
  "access his profile from the wp dashbaord. Using this option will prevent any "
896
  "non admin users from going to the wp dashboard."
897
  msgstr ""
898
- "WordPress permite a un usuario estándar de wp ser capaz de ir a la URL wp-"
899
- "admin y acceder a su perfil desde el panel de control de wp. El uso de esta "
900
- "opción evitará que los usuarios que no sean administradores pasen al "
901
- "escritorio de wp."
902
 
903
- #: simple-membership/classes/class.swpm-settings.php:69
904
  msgid "Default Account Status"
905
  msgstr "Estado por defecto de la cuenta"
906
 
907
- #: simple-membership/classes/class.swpm-settings.php:72
908
  msgid ""
909
  "Select the default account status for newly registered users. If you want to "
910
  "manually approve the members then you can set the status to \"Pending\"."
911
  msgstr ""
912
- "Seleccionar un estado de cuenta por defecto para los nuevos registros. Si "
913
- "desea aprobar manualmente los miembros, puedes establecer el estado en "
914
  "\"Pendiente\"."
915
 
916
- #: simple-membership/classes/class.swpm-settings.php:74
917
  msgid "Members Must be Logged in to Comment"
918
  msgstr "Los miembros deben estar conectados para comentar"
919
 
920
- #: simple-membership/classes/class.swpm-settings.php:75
921
  msgid ""
922
  "Enable this option if you only want the members of the site to be able to "
923
  "post a comment."
924
  msgstr ""
925
- "Active esta opción si sólo desea que los miembros del sitio puedan publicar "
926
  "un comentario."
927
 
928
- #: simple-membership/classes/class.swpm-settings.php:84
929
  msgid "Pages Settings"
930
  msgstr "Ajustes de páginas"
931
 
932
- #: simple-membership/classes/class.swpm-settings.php:85
933
  msgid "Login Page URL"
934
- msgstr "URL Página de Inicio de sesión"
935
 
936
- #: simple-membership/classes/class.swpm-settings.php:87
937
  msgid "Registration Page URL"
938
  msgstr "El URL de la página de registro"
939
 
940
- #: simple-membership/classes/class.swpm-settings.php:89
941
  msgid "Join Us Page URL"
942
- msgstr "URL página de Únete a nosotros"
943
 
944
- #: simple-membership/classes/class.swpm-settings.php:91
945
  msgid "Edit Profile Page URL"
946
- msgstr "Editar URL de página de perfil"
947
 
948
- #: simple-membership/classes/class.swpm-settings.php:93
949
  msgid "Password Reset Page URL"
950
- msgstr "URL de página de restablecimiento de contraseña"
951
 
952
- #: simple-membership/classes/class.swpm-settings.php:96
953
  msgid "Test & Debug Settings"
954
  msgstr "Ajustes de prueba y depuración"
955
 
956
- #: simple-membership/classes/class.swpm-settings.php:98
957
  msgid "Check this option to enable debug logging."
958
- msgstr "Marca esta opción para activar los registro de depuración."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
959
 
960
- #: simple-membership/classes/class.swpm-settings.php:103
961
  msgid "Enable Sandbox Testing"
962
  msgstr "Activar pruebas en sandbox"
963
 
964
- #: simple-membership/classes/class.swpm-settings.php:104
965
  msgid "Enable this option if you want to do sandbox payment testing."
966
- msgstr "Activar esta opción si quieres hacer pagos de prueba en sandbox."
967
 
968
- #: simple-membership/classes/class.swpm-settings.php:117
969
- #: simple-membership/classes/class.swpm-settings.php:184
970
- #: simple-membership/classes/class.swpm-settings.php:301
971
- msgid "Settings updated!"
972
- msgstr "¡Ajustes actualizados!"
973
 
974
- #: simple-membership/classes/class.swpm-settings.php:122
975
  msgid "Email Misc. Settings"
976
  msgstr "Ajustes varios del correo electrónico"
977
 
978
- #: simple-membership/classes/class.swpm-settings.php:123
979
  msgid "From Email Address"
980
  msgstr "Remitente del correo electrónico"
981
 
982
- #: simple-membership/classes/class.swpm-settings.php:127
983
  msgid "Email Settings (Prompt to Complete Registration )"
984
- msgstr ""
985
- "Configuración del correo electrónico (Solicitud para completar el registro)"
986
 
987
- #: simple-membership/classes/class.swpm-settings.php:128
988
- #: simple-membership/classes/class.swpm-settings.php:141
989
- #: simple-membership/classes/class.swpm-settings.php:159
990
- #: simple-membership/classes/class.swpm-settings.php:164
991
- #: simple-membership/classes/class.swpm-settings.php:169
992
  msgid "Email Subject"
993
  msgstr "Asunto del correo electrónico"
994
 
995
- #: simple-membership/classes/class.swpm-settings.php:130
996
- #: simple-membership/classes/class.swpm-settings.php:143
997
- #: simple-membership/classes/class.swpm-settings.php:160
998
- #: simple-membership/classes/class.swpm-settings.php:165
999
- #: simple-membership/classes/class.swpm-settings.php:170
1000
  msgid "Email Body"
1001
  msgstr "Cuerpo del correo electrónico"
1002
 
1003
- #: simple-membership/classes/class.swpm-settings.php:134
1004
  msgid ""
1005
  "Enter the email address where you want the admin notification email to be "
1006
  "sent to."
1007
  msgstr ""
1008
- "Introduce la dirección de correo electrónico donde deseas que se envíen las "
1009
- "notificaciones de administración."
1010
 
1011
- #: simple-membership/classes/class.swpm-settings.php:135
1012
  msgid ""
1013
  " You can put multiple email addresses separated by comma (,) in the above "
1014
  "field to send the notification to multiple email addresses."
1015
  msgstr ""
1016
- " Puede colocar varias direcciones de correo electrónico separadas por coma "
1017
  "(,) en el campo anterior para enviar la notificación a varias direcciones de "
1018
  "correo electrónico."
1019
 
1020
- #: simple-membership/classes/class.swpm-settings.php:137
1021
  msgid "Enter the subject for the admin notification email."
1022
  msgstr ""
1023
- "Introduzca el asunto para el correo electrónico de notificación del "
1024
  "administrador."
1025
 
1026
- #: simple-membership/classes/class.swpm-settings.php:138
1027
  msgid ""
1028
  "This email will be sent to the admin when a new user completes the "
1029
  "membership registration. Only works if you have enabled the \"Send "
1030
  "Notification to Admin\" option above."
1031
  msgstr ""
1032
  "Este correo electrónico se enviará al administrador cuando un nuevo usuario "
1033
- "complete el registro de membresía. Sólo funciona si ha habilitado la opción "
1034
- "\"Enviar notificación al administrador\" anterior."
1035
 
1036
- #: simple-membership/classes/class.swpm-settings.php:140
1037
  msgid "Email Settings (Registration Complete)"
1038
- msgstr "Ajustes del correo electrónico (Registro completo)"
1039
 
1040
- #: simple-membership/classes/class.swpm-settings.php:145
1041
  msgid "Send Notification to Admin"
1042
- msgstr "Enviar notificación al Administrador"
1043
 
1044
- #: simple-membership/classes/class.swpm-settings.php:146
1045
  msgid ""
1046
  "Enable this option if you want the admin to receive a notification when a "
1047
  "member registers."
1048
  msgstr ""
1049
- "Activar esta opción si desea que el administrador reciba una notificación "
1050
  "cuando un miembro se registre."
1051
 
1052
- #: simple-membership/classes/class.swpm-settings.php:147
1053
  msgid "Admin Email Address"
1054
  msgstr "Dirección de correo electrónico del administrador"
1055
 
1056
- #: simple-membership/classes/class.swpm-settings.php:149
1057
  msgid "Admin Notification Email Subject"
1058
  msgstr "Asunto del correo electrónico de notificación de administrador"
1059
 
1060
- #: simple-membership/classes/class.swpm-settings.php:151
1061
  msgid "Admin Notification Email Body"
1062
  msgstr "Cuerpo de correo electrónico de notificación de administrador"
1063
 
1064
- #: simple-membership/classes/class.swpm-settings.php:154
1065
  msgid "Send Email to Member When Added via Admin Dashboard"
1066
  msgstr ""
1067
- "Enviar correo electrónico al miembro cuando ha sido añadido desde el panel "
1068
- "de administración"
1069
 
1070
- #: simple-membership/classes/class.swpm-settings.php:158
1071
  msgid "Email Settings (Password Reset)"
1072
- msgstr "Configuración del correo electrónico (Restablecer contraseña)"
1073
 
1074
- #: simple-membership/classes/class.swpm-settings.php:163
1075
  msgid " Email Settings (Account Upgrade Notification)"
1076
  msgstr " Ajustes de correo electrónico (Notificación de mejora de la cuenta)"
1077
 
1078
- #: simple-membership/classes/class.swpm-settings.php:168
1079
  msgid " Email Settings (Bulk Account Activate Notification)"
1080
  msgstr ""
1081
- " Configuración de correo electrónico (cuenta masiva activar notificación)"
1082
 
1083
- #: simple-membership/classes/class.swpm-settings.php:191
 
 
 
 
1084
  msgid "Enable Expired Account Login"
1085
  msgstr "Activar el acceso a la cuenta caducada"
1086
 
1087
- #: simple-membership/classes/class.swpm-settings.php:192
1088
  msgid ""
1089
  "When enabled, expired members will be able to log into the system but won't "
1090
  "be able to view any protected content. This allows them to easily renew "
1091
  "their account by making another payment."
1092
  msgstr ""
1093
- "Cuando está habilitado, los miembros vencidos podrán iniciar sesión en el "
1094
- "sistema pero no podrán ver ningún contenido protegido. Esto les permite "
1095
- "renovar fácilmente su cuenta haciendo otro pago."
1096
 
1097
- #: simple-membership/classes/class.swpm-settings.php:194
1098
  msgid "Membership Renewal URL"
1099
- msgstr "URL de renovación de la suscripción"
1100
 
1101
- #: simple-membership/classes/class.swpm-settings.php:195
1102
  msgid ""
1103
  "You can create a renewal page for your site. Read <a href=\"https://simple-"
1104
  "membership-plugin.com/creating-membership-renewal-button/\" target=\"_blank"
1105
  "\">this documentation</a> to learn how to create a renewal page."
1106
  msgstr ""
1107
- "Puede crear una página de renovación para su sitio. Lea <a href=\"https://"
1108
  "simple-membership-plugin.com/creating-membership-renewal-button/\" target="
1109
- "\"_blank\"> esta documentación </a> para aprender cómo crear una página de "
1110
  "renovación."
1111
 
1112
- #: simple-membership/classes/class.swpm-settings.php:197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1113
  msgid "Allow Account Deletion"
1114
- msgstr "Permitir eliminación de cuenta"
1115
 
1116
- #: simple-membership/classes/class.swpm-settings.php:198
1117
  msgid "Allow users to delete their accounts."
1118
- msgstr "Permitir a los usuarios eliminar sus cuentas."
 
 
 
 
 
 
 
 
 
 
 
 
1119
 
1120
- #: simple-membership/classes/class.swpm-settings.php:200
1121
  msgid "Use WordPress Timezone"
1122
- msgstr "Usar la zona horaria de WordPress"
1123
 
1124
- #: simple-membership/classes/class.swpm-settings.php:201
1125
  msgid ""
1126
  "Use this option if you want to use the timezone value specified in your "
1127
  "WordPress General Settings interface."
1128
  msgstr ""
1129
- "Utilice esta opción si desea utilizar el valor de zona horaria especificado "
1130
- "en la interfaz de configuración general de WordPress."
1131
 
1132
- #: simple-membership/classes/class.swpm-settings.php:203
1133
  msgid "Auto Delete Pending Account"
1134
  msgstr "Borrar automáticamente las cuentas pendientes"
1135
 
1136
- #: simple-membership/classes/class.swpm-settings.php:206
1137
  msgid "Select how long you want to keep \"pending\" account."
1138
- msgstr "Selecciona cuánto tiempo desea mantener la cuentas \"pendientes\"."
1139
 
1140
- #: simple-membership/classes/class.swpm-settings.php:208
1141
  msgid "Admin Dashboard Access Permission"
1142
- msgstr "Permiso de acceso al panel de administración"
1143
 
1144
- #: simple-membership/classes/class.swpm-settings.php:211
1145
  msgid ""
1146
  "SWPM admin dashboard is accessible to admin users only (just like any other "
1147
  "plugin). You can allow users with other WP user role to access the SWPM "
1148
  "admin dashboard by selecting a value here."
1149
  msgstr ""
1150
- "El panel de administración de SWPM sólo es accesible para usuarios "
1151
- "administradores (como cualquier otro plugin). Puede permitir que los "
1152
- "usuarios con otra función de usuario WP accedan al panel de administración "
1153
- "de SWPM seleccionando un valor aquí."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1154
 
1155
- #: simple-membership/classes/class.swpm-settings.php:306
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1156
  msgid "General Plugin Settings."
1157
- msgstr "Configuración general del plugin."
1158
 
1159
- #: simple-membership/classes/class.swpm-settings.php:310
1160
  msgid "Page Setup and URL Related settings."
1161
- msgstr "Configuración de página y la configuración de las URL relacionadas."
1162
 
1163
- #: simple-membership/classes/class.swpm-settings.php:314
 
 
 
 
 
 
 
 
 
1164
  msgid "Testing and Debug Related Settings."
1165
  msgstr "Pruebas y ajustes relacionados con depuración."
1166
 
1167
- #: simple-membership/classes/class.swpm-settings.php:318
1168
  msgid ""
1169
  "This email will be sent to your users when they complete the registration "
1170
  "and become a member."
1171
  msgstr ""
1172
- "Este correo electrónico se enviará a sus usuarios cuando completen el "
1173
  "registro y se conviertan en miembros."
1174
 
1175
- #: simple-membership/classes/class.swpm-settings.php:322
1176
  msgid ""
1177
  "This email will be sent to your users when they use the password reset "
1178
  "functionality."
1179
  msgstr ""
1180
- "Este correo electrónico se enviará a sus usuarios cuando utilicen la función "
1181
- "de restablecimiento de contraseña."
1182
 
1183
- #: simple-membership/classes/class.swpm-settings.php:326
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1184
  msgid "Settings in this section apply to all emails."
1185
  msgstr ""
1186
  "Los ajustes de esta sección se aplican a todos los correos electrónicos."
1187
 
1188
- #: simple-membership/classes/class.swpm-settings.php:330
1189
  msgid ""
1190
  "This email will be sent to your users after account upgrade (when an "
1191
  "existing member pays for a new membership level)."
1192
  msgstr ""
1193
- "Este correo electrónico se enviará a sus usuarios después de la "
1194
  "actualización de cuenta (cuando un miembro existente paga por un nuevo nivel "
1195
  "de membresía)."
1196
 
1197
- #: simple-membership/classes/class.swpm-settings.php:334
1198
  msgid ""
1199
  "This email will be sent to your members when you use the bulk account "
1200
  "activate and notify action."
1201
  msgstr ""
1202
- "Este correo electrónico se enviará a sus miembros cuando utilice la cuenta "
1203
- "masiva activar y notificar acción."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1204
 
1205
- #: simple-membership/classes/class.swpm-settings.php:338
1206
  msgid ""
1207
  "This email will be sent to prompt users to complete registration after the "
1208
  "payment."
@@ -1210,178 +1684,219 @@ msgstr ""
1210
  "Este correo electrónico se enviará a los usuarios para completar el registro "
1211
  "después del pago."
1212
 
1213
- #: simple-membership/classes/class.swpm-settings.php:342
1214
  msgid "This page allows you to configure some advanced features of the plugin."
1215
  msgstr ""
1216
- "Esta página le permite configurar algunas funciones avanzadas del plugin."
 
1217
 
1218
- #: simple-membership/classes/class.swpm-settings.php:451
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1219
  msgid "Simple WP Membership::Settings"
1220
  msgstr "Simple WP Membership::Ajustes"
1221
 
1222
- #: simple-membership/classes/class.swpm-utils-member.php:21
1223
- #: simple-membership/classes/class.swpm-utils-member.php:29
1224
- #: simple-membership/classes/class.swpm-utils-member.php:37
1225
- #: simple-membership/classes/class.swpm-utils-member.php:47
1226
  msgid "User is not logged in."
1227
  msgstr "El usuario no está conectado."
1228
 
1229
- #: simple-membership/classes/class.swpm-utils-misc.php:50
 
 
 
 
1230
  msgid "Registration"
1231
  msgstr "Registro"
1232
 
1233
- #: simple-membership/classes/class.swpm-utils-misc.php:73
1234
  msgid "Member Login"
1235
  msgstr "Acceso de miembro"
1236
 
1237
- #: simple-membership/classes/class.swpm-utils-misc.php:96
 
1238
  msgid "Profile"
1239
  msgstr "Perfil"
1240
 
1241
- #: simple-membership/classes/class.swpm-utils-misc.php:119
1242
  msgid "Password Reset"
1243
  msgstr "Restablecer la contraseña"
1244
 
1245
- #: simple-membership/classes/class.swpm-utils-misc.php:236
 
 
 
 
 
 
 
 
 
 
 
1246
  msgid "Not a Member?"
1247
  msgstr "¿Aún no eres miembro?"
1248
 
1249
- #: simple-membership/classes/class.swpm-utils-misc.php:247
1250
  msgid "renew"
1251
  msgstr "renovar"
1252
 
1253
- #: simple-membership/classes/class.swpm-utils-misc.php:247
1254
  msgid " your account to gain access to this content."
1255
- msgstr " su cuenta para acceder a este contenido."
1256
 
1257
- #: simple-membership/classes/class.swpm-utils-misc.php:289
1258
- #: simple-membership/classes/class.swpm-utils-misc.php:295
1259
  msgid "Error! This action ("
1260
  msgstr "¡Error! Esta acción ("
1261
 
1262
- #: simple-membership/classes/class.swpm-utils-template.php:38
 
 
 
 
1263
  msgid "Error! Failed to find a template path for the specified template: "
1264
  msgstr ""
1265
- "¡Error! Error al encontrar una ruta de plantilla para la plantilla "
1266
  "especificada: "
1267
 
1268
- #: simple-membership/classes/class.swpm-utils.php:100
1269
  msgid "Never"
1270
  msgstr "Nunca"
1271
 
1272
- #: simple-membership/classes/class.swpm-utils.php:115
1273
  msgid "Active"
1274
- msgstr "Activo"
1275
 
1276
- #: simple-membership/classes/class.swpm-utils.php:116
1277
  msgid "Inactive"
1278
  msgstr "Inactivo"
1279
 
1280
- #: simple-membership/classes/class.swpm-utils.php:117
 
 
 
 
1281
  msgid "Pending"
1282
  msgstr "Pendiente"
1283
 
1284
- #: simple-membership/classes/class.swpm-utils.php:118
1285
  msgid "Expired"
1286
  msgstr "Caducado"
1287
 
1288
- #: simple-membership/classes/class.swpm-utils.php:452
1289
  msgid "Delete Account"
1290
  msgstr "Borrar cuenta"
1291
 
1292
- #: simple-membership/classes/admin-includes/class.swpm-payment-buttons-list-table.php:75
1293
  msgid "Payment Button ID"
1294
  msgstr "ID del botón de pago"
1295
 
1296
- #: simple-membership/classes/admin-includes/class.swpm-payment-buttons-list-table.php:76
1297
  msgid "Payment Button Title"
1298
  msgstr "Título del botón de pago"
1299
 
1300
- #: simple-membership/classes/admin-includes/class.swpm-payment-buttons-list-table.php:77
1301
  msgid "Membership Level ID"
1302
  msgstr "ID de nivel de membresía"
1303
 
1304
- #: simple-membership/classes/admin-includes/class.swpm-payment-buttons-list-table.php:78
1305
  msgid "Button Type"
1306
  msgstr "Tipo de botón"
1307
 
1308
- #: simple-membership/classes/admin-includes/class.swpm-payment-buttons-list-table.php:79
1309
  msgid "Button Shortcode"
1310
- msgstr "Shortcode del botón"
1311
 
1312
- #: simple-membership/classes/admin-includes/class.swpm-payment-buttons-list-table.php:127
1313
- #: simple-membership/views/admin_members_list.php:9
1314
- #: simple-membership/views/payments/admin_all_payment_transactions.php:32
1315
  msgid "The selected entry was deleted!"
1316
  msgstr "¡La entrada seleccionada fue borrada!"
1317
 
1318
- #: simple-membership/classes/admin-includes/class.swpm-payments-admin-menu.php:21
1319
  msgid "Simple Membership::Payments"
1320
  msgstr "Simple Membership::Pagos"
1321
 
1322
- #: simple-membership/classes/admin-includes/class.swpm-payments-admin-menu.php:25
1323
  msgid "Transactions"
1324
  msgstr "Transacciones"
1325
 
1326
- #: simple-membership/classes/admin-includes/class.swpm-payments-admin-menu.php:26
1327
  msgid "Manage Payment Buttons"
1328
- msgstr "Manejo de botones de pago"
1329
 
1330
- #: simple-membership/classes/admin-includes/class.swpm-payments-admin-menu.php:27
1331
- #: simple-membership/views/payments/admin_payment_buttons.php:27
1332
  msgid "Create New Button"
1333
  msgstr "Crear nuevo botón"
1334
 
1335
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:57
 
1336
  msgid "View Profile"
1337
  msgstr "Ver perfil"
1338
 
1339
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:76
1340
  msgid "Row ID"
1341
- msgstr "ID de fila"
1342
 
1343
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:77
1344
- #: simple-membership/views/forgot_password.php:5
1345
  msgid "Email Address"
1346
  msgstr "Dirección de correo electrónico"
1347
 
1348
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:80
1349
  msgid "Member Profile"
1350
- msgstr "Perfil del miembro"
1351
-
1352
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:81
1353
- msgid "Date"
1354
- msgstr "Fecha"
1355
 
1356
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:82
1357
  msgid "Transaction ID"
1358
  msgstr "ID de transacción"
1359
 
1360
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:83
1361
  msgid "Subscriber ID"
1362
- msgstr "Identificación del suscriptor"
1363
 
1364
- #: simple-membership/classes/admin-includes/class.swpm-payments-list-table.php:84
1365
  msgid "Amount"
1366
  msgstr "Cantidad"
1367
 
1368
- #: simple-membership/classes/shortcode-related/class.swpm-shortcodes-handler.php:57
1369
  msgid "Your membership profile will be updated to reflect the payment."
1370
  msgstr "Tu perfil de membresía se actualizará para reflejar el pago."
1371
 
1372
- #: simple-membership/classes/shortcode-related/class.swpm-shortcodes-handler.php:58
1373
  msgid "Your profile username: "
1374
- msgstr "Nombre de usuario de su perfil: "
1375
 
1376
- #: simple-membership/classes/shortcode-related/class.swpm-shortcodes-handler.php:70
1377
  msgid "Click on the following link to complete the registration."
1378
  msgstr "Haga clic en el siguiente enlace para completar el registro."
1379
 
1380
- #: simple-membership/classes/shortcode-related/class.swpm-shortcodes-handler.php:71
1381
  msgid "Click here to complete your paid registration"
1382
  msgstr "Haz clic aquí para completar tu registro de pago"
1383
 
1384
- #: simple-membership/classes/shortcode-related/class.swpm-shortcodes-handler.php:76
1385
  msgid ""
1386
  "If you have just made a membership payment then your payment is yet to be "
1387
  "processed. Please check back in a few minutes. An email will be sent to you "
@@ -1391,61 +1906,142 @@ msgstr ""
1391
  "procesado. Por favor vuelve a revisarlo en unos minutos. Un correo "
1392
  "electrónico te será enviado con los detalles en breve."
1393
 
1394
- #: simple-membership/classes/shortcode-related/class.swpm-shortcodes-handler.php:90
1395
  msgid "Expiry: "
1396
  msgstr "Caducidad: "
1397
 
1398
- #: simple-membership/classes/shortcode-related/class.swpm-shortcodes-handler.php:92
1399
  msgid "You are not logged-in as a member"
1400
- msgstr "No has iniciado sesión como miembro"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1401
 
1402
- #: simple-membership/views/add.php:15 simple-membership/views/admin_add.php:19
1403
- #: simple-membership/views/admin_edit.php:39
1404
- #: simple-membership/views/edit.php:21 simple-membership/views/login.php:17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1405
  msgid "Password"
1406
  msgstr "Contraseña"
1407
 
1408
- #: simple-membership/views/add.php:19 simple-membership/views/edit.php:25
1409
  msgid "Repeat Password"
1410
  msgstr "Repetir contraseña"
1411
 
1412
- #: simple-membership/views/add.php:53
 
 
 
 
 
 
 
 
 
 
 
 
1413
  msgid "Register"
1414
  msgstr "Registrarse"
1415
 
1416
- #: simple-membership/views/admin_add.php:7
1417
  msgid "Create a brand new user and add it to this site."
1418
  msgstr "Crear un nuevo usuario y agregarlo a esta web."
1419
 
1420
- #: simple-membership/views/admin_add.php:11
1421
- #: simple-membership/views/admin_add.php:15
1422
- #: simple-membership/views/admin_add_level.php:12
1423
- #: simple-membership/views/admin_add_level.php:16
1424
- #: simple-membership/views/admin_add_level.php:20
1425
- #: simple-membership/views/admin_edit.php:14
1426
- #: simple-membership/views/admin_edit.php:35
1427
- #: simple-membership/views/admin_edit_level.php:16
1428
- #: simple-membership/views/admin_edit_level.php:20
1429
- #: simple-membership/views/admin_edit_level.php:24
1430
  msgid "(required)"
1431
  msgstr "(obligatorio)"
1432
 
1433
- #: simple-membership/views/admin_add.php:15
1434
- #: simple-membership/views/admin_edit.php:35
1435
  msgid "E-mail"
1436
  msgstr "Correo electrónico"
1437
 
1438
- #: simple-membership/views/admin_add.php:19
1439
  msgid "(twice, required)"
1440
  msgstr "(dos veces, obligatorio)"
1441
 
1442
- #: simple-membership/views/admin_add.php:24
1443
- #: simple-membership/views/admin_edit.php:43
1444
  msgid "Strength indicator"
1445
  msgstr "Indicador de fortaleza"
1446
 
1447
- #: simple-membership/views/admin_add.php:25
1448
- #: simple-membership/views/admin_edit.php:44
1449
  msgid ""
1450
  "Hint: The password should be at least seven characters long. To make it "
1451
  "stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
@@ -1455,251 +2051,373 @@ msgstr ""
1455
  "fuerte utiliza mayúsculas y minúsculas, números y símbolos como ! \" ? $ % ^ "
1456
  "&amp; )."
1457
 
1458
- #: simple-membership/views/admin_add.php:29
1459
- #: simple-membership/views/admin_edit.php:48
1460
- #: simple-membership/views/loggedin.php:10
1461
  msgid "Account Status"
1462
  msgstr "Estado de la cuenta"
1463
 
1464
- #: simple-membership/views/admin_add.php:39
1465
  msgid "Add New Member "
1466
  msgstr "Añadir nuevo miembro "
1467
 
1468
- #: simple-membership/views/admin_addon_settings.php:3
1469
  msgid ""
1470
  "Some of the simple membership plugin's addon settings and options will be "
1471
  "displayed here (if you have them)"
1472
  msgstr ""
1473
- "Algunos de los ajustes y opciones de complemento de simple membership plugin "
1474
- "se mostrarán aquí (si los tiene)"
1475
 
1476
- #: simple-membership/views/admin_addon_settings.php:8
1477
  msgid "Save Changes"
1478
  msgstr "Guardar cambios"
1479
 
1480
- #: simple-membership/views/admin_add_level.php:7
 
 
 
 
1481
  msgid "Create new membership level."
1482
  msgstr "Crear un nuevo nivel de membresía."
1483
 
1484
- #: simple-membership/views/admin_add_level.php:12
1485
- #: simple-membership/views/admin_edit_level.php:16
1486
  msgid "Membership Level Name"
1487
  msgstr "Nombre del nivel de membresía"
1488
 
1489
- #: simple-membership/views/admin_add_level.php:16
1490
- #: simple-membership/views/admin_edit_level.php:20
1491
  msgid "Default WordPress Role"
1492
  msgstr "Perfil por defecto de WordPress"
1493
 
1494
- #: simple-membership/views/admin_add_level.php:20
1495
- #: simple-membership/views/admin_edit_level.php:24
1496
  msgid "Access Duration"
1497
  msgstr "Duración del acceso"
1498
 
1499
- #: simple-membership/views/admin_add_level.php:23
1500
  msgid "No Expiry (Access for this level will not expire until cancelled"
1501
- msgstr "Sin caducidad (el acceso a este nivel no expirará hasta que se cancele"
1502
-
1503
- #: simple-membership/views/admin_add_level.php:24
1504
- #: simple-membership/views/admin_add_level.php:26
1505
- #: simple-membership/views/admin_add_level.php:28
1506
- #: simple-membership/views/admin_add_level.php:30
1507
- #: simple-membership/views/admin_edit_level.php:28
1508
- #: simple-membership/views/admin_edit_level.php:31
1509
- #: simple-membership/views/admin_edit_level.php:34
1510
- #: simple-membership/views/admin_edit_level.php:37
1511
  msgid "Expire After"
1512
- msgstr "Caducar después de"
1513
 
1514
- #: simple-membership/views/admin_add_level.php:25
1515
- #: simple-membership/views/admin_edit_level.php:29
1516
  msgid "Days (Access expires after given number of days)"
1517
  msgstr "Días (el acceso caduca después del número establecido de días)"
1518
 
1519
- #: simple-membership/views/admin_add_level.php:27
1520
  msgid "Weeks (Access expires after given number of weeks"
1521
  msgstr "Semanas (el acceso caduca después del número establecido de semanas"
1522
 
1523
- #: simple-membership/views/admin_add_level.php:29
1524
- #: simple-membership/views/admin_edit_level.php:35
1525
  msgid "Months (Access expires after given number of months)"
1526
- msgstr "Meses (el acceso caduca después del número establecido de meses)"
1527
 
1528
- #: simple-membership/views/admin_add_level.php:31
1529
- #: simple-membership/views/admin_edit_level.php:38
1530
  msgid "Years (Access expires after given number of years)"
1531
  msgstr "Años (el acceso caduca después del número establecido de años)"
1532
 
1533
- #: simple-membership/views/admin_add_level.php:32
1534
- #: simple-membership/views/admin_edit_level.php:40
1535
  msgid "Fixed Date Expiry"
1536
- msgstr "Fecha de caducidad"
1537
 
1538
- #: simple-membership/views/admin_add_level.php:33
1539
- #: simple-membership/views/admin_edit_level.php:41
1540
  msgid "(Access expires on a fixed date)"
1541
  msgstr "(El acceso caduca en una fecha establecida)"
1542
 
1543
- #: simple-membership/views/admin_add_level.php:39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1544
  msgid "Add New Membership Level "
1545
  msgstr "Añadir nuevo nivel de membresía "
1546
 
1547
- #: simple-membership/views/admin_add_ons_page.php:7
1548
  msgid "Simple WP Membership::Add-ons"
1549
  msgstr "Simple WP Membership::Extensiones"
1550
 
1551
- #: simple-membership/views/admin_category_list.php:5
1552
  msgid ""
1553
  "First of all, globally protect the category on your site by selecting "
1554
  "\"General Protection\" from the drop-down box below and then select the "
1555
  "categories that should be protected from non-logged in users."
1556
  msgstr ""
1557
- "Primero, proteja las categorías de su sitio seleccionando \"Protección "
1558
- "general\" en el siguiente desplegable y marque las categorías que desea "
1559
- "proteger de los usuarios no registrados."
1560
 
1561
- #: simple-membership/views/admin_category_list.php:8
1562
  msgid ""
1563
  "Next, select an existing membership level from the drop-down box below and "
1564
  "then select the categories you want to grant access to (for that particular "
1565
  "membership level)."
1566
  msgstr ""
1567
- "A continuación, seleccione un nivel de membresía existente en el cuadro "
1568
- "desplegable de abajo y, a continuación, seleccione las categorías a las que "
1569
- "desea conceder acceso (para ese nivel de membresía en particular)."
 
 
 
 
 
 
 
 
1570
 
1571
- #: simple-membership/views/admin_category_list.php:17
1572
  msgid "Membership Level:"
1573
  msgstr "Nivel de membresía:"
1574
 
1575
- #: simple-membership/views/admin_category_list.php:23
1576
- #: simple-membership/views/edit.php:68
 
 
 
 
1577
  msgid "Update"
1578
  msgstr "Actualizar"
1579
 
1580
- #: simple-membership/views/admin_edit.php:6
1581
  msgid "Edit Member"
1582
  msgstr "Editar usuario"
1583
 
1584
- #: simple-membership/views/admin_edit.php:8
1585
  msgid "Edit existing member details."
1586
  msgstr "Editar detalles de los miembros existentes."
1587
 
1588
- #: simple-membership/views/admin_edit.php:9
1589
  msgid " You are currenty editing member with member ID: "
1590
- msgstr " Actualmente está editando un miembro con el ID de miembro "
1591
 
1592
- #: simple-membership/views/admin_edit.php:39
1593
  msgid "(twice, leave empty to retain old password)"
1594
- msgstr "(dos veces, dejar en blanco para conservar la contraseña actual)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1595
 
1596
- #: simple-membership/views/admin_edit.php:55
1597
  msgid "Notify User"
1598
  msgstr "Notificar al usuario"
1599
 
1600
- #: simple-membership/views/admin_edit.php:62
 
 
 
 
 
 
 
 
 
1601
  msgid "Subscriber ID/Reference"
1602
- msgstr "ID/Referencia del suscriptor"
1603
 
1604
- #: simple-membership/views/admin_edit.php:66
1605
  msgid "Last Accessed Date"
1606
- msgstr "Último fecha de acceso"
1607
 
1608
- #: simple-membership/views/admin_edit.php:69
1609
- #: simple-membership/views/admin_edit.php:76
1610
  msgid "This value gets updated when this member logs into your site."
1611
- msgstr "Este valor se actualiza cuando este miembro inicia sesión en su sitio."
1612
 
1613
- #: simple-membership/views/admin_edit.php:73
1614
  msgid "Last Accessed From IP"
1615
- msgstr "Último acceso desde la IP"
1616
 
1617
- #: simple-membership/views/admin_edit.php:84
1618
- msgid "Edit User "
1619
- msgstr "Editar usuario "
1620
 
1621
- #: simple-membership/views/admin_edit.php:89
1622
  msgid "Delete User Profile"
1623
  msgstr "Eliminar perfil del usuario"
1624
 
1625
- #: simple-membership/views/admin_edit_level.php:6
1626
  msgid "Edit membership level"
1627
  msgstr "Editar nivel de membresía"
1628
 
1629
- #: simple-membership/views/admin_edit_level.php:9
1630
  msgid ""
1631
  "You can edit details of a selected membership level from this interface. "
1632
  msgstr ""
1633
- "Puede editar detalles de un nivel de pertenencia seleccionado desde esta "
1634
  "interfaz. "
1635
 
1636
- #: simple-membership/views/admin_edit_level.php:10
1637
  msgid "You are currently editing: "
1638
- msgstr "En este momento está editando: "
1639
 
1640
- #: simple-membership/views/admin_edit_level.php:27
1641
  msgid "No Expiry (Access for this level will not expire until cancelled)"
1642
  msgstr "Sin caducidad (el acceso a este nivel no expirará hasta que se anule)"
1643
 
1644
- #: simple-membership/views/admin_edit_level.php:32
1645
  msgid "Weeks (Access expires after given number of weeks)"
1646
- msgstr "Semanas (el acceso expirará después del número establecido de semanas)"
 
 
 
 
 
 
 
 
 
 
 
1647
 
1648
- #: simple-membership/views/admin_edit_level.php:47
1649
- msgid "Edit Membership Level "
1650
- msgstr "Editar nivel de membresía "
1651
 
1652
- #: simple-membership/views/admin_membership_manage.php:18
1653
  msgid "Example Content Protection Settings"
1654
- msgstr "Ejemplo de Ajustes de contenido protegido"
1655
 
1656
- #: simple-membership/views/admin_member_form_common_part.php:23
 
 
 
 
 
 
 
 
 
1657
  msgid "Gender"
1658
- msgstr "Sexo"
1659
 
1660
- #: simple-membership/views/admin_member_form_common_part.php:30
1661
- #: simple-membership/views/edit.php:37
1662
  msgid "Phone"
1663
  msgstr "Teléfono"
1664
 
1665
- #: simple-membership/views/admin_member_form_common_part.php:34
1666
- #: simple-membership/views/edit.php:41
1667
  msgid "Street"
1668
  msgstr "Calle"
1669
 
1670
- #: simple-membership/views/admin_member_form_common_part.php:38
1671
- #: simple-membership/views/edit.php:45
1672
  msgid "City"
1673
  msgstr "Ciudad"
1674
 
1675
- #: simple-membership/views/admin_member_form_common_part.php:42
1676
- #: simple-membership/views/edit.php:49
1677
  msgid "State"
1678
  msgstr "Región"
1679
 
1680
- #: simple-membership/views/admin_member_form_common_part.php:46
1681
- #: simple-membership/views/edit.php:53
1682
  msgid "Zipcode"
1683
  msgstr "Código postal"
1684
 
1685
- #: simple-membership/views/admin_member_form_common_part.php:50
1686
- #: simple-membership/views/edit.php:57
1687
  msgid "Country"
1688
  msgstr "País"
1689
 
1690
- #: simple-membership/views/admin_member_form_common_part.php:54
 
1691
  msgid "Company"
1692
- msgstr "Empresa o institución"
1693
 
1694
- #: simple-membership/views/admin_member_form_common_part.php:58
 
1695
  msgid "Member Since"
1696
  msgstr "Miembro desde"
1697
 
1698
- #: simple-membership/views/admin_tools_settings.php:6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1699
  msgid "Generate a Registration Completion link"
1700
- msgstr "Generar un enlace para completar el registro"
1701
 
1702
- #: simple-membership/views/admin_tools_settings.php:9
1703
  msgid ""
1704
  "You can manually generate a registration completion link here and give it to "
1705
  "your customer if they have missed the email that was automatically sent out "
@@ -1709,365 +2427,601 @@ msgstr ""
1709
  "enviárselo al usuario si ha perdido el correo electrónico que se les envía "
1710
  "después del pago."
1711
 
1712
- #: simple-membership/views/admin_tools_settings.php:14
1713
  msgid "Generate Registration Completion Link"
1714
- msgstr "Generar enlace para completar el registro"
1715
 
1716
- #: simple-membership/views/admin_tools_settings.php:15
1717
  msgid "For a Particular Member ID"
1718
- msgstr "Para una identidad de miembro particular"
1719
 
1720
- #: simple-membership/views/admin_tools_settings.php:17
1721
  msgid "OR"
1722
  msgstr "O"
1723
 
1724
- #: simple-membership/views/admin_tools_settings.php:18
1725
  msgid "For All Incomplete Registrations"
1726
- msgstr "Para todas las inscripciones incompletas"
1727
 
1728
- #: simple-membership/views/admin_tools_settings.php:23
1729
  msgid "Send Registration Reminder Email Too"
1730
- msgstr "Enviar mensaje recordatorio de registro de correo electrónico también"
1731
 
1732
- #: simple-membership/views/admin_tools_settings.php:29
1733
  msgid "Submit"
1734
  msgstr "Enviar"
1735
 
1736
- #: simple-membership/views/admin_tools_settings.php:38
1737
  msgid ""
1738
  "Link(s) generated successfully. The following link(s) can be used to "
1739
  "complete the registration."
1740
  msgstr ""
1741
- "Enlace (es) generado correctamente. Los siguientes enlace (es) pueden ser "
1742
  "utilizados para completar el registro."
1743
 
1744
- #: simple-membership/views/admin_tools_settings.php:40
1745
  msgid "Registration completion links will appear below"
1746
- msgstr "Los enlaces de finalización del registro aparecerán a continuación"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1747
 
1748
- #: simple-membership/views/edit.php:22 simple-membership/views/edit.php:26
1749
  msgid "Leave empty to keep the current password"
1750
  msgstr "Dejar vacío para guardar la contraseña actual"
1751
 
1752
- #: simple-membership/views/forgot_password.php:12
 
 
 
 
1753
  msgid "Reset Password"
1754
- msgstr "Restablecer contraseña"
1755
 
1756
- #: simple-membership/views/loggedin.php:6
1757
  msgid "Logged in as"
1758
  msgstr "Conectado como"
1759
 
1760
- #: simple-membership/views/loggedin.php:14
1761
  msgid "Membership"
1762
  msgstr "Membresía"
1763
 
1764
- #: simple-membership/views/loggedin.php:18
1765
  msgid "Account Expiry"
1766
- msgstr "Válido hasta"
1767
 
1768
- #: simple-membership/views/loggedin.php:22
1769
- msgid "Logout"
1770
- msgstr "Cerrar sesión"
1771
 
1772
- #: simple-membership/views/login.php:11
1773
  msgid "Username or Email"
1774
  msgstr "Nombre de usuario o correo electrónico"
1775
 
1776
- #: simple-membership/views/login.php:24
1777
  msgid "Remember Me"
1778
  msgstr "Recuérdame"
1779
 
1780
- #: simple-membership/views/login.php:33
1781
- msgid "Forgot Password"
1782
- msgstr "Olvidaste la contraseña"
1783
 
1784
- #: simple-membership/views/payments/admin_all_payment_transactions.php:6
1785
  msgid "All the payments/transactions of your members are recorded here."
1786
  msgstr "Todos los pagos/transacciones de sus miembros se registran aquí."
1787
 
1788
- #: simple-membership/views/payments/admin_all_payment_transactions.php:12
1789
  msgid "Search for a transaction by using email or name"
1790
- msgstr "Buscar una transacción por el correo electrónico o el nombre"
1791
 
1792
- #: simple-membership/views/payments/admin_create_payment_buttons.php:15
1793
  msgid ""
1794
  "You can create new payment button for your memberships using this interface."
1795
  msgstr ""
1796
- "Puedes crear un nuevo botón de pago para sus membresías utilizando esta "
1797
  "interfaz."
1798
 
1799
- #: simple-membership/views/payments/admin_create_payment_buttons.php:23
1800
  msgid "Select Payment Button Type"
1801
  msgstr "Selecciona el tipo de botón de pago"
1802
 
1803
- #: simple-membership/views/payments/admin_create_payment_buttons.php:26
1804
  msgid "PayPal Buy Now"
1805
- msgstr "PayPal Comprar ahora"
1806
 
1807
- #: simple-membership/views/payments/admin_create_payment_buttons.php:28
1808
  msgid "PayPal Subscription"
1809
  msgstr "Suscripción de PayPal"
1810
 
1811
- #: simple-membership/views/payments/admin_create_payment_buttons.php:30
 
 
 
 
1812
  msgid "Stripe Buy Now"
1813
- msgstr "Stripe Comprar ahora"
 
 
 
 
1814
 
1815
- #: simple-membership/views/payments/admin_create_payment_buttons.php:32
1816
  msgid "Braintree Buy Now"
1817
  msgstr "Braintree comprar ahora"
1818
 
1819
- #: simple-membership/views/payments/admin_create_payment_buttons.php:39
1820
  msgid "Next"
1821
  msgstr "Siguiente"
1822
 
1823
- #: simple-membership/views/payments/admin_edit_payment_buttons.php:13
1824
  msgid "You can edit a payment button using this interface."
1825
  msgstr "Puede editar un botón de pago utilizando esta interfaz."
1826
 
1827
- #: simple-membership/views/payments/admin_payment_buttons.php:6
1828
  msgid ""
1829
  "All the membership buttons that you created in the plugin are displayed here."
1830
  msgstr ""
1831
  "Todos los botones de miembros que ha creado en el plugin se muestran aquí."
1832
 
1833
- #: simple-membership/views/payments/admin_payment_settings.php:21
1834
  msgid "Error! The membership level ID ("
1835
  msgstr "¡Error! El ID de nivel de miembro ("
1836
 
1837
- #: simple-membership/views/payments/admin_payment_settings.php:27
 
 
 
 
 
 
 
 
1838
  msgid "PayPal Integration Settings"
1839
- msgstr "Ajustes de integración con Paypal"
1840
 
1841
- #: simple-membership/views/payments/admin_payment_settings.php:30
1842
  msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
1843
- msgstr "Generar código de \"Variables avanzados\" para su botón de PayPal"
1844
 
1845
- #: simple-membership/views/payments/admin_payment_settings.php:33
1846
  msgid "Enter the Membership Level ID"
1847
  msgstr "Introduce el ID de nivel de membresía"
1848
 
1849
- #: simple-membership/views/payments/admin_payment_settings.php:35
1850
  msgid "Generate Code"
1851
  msgstr "Generar código"
1852
 
1853
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:22
1854
  msgid "Braintree Buy Now Button Configuration"
1855
  msgstr "Configuración del botón de Braintree Compre Ahora"
1856
 
1857
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:34
1858
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:201
1859
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:291
1860
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:245
 
 
1861
  msgid "Button ID"
1862
  msgstr "ID de botón"
1863
 
1864
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:42
1865
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:26
1866
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:209
1867
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:27
1868
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:299
1869
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:39
1870
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:252
 
 
1871
  msgid "Button Title"
1872
  msgstr "Titulo del botón"
1873
 
1874
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:60
1875
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:44
1876
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:227
1877
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:57
1878
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:268
 
1879
  msgid "Payment Amount"
1880
- msgstr "Importe a pagar"
1881
 
1882
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:68
1883
  msgid ""
1884
  "Braintree API key and account details. You can get this from your Braintree "
1885
  "account."
1886
  msgstr ""
1887
- "Clave API de Braintree y detalles de la cuenta. Puede obtener esta "
1888
- "información de su cuenta de Braintree."
1889
 
1890
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:72
1891
  msgid "Merchant ID"
1892
- msgstr "Identificación del comerciante"
1893
 
1894
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:80
1895
  msgid "Public Key"
1896
- msgstr "Clave publica"
1897
 
1898
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:87
1899
  msgid "Private Key"
1900
- msgstr "Clave privada"
1901
 
1902
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:95
1903
  msgid "Merchant Account ID"
1904
- msgstr "ID de cuenta de comerciante"
1905
 
1906
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:113
1907
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:137
1908
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:347
1909
  msgid "The following details are optional."
1910
  msgstr "Los siguientes detalles son opcionales."
1911
 
1912
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:117
1913
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:91
1914
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:274
1915
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:171
1916
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:443
1917
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:141
1918
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:351
 
 
1919
  msgid "Return URL"
1920
  msgstr "URL de retorno"
1921
 
1922
- #: simple-membership/views/payments/payment-gateway/admin_braintree_buy_now_button.php:127
1923
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:117
1924
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:300
1925
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:191
1926
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:463
1927
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:151
1928
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:361
 
 
1929
  msgid "Save Payment Data"
1930
- msgstr "Guardar datos de pago"
1931
 
1932
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:16
1933
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:192
1934
  msgid "PayPal Buy Now Button Configuration"
1935
- msgstr "Configuración del botón de PayPal Cómpralo Ya"
1936
-
1937
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:52
1938
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:235
1939
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:45
1940
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:317
1941
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:65
1942
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:275
 
1943
  msgid "Payment Currency"
1944
  msgstr "Moneda de pago"
1945
 
1946
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:99
1947
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:282
1948
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:84
1949
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:356
1950
  msgid "PayPal Email"
1951
  msgstr "Correo electrónico de PayPal"
1952
 
1953
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:107
1954
- #: simple-membership/views/payments/payment-gateway/admin_paypal_buy_now_button.php:290
1955
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:179
1956
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:451
 
1957
  msgid "Button Image URL"
1958
- msgstr "URL de la imagen del Botón"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1959
 
1960
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:18
1961
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:285
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1962
  msgid "PayPal Subscription Button Configuration"
1963
- msgstr "Configuración del botón de suscripción de PayPal"
1964
 
1965
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:92
1966
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:364
1967
  msgid "Billing Amount Each Cycle"
1968
  msgstr "Importe facturado cada ciclo"
1969
 
1970
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:100
1971
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:372
1972
  msgid "Billing Cycle"
1973
  msgstr "Ciclo de facturación"
1974
 
1975
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:113
1976
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:385
1977
  msgid "Billing Cycle Count"
1978
  msgstr "Cuenta del ciclo de facturación"
1979
 
1980
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:121
1981
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:393
1982
  msgid "Re-attempt on Failure"
1983
  msgstr "Reintentar en caso de fallo"
1984
 
1985
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:134
1986
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:406
1987
  msgid ""
1988
  "Trial Billing Details (Leave empty if you are not offering a trial period)"
1989
  msgstr ""
1990
- "Detalles de facturación de prueba (Deje en blanco si no está ofreciendo un "
1991
  "período de prueba)"
1992
 
1993
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:140
1994
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:412
1995
  msgid "Trial Billing Amount"
1996
  msgstr "Importe del periodo de prueba"
1997
 
1998
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:148
1999
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:420
2000
  msgid "Trial Billing Period"
2001
  msgstr "Período de facturación de prueba"
2002
 
2003
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:165
2004
- #: simple-membership/views/payments/payment-gateway/admin_paypal_subscription_button.php:437
 
2005
  msgid "Optional Details"
2006
  msgstr "Detalles opcionales"
2007
 
2008
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:29
2009
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:236
2010
  msgid "Stripe Buy Now Button Configuration"
2011
- msgstr "Configuración del botón Comprar ahora de Stripe"
2012
 
2013
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:104
2014
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:314
2015
  msgid "Stripe API keys. You can get this from your Stripe account."
2016
- msgstr "Las claves del API Stripe. Puede obtener esto de su cuenta de Stripe."
2017
-
2018
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:108
2019
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:318
2020
- msgid "Test Secret Key"
2021
- msgstr "Clave secreta de prueba"
2022
 
2023
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:115
2024
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:325
 
2025
  msgid "Test Publishable Key"
2026
- msgstr "Clave publicable de prueba"
2027
 
2028
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:122
2029
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:332
2030
- msgid "Live Secret Key"
2031
- msgstr "Clave secreta en vivo"
 
2032
 
2033
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:129
2034
- #: simple-membership/views/payments/payment-gateway/admin_stripe_buy_now_button.php:339
 
2035
  msgid "Live Publishable Key"
2036
  msgstr "Clave publicable en vivo"
2037
 
2038
- #: simple-membership/views/payments/payment-gateway/braintree_button_shortcode_view.php:20
2039
- #: simple-membership/views/payments/payment-gateway/paypal_button_shortcode_view.php:86
2040
- #: simple-membership/views/payments/payment-gateway/paypal_button_shortcode_view.php:88
2041
- #: simple-membership/views/payments/payment-gateway/stripe_button_shortcode_view.php:20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2042
  msgid "Buy Now"
2043
  msgstr "Compra ahora"
2044
 
2045
- #: simple-membership/views/payments/payment-gateway/paypal_button_shortcode_view.php:216
2046
- #: simple-membership/views/payments/payment-gateway/paypal_button_shortcode_view.php:218
2047
  msgid "Subscribe Now"
2048
  msgstr "Suscríbete ahora"
2049
 
 
 
 
 
 
 
 
 
 
2050
  #: Translation strings from addons === Form builder addon
2051
- msgid "Type password Here"
2052
- msgstr "Escribe la contraseña aquí"
2053
 
2054
- msgid "Retype password Here"
2055
- msgstr "Volver a escribir la contraseña aquí"
2056
 
2057
  msgid "Registration is complete. You can now log into the site."
2058
- msgstr "El registro está completo. Ahora puede acceder a su sitio."
2059
 
2060
  msgid " Field has invalid character"
2061
  msgstr " El campo tiene un carácter no válido"
2062
 
2063
  msgid " Password does not match"
2064
- msgstr " Las contraseñas no coinciden"
2065
 
2066
  msgid "Already taken."
2067
- msgstr "Ya tomadas."
2068
 
2069
  msgid "Street Address"
2070
- msgstr "Dirección"
2071
 
2072
  msgid "Apt, Suite, Bldg. (optional)"
2073
  msgstr "Apt, Suite, Edificio. (Opcional)"
@@ -2082,189 +3036,91 @@ msgid ""
2082
  "Check this box to delete the image. The image will be deleted when you save "
2083
  "the profile."
2084
  msgstr ""
2085
- "Marque esta casilla para eliminar la imagen. La imagen se borrará cuando "
2086
- "guarde el perfil."
2087
-
2088
- #: === Partial protection addon strings
2089
- msgid "You do not have permission to view this content."
2090
- msgstr "No tienes permiso para ver este contenido."
2091
-
2092
- msgid "Your membership level does not have permission to view this content."
2093
- msgstr "Su nivel de afiliación no tiene permiso para ver este contenido."
2094
-
2095
- msgid "This content is for members only."
2096
- msgstr "Este contenido es solo para miembros."
2097
 
2098
- #~ msgid "Manage Content Production"
2099
- #~ msgstr "Gestionar la producción de contenido"
2100
 
2101
- #~ msgid "smp7, wp.insider"
2102
- #~ msgstr "smp7, wp.insider"
2103
-
2104
- #~ msgid ""
2105
- #~ "A flexible, well-supported, and easy-to-use WordPress membership plugin "
2106
- #~ "for offering free and premium content from your WordPress site."
2107
- #~ msgstr ""
2108
- #~ "Un plugin de membresía WordPress flexible, bien soportado y fácil de usar "
2109
- #~ "para ofrecer contenido gratuito y de pago desde su sitio de WordPress."
2110
-
2111
- #~ msgid "https://simple-membership-plugin.com/"
2112
- #~ msgstr "https://simple-membership-plugin.com/"
2113
-
2114
- #~ msgid "Simple WordPress Membership"
2115
- #~ msgstr "WordPress Simple Membership"
2116
-
2117
- #~ msgid "Send Registration Reminder Email too"
2118
- #~ msgstr "Enviar mensaje de recordatorio de correo electrónico también"
2119
-
2120
- #~ msgid "Registration Completion Links Will Appear Below:"
2121
- #~ msgstr "Los enlaces para completar el registro aparecen a continuación:"
2122
-
2123
- #~ msgid "For All Pending Registrations"
2124
- #~ msgstr "Para todos los registros pendientes"
2125
-
2126
- #~ msgid "Membership level"
2127
- #~ msgstr "Nivel de membresía"
2128
-
2129
- #~ msgid "search"
2130
- #~ msgstr "buscar"
2131
-
2132
- #~ msgid "Edit membership level."
2133
- #~ msgstr "Editar nivel de membresía."
2134
-
2135
- #~ msgid "Simple WP Membership::Categories"
2136
- #~ msgstr "Simple WP Membership::Categorías"
2137
-
2138
- #~ msgid "User name"
2139
- #~ msgstr "Nombre de usuario"
2140
-
2141
- #~ msgid "Select All"
2142
- #~ msgstr "Seleccionar Todo"
2143
-
2144
- #~ msgid "Go to the last page"
2145
- #~ msgstr "Ir a la última página"
2146
-
2147
- #~ msgid "Go to the next page"
2148
- #~ msgstr "Ir a la página siguiente"
2149
-
2150
- #~ msgctxt "paging"
2151
- #~ msgid "%1$s of %2$s"
2152
- #~ msgstr "%1$s de %2$s"
2153
-
2154
- #~ msgid "Current page"
2155
- #~ msgstr "Página actual"
2156
-
2157
- #~ msgid "Select Page"
2158
- #~ msgstr "Seleccionar Página"
2159
-
2160
- #~ msgid "Go to the previous page"
2161
- #~ msgstr "Ir a la página anterior"
2162
-
2163
- #~ msgid "Go to the first page"
2164
- #~ msgstr "Ir a la primera página"
2165
-
2166
- #~ msgid "1 item"
2167
- #~ msgid_plural "%s items"
2168
- #~ msgstr[0] "1 elemento"
2169
- #~ msgstr[1] "%s elementos"
2170
-
2171
- #~ msgid "%s pending"
2172
- #~ msgstr "%s pendientes"
2173
 
2174
- #~ msgid "%1$s %2$d"
2175
- #~ msgstr "%1$s %2$d"
2176
 
2177
- #~ msgid "All dates"
2178
- #~ msgstr "Todas las fechas"
2179
 
2180
- #~ msgid "Filter by date"
2181
- #~ msgstr "Filtrar por fecha"
2182
 
2183
- #~ msgid "Apply"
2184
- #~ msgstr "Aplicar"
2185
 
2186
- #~ msgid "Bulk Actions"
2187
- #~ msgstr "Acciones Masivas"
 
2188
 
2189
- #~ msgid "Select bulk action"
2190
- #~ msgstr "Seleccionar acción masiva"
2191
 
2192
- #~ msgid "No items found."
2193
- #~ msgstr "No se han encontrado elementos."
2194
 
2195
- #~ msgid "Excerpt View"
2196
- #~ msgstr "Vista de extracto"
2197
 
2198
- #~ msgid "List View"
2199
- #~ msgstr "Vista de lista"
 
2200
 
2201
- #~ msgid "Send Notification To Admin"
2202
- #~ msgstr "Enviar notificación al administrador"
 
2203
 
2204
- #~ msgid ""
2205
- #~ "WordPress shows an admin toolbar to the logged in users of the site. "
2206
- #~ "Check this box if you want to hide that admin toolbar in the fronend of "
2207
- #~ "your site."
2208
- #~ msgstr ""
2209
- #~ "WordPress muestra una barra de herramientas de administración para los "
2210
- #~ "usuarios registrados en el sitio. Marque esta casilla si desea ocultar la "
2211
- #~ "barra de herramientas de administración en el frontend de su sitio."
2212
 
2213
- #~ msgid "Updated Successfully."
2214
- #~ msgstr "Actualizado correctamente."
 
2215
 
2216
- #~ msgid "No Member found."
2217
- #~ msgstr "No se han encontrado miembros."
 
2218
 
2219
- #~ msgid "User Name"
2220
- #~ msgstr "Nombre de Usuario"
 
2221
 
2222
- #~ msgid "No user not found with that email address."
2223
- #~ msgstr ""
2224
- #~ "No se ha encontrado ningún usuario con esa dirección de correo "
2225
- #~ "electrónico."
2226
 
2227
- #~ msgid "User name already exists."
2228
- #~ msgstr "Nombre de usuario ya existe."
2229
 
2230
- #~ msgid "User name contains invalid character"
2231
- #~ msgstr "El nombre de usuario contiene carácteres no válidos"
2232
 
2233
- #~ msgid "User name is required"
2234
- #~ msgstr "Debes escribir un nombre de usuario."
2235
 
2236
- #~ msgid ""
2237
- #~ "Wordpress account exists with given email. But given user name doesn't "
2238
- #~ "match."
2239
- #~ msgstr ""
2240
- #~ "Existe una cuenta con el correo electrónico proporcionado, pero el nombre "
2241
- #~ "del usuario no coincide."
2242
 
2243
  #~ msgid ""
2244
- #~ "Wordpress account exists with given user name. But given email doesn't "
2245
- #~ "match."
2246
  #~ msgstr ""
2247
- #~ "Ya existe una cuenta con este nombre de usuario, pero el correo "
2248
- #~ "electrónico proporcionado no coincide."
2249
-
2250
- #~ msgid "Updated! "
2251
- #~ msgstr "¡Actualizado!"
2252
-
2253
- #~ msgid "Name"
2254
- #~ msgstr "Nombre"
2255
 
2256
- #~ msgid "Sorry! Something went wrong"
2257
- #~ msgstr "¡Lo lamento! Algo salió mal"
2258
-
2259
- #~ msgid "Invalid User Name"
2260
- #~ msgstr "Nombre de usuario incorrecto"
2261
-
2262
- #~ msgid "Registration Successful."
2263
- #~ msgstr "Registrado con éxito"
2264
 
2265
- #~ msgid ""
2266
- #~ "Your account has expired. Please renew your account to gain access to "
2267
- #~ "this content."
2268
- #~ msgstr ""
2269
- #~ "Tu cuenta ha caducado. Por favor, renueva tu cuenta para obtener acceso a "
2270
- #~ "éste contenido."
3
  msgid ""
4
  msgstr ""
5
  "Project-Id-Version: Plugins - Simple Membership - Development (trunk)\n"
6
+ "POT-Creation-Date: 2019-05-26 13:48+0600\n"
7
+ "PO-Revision-Date: 2019-10-04 08:32+1000\n"
8
  "Last-Translator: \n"
9
  "Language-Team: \n"
10
  "Language: es\n"
12
  "Content-Type: text/plain; charset=UTF-8\n"
13
  "Content-Transfer-Encoding: 8bit\n"
14
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
15
+ "X-Generator: Poedit 2.2.4\n"
16
 
17
+ #: classes/class.simple-wp-membership.php:180
18
  msgid "The admin of this site does not allow users to access the wp dashboard."
19
  msgstr ""
20
+ "El administrador de este sitio no permite a los usuarios acceso al "
21
  "escritorio de wp."
22
 
23
+ #: classes/class.simple-wp-membership.php:181
24
  msgid "Go back to the home page by "
25
+ msgstr "Volver a la página de inicio por "
26
 
27
+ #: classes/class.simple-wp-membership.php:181
28
  msgid "clicking here"
29
  msgstr "haciendo clic aquí"
30
 
31
+ #: classes/class.simple-wp-membership.php:242
32
+ msgid ""
33
+ "Error! This site has the force WP user login feature enabled in the "
34
+ "settings. We could not find a WP user record for the given username: "
35
+ msgstr ""
36
+ "¡Error! Este sitio tiene activado en los ajustes la característica de forzar "
37
+ "el acceso al usuario de WP. No se ha podido encontrar un registro de usuario "
38
+ "de WP para el nombre de usuario dado: "
39
+
40
+ #: classes/class.simple-wp-membership.php:243
41
+ msgid ""
42
+ "This error is triggered when a member account doesn't have a corresponding "
43
+ "WP user account. So the plugin fails to log the user into the WP User system."
44
+ msgstr ""
45
+ "Este error se desencadena cuando una cuenta de miembro no tiene una cuenta "
46
+ "de usuario de WP correspondiente. Por lo tanto, el plugin no puede registrar "
47
+ "al usuario en el sistema de usuario de WP."
48
+
49
+ #: classes/class.simple-wp-membership.php:244
50
+ msgid ""
51
+ "Contact the site admin and request them to check your username in the WP "
52
+ "Users menu to see what happened with the WP user entry of your account."
53
+ msgstr ""
54
+ "Ponte en contacto con el administrador del sitio y solicita que verifique tu "
55
+ "nombre de usuario en el menú Usuarios de WP para ver qué sucedió con la "
56
+ "entrada de usuario de WP de tu cuenta."
57
+
58
+ #: classes/class.simple-wp-membership.php:245
59
+ msgid ""
60
+ "The site admin can disable the Force WP User Synchronization feature in the "
61
+ "settings to disable this feature and this error will go away."
62
+ msgstr ""
63
+ "El administrador del sitio puede desactivar la característica de forzar la "
64
+ "sincronización del usuario de WP en los ajustes para desactivar esta "
65
+ "característica y este error desaparecerá."
66
+
67
+ #: classes/class.simple-wp-membership.php:246
68
+ msgid "You can use the back button of your browser to go back to the site."
69
+ msgstr "Puedes usar el botón de atrás en tu navegador para volver al sitio."
70
+
71
+ #: classes/class.simple-wp-membership.php:407
72
  msgid "You are not logged in."
73
  msgstr "No estás conectado."
74
 
75
+ #: classes/class.simple-wp-membership.php:458
76
  msgid ""
77
  "You have the sandbox payment mode enabled in plugin settings. Make sure to "
78
  "turn off the sandbox mode when you want to do live transactions."
79
  msgstr ""
80
+ "Tienes activado el modo de pago de sandbox en los ajustes del plugin. "
81
+ "Asegúrate de desactivar el modo de sandbox cuando deseas realizar "
82
  "transacciones en vivo."
83
 
84
+ #: classes/class.simple-wp-membership.php:473
85
  msgid "Simple WP Membership Protection"
86
  msgstr "Protección de Simple WP Membership"
87
 
88
+ #: classes/class.simple-wp-membership.php:485
89
  msgid "Simple Membership Protection options"
90
  msgstr "Opciones de protección de Simple Membership"
91
 
92
+ #: classes/class.simple-wp-membership.php:503
93
  msgid "Do you want to protect this content?"
94
  msgstr "¿Quieres proteger este contenido?"
95
 
96
+ #: classes/class.simple-wp-membership.php:504
97
+ msgid "No, Do not protect this content."
98
+ msgstr "No, no protejas este contenido."
99
+
100
+ #: classes/class.simple-wp-membership.php:505
101
+ msgid "Yes, Protect this content."
102
+ msgstr "Si, protege este contenido."
103
+
104
+ #: classes/class.simple-wp-membership.php:508
105
  msgid "Select the membership level that can access this content:"
106
+ msgstr "Selecciona el nivel de membresía que puede acceder a este contenido:"
 
107
 
108
+ #: classes/class.simple-wp-membership.php:646
109
+ #: classes/class.simple-wp-membership.php:650
110
  msgid "Validating, please wait"
111
  msgstr "Validando, por favor espere"
112
 
113
+ #: classes/class.simple-wp-membership.php:653
114
  msgid "Invalid email address"
115
+ msgstr "Dirección de correo electrónico no válido"
116
 
117
+ #: classes/class.simple-wp-membership.php:656
118
  msgid "This field is required"
119
+ msgstr "Este campo es requerido"
120
+
121
+ msgid "Password must contain at least:"
122
+ msgstr "La contraseña debe contener al menos:"
123
+
124
+ msgid "- a digit"
125
+ msgstr "- un dígito"
126
 
127
+ msgid "- an uppercase letter"
128
+ msgstr "- una letra mayúscula"
129
+
130
+ msgid "- a lowercase letter"
131
+ msgstr "- una letra minúscula"
132
+
133
+ #: classes/class.simple-wp-membership.php:659 classes/class.swpm-auth.php:296
134
  msgid "Invalid Username"
135
+ msgstr "Nombre de usuario no valido"
136
+
137
+ #: classes/class.simple-wp-membership.php:659
138
+ msgid "Usernames can only contain: letters, numbers and .-_*@"
139
+ msgstr "Los nombres de usuarios solo pueden contener: letras, números y .-_*@"
140
 
141
+ #: classes/class.simple-wp-membership.php:662
142
  msgid "Minimum "
143
+ msgstr "Mínimo "
144
 
145
+ #: classes/class.simple-wp-membership.php:663
146
  msgid " characters required"
147
+ msgstr " caracteres requeridos"
148
 
149
+ #: classes/class.simple-wp-membership.php:666
150
  msgid "Apostrophe character is not allowed"
151
  msgstr "El carácter de apóstrofo no está permitido"
152
 
153
+ #: classes/class.simple-wp-membership.php:697
154
  msgid "WP Membership"
155
  msgstr "WP Membership"
156
 
157
+ #: classes/class.simple-wp-membership.php:698 classes/class.swpm-members.php:11
158
+ #: classes/class.swpm-members.php:581
 
159
  msgid "Members"
160
  msgstr "Miembros"
161
 
162
+ #: classes/class.simple-wp-membership.php:699
163
+ #: classes/class.swpm-category-list.php:20
164
+ #: classes/class.swpm-membership-levels.php:12
165
+ #: classes/class.swpm-membership-levels.php:265
166
+ #: classes/class.swpm-post-list.php:21
167
  msgid "Membership Levels"
168
  msgstr "Niveles de membresía"
169
 
170
+ #: classes/class.simple-wp-membership.php:700
171
  msgid "Settings"
172
  msgstr "Ajustes"
173
 
174
+ #: classes/class.simple-wp-membership.php:701
175
  msgid "Payments"
176
  msgstr "Pagos"
177
 
178
+ #: classes/class.simple-wp-membership.php:702
179
  msgid "Add-ons"
180
  msgstr "Extensiones"
181
 
182
+ #: classes/class.swpm-access-control.php:47
183
+ #: classes/class.swpm-access-control.php:120
184
  msgid "You need to login to view this content. "
185
+ msgstr "Debes acceder para ver éste contenido. "
186
 
187
+ #: classes/class.swpm-access-control.php:56
188
+ #: classes/class.swpm-access-control.php:128
189
+ #: classes/class.swpm-access-control.php:212
190
  msgid "Your account has expired. "
191
+ msgstr "Tu cuenta a caducado. "
192
 
193
+ #: classes/class.swpm-access-control.php:66
194
+ #: classes/class.swpm-access-control.php:138
195
  msgid "This content can only be viewed by members who joined on or before "
196
  msgstr ""
197
+ "Este contenido solo puede ser visto por miembros que se unieron en o antes "
198
+ "de "
199
 
200
+ #: classes/class.swpm-access-control.php:79
201
+ #: classes/class.swpm-access-control.php:148
202
  msgid "This content is not permitted for your membership level."
203
+ msgstr "Este contenido no está disponible para tu nivel de membresía."
204
 
205
+ #: classes/class.swpm-access-control.php:204
206
  msgid "You need to login to view the rest of the content. "
207
+ msgstr "Debes acceder para ver el resto del contenido. "
208
 
209
+ #: classes/class.swpm-access-control.php:217
210
  msgid " The rest of the content is not permitted for your membership level."
211
  msgstr " El resto del contenido no está disponible para tu nivel de membresía."
212
 
213
+ #: classes/class.swpm-admin-registration.php:25
214
  msgid "Error! Nonce verification failed for user registration from admin end."
215
  msgstr ""
216
+ "¡Error! La verificación de nonce falló para el registro de usuario desde el "
217
+ "administrador."
218
 
219
+ #: classes/class.swpm-admin-registration.php:71
220
  msgid "Member record added successfully."
221
+ msgstr "Registro de miembro añadido con éxito."
222
 
223
+ #: classes/class.swpm-admin-registration.php:76
224
+ #: classes/class.swpm-admin-registration.php:124
225
+ #: classes/class.swpm-admin-registration.php:151
226
+ #: classes/class.swpm-membership-level.php:73
227
+ #: classes/class.swpm-membership-level.php:105
228
  msgid "Please correct the following:"
229
  msgstr "Por favor, corrige lo siguiente:"
230
 
231
+ #: classes/class.swpm-admin-registration.php:87
232
  msgid "Error! Nonce verification failed for user edit from admin end."
233
  msgstr ""
234
  "¡Error! La verificación de nonce falló para la edición del usuario desde el "
235
+ "administrador."
236
 
237
+ #: classes/class.swpm-admin-registration.php:139
238
  msgid "Your current password"
239
  msgstr "Tu contraseña actual"
240
 
241
+ #: classes/class.swpm-ajax.php:14
242
  msgid "Invalid Email Address"
243
+ msgstr "Dirección de correo electrónico no válido"
244
 
245
+ #: classes/class.swpm-ajax.php:21 classes/class.swpm-ajax.php:36
 
246
  msgid "Aready taken"
247
  msgstr "Ya está cogido"
248
 
249
+ #: classes/class.swpm-ajax.php:30
250
  msgid "Name contains invalid character"
251
  msgstr "El nombre contiene un carácter no válido"
252
 
253
+ #: classes/class.swpm-ajax.php:37
254
  msgid "Available"
255
  msgstr "Disponible"
256
 
257
+ #: classes/class.swpm-auth.php:57
258
  msgid ""
259
  "Warning! Simple Membership plugin cannot process this login request to "
260
  "prevent you from getting logged out of WP Admin accidentally."
261
  msgstr ""
262
  "¡Advertencia! El plugin Simple Membership no puede procesar esta solicitud "
263
+ "de acceso para evitar que se desconecte como administrador de WP "
264
  "accidentalmente."
265
 
266
+ #: classes/class.swpm-auth.php:58
267
+ msgid "Click here"
268
+ msgstr "Haz clic aquí"
269
+
270
+ #: classes/class.swpm-auth.php:58
271
+ msgid " to see the profile you are currently logged into in this browser."
272
+ msgstr " para ver el perfil con el que has iniciado sesión en este navegador."
273
+
274
+ #: classes/class.swpm-auth.php:59
275
  msgid ""
276
  "You are logged into the site as an ADMIN user in this browser. First, logout "
277
+ "from WP Admin then you will be able to log in as a normal member."
278
  msgstr ""
279
+ "En este navegador estas conectado al sitio como usuario ADMIN. Primero, "
280
+ "cierre sesión en WP Admin y luego podrá iniciar sesión como miembro normal."
 
281
 
282
+ #: classes/class.swpm-auth.php:60
283
  msgid ""
284
  "Alternatively, you can use a different browser (where you are not logged-in "
285
  "as ADMIN) to test the membership login."
286
  msgstr ""
287
+ "Como alternativa, puedes utilizar un navegador diferente (donde no te has "
288
+ "conectado como administrador) para probar el acceso de membresía."
289
 
290
+ #: classes/class.swpm-auth.php:61
291
  msgid ""
292
  "Your normal visitors or members will never see this message. This message is "
293
  "ONLY for ADMIN user."
294
  msgstr ""
295
+ "Tus visitantes frecuentes o miembros nunca verán este mensaje. Este mensaje "
296
+ "es SOLO para el usuario de administración."
297
 
298
+ #: classes/class.swpm-auth.php:68
299
  msgid "Captcha validation failed on login form."
300
+ msgstr "Error de validación de captcha en el formulario de acceso."
301
 
302
+ #: classes/class.swpm-auth.php:93
303
  msgid "User Not Found."
304
+ msgstr "Usuario no se ha encontrado."
305
 
306
+ #: classes/class.swpm-auth.php:100
307
  msgid "Password Empty or Invalid."
308
  msgstr "Contraseña vacía o no válida."
309
 
310
+ #: classes/class.swpm-auth.php:133
311
  msgid "Account is inactive."
312
  msgstr "La cuenta está inactiva."
313
 
314
+ #: classes/class.swpm-auth.php:136 classes/class.swpm-auth.php:162
 
315
  msgid "Account has expired."
316
  msgstr "Tu cuenta ha caducado."
317
 
318
+ #: classes/class.swpm-auth.php:139
319
  msgid "Account is pending."
320
+ msgstr "La cuenta esta pendiente."
321
+
322
+ #: classes/class.swpm-auth.php:146
323
+ #, php-format
324
+ msgid ""
325
+ "You need to activate your account. If you didn't receive an email then %s to "
326
+ "resend the activation email."
327
+ msgstr ""
328
+ "Necesitas activar tu cuenta. Si no recibiste un correo electrónico entonces "
329
+ "%s para volver a enviar el correo electrónico de activación."
330
+
331
+ #: classes/class.swpm-auth.php:146
332
+ #: classes/class.swpm-front-registration.php:376
333
+ #: classes/class.swpm-front-registration.php:426
334
+ #: classes/class.swpm-utils-misc.php:169
335
+ msgid "click here"
336
+ msgstr "haz clic aquí"
337
 
338
+ #: classes/class.swpm-auth.php:170
339
  msgid "You are logged in as:"
340
+ msgstr "Te has conectado como:"
341
 
342
+ #: classes/class.swpm-auth.php:234
343
  msgid "Logged Out Successfully."
344
+ msgstr "Te has desconectado con éxito."
345
 
346
+ #: classes/class.swpm-auth.php:287
347
  msgid "Session Expired."
348
  msgstr "Sesión caducada."
349
 
350
+ #: classes/class.swpm-auth.php:304
351
  msgid "Please login again."
352
+ msgstr "Por favor, accede de nuevo."
353
+
354
+ #: classes/class.swpm-category-list.php:19 classes/class.swpm-members.php:24
355
+ #: classes/class.swpm-membership-levels.php:11
356
+ #: classes/class.swpm-membership-levels.php:21
357
+ #: classes/class.swpm-post-list.php:20
358
+ #: classes/admin-includes/class.swpm-payments-list-table.php:85
359
+ #: views/add.php:40 views/admin_member_form_common_part.php:2 views/edit.php:75
360
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:50
361
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:34
362
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:229
363
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:49
364
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:35
365
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:317
366
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:47
367
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:273
368
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:99
369
  msgid "Membership Level"
370
  msgstr "Nivel de membresía"
371
 
372
+ #: classes/class.swpm-category-list.php:33
373
  msgid "Category ID"
374
  msgstr "ID de categoría"
375
 
376
+ #: classes/class.swpm-category-list.php:34
377
  msgid "Category Name"
378
  msgstr "Nombre de categoría"
379
 
380
+ #: classes/class.swpm-category-list.php:35
381
  msgid "Category Type (Taxonomy)"
382
  msgstr "Tipo de categoría (Taxonomía)"
383
 
384
+ #: classes/class.swpm-category-list.php:36
385
  msgid "Description"
386
  msgstr "Descripción"
387
 
388
+ #: classes/class.swpm-category-list.php:37
389
  msgid "Count"
390
  msgstr "Contar"
391
 
392
+ #: classes/class.swpm-category-list.php:92
393
  msgid "Category protection updated!"
394
+ msgstr "Protección de categoría actualizada!"
395
 
396
+ #: classes/class.swpm-category-list.php:130
397
  msgid "No category found."
398
+ msgstr "No se ha encontrado ninguna categoría."
399
 
400
+ #: classes/class.swpm-comment-form-related.php:15
401
  msgid "Please login to comment."
402
+ msgstr "Por favor acceder para comentar."
403
 
404
+ #: classes/class.swpm-comment-form-related.php:40
405
  msgid "Please Login to Comment."
406
+ msgstr "Por favor acceder para comentar."
407
 
408
+ #: classes/class.swpm-comment-form-related.php:79
409
  msgid "Comments not allowed by a non-member."
410
+ msgstr "No se permiten comentarios al que no es miembro."
411
 
412
+ #: classes/class.swpm-form.php:30
413
  msgid ""
414
  "Wordpress account exists with given username. But given email doesn't match."
415
  msgstr ""
416
+ "La cuenta de Wordpress existe con el nombre de usuario dado. Pero el correo "
417
  "electrónico dado no coincide."
418
 
419
+ #: classes/class.swpm-form.php:31
420
+ msgid ""
421
+ " Use a different username to complete the registration. If you want to use "
422
+ "that username then you must enter the correct email address associated with "
423
+ "the existing WP user to connect with that account."
424
+ msgstr ""
425
+ " Utiliza un nombre de usuario diferente para completar el registro. Si "
426
+ "deseas utilizar ese nombre de usuario, debes introducir la dirección de "
427
+ "correo electrónico correcta asociada al usuario de WP existente para "
428
+ "conectarse con esa cuenta."
429
+
430
+ #: classes/class.swpm-form.php:37
431
  msgid ""
432
  "Wordpress account exists with given email. But given username doesn't match."
433
  msgstr ""
434
+ "La cuenta de WordPress existe con el correo electrónico dado, pero el nombre "
435
+ "del usuario dado no coincide."
436
+
437
+ #: classes/class.swpm-form.php:38
438
+ msgid ""
439
+ " Use a different email address to complete the registration. If you want to "
440
+ "use that email then you must enter the correct username associated with the "
441
+ "existing WP user to connect with that account."
442
+ msgstr ""
443
+ " Utiliza una dirección de correo electrónico diferente para completar el "
444
+ "registro. Si deseas utilizar ese correo electrónico, debes introducir el "
445
+ "nombre correcto de usuario asociado al usuario de WP existente para "
446
+ "conectarse con esa cuenta."
447
 
448
+ #: classes/class.swpm-form.php:48
449
  msgid "Username is required"
450
+ msgstr "Es obligatorio el nombre de usuario"
451
 
452
+ #: classes/class.swpm-form.php:52
453
  msgid "Username contains invalid character"
454
  msgstr "El nombre de usuario contiene un carácter no válido"
455
 
456
+ #: classes/class.swpm-form.php:60
457
  msgid "Username already exists."
458
+ msgstr "El nombre de usuario ya existe."
459
 
460
+ #: classes/class.swpm-form.php:83
461
  msgid "Password is required"
462
  msgstr "La contraseña es obligatoria"
463
 
464
+ #: classes/class.swpm-form.php:90
465
  msgid "Password mismatch"
466
+ msgstr "La contraseña no coincide"
467
 
468
+ #: classes/class.swpm-form.php:101
469
  msgid "Email is required"
470
  msgstr "El correo electrónico es obligatorio"
471
 
472
+ #: classes/class.swpm-form.php:105
473
  msgid "Email is invalid"
474
  msgstr "El correo electrónico no es válido"
475
 
476
+ #: classes/class.swpm-form.php:121
477
  msgid "Email is already used."
478
+ msgstr "El correo electrónico ya está usado."
479
 
480
+ #: classes/class.swpm-form.php:179
481
  msgid "Member since field is invalid"
482
+ msgstr "El campo desde del miembro no es válido"
483
 
484
+ #: classes/class.swpm-form.php:190
485
  msgid "Access starts field is invalid"
486
  msgstr "La fecha de comienzo no es válida"
487
 
488
+ #: classes/class.swpm-form.php:200
489
  msgid "Gender field is invalid"
490
+ msgstr "El campo de género no es válido"
491
 
492
+ #: classes/class.swpm-form.php:211
493
  msgid "Account state field is invalid"
494
  msgstr "El valor introducido en el campo \"Estado de la cuenta\" no es válido"
495
 
496
+ #: classes/class.swpm-form.php:218
497
  msgid "Invalid membership level"
498
+ msgstr "Nivel de membresía no válida"
499
 
500
+ #: classes/class.swpm-front-registration.php:33
501
  msgid ""
502
  "Error! Invalid Request. Could not find a match for the given security code "
503
  "and the user ID."
504
  msgstr ""
505
  "¡Error! Solicitud no válida. No se pudo encontrar una coincidencia para el "
506
+ "código de seguridad dado y el ID de usuario."
507
 
508
+ #: classes/class.swpm-front-registration.php:45
509
+ #: classes/class.swpm-utils-misc.php:274 views/login.php:36
 
510
  msgid "Join Us"
511
  msgstr "Únete a nosotros"
512
 
513
+ #: classes/class.swpm-front-registration.php:47
514
  msgid ""
515
  "Free membership is disabled on this site. Please make a payment from the "
516
  msgstr ""
517
+ "La membresía gratuita está desactivada en este sitio. Por favor haz un pago "
518
+ "desde la "
519
+
520
+ #: classes/class.swpm-front-registration.php:49
521
+ msgid " page to pay for a premium membership."
522
+ msgstr " página para pagar una membresía de pago."
523
 
524
+ #: classes/class.swpm-front-registration.php:51
525
  msgid ""
526
  "You will receive a unique link via email after the payment. You will be able "
527
  "to use that link to complete the premium membership registration."
528
  msgstr ""
529
+ "Recibirás un enlace único a través del correo electrónico después del pago. "
530
+ "Podrás utilizar ese enlace para completar el registro de membresía de pago."
531
 
532
+ #: classes/class.swpm-front-registration.php:79
533
  msgid "Security check: captcha validation failed."
534
  msgstr "Comprobación de seguridad: la validación del captcha ha fallado."
535
 
536
+ #: classes/class.swpm-front-registration.php:89
537
+ msgid "You must accept the terms and conditions."
538
+ msgstr "Debes aceptar los Términos y Condiciones."
539
+
540
+ #: classes/class.swpm-front-registration.php:100
541
+ msgid "You must agree to the privacy policy."
542
+ msgstr "Debes aceptar la política de privacidad."
543
+
544
+ #: classes/class.swpm-front-registration.php:140
545
+ msgid ""
546
+ "You need to confirm your email address. Please check your email and follow "
547
+ "instructions to complete your registration."
548
+ msgstr ""
549
+ "Necesitas confirmar tu dirección de correo electrónico. Por favor, revisa tu "
550
+ "correo electrónico y sigue las instrucciones para completar el registro."
551
+
552
+ #: classes/class.swpm-front-registration.php:145
553
  msgid "Registration Successful. "
554
  msgstr "Registro con éxito. "
555
 
556
+ #: classes/class.swpm-front-registration.php:145
557
+ #: classes/class.swpm-utils-misc.php:273 classes/class.swpm-utils-misc.php:285
 
558
  msgid "Please"
559
+ msgstr "Por favor"
560
 
561
+ #: classes/class.swpm-front-registration.php:145
562
+ #: classes/class.swpm-utils-misc.php:273 views/login.php:30
 
563
  msgid "Login"
564
+ msgstr "Acceso"
565
 
566
+ #: classes/class.swpm-front-registration.php:159
567
  msgid "Please correct the following"
568
  msgstr "Por favor, corrige lo siguiente"
569
 
570
+ #: classes/class.swpm-front-registration.php:207
571
  msgid "Membership Level Couldn't be found."
572
  msgstr "No se ha encontrado el nivel de membresía."
573
 
574
+ #: classes/class.swpm-front-registration.php:258
575
  msgid "Error! Nonce verification failed for front end profile edit."
576
  msgstr ""
577
+ "¡Error! No se ha podido verificar la verificación de editar el perfil en la "
578
+ "portada."
579
 
580
+ #: classes/class.swpm-front-registration.php:266
581
  msgid "Profile updated successfully."
582
+ msgstr "Perfil actualizado con éxito."
583
 
584
+ #: classes/class.swpm-front-registration.php:275
585
  msgid ""
586
  "Profile updated successfully. You will need to re-login since you changed "
587
  "your password."
588
  msgstr ""
589
+ "Perfil se ha actualizado con éxito. Tendrás que volver a acceder porque has "
590
+ "cambiado la contraseña."
591
 
592
+ #: classes/class.swpm-front-registration.php:289
593
  msgid "Please correct the following."
594
+ msgstr "Por favor, corrige lo siguiente."
595
 
596
+ #: classes/class.swpm-front-registration.php:301
597
  msgid "Captcha validation failed."
598
+ msgstr "Error de validación de captcha."
599
 
600
+ #: classes/class.swpm-front-registration.php:309
601
  msgid "Email address not valid."
602
+ msgstr "Dirección de correo electrónico no válido."
603
 
604
+ #: classes/class.swpm-front-registration.php:320
605
  msgid "No user found with that email address."
606
+ msgstr "No se encontró ningún usuario con esa dirección de correo electrónico."
 
607
 
608
+ #: classes/class.swpm-front-registration.php:321
609
+ #: classes/class.swpm-front-registration.php:350
610
  msgid "Email Address: "
611
  msgstr "Dirección de correo electrónico: "
612
 
613
+ #: classes/class.swpm-front-registration.php:349
614
  msgid "New password has been sent to your email address."
615
+ msgstr "La nueva contraseña ha sido enviada a tu correo electrónico."
616
+
617
+ #: classes/class.swpm-front-registration.php:371
618
+ msgid "Can't find member account."
619
+ msgstr "No se puede encontrar la cuenta del miembro."
620
+
621
+ #: classes/class.swpm-front-registration.php:376
622
+ #: classes/class.swpm-front-registration.php:426
623
+ msgid "Account already active. "
624
+ msgstr "La cuenta ya ha sido activada. "
625
+
626
+ #: classes/class.swpm-front-registration.php:376
627
+ #: classes/class.swpm-front-registration.php:426
628
+ msgid " to login."
629
+ msgstr " para iniciar sesión."
630
+
631
+ #: classes/class.swpm-front-registration.php:383
632
+ msgid ""
633
+ "Activation code mismatch. Cannot activate this account. Please contact the "
634
+ "site admin."
635
+ msgstr ""
636
+ "El código de activación no coincide. No se puede activar esta cuenta. Por "
637
+ "favor, ponte en contacto con el administrador del sitio."
638
+
639
+ #: classes/class.swpm-front-registration.php:397
640
+ msgid "Success! Your account has been activated successfully."
641
+ msgstr "¡Lo lograste! Tu cuenta ha sido activada correctamente."
642
+
643
+ #: classes/class.swpm-front-registration.php:421
644
+ msgid "Cannot find member account."
645
+ msgstr "No se puede encontrar la cuenta del miembro."
646
+
647
+ #: classes/class.swpm-front-registration.php:443
648
+ msgid ""
649
+ "Activation email has been sent. Please check your email and activate your "
650
+ "account."
651
+ msgstr ""
652
+ "Se ha enviado un correo electrónico de activación. Por favor, revisa tu "
653
+ "correo electrónico y activa tu cuenta."
654
 
655
+ #: classes/class.swpm-init-time-tasks.php:118
656
  msgid "Sorry, Nonce verification failed."
657
+ msgstr "Lo siento, la verificación del nonce falló."
658
 
659
+ #: classes/class.swpm-init-time-tasks.php:125
660
  msgid "Sorry, Password didn't match."
661
  msgstr "Lo siento, la contraseña no coincide."
662
 
663
+ #: classes/class.swpm-level-form.php:50
664
  msgid "Date format is not valid."
665
  msgstr "El formato de fecha no es válido."
666
 
667
+ #: classes/class.swpm-level-form.php:58
668
  msgid "Access duration must be > 0."
669
  msgstr "La duración del acceso debe ser mayor a 0."
670
 
671
+ #: classes/class.swpm-members.php:10
672
  msgid "Member"
673
  msgstr "Miembro"
674
 
675
+ #: classes/class.swpm-members.php:19
676
+ #: classes/class.swpm-membership-levels.php:20
677
  msgid "ID"
678
  msgstr "ID"
679
 
680
+ #: classes/class.swpm-members.php:20 views/add.php:16 views/admin_add.php:11
681
+ #: views/admin_edit.php:19 views/edit.php:23
682
+ #: includes/swpm_mda_show_profile.php:27
 
683
  msgid "Username"
684
  msgstr "Nombre de usuario"
685
 
686
+ #: classes/class.swpm-members.php:21
687
+ #: classes/admin-includes/class.swpm-payments-list-table.php:78
688
+ #: views/add.php:32 views/admin_member_form_common_part.php:15
689
+ #: views/edit.php:39 includes/swpm_mda_show_profile.php:28
 
690
  msgid "First Name"
691
  msgstr "Nombre"
692
 
693
+ #: classes/class.swpm-members.php:22
694
+ #: classes/admin-includes/class.swpm-payments-list-table.php:79
695
+ #: views/add.php:36 views/admin_member_form_common_part.php:19
696
+ #: views/edit.php:43 includes/swpm_mda_show_profile.php:29
 
697
  msgid "Last Name"
698
+ msgstr "Apellidos"
699
 
700
+ #: classes/class.swpm-members.php:23 views/add.php:20 views/edit.php:27
701
+ #: includes/swpm_mda_show_profile.php:35
702
  msgid "Email"
703
  msgstr "Correo electrónico"
704
 
705
+ #: classes/class.swpm-members.php:25 views/admin_member_form_common_part.php:11
 
706
  msgid "Access Starts"
707
  msgstr "El acceso comienza"
708
 
709
+ #: classes/class.swpm-members.php:26 includes/swpm_mda_show_profile.php:31
710
  msgid "Account State"
711
  msgstr "Estado de la cuenta"
712
 
713
+ #: classes/class.swpm-members.php:27
714
+ msgid "Last Login Date"
715
+ msgstr "Última fecha de acceso"
716
+
717
+ #: classes/class.swpm-members.php:46
718
+ #: classes/class.swpm-membership-levels.php:36
719
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:94
720
+ #: classes/admin-includes/class.swpm-payments-list-table.php:102
721
  msgid "Delete"
722
  msgstr "Borrar"
723
 
724
+ #: classes/class.swpm-members.php:47
725
  msgid "Set Status to Active"
726
+ msgstr "Establecer el estado como activo"
727
 
728
+ #: classes/class.swpm-members.php:48
729
  msgid "Set Status to Active and Notify"
730
+ msgstr "Establecer el estado como activo y notificar"
731
 
732
+ #: classes/class.swpm-members.php:49
733
  msgid "Set Status to Inactive"
734
+ msgstr "Establecer el estado como inactivo"
735
 
736
+ #: classes/class.swpm-members.php:50
737
  msgid "Set Status to Pending"
738
+ msgstr "Establecer el estado como pendiente"
739
 
740
+ #: classes/class.swpm-members.php:51
741
  msgid "Set Status to Expired"
742
+ msgstr "Establecer el estado como caducado"
743
 
744
+ #: classes/class.swpm-members.php:72
745
  msgid "incomplete"
746
  msgstr "incompleto"
747
 
748
+ #: classes/class.swpm-members.php:191
749
  msgid "No member found."
750
+ msgstr "No se encontró el miembro."
751
 
752
+ #: classes/class.swpm-members.php:337
753
  msgid "Error! Nonce verification failed for user delete from admin end."
754
  msgstr ""
755
+ "¡Error! La verificación de nonce falló para la eliminación de usuario desde "
756
+ "el administrador."
757
 
758
+ #: classes/class.swpm-members.php:406 classes/class.swpm-members.php:436
 
759
  msgid "Error! Please select a membership level first."
760
  msgstr "¡Error! Seleccione primero un nivel de membresía."
761
 
762
+ #: classes/class.swpm-members.php:423
763
  msgid "Membership level change operation completed successfully."
764
  msgstr ""
765
+ "La operación de cambio de nivel de membresía se ha completado con éxito."
766
 
767
+ #: classes/class.swpm-members.php:453
768
  msgid "Access starts date change operation successfully completed."
769
+ msgstr "El acceso inicia la operación de cambio de fecha completada con éxito."
 
 
770
 
771
+ #: classes/class.swpm-members.php:462
772
  msgid "Bulk Update Membership Level of Members"
773
+ msgstr "Actualización en lote de nivel de membresía de miembros"
774
 
775
+ #: classes/class.swpm-members.php:465
776
  msgid ""
777
  "You can manually change the membership level of any member by editing the "
778
  "record from the members menu. "
779
  msgstr ""
780
+ "Puedes cambiar manualmente el nivel de membresía de cualquier miembro "
781
  "editando el registro en el menú de miembros. "
782
 
783
+ #: classes/class.swpm-members.php:466
784
  msgid ""
785
  "You can use the following option to bulk update the membership level of "
786
  "users who belong to the level you select below."
787
  msgstr ""
788
+ "Se puede usa la siguiente opción de actualización en lote del nivel de "
789
+ "membresía de los usuarios que pertenecen al nivel que seleccionas a "
790
  "continuación."
791
 
792
+ #: classes/class.swpm-members.php:472 classes/class.swpm-members.php:520
 
793
  msgid "Membership Level: "
794
  msgstr "Nivel de membresía: "
795
 
796
+ #: classes/class.swpm-members.php:476
797
  msgid "Select Current Level"
798
+ msgstr "Selecciona el nivel actual"
799
 
800
+ #: classes/class.swpm-members.php:479
801
  msgid ""
802
  "Select the current membership level (the membership level of all members who "
803
  "are in this level will be updated)."
804
  msgstr ""
805
+ "Selecciona el nivel de membresía actual (el nivel de membresía de todos los "
806
+ "miembros que se encuentren en este nivel se actualizarán)."
807
 
808
+ #: classes/class.swpm-members.php:485
809
  msgid "Level to Change to: "
810
  msgstr "Nivel a cambiar a: "
811
 
812
+ #: classes/class.swpm-members.php:489
813
  msgid "Select Target Level"
814
+ msgstr "Selecciona el nivel de destino"
815
 
816
+ #: classes/class.swpm-members.php:492
817
  msgid "Select the new membership level."
818
  msgstr "Seleccione el nuevo nivel de membresía."
819
 
820
+ #: classes/class.swpm-members.php:498
821
  msgid "Bulk Change Membership Level"
822
+ msgstr "Cambio en lote de nivel de membresía"
823
 
824
+ #: classes/class.swpm-members.php:508
825
  msgid "Bulk Update Access Starts Date of Members"
826
+ msgstr ""
827
+ "La fecha del comienzo de acceso de la actualización en lote de los miembros"
828
 
829
+ #: classes/class.swpm-members.php:512
830
  msgid ""
831
  "The access starts date of a member is set to the day the user registers. "
832
  "This date value is used to calculate how long the member can access your "
835
  msgstr ""
836
  "La fecha de inicio de acceso de un miembro se establece en el día en que el "
837
  "usuario se registra. Este valor de fecha se utiliza para calcular el tiempo "
838
+ "que el miembro puede acceder a tu contenido que está protegido con una "
839
+ "protección de tipo de duración en el nivel de membresía. "
840
 
841
+ #: classes/class.swpm-members.php:513
842
  msgid ""
843
  "You can manually set a specific access starts date value of all members who "
844
  "belong to a particular level using the following option."
847
  "específico de todos los miembros que pertenezcan a un nivel determinado "
848
  "mediante la siguiente opción."
849
 
850
+ #: classes/class.swpm-members.php:523
851
  msgid "Select Level"
852
+ msgstr "Seleccionar el nivel"
853
 
854
+ #: classes/class.swpm-members.php:526
855
  msgid ""
856
  "Select the Membership level (the access start date of all members who are in "
857
  "this level will be updated)."
858
  msgstr ""
859
+ "Selecciona el nivel de membresía (la fecha de inicio de acceso de todos los "
860
+ "miembros que están en este nivel se actualizarán)."
861
 
862
+ #: classes/class.swpm-members.php:535
863
  msgid "Specify the access starts date value."
864
+ msgstr "Especifica el valor de la fecha de inicio del acceso."
865
 
866
+ #: classes/class.swpm-members.php:541
867
  msgid "Bulk Change Access Starts Date"
868
+ msgstr "Cambio en lote de la fecha de comienzo de acceso"
869
 
870
+ #: classes/class.swpm-members.php:576
871
  msgid "Simple WP Membership::Members"
872
  msgstr "Simple WP Membership::Miembros"
873
 
874
+ #: classes/class.swpm-members.php:577
875
+ #: classes/class.swpm-membership-levels.php:226 views/admin_members_list.php:44
 
876
  msgid "Add New"
877
  msgstr "Añadir nuevo"
878
 
879
+ #: classes/class.swpm-members.php:582 views/admin_add.php:6
 
880
  msgid "Add Member"
881
  msgstr "Añadir miembro"
882
 
883
+ #: classes/class.swpm-members.php:583
884
  msgid "Bulk Operation"
885
+ msgstr "Operación en lote"
886
 
887
+ #: classes/class.swpm-membership-level.php:52
888
  msgid ""
889
  "Error! Nonce verification failed for membership level creation from admin "
890
  "end."
891
  msgstr ""
892
  "¡Error! La verificación de Nonce falló en la creación de nivel de membresía "
893
+ "desde el administrador."
894
 
895
+ #: classes/class.swpm-membership-level.php:68
896
  msgid "Membership Level Creation Successful."
897
+ msgstr "Nivel de membresía creado con éxito."
898
 
899
+ #: classes/class.swpm-membership-level.php:84
900
  msgid ""
901
  "Error! Nonce verification failed for membership level edit from admin end."
902
  msgstr ""
903
+ "¡Error! La comprobación de nonce falló para la edición de nivel de membresía "
904
+ "desde el administrador."
905
 
906
+ #: classes/class.swpm-membership-level.php:100
907
  msgid "Membership Level Updated Successfully."
908
+ msgstr "Nombre del nivel de membresía actualizado con éxito."
909
 
910
+ #: classes/class.swpm-membership-levels.php:22
911
  msgid "Role"
912
+ msgstr "Perfil"
913
 
914
+ #: classes/class.swpm-membership-levels.php:23
915
  msgid "Access Valid For/Until"
916
  msgstr "Acceso válido durante/hasta"
917
 
918
+ #: classes/class.swpm-membership-levels.php:133
919
  msgid "No membership levels found."
920
  msgstr "No se encontraron niveles de membresía."
921
 
922
+ #: classes/class.swpm-membership-levels.php:197
923
  msgid ""
924
  "Error! Nonce verification failed for membership level delete from admin end."
925
  msgstr ""
926
+ "¡Error! La verificación de Nonce falló al eliminar el nivel de pertenencia "
927
+ "desde el administrador."
928
 
929
+ #: classes/class.swpm-membership-levels.php:216 views/admin_members_list.php:31
930
+ #: views/payments/admin_all_payment_transactions.php:16 views/template-1.php:53
931
+ #: views/template-2.php:54
932
  msgid "Search"
933
  msgstr "Buscar"
934
 
935
+ #: classes/class.swpm-membership-levels.php:261
936
  msgid "Simple WP Membership::Membership Levels"
937
  msgstr "Simple WP Membership::Nivel de membresía"
938
 
939
+ #: classes/class.swpm-membership-levels.php:266
940
  msgid "Add Level"
941
  msgstr "Añadir nivel"
942
 
943
+ #: classes/class.swpm-membership-levels.php:267
944
  msgid "Manage Content Protection"
945
+ msgstr "Gestionar la protección de contenido"
946
 
947
+ #: classes/class.swpm-membership-levels.php:268
948
  msgid "Category Protection"
949
  msgstr "Protección de categoría"
950
 
951
+ #: classes/class.swpm-membership-levels.php:269
952
+ msgid "Post and Page Protection"
953
+ msgstr "Protección de la entrada y página"
954
+
955
+ #: classes/class.swpm-post-list.php:43 classes/class.swpm-post-list.php:52
956
+ #: classes/class.swpm-post-list.php:62
957
+ #: classes/admin-includes/class.swpm-payments-list-table.php:81
958
+ msgid "Date"
959
+ msgstr "Fecha"
960
+
961
+ #: classes/class.swpm-post-list.php:44 classes/class.swpm-post-list.php:53
962
+ #: classes/class.swpm-post-list.php:63
963
+ msgid "Title"
964
+ msgstr "Titulo"
965
+
966
+ #: classes/class.swpm-post-list.php:45 classes/class.swpm-post-list.php:54
967
+ #: classes/class.swpm-post-list.php:64
968
+ msgid "Author"
969
+ msgstr "Autor"
970
+
971
+ #: classes/class.swpm-post-list.php:46 classes/class.swpm-post-list.php:56
972
+ #: classes/class.swpm-post-list.php:66
973
+ msgid "Status"
974
+ msgstr "Estado"
975
+
976
+ #: classes/class.swpm-post-list.php:55
977
+ msgid "Categories"
978
+ msgstr "Categoría"
979
+
980
+ #: classes/class.swpm-post-list.php:65
981
+ msgid "Type"
982
+ msgstr "Tipo"
983
+
984
+ #: classes/class.swpm-post-list.php:125
985
+ msgid "Protection settings updated!"
986
+ msgstr "¡Actualizados los ajustes de protección!"
987
+
988
+ #: classes/class.swpm-post-list.php:230
989
+ msgid "No items found."
990
+ msgstr "No se han encontrado artículos."
991
+
992
+ #: classes/class.swpm-protection.php:22
993
+ msgid ""
994
+ "The category or parent category of this post is protected. You can change "
995
+ "the category protection settings from the "
996
+ msgstr ""
997
+ "La categoría o categoría principal de esta entrada está protegida. Puedes "
998
+ "cambiar los ajustes de protección de categoría desde "
999
+
1000
+ #: classes/class.swpm-protection.php:23
1001
+ msgid "category protection menu"
1002
+ msgstr "menú de protección de categoría"
1003
+
1004
+ #: classes/class.swpm-settings.php:26 classes/class.swpm-settings.php:54
1005
  msgid "General Settings"
1006
  msgstr "Ajustes generales"
1007
 
1008
+ #: classes/class.swpm-settings.php:27
1009
  msgid "Payment Settings"
1010
  msgstr "Ajustes de pago"
1011
 
1012
+ #: classes/class.swpm-settings.php:28
1013
  msgid "Email Settings"
1014
+ msgstr "Ajustes del correo electrónico"
1015
 
1016
+ #: classes/class.swpm-settings.php:29
1017
  msgid "Tools"
1018
  msgstr "Herramientas"
1019
 
1020
+ #: classes/class.swpm-settings.php:30 classes/class.swpm-settings.php:187
 
1021
  msgid "Advanced Settings"
1022
  msgstr "Ajustes avanzados"
1023
 
1024
+ #: classes/class.swpm-settings.php:31
1025
  msgid "Addons Settings"
1026
  msgstr "Ajustes de extensiones"
1027
 
1028
+ #: classes/class.swpm-settings.php:53
1029
  msgid "Plugin Documentation"
1030
  msgstr "Documentación del plugin"
1031
 
1032
+ #: classes/class.swpm-settings.php:55
1033
  msgid "Enable Free Membership"
1034
  msgstr "Activar membresía gratis"
1035
 
1036
+ #: classes/class.swpm-settings.php:56
1037
  msgid ""
1038
  "Enable/disable registration for free membership level. When you enable this "
1039
  "option, make sure to specify a free membership level ID in the field below."
1040
  msgstr ""
1041
+ "Activa/desactiva el registro para el nivel de membresía gratis. Al activar "
1042
+ "esta opción, asegúrate de especificar un ID de nivel de membresía gratuita "
1043
+ "en el siguiente campo."
1044
 
1045
+ #: classes/class.swpm-settings.php:57
1046
  msgid "Free Membership Level ID"
1047
  msgstr "ID de la membresía gratuita"
1048
 
1049
+ #: classes/class.swpm-settings.php:58
1050
  msgid "Assign free membership level ID"
1051
  msgstr "Asignar el ID de la membresía gratuita"
1052
 
1053
+ #: classes/class.swpm-settings.php:59
1054
  msgid "Enable More Tag Protection"
1055
+ msgstr "Activa la etiqueta more de protección"
1056
 
1057
+ #: classes/class.swpm-settings.php:60
1058
  msgid ""
1059
  "Enables or disables \"more\" tag protection in the posts and pages. Anything "
1060
  "after the More tag is protected. Anything before the more tag is teaser "
1061
  "content."
1062
  msgstr ""
1063
+ "Activa o desactiva la etiqueta \"more\" de protección en las entradas y "
1064
+ "páginas. Cualquier cosa por debajo de la etiqueta more esta protegido. "
1065
+ "Cualquier cosa por encima de la etiqueta more es contenido sumario."
1066
 
1067
+ #: classes/class.swpm-settings.php:61
1068
  msgid "Hide Adminbar"
1069
  msgstr "Ocultar la barra de administración"
1070
 
1071
+ #: classes/class.swpm-settings.php:62
1072
  msgid ""
1073
  "WordPress shows an admin toolbar to the logged in users of the site. Check "
1074
  "this if you want to hide that admin toolbar in the frontend of your site."
1075
  msgstr ""
1076
  "WordPress muestra una barra de herramientas de administración para los "
1077
+ "usuarios registrados en el sitio. Selecciona esta casilla si deseas ocultar "
1078
+ "la barra de herramientas de administración en la portada de tu sitio."
1079
 
1080
+ #: classes/class.swpm-settings.php:63
1081
  msgid "Show Adminbar to Admin"
1082
+ msgstr "Mostrar la barra de administración al administrador"
1083
 
1084
+ #: classes/class.swpm-settings.php:64
1085
  msgid ""
1086
  "Use this option if you want to show the admin toolbar to admin users only. "
1087
  "The admin toolbar will be hidden for all other users."
1088
  msgstr ""
1089
+ "Utiliza esta opción si deseas mostrar la barra de herramientas de "
1090
  "administración sólo a usuarios administradores. La barra de herramientas de "
1091
  "administración se ocultará para todos los demás usuarios."
1092
 
1093
+ #: classes/class.swpm-settings.php:65
1094
  msgid "Disable Access to WP Dashboard"
1095
+ msgstr "Desactivar el acceso al escritorio de WP"
1096
 
1097
+ #: classes/class.swpm-settings.php:66
1098
  msgid ""
1099
+ "WordPress allows a standard wp user to be able to go to the wp-admin URL and "
1100
  "access his profile from the wp dashbaord. Using this option will prevent any "
1101
  "non admin users from going to the wp dashboard."
1102
  msgstr ""
1103
+ "WordPress permite que un usuario estándar de wp pueda acceder a la URL de wp-"
1104
+ "admin y acceda a su perfil desde el escritorio de wp. Usando esta opción "
1105
+ "evitará que los usuarios que no sean administradores accedan al escritorio "
1106
+ "de wp."
1107
 
1108
+ #: classes/class.swpm-settings.php:68 classes/class.swpm-settings.php:242
1109
  msgid "Default Account Status"
1110
  msgstr "Estado por defecto de la cuenta"
1111
 
1112
+ #: classes/class.swpm-settings.php:71
1113
  msgid ""
1114
  "Select the default account status for newly registered users. If you want to "
1115
  "manually approve the members then you can set the status to \"Pending\"."
1116
  msgstr ""
1117
+ "Selecciona un estado de cuenta por defecto para los nuevos registros. Si "
1118
+ "deseas aprobar manualmente los miembros, puedes establecer el estado en "
1119
  "\"Pendiente\"."
1120
 
1121
+ #: classes/class.swpm-settings.php:73
1122
  msgid "Members Must be Logged in to Comment"
1123
  msgstr "Los miembros deben estar conectados para comentar"
1124
 
1125
+ #: classes/class.swpm-settings.php:74
1126
  msgid ""
1127
  "Enable this option if you only want the members of the site to be able to "
1128
  "post a comment."
1129
  msgstr ""
1130
+ "Activa esta opción si sólo deseas que los miembros del sitio puedan publicar "
1131
  "un comentario."
1132
 
1133
+ #: classes/class.swpm-settings.php:83
1134
  msgid "Pages Settings"
1135
  msgstr "Ajustes de páginas"
1136
 
1137
+ #: classes/class.swpm-settings.php:84
1138
  msgid "Login Page URL"
1139
+ msgstr "URL de la página de acceso"
1140
 
1141
+ #: classes/class.swpm-settings.php:86
1142
  msgid "Registration Page URL"
1143
  msgstr "El URL de la página de registro"
1144
 
1145
+ #: classes/class.swpm-settings.php:88
1146
  msgid "Join Us Page URL"
1147
+ msgstr "URL de la página de \"Únete a nosotros\""
1148
 
1149
+ #: classes/class.swpm-settings.php:90
1150
  msgid "Edit Profile Page URL"
1151
+ msgstr "Editar URL de la página del perfil"
1152
 
1153
+ #: classes/class.swpm-settings.php:92
1154
  msgid "Password Reset Page URL"
1155
+ msgstr "URL de la página de restablecimiento de la contraseña"
1156
 
1157
+ #: classes/class.swpm-settings.php:95
1158
  msgid "Test & Debug Settings"
1159
  msgstr "Ajustes de prueba y depuración"
1160
 
1161
+ #: classes/class.swpm-settings.php:97
1162
  msgid "Check this option to enable debug logging."
1163
+ msgstr "Selecciona esta opción para activar los registro de depuración."
1164
+
1165
+ #: classes/class.swpm-settings.php:98
1166
+ msgid ""
1167
+ " This can be useful when troubleshooting an issue. Turn it off and reset the "
1168
+ "log files after the troubleshooting is complete."
1169
+ msgstr ""
1170
+ " Esto puede ser útil para solucionar un problema. Desactívalo y restablece "
1171
+ "los archivos de registro una vez completada la solución del problema."
1172
+
1173
+ #: classes/class.swpm-settings.php:100
1174
+ msgid "View general debug log file by clicking "
1175
+ msgstr "Ver el archivo de registro de depuración general haciendo clic "
1176
+
1177
+ #: classes/class.swpm-settings.php:100 classes/class.swpm-settings.php:101
1178
+ #: classes/class.swpm-settings.php:102
1179
+ msgid "here"
1180
+ msgstr "aquí"
1181
+
1182
+ #: classes/class.swpm-settings.php:101
1183
+ msgid "View login related debug log file by clicking "
1184
+ msgstr ""
1185
+ "Ver el archivo de registro de depuración relacionado con el acceso haciendo "
1186
+ "clic "
1187
+
1188
+ #: classes/class.swpm-settings.php:102
1189
+ msgid "Reset debug log files by clicking "
1190
+ msgstr "Restablecer los archivos de registro de depuración haciendo clic "
1191
+
1192
+ #: classes/class.swpm-settings.php:103
1193
+ msgid "Enable Debug"
1194
+ msgstr "Activar depuración"
1195
 
1196
+ #: classes/class.swpm-settings.php:105
1197
  msgid "Enable Sandbox Testing"
1198
  msgstr "Activar pruebas en sandbox"
1199
 
1200
+ #: classes/class.swpm-settings.php:106
1201
  msgid "Enable this option if you want to do sandbox payment testing."
1202
+ msgstr "Activa esta opción si quieres hacer pagos de prueba en sandbox."
1203
 
1204
+ #: classes/class.swpm-settings.php:119
1205
+ msgid "Email Settings Overview"
1206
+ msgstr "Visión general de ajustes de correo electrónico"
 
 
1207
 
1208
+ #: classes/class.swpm-settings.php:120
1209
  msgid "Email Misc. Settings"
1210
  msgstr "Ajustes varios del correo electrónico"
1211
 
1212
+ #: classes/class.swpm-settings.php:122
1213
  msgid "From Email Address"
1214
  msgstr "Remitente del correo electrónico"
1215
 
1216
+ #: classes/class.swpm-settings.php:126
1217
  msgid "Email Settings (Prompt to Complete Registration )"
1218
+ msgstr "Ajustes del correo electrónico (Solicitud para completar el registro)"
 
1219
 
1220
+ #: classes/class.swpm-settings.php:127 classes/class.swpm-settings.php:140
1221
+ #: classes/class.swpm-settings.php:158 classes/class.swpm-settings.php:163
1222
+ #: classes/class.swpm-settings.php:168 classes/class.swpm-settings.php:173
 
 
1223
  msgid "Email Subject"
1224
  msgstr "Asunto del correo electrónico"
1225
 
1226
+ #: classes/class.swpm-settings.php:129 classes/class.swpm-settings.php:142
1227
+ #: classes/class.swpm-settings.php:159 classes/class.swpm-settings.php:164
1228
+ #: classes/class.swpm-settings.php:169 classes/class.swpm-settings.php:174
 
 
1229
  msgid "Email Body"
1230
  msgstr "Cuerpo del correo electrónico"
1231
 
1232
+ #: classes/class.swpm-settings.php:133
1233
  msgid ""
1234
  "Enter the email address where you want the admin notification email to be "
1235
  "sent to."
1236
  msgstr ""
1237
+ "Introduce la dirección de correo electrónico donde deseas que se envíe la "
1238
+ "notificación de administrador."
1239
 
1240
+ #: classes/class.swpm-settings.php:134
1241
  msgid ""
1242
  " You can put multiple email addresses separated by comma (,) in the above "
1243
  "field to send the notification to multiple email addresses."
1244
  msgstr ""
1245
+ " Puedes colocar varias direcciones de correo electrónico separadas por coma "
1246
  "(,) en el campo anterior para enviar la notificación a varias direcciones de "
1247
  "correo electrónico."
1248
 
1249
+ #: classes/class.swpm-settings.php:136
1250
  msgid "Enter the subject for the admin notification email."
1251
  msgstr ""
1252
+ "Introduce el asunto para el correo electrónico de notificación del "
1253
  "administrador."
1254
 
1255
+ #: classes/class.swpm-settings.php:137
1256
  msgid ""
1257
  "This email will be sent to the admin when a new user completes the "
1258
  "membership registration. Only works if you have enabled the \"Send "
1259
  "Notification to Admin\" option above."
1260
  msgstr ""
1261
  "Este correo electrónico se enviará al administrador cuando un nuevo usuario "
1262
+ "complete el registro de membresía. Sólo funciona si has activado la opción "
1263
+ "anterior \"Enviar notificación al administrador\"."
1264
 
1265
+ #: classes/class.swpm-settings.php:139
1266
  msgid "Email Settings (Registration Complete)"
1267
+ msgstr "Ajustes del correo electrónico (el registro se ha completado)"
1268
 
1269
+ #: classes/class.swpm-settings.php:144
1270
  msgid "Send Notification to Admin"
1271
+ msgstr "Enviar notificación al administrador"
1272
 
1273
+ #: classes/class.swpm-settings.php:145
1274
  msgid ""
1275
  "Enable this option if you want the admin to receive a notification when a "
1276
  "member registers."
1277
  msgstr ""
1278
+ "Activa esta opción si deseas que el administrador reciba una notificación "
1279
  "cuando un miembro se registre."
1280
 
1281
+ #: classes/class.swpm-settings.php:146
1282
  msgid "Admin Email Address"
1283
  msgstr "Dirección de correo electrónico del administrador"
1284
 
1285
+ #: classes/class.swpm-settings.php:148
1286
  msgid "Admin Notification Email Subject"
1287
  msgstr "Asunto del correo electrónico de notificación de administrador"
1288
 
1289
+ #: classes/class.swpm-settings.php:150
1290
  msgid "Admin Notification Email Body"
1291
  msgstr "Cuerpo de correo electrónico de notificación de administrador"
1292
 
1293
+ #: classes/class.swpm-settings.php:153
1294
  msgid "Send Email to Member When Added via Admin Dashboard"
1295
  msgstr ""
1296
+ "Envía un correo electrónico al miembro cuando ha sido añadido desde el "
1297
+ "escritorio de administración"
1298
 
1299
+ #: classes/class.swpm-settings.php:157
1300
  msgid "Email Settings (Password Reset)"
1301
+ msgstr "Ajustes del correo electrónico (Restablecer contraseña)"
1302
 
1303
+ #: classes/class.swpm-settings.php:162
1304
  msgid " Email Settings (Account Upgrade Notification)"
1305
  msgstr " Ajustes de correo electrónico (Notificación de mejora de la cuenta)"
1306
 
1307
+ #: classes/class.swpm-settings.php:167
1308
  msgid " Email Settings (Bulk Account Activate Notification)"
1309
  msgstr ""
1310
+ " Ajustes de correo electrónico (notificación de activar la cuenta en lote)"
1311
 
1312
+ #: classes/class.swpm-settings.php:172
1313
+ msgid " Email Settings (Email Activation)"
1314
+ msgstr " Ajustes de correo electrónico (Activación por correo electrónico)"
1315
+
1316
+ #: classes/class.swpm-settings.php:189
1317
  msgid "Enable Expired Account Login"
1318
  msgstr "Activar el acceso a la cuenta caducada"
1319
 
1320
+ #: classes/class.swpm-settings.php:190
1321
  msgid ""
1322
  "When enabled, expired members will be able to log into the system but won't "
1323
  "be able to view any protected content. This allows them to easily renew "
1324
  "their account by making another payment."
1325
  msgstr ""
1326
+ "Cuando está activado, los miembros vencidos podrán acceder en el sistema "
1327
+ "pero no podrán ver ningún contenido protegido. Esto les permite renovar "
1328
+ "fácilmente su cuenta haciendo otro pago."
1329
 
1330
+ #: classes/class.swpm-settings.php:192
1331
  msgid "Membership Renewal URL"
1332
+ msgstr "URL de renovación de membresía"
1333
 
1334
+ #: classes/class.swpm-settings.php:193
1335
  msgid ""
1336
  "You can create a renewal page for your site. Read <a href=\"https://simple-"
1337
  "membership-plugin.com/creating-membership-renewal-button/\" target=\"_blank"
1338
  "\">this documentation</a> to learn how to create a renewal page."
1339
  msgstr ""
1340
+ "Puedes crear una página de renovación para tu sitio. Lee <a href=\"https://"
1341
  "simple-membership-plugin.com/creating-membership-renewal-button/\" target="
1342
+ "\"_blank\">esta documentación</a> para aprender cómo crear una página de "
1343
  "renovación."
1344
 
1345
+ #: classes/class.swpm-settings.php:195
1346
+ msgid "After Registration Redirect URL"
1347
+ msgstr "URL de redirección después de registro"
1348
+
1349
+ #: classes/class.swpm-settings.php:196
1350
+ msgid ""
1351
+ "You can enter an URL here to redirect the members to this page after they "
1352
+ "submit the registration form. Read <a href=\"https://simple-membership-"
1353
+ "plugin.com/configure-after-registration-redirect-for-members/\" target="
1354
+ "\"_blank\">this documentation</a> to learn how to setup after registration "
1355
+ "redirect."
1356
+ msgstr ""
1357
+ "Puedes introducir una URL aquí para redirigir a los miembros a esta página "
1358
+ "después de que envíen el formulario de registro. Lee <a href=\"https://"
1359
+ "simple-membership-plugin.com/configure-after-registration-redirect-for-"
1360
+ "members/\" target=\"_blank\">esta documentación</a> para aprender cómo "
1361
+ "configurar después de la redirección de registro."
1362
+
1363
+ #: classes/class.swpm-settings.php:198
1364
+ msgid "Enable Auto Login After Registration"
1365
+ msgstr "Activa el acceso automático después del registro"
1366
+
1367
+ #: classes/class.swpm-settings.php:199
1368
+ msgid ""
1369
+ "Use this option if you want the members to be automatically logged into your "
1370
+ "site right after they complete the registration. This option will override "
1371
+ "any after registration redirection and instead it will trigger the after "
1372
+ "login redirection. Read <a href=\"https://simple-membership-plugin.com/"
1373
+ "configure-auto-login-after-registration-members/\" target=\"_blank\">this "
1374
+ "documentation</a> to learn more."
1375
+ msgstr ""
1376
+ "Utiliza esta opción si deseas que los miembros se conecten automáticamente "
1377
+ "en tu sitio justo después de completar el registro. Esta opción anulará la "
1378
+ "redirección posterior al registro y, en su lugar, activará la redirección "
1379
+ "posterior de acceso. Lee <a href=\"https://simple-membership-plugin.com/"
1380
+ "configure-auto-login-after-registration-members/\" target=\"_blank\"> esta "
1381
+ "documentación </a> para saber más."
1382
+
1383
+ #: classes/class.swpm-settings.php:201
1384
+ msgid "After Logout Redirect URL"
1385
+ msgstr "Redirigir la URL después de cerrar sesión"
1386
+
1387
+ #: classes/class.swpm-settings.php:202
1388
+ msgid ""
1389
+ "You can enter an URL here to redirect the members to this page after they "
1390
+ "click the logout link to logout from your site."
1391
+ msgstr ""
1392
+ "Puedes introducir una URL aquí para redirigir a los miembros a esta página "
1393
+ "después de hacer clic en el enlace de cerrar sesión para cerrar la sesión en "
1394
+ "tu sitio."
1395
+
1396
+ #: classes/class.swpm-settings.php:204
1397
+ msgid "Logout Member on Browser Close"
1398
+ msgstr "Cerrar la sesión de miembro cuando se cierra el navegador"
1399
+
1400
+ #: classes/class.swpm-settings.php:205
1401
+ msgid ""
1402
+ "Enable this option if you want the member to be logged out of the account "
1403
+ "when he closes the browser."
1404
+ msgstr ""
1405
+ "Activar esta opción si deseas que el miembro se desconecte de la cuenta "
1406
+ "cuando cierra el navegador."
1407
+
1408
+ #: classes/class.swpm-settings.php:207
1409
  msgid "Allow Account Deletion"
1410
+ msgstr "Permite la eliminación de cuenta"
1411
 
1412
+ #: classes/class.swpm-settings.php:208
1413
  msgid "Allow users to delete their accounts."
1414
+ msgstr "Permite a los usuarios eliminar sus cuentas."
1415
+
1416
+ #: classes/class.swpm-settings.php:210
1417
+ msgid "Force Strong Password for Members"
1418
+ msgstr "Forzar una contraseña segura para los miembros"
1419
+
1420
+ #: classes/class.swpm-settings.php:211
1421
+ msgid ""
1422
+ "Enable this if you want the users to be forced to use a strong password for "
1423
+ "their accounts."
1424
+ msgstr ""
1425
+ "Activa esto si deseas que los usuarios se vean obligados a utilizar una "
1426
+ "contraseña segura para sus cuentas."
1427
 
1428
+ #: classes/class.swpm-settings.php:213
1429
  msgid "Use WordPress Timezone"
1430
+ msgstr "Usar zona horaria de WordPress"
1431
 
1432
+ #: classes/class.swpm-settings.php:214
1433
  msgid ""
1434
  "Use this option if you want to use the timezone value specified in your "
1435
  "WordPress General Settings interface."
1436
  msgstr ""
1437
+ "Utiliza esta opción si deseas utilizar el valor de zona horaria especificado "
1438
+ "en la interfaz de ajustes general de WordPress."
1439
 
1440
+ #: classes/class.swpm-settings.php:216
1441
  msgid "Auto Delete Pending Account"
1442
  msgstr "Borrar automáticamente las cuentas pendientes"
1443
 
1444
+ #: classes/class.swpm-settings.php:219
1445
  msgid "Select how long you want to keep \"pending\" account."
1446
+ msgstr "Selecciona cuánto tiempo deseas mantener la cuenta \"pendiente\"."
1447
 
1448
+ #: classes/class.swpm-settings.php:221
1449
  msgid "Admin Dashboard Access Permission"
1450
+ msgstr "Permiso de acceso al escritorio de administración"
1451
 
1452
+ #: classes/class.swpm-settings.php:224
1453
  msgid ""
1454
  "SWPM admin dashboard is accessible to admin users only (just like any other "
1455
  "plugin). You can allow users with other WP user role to access the SWPM "
1456
  "admin dashboard by selecting a value here."
1457
  msgstr ""
1458
+ "El escritorio de administración de SWPM sólo es accesible para usuarios de "
1459
+ "administración (como cualquier otro plugin). Puedes permitir los usuarios "
1460
+ "con otro perfil de usuario de WP acceder al escritorio de administración de "
1461
+ "SWPM seleccionando un valor aquí."
1462
+
1463
+ #: classes/class.swpm-settings.php:226
1464
+ msgid "Force WP User Synchronization"
1465
+ msgstr "Forzar la sincronización del usuario de WP"
1466
+
1467
+ #: classes/class.swpm-settings.php:227
1468
+ msgid ""
1469
+ "Enable this option if you want to force the member login to be synchronized "
1470
+ "with WP user account. This can be useful if you are using another plugin "
1471
+ "that uses WP user records. For example: bbPress plugin."
1472
+ msgstr ""
1473
+ "Activa esta opción si deseas forzar que se sincronice el acceso de miembro "
1474
+ "con la cuenta de usuario de WP. Esto puede ser útil si estas usando otro "
1475
+ "plugin que usa los registros de usuarios de WP. Por ejemplo: El plugin "
1476
+ "bbPress."
1477
+
1478
+ #: classes/class.swpm-settings.php:230
1479
+ msgid "Create Member Accounts for New WP Users"
1480
+ msgstr "Crear cuentas de miembros para nuevos usuarios de WP"
1481
+
1482
+ #: classes/class.swpm-settings.php:232
1483
+ msgid "Enable Auto Create Member Accounts"
1484
+ msgstr "Activar auto crear cuentas de miembros"
1485
+
1486
+ #: classes/class.swpm-settings.php:233
1487
+ msgid ""
1488
+ "Enable this option to automatically create member accounts for any new WP "
1489
+ "user that is created by another plugin."
1490
+ msgstr ""
1491
+ "Activa esta opción para crear automáticamente cuentas de miembro para "
1492
+ "cualquier usuario nuevo de WP creado por otro plugin."
1493
+
1494
+ #: classes/class.swpm-settings.php:236
1495
+ msgid "Default Membership Level"
1496
+ msgstr "Nivel de membresía por defecto"
1497
+
1498
+ #: classes/class.swpm-settings.php:239
1499
+ msgid ""
1500
+ "When automatically creating a member account using this feature, the "
1501
+ "membership level of the user will be set to the one you specify here."
1502
+ msgstr ""
1503
+ "Al crear automáticamente una cuenta de miembro utilizando esta "
1504
+ "característica, el nivel de membresía del usuario se establecerá en el que "
1505
+ "especifiques aquí."
1506
+
1507
+ #: classes/class.swpm-settings.php:245
1508
+ msgid ""
1509
+ "When automatically creating a member account using this feature, the "
1510
+ "membership account status of the user will be set to the one you specify "
1511
+ "here."
1512
+ msgstr ""
1513
+ "Al crear automáticamente una cuenta de miembro utilizando esta "
1514
+ "característica, el estado de la cuenta de membresía del usuario se "
1515
+ "establecerá en el que especifiques aquí."
1516
+
1517
+ #: classes/class.swpm-settings.php:247
1518
+ msgid "Payment Notification Forward URL"
1519
+ msgstr "URL de reenvío de aviso de pago"
1520
 
1521
+ #: classes/class.swpm-settings.php:248
1522
+ msgid ""
1523
+ "You can enter an URL here to forward the payment notification after the "
1524
+ "membership payment has been processed by this plugin. Useful if you want to "
1525
+ "forward the payment notification to an external script for further "
1526
+ "processing."
1527
+ msgstr ""
1528
+ "Puedes introducir una URL aquí para reenviar el aviso de pago después de que "
1529
+ "este plugin haya procesado el pago de la membresía. Útil si deseas reenviar "
1530
+ "el aviso de pago a un script externo para más procesamiento."
1531
+
1532
+ #: classes/class.swpm-settings.php:251 views/add.php:65
1533
+ msgid "Terms and Conditions"
1534
+ msgstr "Términos y Condiciones"
1535
+
1536
+ #: classes/class.swpm-settings.php:253
1537
+ msgid "Enable Terms and Conditions"
1538
+ msgstr "Activar términos y condiciones"
1539
+
1540
+ #: classes/class.swpm-settings.php:254
1541
+ msgid "Users must accept the terms before they can complete the registration."
1542
+ msgstr ""
1543
+ "Los usuarios deben aceptar los términos antes de que puedan completar el "
1544
+ "registro."
1545
+
1546
+ #: classes/class.swpm-settings.php:255
1547
+ msgid "Terms and Conditions Page URL"
1548
+ msgstr "URL de la página de Términos y condiciones"
1549
+
1550
+ #: classes/class.swpm-settings.php:256
1551
+ msgid ""
1552
+ "Enter the URL of your terms and conditions page. You can create a WordPress "
1553
+ "page and specify your terms in there then specify the URL of that page in "
1554
+ "the above field."
1555
+ msgstr ""
1556
+ "Introduce la URL de tu página de términos y condiciones. Puedes crear una "
1557
+ "página de WordPress y especificar tus términos allí, luego introduce la URL "
1558
+ "de esa página en el campo de arriba."
1559
+
1560
+ #: classes/class.swpm-settings.php:257
1561
+ msgid "Enable Privacy Policy"
1562
+ msgstr "Activar política de privacidad"
1563
+
1564
+ #: classes/class.swpm-settings.php:258
1565
+ msgid "Users must accept it before they can complete the registration."
1566
+ msgstr ""
1567
+ "Los usuarios deben aceptarlo antes de que puedan completar el registro."
1568
+
1569
+ #: classes/class.swpm-settings.php:259
1570
+ msgid "Privacy Policy Page URL"
1571
+ msgstr "URL de la página de Política de privacidad"
1572
+
1573
+ #: classes/class.swpm-settings.php:260
1574
+ msgid "Enter the URL of your privacy policy page."
1575
+ msgstr "Introduce la URL de tu página de política de privacidad."
1576
+
1577
+ #: classes/class.swpm-settings.php:350 classes/class.swpm-settings.php:396
1578
+ #: classes/class.swpm-settings.php:425
1579
+ msgid "Settings updated!"
1580
+ msgstr "¡Ajustes actualizados!"
1581
+
1582
+ #: classes/class.swpm-settings.php:355
1583
  msgid "General Plugin Settings."
1584
+ msgstr "Ajustes generales del plugin."
1585
 
1586
+ #: classes/class.swpm-settings.php:359
1587
  msgid "Page Setup and URL Related settings."
1588
+ msgstr "Ajustes de la página y la configuración de las URL relacionadas."
1589
 
1590
+ #: classes/class.swpm-settings.php:362
1591
+ msgid ""
1592
+ "The following pages are required for the plugin to function correctly. These "
1593
+ "pages were automatically created by the plugin at install time."
1594
+ msgstr ""
1595
+ "Las siguientes páginas son necesarias para que el plugin funcione "
1596
+ "correctamente. Estas páginas fueron creadas automáticamente por el plugin "
1597
+ "cuando se instaló."
1598
+
1599
+ #: classes/class.swpm-settings.php:367
1600
  msgid "Testing and Debug Related Settings."
1601
  msgstr "Pruebas y ajustes relacionados con depuración."
1602
 
1603
+ #: classes/class.swpm-settings.php:371
1604
  msgid ""
1605
  "This email will be sent to your users when they complete the registration "
1606
  "and become a member."
1607
  msgstr ""
1608
+ "Este correo electrónico se enviará a tus usuarios cuando completen el "
1609
  "registro y se conviertan en miembros."
1610
 
1611
+ #: classes/class.swpm-settings.php:375
1612
  msgid ""
1613
  "This email will be sent to your users when they use the password reset "
1614
  "functionality."
1615
  msgstr ""
1616
+ "Este correo electrónico se enviará a tus usuarios cuando utilicen la "
1617
+ "funcionalidad de restablecimiento de contraseña."
1618
 
1619
+ #: classes/class.swpm-settings.php:381
1620
+ msgid ""
1621
+ "This interface lets you custsomize the various emails that gets sent to your "
1622
+ "members for various actions. The default settings should be good to get your "
1623
+ "started."
1624
+ msgstr ""
1625
+ "Esta interfaz te permite personalizar los diversos correos electrónicos que "
1626
+ "se envían a tus miembros para diversas acciones. La configuración por "
1627
+ "defecto debería ser buena para comenzar."
1628
+
1629
+ #: classes/class.swpm-settings.php:385 views/admin_tools_settings.php:82
1630
+ msgid "This documentation"
1631
+ msgstr "Esta documentación"
1632
+
1633
+ #: classes/class.swpm-settings.php:386
1634
+ msgid ""
1635
+ " explains what email merge tags you can use in the email body field to "
1636
+ "customize it (if you want to)."
1637
+ msgstr ""
1638
+ " explica qué etiquetas de combinación de correo electrónico puedes usar en "
1639
+ "el campo de cuerpo de correo electrónico para personalizarlo (si lo deseas)."
1640
+
1641
+ #: classes/class.swpm-settings.php:399
1642
  msgid "Settings in this section apply to all emails."
1643
  msgstr ""
1644
  "Los ajustes de esta sección se aplican a todos los correos electrónicos."
1645
 
1646
+ #: classes/class.swpm-settings.php:403
1647
  msgid ""
1648
  "This email will be sent to your users after account upgrade (when an "
1649
  "existing member pays for a new membership level)."
1650
  msgstr ""
1651
+ "Este correo electrónico se enviará a tus usuarios después de la "
1652
  "actualización de cuenta (cuando un miembro existente paga por un nuevo nivel "
1653
  "de membresía)."
1654
 
1655
+ #: classes/class.swpm-settings.php:407
1656
  msgid ""
1657
  "This email will be sent to your members when you use the bulk account "
1658
  "activate and notify action."
1659
  msgstr ""
1660
+ "Este correo electrónico se enviará a tus miembros cuando uses la acción de "
1661
+ "activar y notificar la cuenta en lote."
1662
+
1663
+ #: classes/class.swpm-settings.php:408
1664
+ msgid ""
1665
+ " You cannot use email merge tags in this email. You can only use generic "
1666
+ "text."
1667
+ msgstr ""
1668
+ " No puedes usar etiquetas de combinación de correo electrónico en este "
1669
+ "correo electrónico. Solo puedes usar texto genérico."
1670
+
1671
+ #: classes/class.swpm-settings.php:413
1672
+ msgid ""
1673
+ "This email will be sent if Email Activation is enabled for a Membership "
1674
+ "Level."
1675
+ msgstr ""
1676
+ "Este correo electrónico se enviará si la activación de correo electrónico "
1677
+ "está activada para un nivel de membresía."
1678
 
1679
+ #: classes/class.swpm-settings.php:417
1680
  msgid ""
1681
  "This email will be sent to prompt users to complete registration after the "
1682
  "payment."
1684
  "Este correo electrónico se enviará a los usuarios para completar el registro "
1685
  "después del pago."
1686
 
1687
+ #: classes/class.swpm-settings.php:428
1688
  msgid "This page allows you to configure some advanced features of the plugin."
1689
  msgstr ""
1690
+ "Esta página te permite configurar algunas características avanzadas del "
1691
+ "plugin."
1692
 
1693
+ #: classes/class.swpm-settings.php:432
1694
+ msgid ""
1695
+ "This section allows you to configure automatic creation of member accounts "
1696
+ "when new WP User records are created by another plugin. It can be useful if "
1697
+ "you are using another plugin that creates WP user records and you want them "
1698
+ "to be recognized in the membership plugin."
1699
+ msgstr ""
1700
+ "Esta sección te permite configurar la creación automática de cuentas de "
1701
+ "miembros cuando otro plugin crea nuevos registros de usuario de WP. Puede "
1702
+ "ser útil si estás utilizando otro plugin que crea registros de usuarios de "
1703
+ "WP y deseas que sean reconocidos en el plugin de membresía."
1704
+
1705
+ #: classes/class.swpm-settings.php:436
1706
+ msgid ""
1707
+ "This section allows you to configure terms and conditions and privacy policy "
1708
+ "that users must accept at registration time."
1709
+ msgstr ""
1710
+ "Esta sección te permite configurar los términos y condiciones y la política "
1711
+ "de privacidad que los usuarios deben aceptar en el momento del registro."
1712
+
1713
+ #: classes/class.swpm-settings.php:565
1714
  msgid "Simple WP Membership::Settings"
1715
  msgstr "Simple WP Membership::Ajustes"
1716
 
1717
+ #: classes/class.swpm-utils-member.php:36
1718
+ #: classes/class.swpm-utils-member.php:44
1719
+ #: classes/class.swpm-utils-member.php:52
1720
+ #: classes/class.swpm-utils-member.php:62
1721
  msgid "User is not logged in."
1722
  msgstr "El usuario no está conectado."
1723
 
1724
+ #: classes/class.swpm-utils-member.php:80
1725
+ msgid "No Expiry"
1726
+ msgstr "Sin caducidad"
1727
+
1728
+ #: classes/class.swpm-utils-misc.php:50
1729
  msgid "Registration"
1730
  msgstr "Registro"
1731
 
1732
+ #: classes/class.swpm-utils-misc.php:73
1733
  msgid "Member Login"
1734
  msgstr "Acceso de miembro"
1735
 
1736
+ #: classes/class.swpm-utils-misc.php:96
1737
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:117
1738
  msgid "Profile"
1739
  msgstr "Perfil"
1740
 
1741
+ #: classes/class.swpm-utils-misc.php:119
1742
  msgid "Password Reset"
1743
  msgstr "Restablecer la contraseña"
1744
 
1745
+ #: classes/class.swpm-utils-misc.php:168
1746
+ #, php-format
1747
+ msgid ""
1748
+ "You will be automatically redirected in a few seconds. If not, please %s."
1749
+ msgstr ""
1750
+ "Serás redirigido automáticamente en unos pocos segundos. Si no, por favor %s."
1751
+
1752
+ #: classes/class.swpm-utils-misc.php:172
1753
+ msgid "Action Status"
1754
+ msgstr "Estado de la acción"
1755
+
1756
+ #: classes/class.swpm-utils-misc.php:274
1757
  msgid "Not a Member?"
1758
  msgstr "¿Aún no eres miembro?"
1759
 
1760
+ #: classes/class.swpm-utils-misc.php:285
1761
  msgid "renew"
1762
  msgstr "renovar"
1763
 
1764
+ #: classes/class.swpm-utils-misc.php:285
1765
  msgid " your account to gain access to this content."
1766
+ msgstr " tu cuenta para acceder a este contenido."
1767
 
1768
+ #: classes/class.swpm-utils-misc.php:343 classes/class.swpm-utils-misc.php:349
 
1769
  msgid "Error! This action ("
1770
  msgstr "¡Error! Esta acción ("
1771
 
1772
+ #: classes/class.swpm-utils-misc.php:421
1773
+ msgid "(Please Select)"
1774
+ msgstr "(Por favor, elige)"
1775
+
1776
+ #: classes/class.swpm-utils-template.php:38
1777
  msgid "Error! Failed to find a template path for the specified template: "
1778
  msgstr ""
1779
+ "¡Error! No se pudo encontrar una ruta de plantilla para la plantilla "
1780
  "especificada: "
1781
 
1782
+ #: classes/class.swpm-utils.php:101
1783
  msgid "Never"
1784
  msgstr "Nunca"
1785
 
1786
+ #: classes/class.swpm-utils.php:116 views/admin_members_list.php:19
1787
  msgid "Active"
1788
+ msgstr "Activada"
1789
 
1790
+ #: classes/class.swpm-utils.php:117 views/admin_members_list.php:20
1791
  msgid "Inactive"
1792
  msgstr "Inactivo"
1793
 
1794
+ #: classes/class.swpm-utils.php:118 views/admin_members_list.php:21
1795
+ msgid "Activation Required"
1796
+ msgstr "Activación obligatoria"
1797
+
1798
+ #: classes/class.swpm-utils.php:119 views/admin_members_list.php:22
1799
  msgid "Pending"
1800
  msgstr "Pendiente"
1801
 
1802
+ #: classes/class.swpm-utils.php:120 views/admin_members_list.php:24
1803
  msgid "Expired"
1804
  msgstr "Caducado"
1805
 
1806
+ #: classes/class.swpm-utils.php:414 views/account_delete_warning.php:3
1807
  msgid "Delete Account"
1808
  msgstr "Borrar cuenta"
1809
 
1810
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:75
1811
  msgid "Payment Button ID"
1812
  msgstr "ID del botón de pago"
1813
 
1814
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:76
1815
  msgid "Payment Button Title"
1816
  msgstr "Título del botón de pago"
1817
 
1818
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:77
1819
  msgid "Membership Level ID"
1820
  msgstr "ID de nivel de membresía"
1821
 
1822
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:78
1823
  msgid "Button Type"
1824
  msgstr "Tipo de botón"
1825
 
1826
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:79
1827
  msgid "Button Shortcode"
1828
+ msgstr "Botón del shortcode"
1829
 
1830
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:127
1831
+ #: views/admin_members_list.php:9
1832
+ #: views/payments/admin_all_payment_transactions.php:32
1833
  msgid "The selected entry was deleted!"
1834
  msgstr "¡La entrada seleccionada fue borrada!"
1835
 
1836
+ #: classes/admin-includes/class.swpm-payments-admin-menu.php:21
1837
  msgid "Simple Membership::Payments"
1838
  msgstr "Simple Membership::Pagos"
1839
 
1840
+ #: classes/admin-includes/class.swpm-payments-admin-menu.php:25
1841
  msgid "Transactions"
1842
  msgstr "Transacciones"
1843
 
1844
+ #: classes/admin-includes/class.swpm-payments-admin-menu.php:26
1845
  msgid "Manage Payment Buttons"
1846
+ msgstr "Administrar botones de pago"
1847
 
1848
+ #: classes/admin-includes/class.swpm-payments-admin-menu.php:27
1849
+ #: views/payments/admin_payment_buttons.php:27
1850
  msgid "Create New Button"
1851
  msgstr "Crear nuevo botón"
1852
 
1853
+ #: classes/admin-includes/class.swpm-payments-list-table.php:57
1854
+ #: views/template-1.php:95 views/template-2.php:97
1855
  msgid "View Profile"
1856
  msgstr "Ver perfil"
1857
 
1858
+ #: classes/admin-includes/class.swpm-payments-list-table.php:76
1859
  msgid "Row ID"
1860
+ msgstr "ID de la fila"
1861
 
1862
+ #: classes/admin-includes/class.swpm-payments-list-table.php:77
1863
+ #: views/forgot_password.php:5
1864
  msgid "Email Address"
1865
  msgstr "Dirección de correo electrónico"
1866
 
1867
+ #: classes/admin-includes/class.swpm-payments-list-table.php:80
1868
  msgid "Member Profile"
1869
+ msgstr "Perfil de miembro"
 
 
 
 
1870
 
1871
+ #: classes/admin-includes/class.swpm-payments-list-table.php:82
1872
  msgid "Transaction ID"
1873
  msgstr "ID de transacción"
1874
 
1875
+ #: classes/admin-includes/class.swpm-payments-list-table.php:83
1876
  msgid "Subscriber ID"
1877
+ msgstr "ID del suscriptor"
1878
 
1879
+ #: classes/admin-includes/class.swpm-payments-list-table.php:84
1880
  msgid "Amount"
1881
  msgstr "Cantidad"
1882
 
1883
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:60
1884
  msgid "Your membership profile will be updated to reflect the payment."
1885
  msgstr "Tu perfil de membresía se actualizará para reflejar el pago."
1886
 
1887
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:61
1888
  msgid "Your profile username: "
1889
+ msgstr "Nombre de usuario de tu perfil: "
1890
 
1891
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:73
1892
  msgid "Click on the following link to complete the registration."
1893
  msgstr "Haga clic en el siguiente enlace para completar el registro."
1894
 
1895
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:74
1896
  msgid "Click here to complete your paid registration"
1897
  msgstr "Haz clic aquí para completar tu registro de pago"
1898
 
1899
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:79
1900
  msgid ""
1901
  "If you have just made a membership payment then your payment is yet to be "
1902
  "processed. Please check back in a few minutes. An email will be sent to you "
1906
  "procesado. Por favor vuelve a revisarlo en unos minutos. Un correo "
1907
  "electrónico te será enviado con los detalles en breve."
1908
 
1909
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:93
1910
  msgid "Expiry: "
1911
  msgstr "Caducidad: "
1912
 
1913
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:95
1914
  msgid "You are not logged-in as a member"
1915
+ msgstr "No estás conectado como miembro"
1916
+
1917
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:115
1918
+ msgid "Logged in as: "
1919
+ msgstr "Conectado como: "
1920
+
1921
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:118
1922
+ #: views/loggedin.php:31
1923
+ msgid "Logout"
1924
+ msgstr "Cerrar sesión"
1925
+
1926
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:121
1927
+ msgid "Login Here"
1928
+ msgstr "Accede aquí"
1929
+
1930
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:122
1931
+ msgid "Not a member? "
1932
+ msgstr "¿No eres miembro? "
1933
+
1934
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:123
1935
+ msgid "Join Now"
1936
+ msgstr "Únete ahora"
1937
+
1938
+ #: ipn/swpm-smart-checkout-ipn.php:260 ipn/swpm-smart-checkout-ipn.php:285
1939
+ #, php-format
1940
+ msgid "Error occured during payment verification. Error code: %d. Message: %s"
1941
+ msgstr ""
1942
+ "Se ha producido un error durante la verificación del pago. Código de error: "
1943
+ "%d. Mensaje: %s"
1944
+
1945
+ #: ipn/swpm-smart-checkout-ipn.php:298
1946
+ #, php-format
1947
+ msgid ""
1948
+ "Payment check failed: invalid amount received. Expected %s %s, got %s %s."
1949
+ msgstr ""
1950
+ "Error en la comprobación de pago: se ha recibido la cantidad no válida. Se "
1951
+ "esperaba %s %s, pero recibí %s %s."
1952
+
1953
+ #: ipn/swpm-smart-checkout-ipn.php:315
1954
+ msgid "Empty payment data received."
1955
+ msgstr "Datos de pago vacíos recibidos."
1956
+
1957
+ #: ipn/swpm-smart-checkout-ipn.php:355
1958
+ msgid "IPN product validation failed. Check debug log for more details."
1959
+ msgstr ""
1960
+ "La validación del producto IPN falló. Comprueba el registro de depuración "
1961
+ "para más detalles."
1962
+
1963
+ #: views/account_delete_warning.php:7
1964
+ msgid ""
1965
+ "You are about to delete an account. This will delete user data associated "
1966
+ "with this account. "
1967
+ msgstr ""
1968
+ "Estás a punto de borrar una cuenta. Esto eliminará los datos de usuario "
1969
+ "asociados con esta cuenta. "
1970
 
1971
+ #: views/account_delete_warning.php:8
1972
+ msgid "It will also delete associated WordPress user account."
1973
+ msgstr "También borrara la cuenta de usuario de WordPress asociada."
1974
+
1975
+ #: views/account_delete_warning.php:9
1976
+ msgid ""
1977
+ "(NOTE: for safety, we do not allow deletion of any associated WordPress "
1978
+ "account with administrator role)."
1979
+ msgstr ""
1980
+ "(NOTA: por seguridad, no permitimos borrar ninguna cuenta de WordPress "
1981
+ "asociada con el perfil de administrador)."
1982
+
1983
+ #: views/account_delete_warning.php:10
1984
+ msgid "Continue?"
1985
+ msgstr "¿Continuar?"
1986
+
1987
+ #: views/account_delete_warning.php:13
1988
+ msgid "Password: "
1989
+ msgstr "Contraseña: "
1990
+
1991
+ #: views/account_delete_warning.php:14
1992
+ msgid "Confirm Account Deletion"
1993
+ msgstr "Confirmar eliminación de cuenta"
1994
+
1995
+ #: views/add.php:24 views/admin_add.php:19 views/admin_edit.php:44
1996
+ #: views/edit.php:31 views/login.php:17
1997
  msgid "Password"
1998
  msgstr "Contraseña"
1999
 
2000
+ #: views/add.php:28 views/edit.php:35
2001
  msgid "Repeat Password"
2002
  msgstr "Repetir contraseña"
2003
 
2004
+ #: views/add.php:65
2005
+ msgid "I accept the "
2006
+ msgstr "Acepto los "
2007
+
2008
+ #: views/add.php:77
2009
+ msgid "I agree to the "
2010
+ msgstr "Estoy de acuerdo con la "
2011
+
2012
+ #: views/add.php:77
2013
+ msgid "Privacy Policy"
2014
+ msgstr "Política de privacidad"
2015
+
2016
+ #: views/add.php:88
2017
  msgid "Register"
2018
  msgstr "Registrarse"
2019
 
2020
+ #: views/admin_add.php:7
2021
  msgid "Create a brand new user and add it to this site."
2022
  msgstr "Crear un nuevo usuario y agregarlo a esta web."
2023
 
2024
+ #: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:12
2025
+ #: views/admin_add_level.php:16 views/admin_add_level.php:20
2026
+ #: views/admin_edit.php:19 views/admin_edit.php:40
2027
+ #: views/admin_edit_level.php:16 views/admin_edit_level.php:20
2028
+ #: views/admin_edit_level.php:24
 
 
 
 
 
2029
  msgid "(required)"
2030
  msgstr "(obligatorio)"
2031
 
2032
+ #: views/admin_add.php:15 views/admin_edit.php:40
 
2033
  msgid "E-mail"
2034
  msgstr "Correo electrónico"
2035
 
2036
+ #: views/admin_add.php:19
2037
  msgid "(twice, required)"
2038
  msgstr "(dos veces, obligatorio)"
2039
 
2040
+ #: views/admin_add.php:24 views/admin_edit.php:48
 
2041
  msgid "Strength indicator"
2042
  msgstr "Indicador de fortaleza"
2043
 
2044
+ #: views/admin_add.php:25 views/admin_edit.php:49
 
2045
  msgid ""
2046
  "Hint: The password should be at least seven characters long. To make it "
2047
  "stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
2051
  "fuerte utiliza mayúsculas y minúsculas, números y símbolos como ! \" ? $ % ^ "
2052
  "&amp; )."
2053
 
2054
+ #: views/admin_add.php:29 views/admin_edit.php:53 views/loggedin.php:10
 
 
2055
  msgid "Account Status"
2056
  msgstr "Estado de la cuenta"
2057
 
2058
+ #: views/admin_add.php:39
2059
  msgid "Add New Member "
2060
  msgstr "Añadir nuevo miembro "
2061
 
2062
+ #: views/admin_addon_settings.php:3
2063
  msgid ""
2064
  "Some of the simple membership plugin's addon settings and options will be "
2065
  "displayed here (if you have them)"
2066
  msgstr ""
2067
+ "Algunos de los ajustes y opciones de las extensiones de simple membership "
2068
+ "plugin se mostrarán aquí (si los tienes)"
2069
 
2070
+ #: views/admin_addon_settings.php:8
2071
  msgid "Save Changes"
2072
  msgstr "Guardar cambios"
2073
 
2074
+ #: views/admin_add_level.php:6
2075
+ msgid "Add Membership Level"
2076
+ msgstr "Añadir nuevo nivel de membresía"
2077
+
2078
+ #: views/admin_add_level.php:7
2079
  msgid "Create new membership level."
2080
  msgstr "Crear un nuevo nivel de membresía."
2081
 
2082
+ #: views/admin_add_level.php:12 views/admin_edit_level.php:16
 
2083
  msgid "Membership Level Name"
2084
  msgstr "Nombre del nivel de membresía"
2085
 
2086
+ #: views/admin_add_level.php:16 views/admin_edit_level.php:20
 
2087
  msgid "Default WordPress Role"
2088
  msgstr "Perfil por defecto de WordPress"
2089
 
2090
+ #: views/admin_add_level.php:20 views/admin_edit_level.php:24
 
2091
  msgid "Access Duration"
2092
  msgstr "Duración del acceso"
2093
 
2094
+ #: views/admin_add_level.php:23
2095
  msgid "No Expiry (Access for this level will not expire until cancelled"
2096
+ msgstr ""
2097
+ "Sin caducidad (el acceso a este nivel no expirará hasta que se cancele)"
2098
+
2099
+ #: views/admin_add_level.php:24 views/admin_add_level.php:26
2100
+ #: views/admin_add_level.php:28 views/admin_add_level.php:30
2101
+ #: views/admin_edit_level.php:28 views/admin_edit_level.php:31
2102
+ #: views/admin_edit_level.php:34 views/admin_edit_level.php:37
 
 
 
2103
  msgid "Expire After"
2104
+ msgstr "Caduca después de"
2105
 
2106
+ #: views/admin_add_level.php:25 views/admin_edit_level.php:29
 
2107
  msgid "Days (Access expires after given number of days)"
2108
  msgstr "Días (el acceso caduca después del número establecido de días)"
2109
 
2110
+ #: views/admin_add_level.php:27
2111
  msgid "Weeks (Access expires after given number of weeks"
2112
  msgstr "Semanas (el acceso caduca después del número establecido de semanas"
2113
 
2114
+ #: views/admin_add_level.php:29 views/admin_edit_level.php:35
 
2115
  msgid "Months (Access expires after given number of months)"
2116
+ msgstr "Meses (El acceso caduca después del número establecido de meses)"
2117
 
2118
+ #: views/admin_add_level.php:31 views/admin_edit_level.php:38
 
2119
  msgid "Years (Access expires after given number of years)"
2120
  msgstr "Años (el acceso caduca después del número establecido de años)"
2121
 
2122
+ #: views/admin_add_level.php:32 views/admin_edit_level.php:40
 
2123
  msgid "Fixed Date Expiry"
2124
+ msgstr "Fecha de caducidad fija"
2125
 
2126
+ #: views/admin_add_level.php:33 views/admin_edit_level.php:41
 
2127
  msgid "(Access expires on a fixed date)"
2128
  msgstr "(El acceso caduca en una fecha establecida)"
2129
 
2130
+ #: views/admin_add_level.php:38 views/admin_edit_level.php:46
2131
+ msgid "Email Activation"
2132
+ msgstr "Activación por correo electrónico"
2133
+
2134
+ #: views/admin_add_level.php:43
2135
+ msgid ""
2136
+ "Enable new user activation via email. When enabled, members will need to "
2137
+ "click on an activation link that is sent to their email address to activate "
2138
+ "the account. Useful for free membership. "
2139
+ msgstr ""
2140
+ "Activa la activación del nuevo usuario a través de correo electrónico. "
2141
+ "Cuando esté activado, los miembros deberán hacer clic en un enlace de "
2142
+ "activación que se envía a su dirección de correo electrónico para activar la "
2143
+ "cuenta. Útil para la membresía gratis. "
2144
+
2145
+ #: views/admin_add_level.php:44 views/admin_edit_level.php:52
2146
+ msgid "View Documentation"
2147
+ msgstr "Ver la documentación"
2148
+
2149
+ #: views/admin_add_level.php:45 views/admin_edit_level.php:53
2150
+ msgid "Note:"
2151
+ msgstr "Nota:"
2152
+
2153
+ #: views/admin_add_level.php:45 views/admin_edit_level.php:53
2154
+ msgid ""
2155
+ "If enabled, decryptable member password is temporarily stored in the "
2156
+ "database until the account is activated."
2157
+ msgstr ""
2158
+ "Si está activado, la contraseña de miembro descifrable se almacena "
2159
+ "temporalmente en la base de datos hasta que se activa la cuenta."
2160
+
2161
+ #: views/admin_add_level.php:52
2162
  msgid "Add New Membership Level "
2163
  msgstr "Añadir nuevo nivel de membresía "
2164
 
2165
+ #: views/admin_add_ons_page.php:7
2166
  msgid "Simple WP Membership::Add-ons"
2167
  msgstr "Simple WP Membership::Extensiones"
2168
 
2169
+ #: views/admin_category_list.php:5
2170
  msgid ""
2171
  "First of all, globally protect the category on your site by selecting "
2172
  "\"General Protection\" from the drop-down box below and then select the "
2173
  "categories that should be protected from non-logged in users."
2174
  msgstr ""
2175
+ "En primer lugar, protege las categorías de tu sitio seleccionando "
2176
+ "\"Protección general\" en el siguiente desplegable y selecciona las "
2177
+ "categorías que deseas proteger de los usuarios que no están conectados."
2178
 
2179
+ #: views/admin_category_list.php:8
2180
  msgid ""
2181
  "Next, select an existing membership level from the drop-down box below and "
2182
  "then select the categories you want to grant access to (for that particular "
2183
  "membership level)."
2184
  msgstr ""
2185
+ "A continuación, selecciona un nivel de membresía existente en el cuadro "
2186
+ "desplegable de abajo y, a continuación, selecciona las categorías a las que "
2187
+ "deseas conceder el acceso (para ese nivel de membresía en particular)."
2188
+
2189
+ #: views/admin_category_list.php:11 views/admin_post_list.php:11
2190
+ msgid "Read the "
2191
+ msgstr "Leer la "
2192
+
2193
+ #: views/admin_category_list.php:11
2194
+ msgid "category protection documentation"
2195
+ msgstr "documentación de protección de categoría"
2196
 
2197
+ #: views/admin_category_list.php:17 views/admin_post_list.php:27
2198
  msgid "Membership Level:"
2199
  msgstr "Nivel de membresía:"
2200
 
2201
+ #: views/admin_category_list.php:19 views/admin_post_list.php:29
2202
+ msgid "General Protection"
2203
+ msgstr "Protección general"
2204
+
2205
+ #: views/admin_category_list.php:23 views/admin_post_list.php:33
2206
+ #: views/edit.php:83
2207
  msgid "Update"
2208
  msgstr "Actualizar"
2209
 
2210
+ #: views/admin_edit.php:11
2211
  msgid "Edit Member"
2212
  msgstr "Editar usuario"
2213
 
2214
+ #: views/admin_edit.php:13
2215
  msgid "Edit existing member details."
2216
  msgstr "Editar detalles de los miembros existentes."
2217
 
2218
+ #: views/admin_edit.php:14
2219
  msgid " You are currenty editing member with member ID: "
2220
+ msgstr " Actualmente estas editando un miembro con el ID de miembro: "
2221
 
2222
+ #: views/admin_edit.php:44
2223
  msgid "(twice, leave empty to retain old password)"
2224
+ msgstr "(dos veces, déjalo en blanco para mantener la contraseña actual)"
2225
+
2226
+ #: views/admin_edit.php:59
2227
+ msgid ""
2228
+ "This is the member's account status. If you want to manually activate an "
2229
+ "expired member's account then read"
2230
+ msgstr ""
2231
+ "Este es el estado de la cuenta del miembro. Si deseas activar manualmente la "
2232
+ "cuenta de un miembro caducado, entonces lee"
2233
+
2234
+ #: views/admin_edit.php:60
2235
+ msgid "this documentation"
2236
+ msgstr "esta documentación"
2237
+
2238
+ #: views/admin_edit.php:61
2239
+ msgid " to learn how to do it."
2240
+ msgstr " para aprender cómo hacerlo."
2241
 
2242
+ #: views/admin_edit.php:66
2243
  msgid "Notify User"
2244
  msgstr "Notificar al usuario"
2245
 
2246
+ #: views/admin_edit.php:69
2247
+ msgid ""
2248
+ "You can use this option to send a quick notification email to this member "
2249
+ "(the email will be sent when you hit the save button below)."
2250
+ msgstr ""
2251
+ "Puedes usar esta opción para enviar un correo electrónico de notificación "
2252
+ "rápida a este miembro (el correo electrónico se enviará cuando presiones el "
2253
+ "botón guardar a continuación)."
2254
+
2255
+ #: views/admin_edit.php:75
2256
  msgid "Subscriber ID/Reference"
2257
+ msgstr "ID/referencia del suscriptor"
2258
 
2259
+ #: views/admin_edit.php:79
2260
  msgid "Last Accessed Date"
2261
+ msgstr "Última fecha de acceso"
2262
 
2263
+ #: views/admin_edit.php:82 views/admin_edit.php:89
 
2264
  msgid "This value gets updated when this member logs into your site."
2265
+ msgstr "Este valor se actualiza cuando este miembro accede a tu sitio."
2266
 
2267
+ #: views/admin_edit.php:86
2268
  msgid "Last Accessed From IP"
2269
+ msgstr "Último acceso desde el IP"
2270
 
2271
+ #: views/admin_edit.php:97
2272
+ msgid "Save Data"
2273
+ msgstr "Guardar datos"
2274
 
2275
+ #: views/admin_edit.php:102
2276
  msgid "Delete User Profile"
2277
  msgstr "Eliminar perfil del usuario"
2278
 
2279
+ #: views/admin_edit_level.php:6
2280
  msgid "Edit membership level"
2281
  msgstr "Editar nivel de membresía"
2282
 
2283
+ #: views/admin_edit_level.php:9
2284
  msgid ""
2285
  "You can edit details of a selected membership level from this interface. "
2286
  msgstr ""
2287
+ "Puedes editar los detalles de un nivel de membresía seleccionado desde este "
2288
  "interfaz. "
2289
 
2290
+ #: views/admin_edit_level.php:10
2291
  msgid "You are currently editing: "
2292
+ msgstr "Actualmente estas editando: "
2293
 
2294
+ #: views/admin_edit_level.php:27
2295
  msgid "No Expiry (Access for this level will not expire until cancelled)"
2296
  msgstr "Sin caducidad (el acceso a este nivel no expirará hasta que se anule)"
2297
 
2298
+ #: views/admin_edit_level.php:32
2299
  msgid "Weeks (Access expires after given number of weeks)"
2300
+ msgstr "Semanas (el acceso caducara después del número establecido de semanas)"
2301
+
2302
+ #: views/admin_edit_level.php:51
2303
+ msgid ""
2304
+ "Enable new user activation via email. When enabled, members will need to "
2305
+ "click on an activation link that is sent to their email address to activate "
2306
+ "the account. Useful for free membership."
2307
+ msgstr ""
2308
+ "Activa la activación del nuevo usuario a través de correo electrónico. "
2309
+ "Cuando esté activado, los miembros deberán hacer clic en un enlace de "
2310
+ "activación que se envía a su dirección de correo electrónico para activar la "
2311
+ "cuenta. Útil para la membresía gratis."
2312
 
2313
+ #: views/admin_edit_level.php:60
2314
+ msgid "Save Membership Level "
2315
+ msgstr "Guardar nivel de membresía "
2316
 
2317
+ #: views/admin_membership_manage.php:18
2318
  msgid "Example Content Protection Settings"
2319
+ msgstr "Ejemplo de ajustes de contenido protegido"
2320
 
2321
+ #: views/admin_members_list.php:18
2322
+ msgid "All"
2323
+ msgstr "Todos"
2324
+
2325
+ #: views/admin_members_list.php:23
2326
+ msgid "Incomplete"
2327
+ msgstr "Incompleto"
2328
+
2329
+ #: views/admin_member_form_common_part.php:23
2330
+ #: includes/swpm_mda_show_profile.php:37
2331
  msgid "Gender"
2332
+ msgstr "Genero"
2333
 
2334
+ #: views/admin_member_form_common_part.php:30 views/edit.php:47
2335
+ #: includes/swpm_mda_show_profile.php:34
2336
  msgid "Phone"
2337
  msgstr "Teléfono"
2338
 
2339
+ #: views/admin_member_form_common_part.php:34 views/edit.php:51
 
2340
  msgid "Street"
2341
  msgstr "Calle"
2342
 
2343
+ #: views/admin_member_form_common_part.php:38 views/edit.php:55
 
2344
  msgid "City"
2345
  msgstr "Ciudad"
2346
 
2347
+ #: views/admin_member_form_common_part.php:42 views/edit.php:59
 
2348
  msgid "State"
2349
  msgstr "Región"
2350
 
2351
+ #: views/admin_member_form_common_part.php:46 views/edit.php:63
 
2352
  msgid "Zipcode"
2353
  msgstr "Código postal"
2354
 
2355
+ #: views/admin_member_form_common_part.php:50 views/edit.php:67
2356
+ #: includes/swpm_mda_show_profile.php:33
2357
  msgid "Country"
2358
  msgstr "País"
2359
 
2360
+ #: views/admin_member_form_common_part.php:54
2361
+ #: includes/swpm_mda_show_profile.php:38
2362
  msgid "Company"
2363
+ msgstr "Empresa"
2364
 
2365
+ #: views/admin_member_form_common_part.php:58
2366
+ #: includes/swpm_mda_show_profile.php:36
2367
  msgid "Member Since"
2368
  msgstr "Miembro desde"
2369
 
2370
+ #: views/admin_post_list.php:5
2371
+ msgid ""
2372
+ "First of all, globally protect posts and pages on your site by selecting "
2373
+ "\"General Protection\" from the drop-down box below and then select posts "
2374
+ "and pages that should be protected from non-logged in users."
2375
+ msgstr ""
2376
+ "En primer lugar, protege globalmente las entradas y las páginas de tu sitio "
2377
+ "seleccionando \"Protección general\" en el cuadro desplegable que aparece a "
2378
+ "continuación y luego selecciona las entradas y las páginas que deben ser "
2379
+ "protegidas de los usuarios que no están conectados."
2380
+
2381
+ #: views/admin_post_list.php:8
2382
+ msgid ""
2383
+ "Next, select an existing membership level from the drop-down box below and "
2384
+ "then select posts and pages you want to grant access to (for that particular "
2385
+ "membership level)."
2386
+ msgstr ""
2387
+ "A continuación, selecciona un nivel de membresía existente en el cuadro "
2388
+ "desplegable de abajo y, a continuación, selecciona las entradas y las "
2389
+ "páginas que deseas conceder acceso (para ese nivel de membresía en "
2390
+ "particular)."
2391
+
2392
+ #: views/admin_post_list.php:11
2393
+ msgid "bulk protect posts and pages documentation"
2394
+ msgstr "protección en lotes de entradas y páginas de documentación"
2395
+
2396
+ #: views/admin_post_list.php:11
2397
+ msgid " to learn how to use it."
2398
+ msgstr " para aprender a usarlo."
2399
+
2400
+ #: views/admin_post_list.php:21
2401
+ msgid "Posts"
2402
+ msgstr "Entradas"
2403
+
2404
+ #: views/admin_post_list.php:22
2405
+ msgid "Pages"
2406
+ msgstr "Páginas"
2407
+
2408
+ #: views/admin_post_list.php:23
2409
+ msgid "Custom Posts"
2410
+ msgstr "Entradas personalizadas"
2411
+
2412
+ #: views/admin_tools_settings.php:14
2413
+ msgid "The required pages have been re-created."
2414
+ msgstr "Las páginas requeridas han sido recreadas."
2415
+
2416
+ #: views/admin_tools_settings.php:21
2417
  msgid "Generate a Registration Completion link"
2418
+ msgstr "Genera un enlace para completar el registro"
2419
 
2420
+ #: views/admin_tools_settings.php:24
2421
  msgid ""
2422
  "You can manually generate a registration completion link here and give it to "
2423
  "your customer if they have missed the email that was automatically sent out "
2427
  "enviárselo al usuario si ha perdido el correo electrónico que se les envía "
2428
  "después del pago."
2429
 
2430
+ #: views/admin_tools_settings.php:29
2431
  msgid "Generate Registration Completion Link"
2432
+ msgstr "Genera el enlace para completar el registro"
2433
 
2434
+ #: views/admin_tools_settings.php:30
2435
  msgid "For a Particular Member ID"
2436
+ msgstr "Para una ID de un miembro particular"
2437
 
2438
+ #: views/admin_tools_settings.php:32
2439
  msgid "OR"
2440
  msgstr "O"
2441
 
2442
+ #: views/admin_tools_settings.php:33
2443
  msgid "For All Incomplete Registrations"
2444
+ msgstr "Por todas las inscripciones incompletas"
2445
 
2446
+ #: views/admin_tools_settings.php:38
2447
  msgid "Send Registration Reminder Email Too"
2448
+ msgstr "También envía el correo electrónico de recordatorio de registro"
2449
 
2450
+ #: views/admin_tools_settings.php:44
2451
  msgid "Submit"
2452
  msgstr "Enviar"
2453
 
2454
+ #: views/admin_tools_settings.php:53
2455
  msgid ""
2456
  "Link(s) generated successfully. The following link(s) can be used to "
2457
  "complete the registration."
2458
  msgstr ""
2459
+ "Enlace(s) generado correctamente. Los siguientes enlace(s) pueden ser "
2460
  "utilizados para completar el registro."
2461
 
2462
+ #: views/admin_tools_settings.php:55
2463
  msgid "Registration completion links will appear below"
2464
+ msgstr "Los enlaces para completar el registro aparecerán a continuación"
2465
+
2466
+ #: views/admin_tools_settings.php:65
2467
+ msgid "A prompt to complete registration email was also sent."
2468
+ msgstr ""
2469
+ "También ha sido enviado un aviso para completar el correo electrónico de "
2470
+ "registro."
2471
+
2472
+ #: views/admin_tools_settings.php:78 views/admin_tools_settings.php:88
2473
+ msgid "Re-create the Required Pages"
2474
+ msgstr "Volver a crear las páginas requeridas"
2475
+
2476
+ #: views/admin_tools_settings.php:81
2477
+ msgid ""
2478
+ "If you have accidentally deleted the required pages that this plugin creates "
2479
+ "at install time, you can use this option to re-create them."
2480
+ msgstr ""
2481
+ "Si has eliminado accidentalmente las páginas requeridas que este plugin crea "
2482
+ "en el momento de la instalación, puedes usar esta opción para volver a "
2483
+ "crearlas."
2484
+
2485
+ #: views/admin_tools_settings.php:82
2486
+ msgid " has full explanation."
2487
+ msgstr " tiene una explicación completa."
2488
 
2489
+ #: views/edit.php:32 views/edit.php:36
2490
  msgid "Leave empty to keep the current password"
2491
  msgstr "Dejar vacío para guardar la contraseña actual"
2492
 
2493
+ #: views/edit.php:71
2494
+ msgid "Company Name"
2495
+ msgstr "Nombre de empresa"
2496
+
2497
+ #: views/forgot_password.php:12
2498
  msgid "Reset Password"
2499
+ msgstr "Restablecer la contraseña"
2500
 
2501
+ #: views/loggedin.php:6
2502
  msgid "Logged in as"
2503
  msgstr "Conectado como"
2504
 
2505
+ #: views/loggedin.php:14
2506
  msgid "Membership"
2507
  msgstr "Membresía"
2508
 
2509
+ #: views/loggedin.php:18
2510
  msgid "Account Expiry"
2511
+ msgstr "Caducidad de la cuenta"
2512
 
2513
+ #: views/loggedin.php:26
2514
+ msgid "Edit Profile"
2515
+ msgstr "Editar perfil"
2516
 
2517
+ #: views/login.php:11
2518
  msgid "Username or Email"
2519
  msgstr "Nombre de usuario o correo electrónico"
2520
 
2521
+ #: views/login.php:24
2522
  msgid "Remember Me"
2523
  msgstr "Recuérdame"
2524
 
2525
+ #: views/login.php:33
2526
+ msgid "Forgot Password?"
2527
+ msgstr "¿Has olvidado tu contraseña?"
2528
 
2529
+ #: views/payments/admin_all_payment_transactions.php:6
2530
  msgid "All the payments/transactions of your members are recorded here."
2531
  msgstr "Todos los pagos/transacciones de sus miembros se registran aquí."
2532
 
2533
+ #: views/payments/admin_all_payment_transactions.php:12
2534
  msgid "Search for a transaction by using email or name"
2535
+ msgstr "Buscar una transacción usando el correo electrónico o el nombre"
2536
 
2537
+ #: views/payments/admin_create_payment_buttons.php:15
2538
  msgid ""
2539
  "You can create new payment button for your memberships using this interface."
2540
  msgstr ""
2541
+ "Puedes crear un nuevo botón de pago para tus membresías utilizando este "
2542
  "interfaz."
2543
 
2544
+ #: views/payments/admin_create_payment_buttons.php:23
2545
  msgid "Select Payment Button Type"
2546
  msgstr "Selecciona el tipo de botón de pago"
2547
 
2548
+ #: views/payments/admin_create_payment_buttons.php:26
2549
  msgid "PayPal Buy Now"
2550
+ msgstr "PayPal comprar ahora"
2551
 
2552
+ #: views/payments/admin_create_payment_buttons.php:28
2553
  msgid "PayPal Subscription"
2554
  msgstr "Suscripción de PayPal"
2555
 
2556
+ #: views/payments/admin_create_payment_buttons.php:30
2557
+ msgid "PayPal Smart Checkout"
2558
+ msgstr "Pago inteligente de PayPal"
2559
+
2560
+ #: views/payments/admin_create_payment_buttons.php:32
2561
  msgid "Stripe Buy Now"
2562
+ msgstr "Stripe comprar ahora"
2563
+
2564
+ #: views/payments/admin_create_payment_buttons.php:34
2565
+ msgid "Stripe Subscription"
2566
+ msgstr "Suscripción de Stripe"
2567
 
2568
+ #: views/payments/admin_create_payment_buttons.php:36
2569
  msgid "Braintree Buy Now"
2570
  msgstr "Braintree comprar ahora"
2571
 
2572
+ #: views/payments/admin_create_payment_buttons.php:43
2573
  msgid "Next"
2574
  msgstr "Siguiente"
2575
 
2576
+ #: views/payments/admin_edit_payment_buttons.php:15
2577
  msgid "You can edit a payment button using this interface."
2578
  msgstr "Puede editar un botón de pago utilizando esta interfaz."
2579
 
2580
+ #: views/payments/admin_payment_buttons.php:6
2581
  msgid ""
2582
  "All the membership buttons that you created in the plugin are displayed here."
2583
  msgstr ""
2584
  "Todos los botones de miembros que ha creado en el plugin se muestran aquí."
2585
 
2586
+ #: views/payments/admin_payment_settings.php:21
2587
  msgid "Error! The membership level ID ("
2588
  msgstr "¡Error! El ID de nivel de miembro ("
2589
 
2590
+ #: views/payments/admin_payment_settings.php:28
2591
+ msgid ""
2592
+ "You can create membership payment buttons from the payments menu of this "
2593
+ "plugin (useful if you want to offer paid membership on the site)."
2594
+ msgstr ""
2595
+ "Puedes crear botones de pago de membresía desde el menú de pagos de este "
2596
+ "plugin (útil si deseas ofrecer membresía de pago en el sitio)."
2597
+
2598
+ #: views/payments/admin_payment_settings.php:33
2599
  msgid "PayPal Integration Settings"
2600
+ msgstr "Ajustes de integración con PayPal"
2601
 
2602
+ #: views/payments/admin_payment_settings.php:36
2603
  msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
2604
+ msgstr "Genera el código de \"Variables avanzadas\" para tu botón de PayPal"
2605
 
2606
+ #: views/payments/admin_payment_settings.php:39
2607
  msgid "Enter the Membership Level ID"
2608
  msgstr "Introduce el ID de nivel de membresía"
2609
 
2610
+ #: views/payments/admin_payment_settings.php:41
2611
  msgid "Generate Code"
2612
  msgstr "Generar código"
2613
 
2614
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:22
2615
  msgid "Braintree Buy Now Button Configuration"
2616
  msgstr "Configuración del botón de Braintree Compre Ahora"
2617
 
2618
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:34
2619
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:213
2620
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:33
2621
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:301
2622
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:259
2623
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:83
2624
  msgid "Button ID"
2625
  msgstr "ID de botón"
2626
 
2627
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:42
2628
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:26
2629
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:221
2630
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:41
2631
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:27
2632
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:309
2633
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:39
2634
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:266
2635
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:91
2636
  msgid "Button Title"
2637
  msgstr "Titulo del botón"
2638
 
2639
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:60
2640
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:44
2641
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:239
2642
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:59
2643
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:57
2644
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:282
2645
  msgid "Payment Amount"
2646
+ msgstr "Cantidad de pago"
2647
 
2648
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:68
2649
  msgid ""
2650
  "Braintree API key and account details. You can get this from your Braintree "
2651
  "account."
2652
  msgstr ""
2653
+ "Clave API de Braintree y detalles de la cuenta. Puedes obtener esta "
2654
+ "información de tu cuenta de Braintree."
2655
 
2656
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:72
2657
  msgid "Merchant ID"
2658
+ msgstr "ID del comerciante"
2659
 
2660
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:80
2661
  msgid "Public Key"
2662
+ msgstr "Llave publica"
2663
 
2664
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:87
2665
  msgid "Private Key"
2666
+ msgstr "Llave privada"
2667
 
2668
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:95
2669
  msgid "Merchant Account ID"
2670
+ msgstr "ID de la cuenta de comerciante"
2671
 
2672
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:113
2673
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:137
2674
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:361
2675
  msgid "The following details are optional."
2676
  msgstr "Los siguientes detalles son opcionales."
2677
 
2678
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:117
2679
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:92
2680
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:287
2681
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:204
2682
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:172
2683
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:456
2684
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:149
2685
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:373
2686
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:191
2687
  msgid "Return URL"
2688
  msgstr "URL de retorno"
2689
 
2690
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:127
2691
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:126
2692
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:321
2693
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:214
2694
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:200
2695
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:484
2696
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:159
2697
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:383
2698
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:212
2699
  msgid "Save Payment Data"
2700
+ msgstr "Guarda los datos de pago"
2701
 
2702
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:16
2703
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:204
2704
  msgid "PayPal Buy Now Button Configuration"
2705
+ msgstr "Configuración del botón de PayPal Comprar ahora"
2706
+
2707
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:52
2708
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:247
2709
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:67
2710
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:45
2711
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:327
2712
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:65
2713
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:289
2714
  msgid "Payment Currency"
2715
  msgstr "Moneda de pago"
2716
 
2717
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:100
2718
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:295
2719
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:85
2720
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:367
2721
  msgid "PayPal Email"
2722
  msgstr "Correo electrónico de PayPal"
2723
 
2724
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:108
2725
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:303
2726
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:180
2727
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:464
2728
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:199
2729
  msgid "Button Image URL"
2730
+ msgstr "URL de la imagen del botón"
2731
+
2732
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:116
2733
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:311
2734
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:188
2735
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:472
2736
+ msgid "Custom Checkout Page Logo Image"
2737
+ msgstr "Imagen de logotipo de la página de finalizar compra personalizada"
2738
+
2739
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:21
2740
+ msgid "PayPal Smart Checkout Button Configuration"
2741
+ msgstr "Configuración del botón de pago inteligente de PayPal"
2742
+
2743
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:107
2744
+ msgid ""
2745
+ "PayPal Smart Checkout API Credentials (you can get this from your PayPal "
2746
+ "account)"
2747
+ msgstr ""
2748
+ "Credenciales de la API de pago inteligente de PayPal (puedes obtener esto "
2749
+ "desde tu cuenta de PayPal)"
2750
+
2751
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:111
2752
+ msgid "Live Client ID"
2753
+ msgstr "ID de cliente en vivo"
2754
+
2755
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:119
2756
+ msgid "Live Secret"
2757
+ msgstr "Secreto en vivo"
2758
+
2759
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:127
2760
+ msgid "Sandbox Client ID"
2761
+ msgstr "ID de cliente de Sandbox"
2762
+
2763
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:135
2764
+ msgid "Sandbox Secret"
2765
+ msgstr "Secreto de Sandbox"
2766
+
2767
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:143
2768
+ msgid "Button Appearance Settings"
2769
+ msgstr "Ajustes de apariencia del botón"
2770
+
2771
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:147
2772
+ msgid "Size"
2773
+ msgstr "Tamaño"
2774
+
2775
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:150
2776
+ msgid "Medium"
2777
+ msgstr "Mediano"
2778
+
2779
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:151
2780
+ msgid "Large"
2781
+ msgstr "Grande"
2782
+
2783
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:152
2784
+ msgid "Repsonsive"
2785
+ msgstr "Adaptable"
2786
+
2787
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:154
2788
+ msgid "Select button size."
2789
+ msgstr "Selecciona el tamaño del botón."
2790
+
2791
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:158
2792
+ msgid "Color"
2793
+ msgstr "Color"
2794
+
2795
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:161
2796
+ msgid "Gold"
2797
+ msgstr "Oro"
2798
+
2799
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:162
2800
+ msgid "Blue"
2801
+ msgstr "Azul"
2802
+
2803
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:163
2804
+ msgid "Silver"
2805
+ msgstr "Plata"
2806
+
2807
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:164
2808
+ msgid "Black"
2809
+ msgstr "Negro"
2810
+
2811
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:166
2812
+ msgid "Select button color."
2813
+ msgstr "Selecciona el color del botón."
2814
+
2815
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:170
2816
+ msgid "Shape"
2817
+ msgstr "Forma"
2818
+
2819
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:172
2820
+ msgid "Rectangular"
2821
+ msgstr "Rectangular"
2822
+
2823
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:173
2824
+ msgid "Pill"
2825
+ msgstr "Píldora"
2826
+
2827
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:174
2828
+ msgid "Select button shape."
2829
+ msgstr "Selecciona la forma del botón."
2830
 
2831
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:178
2832
+ msgid "Layout"
2833
+ msgstr "Diseño"
2834
+
2835
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:180
2836
+ msgid "Vertical"
2837
+ msgstr "Vertical"
2838
+
2839
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:181
2840
+ msgid "Horizontal"
2841
+ msgstr "Horizontal"
2842
+
2843
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:182
2844
+ msgid "Select button layout."
2845
+ msgstr "Selecciona el diseño del botón."
2846
+
2847
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:187
2848
+ msgid "Additional Settings"
2849
+ msgstr "Ajustes adicionales"
2850
+
2851
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:191
2852
+ msgid "Payment Methods"
2853
+ msgstr "Métodos de pago"
2854
+
2855
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:193
2856
+ msgid "PayPal Credit"
2857
+ msgstr "Crédito de PayPal"
2858
+
2859
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:194
2860
+ msgid "ELV"
2861
+ msgstr "ELV"
2862
+
2863
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:195
2864
+ msgid ""
2865
+ "Select payment methods that could be used by customers. Note that payment "
2866
+ "with cards is always enabled."
2867
+ msgstr ""
2868
+ "Selecciona los métodos de pago que podrían ser utilizados por los clientes. "
2869
+ "Ten en cuenta que el pago con tarjetas siempre está activado."
2870
+
2871
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:200
2872
+ msgid "The following details are optional"
2873
+ msgstr "Los siguientes detalles son opcionales"
2874
+
2875
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:18
2876
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:295
2877
  msgid "PayPal Subscription Button Configuration"
2878
+ msgstr "Configuración del botón de Suscripción de PayPal"
2879
 
2880
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:93
2881
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:375
2882
  msgid "Billing Amount Each Cycle"
2883
  msgstr "Importe facturado cada ciclo"
2884
 
2885
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:101
2886
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:383
2887
  msgid "Billing Cycle"
2888
  msgstr "Ciclo de facturación"
2889
 
2890
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:114
2891
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:396
2892
  msgid "Billing Cycle Count"
2893
  msgstr "Cuenta del ciclo de facturación"
2894
 
2895
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:122
2896
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:404
2897
  msgid "Re-attempt on Failure"
2898
  msgstr "Reintentar en caso de fallo"
2899
 
2900
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:135
2901
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:419
2902
  msgid ""
2903
  "Trial Billing Details (Leave empty if you are not offering a trial period)"
2904
  msgstr ""
2905
+ "Detalles de facturación de prueba (Deja en blanco si no estas ofreciendo un "
2906
  "período de prueba)"
2907
 
2908
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:141
2909
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:425
2910
  msgid "Trial Billing Amount"
2911
  msgstr "Importe del periodo de prueba"
2912
 
2913
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:149
2914
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:433
2915
  msgid "Trial Billing Period"
2916
  msgstr "Período de facturación de prueba"
2917
 
2918
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:166
2919
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:450
2920
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:177
2921
  msgid "Optional Details"
2922
  msgstr "Detalles opcionales"
2923
 
2924
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:29
2925
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:250
2926
  msgid "Stripe Buy Now Button Configuration"
2927
+ msgstr "Ajustes del botón Comprar ahora de Stripe"
2928
 
2929
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:104
2930
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:328
2931
  msgid "Stripe API keys. You can get this from your Stripe account."
2932
+ msgstr ""
2933
+ "Las claves de API de Stripe. Puedes obtener esto en tu cuenta de Stripe."
 
 
 
 
2934
 
2935
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:108
2936
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:332
2937
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:131
2938
  msgid "Test Publishable Key"
2939
+ msgstr "Llave de publicación de prueba"
2940
 
2941
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:115
2942
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:339
2943
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:139
2944
+ msgid "Test Secret Key"
2945
+ msgstr "Prueba la llave secreta"
2946
 
2947
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:122
2948
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:346
2949
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:147
2950
  msgid "Live Publishable Key"
2951
  msgstr "Clave publicable en vivo"
2952
 
2953
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:129
2954
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:353
2955
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:155
2956
+ msgid "Live Secret Key"
2957
+ msgstr "Clave secreta en vivo"
2958
+
2959
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:141
2960
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:365
2961
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:183
2962
+ msgid "Collect Customer Address"
2963
+ msgstr "Recopila la dirección del cliente"
2964
+
2965
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:75
2966
+ msgid "Stripe Subscription Button Configuration"
2967
+ msgstr "Ajustes del botón de Suscripción de Stripe"
2968
+
2969
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:109
2970
+ msgid "Stripe Plan ID"
2971
+ msgstr "ID del plan de Stripe"
2972
+
2973
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:125
2974
+ msgid "Stripe API Settings"
2975
+ msgstr "Ajustes de API de Stripe"
2976
+
2977
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:163
2978
+ msgid "Webook Endpoint URL"
2979
+ msgstr "URL de Endpoint del WebWook"
2980
+
2981
+ #: views/payments/payment-gateway/braintree_button_shortcode_view.php:20
2982
+ #: views/payments/payment-gateway/paypal_button_shortcode_view.php:91
2983
+ #: views/payments/payment-gateway/paypal_button_shortcode_view.php:93
2984
+ #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:15
2985
+ #: views/payments/payment-gateway/stripe_button_shortcode_view.php:20
2986
+ #: views/payments/payment-gateway/stripe_button_shortcode_view.php:150
2987
  msgid "Buy Now"
2988
  msgstr "Compra ahora"
2989
 
2990
+ #: views/payments/payment-gateway/paypal_button_shortcode_view.php:226
2991
+ #: views/payments/payment-gateway/paypal_button_shortcode_view.php:228
2992
  msgid "Subscribe Now"
2993
  msgstr "Suscríbete ahora"
2994
 
2995
+ #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:137
2996
+ msgid "Error occured during PayPal Smart Checkout process."
2997
+ msgstr ""
2998
+ "Se ha producido un error durante el proceso de pago inteligente de PayPal."
2999
+
3000
+ #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:165
3001
+ msgid "HTTP error occured during payment process:"
3002
+ msgstr "El error HTTP ha ocurrido durante el proceso de pago:"
3003
+
3004
  #: Translation strings from addons === Form builder addon
3005
+ msgid "Type password here"
3006
+ msgstr "Teclear la contraseña aquí"
3007
 
3008
+ msgid "Retype password here"
3009
+ msgstr "Vuelve a teclear la contraseña aquí"
3010
 
3011
  msgid "Registration is complete. You can now log into the site."
3012
+ msgstr "El registro está completo. Ahora puedes acceder al sitio."
3013
 
3014
  msgid " Field has invalid character"
3015
  msgstr " El campo tiene un carácter no válido"
3016
 
3017
  msgid " Password does not match"
3018
+ msgstr " La contraseña no coincide"
3019
 
3020
  msgid "Already taken."
3021
+ msgstr "Ya está cogido."
3022
 
3023
  msgid "Street Address"
3024
+ msgstr "Dirección de calle"
3025
 
3026
  msgid "Apt, Suite, Bldg. (optional)"
3027
  msgstr "Apt, Suite, Edificio. (Opcional)"
3036
  "Check this box to delete the image. The image will be deleted when you save "
3037
  "the profile."
3038
  msgstr ""
3039
+ "Selecciona esta casilla para eliminar la imagen. La imagen se borrará cuando "
3040
+ "guardes el perfil."
 
 
 
 
 
 
 
 
 
 
3041
 
3042
+ msgid "You will need to re-login since you changed your password."
3043
+ msgstr "Tendrás que volver a acceder porque has cambiado tu contraseña."
3044
 
3045
+ msgid ""
3046
+ "Please enter any two digits with <strong>no</strong> spaces (Example: 12)"
3047
+ msgstr ""
3048
+ "Por favor, introduce dos dígitos <strong>sin</ strong> espacio (Ejemplo: 12)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3049
 
3050
+ msgid "Verification"
3051
+ msgstr "Verificación"
3052
 
3053
+ msgid "Please enter any two digits with no spaces (Example: 12)*"
3054
+ msgstr "Por favor, introduce dos dígitos sin espacio (Ejemplo: 12)*"
3055
 
3056
+ msgid "Username can only contain: letters, numbers and .-*@"
3057
+ msgstr "El nombres de usuario solo puede contener: letras, números y .-*@"
3058
 
3059
+ msgid "Allowed characters are: letters, numbers and .-_*@"
3060
+ msgstr "Los caracteres permitidos son: letras, números y .-_*@"
3061
 
3062
+ #: === Partial protection addon strings
3063
+ msgid "You do not have permission to view this content."
3064
+ msgstr "No tienes permiso para ver este contenido."
3065
 
3066
+ msgid "Your membership level does not have permission to view this content."
3067
+ msgstr "Tu nivel de membresía no tiene permiso para ver este contenido."
3068
 
3069
+ msgid "This content is for members only."
3070
+ msgstr "Este contenido es solo para miembros."
3071
 
3072
+ msgid "Please check at least one."
3073
+ msgstr "Por favor, selecciona al menos una."
3074
 
3075
+ #: === Member Directory Listing addon strings swpm-member-directory-admin.php:9
3076
+ msgid "Member Directory"
3077
+ msgstr "Directorio de miembros"
3078
 
3079
+ #: includes/swpm_mda_show_profile.php:26
3080
+ msgid "Member ID"
3081
+ msgstr "ID del miembro"
3082
 
3083
+ #: includes/swpm_mda_show_profile.php:30
3084
+ msgid "Level"
3085
+ msgstr "Nivel"
 
 
 
 
 
3086
 
3087
+ #: includes/swpm_mda_show_profile.php:32
3088
+ msgid "Address"
3089
+ msgstr "Dirección"
3090
 
3091
+ #: views/template-1.php:52 views/template-2.php:53
3092
+ msgid "Search..."
3093
+ msgstr "Buscar..."
3094
 
3095
+ #: views/template-1.php:60 views/template-2.php:62
3096
+ msgid "Clear Search"
3097
+ msgstr "Borrar la búsqueda"
3098
 
3099
+ msgid "You must be logged in to upgrade a membership."
3100
+ msgstr "Debes estar conectado para actualizar una suscripción."
 
 
3101
 
3102
+ msgid "Membership level has been updated."
3103
+ msgstr "El nivel de membresía ha sido actualizado."
3104
 
3105
+ msgid "Already a member of this level."
3106
+ msgstr "Ya eres miembro de este nivel."
3107
 
3108
+ #~ msgid "Account already active. <a href=\""
3109
+ #~ msgstr "La cuenta ya está activa. <a href=\""
3110
 
3111
+ #~ msgid "smp7, wp.insider"
3112
+ #~ msgstr "smp7, wp.insider"
 
 
 
 
3113
 
3114
  #~ msgid ""
3115
+ #~ "A flexible, well-supported, and easy-to-use WordPress membership plugin "
3116
+ #~ "for offering free and premium content from your WordPress site."
3117
  #~ msgstr ""
3118
+ #~ "Un plugin de membresía de WordPress flexible, bien apoyado y fácil de "
3119
+ #~ "usar para ofrecer contenido gratuito y de pago desde tu sitio de "
3120
+ #~ "WordPress."
 
 
 
 
 
3121
 
3122
+ #~ msgid "https://simple-membership-plugin.com/"
3123
+ #~ msgstr "https://simple-membership-plugin.com/"
 
 
 
 
 
 
3124
 
3125
+ #~ msgid "Simple WordPress Membership"
3126
+ #~ msgstr "WordPress Simple Membership"
 
 
 
 
lib/stripe-gateway/.editorconfig ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ; https://editorconfig.org/
2
+
3
+ root = true
4
+
5
+ [*]
6
+ indent_style = space
7
+ indent_size = 4
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+ end_of_line = lf
11
+ charset = utf-8
12
+
13
+ [*.{json,yml}]
14
+ indent_size = 2
lib/stripe-gateway/.gitignore ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Mac OS X dumps these all over the place.
2
+ .DS_Store
3
+
4
+ # Ignore the SimpleTest library if it is installed to /test/.
5
+ /test/simpletest/
6
+
7
+ # Ignore the /vendor/ directory for people using composer
8
+ /vendor/
9
+
10
+ # If the vendor directory isn't being commited the composer.lock file should also be ignored
11
+ composer.lock
12
+
13
+ # Ignore PHPUnit coverage file
14
+ clover.xml
15
+
16
+ # Ignore IDE's configuration files
17
+ .idea
lib/stripe-gateway/CHANGELOG.md ADDED
@@ -0,0 +1,732 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Changelog
2
+
3
+ ## 6.43.1 - 2019-08-29
4
+ * [#722](https://github.com/stripe/stripe-php/pull/722) Make `LoggerInterface::error` compatible with its PSR-3 counterpart
5
+ * [#714](https://github.com/stripe/stripe-php/pull/714) Add `pending_setup_intent` property in `Subscription`
6
+ * [#713](https://github.com/stripe/stripe-php/pull/713) Add typehint to `ApiResponse`
7
+ * [#712](https://github.com/stripe/stripe-php/pull/712) Fix comment
8
+ * [#701](https://github.com/stripe/stripe-php/pull/701) Start testing PHP 7.3
9
+
10
+ ## 6.43.0 - 2019-08-09
11
+ * [#694](https://github.com/stripe/stripe-php/pull/694) Add `SubscriptionItem::createUsageRecord` method
12
+
13
+ ## 6.42.0 - 2019-08-09
14
+ * [#688](https://github.com/stripe/stripe-php/pull/688) Remove `SubscriptionScheduleRevision`
15
+ * Note that this is technically a breaking change, however we've chosen to release it as a minor version in light of the fact that this resource and its API methods were virtually unused.
16
+
17
+ ## 6.41.0 - 2019-07-31
18
+ * [#683](https://github.com/stripe/stripe-php/pull/683) Move the List Balance History API to `/v1/balance_transactions`
19
+
20
+ ## 6.40.0 - 2019-06-27
21
+ * [#675](https://github.com/stripe/stripe-php/pull/675) Add support for `SetupIntent` resource and APIs
22
+
23
+ ## 6.39.2 - 2019-06-26
24
+ * [#676](https://github.com/stripe/stripe-php/pull/676) Fix exception message in `CustomerBalanceTransaction::update()`
25
+
26
+ ## 6.39.1 - 2019-06-25
27
+ * [#674](https://github.com/stripe/stripe-php/pull/674) Add new constants for `collection_method` on `Invoice`
28
+
29
+ ## 6.39.0 - 2019-06-24
30
+ * [#673](https://github.com/stripe/stripe-php/pull/673) Enable request latency telemetry by default
31
+
32
+ ## 6.38.0 - 2019-06-17
33
+ * [#649](https://github.com/stripe/stripe-php/pull/649) Add support for `CustomerBalanceTransaction` resource and APIs
34
+
35
+ ## 6.37.2 - 2019-06-17
36
+ * [#671](https://github.com/stripe/stripe-php/pull/671) Add new PHPDoc
37
+ * [#672](https://github.com/stripe/stripe-php/pull/672) Add constants for `submit_type` on Checkout `Session`
38
+
39
+ ## 6.37.1 - 2019-06-14
40
+ * [#670](https://github.com/stripe/stripe-php/pull/670) Add new PHPDoc
41
+
42
+ ## 6.37.0 - 2019-05-23
43
+ * [#663](https://github.com/stripe/stripe-php/pull/663) Add support for `radar.early_fraud_warning` resource
44
+
45
+ ## 6.36.0 - 2019-05-22
46
+ * [#661](https://github.com/stripe/stripe-php/pull/661) Add constants for new TaxId types
47
+ * [#662](https://github.com/stripe/stripe-php/pull/662) Add constants for BalanceTransaction types
48
+
49
+ ## 6.35.2 - 2019-05-20
50
+ * [#655](https://github.com/stripe/stripe-php/pull/655) Add constants for payment intent statuses
51
+ * [#659](https://github.com/stripe/stripe-php/pull/659) Fix PHPDoc for various nested Account actions
52
+ * [#660](https://github.com/stripe/stripe-php/pull/660) Fix various PHPDoc
53
+
54
+ ## 6.35.1 - 2019-05-20
55
+ * [#658](https://github.com/stripe/stripe-php/pull/658) Use absolute value when checking timestamp tolerance
56
+
57
+ ## 6.35.0 - 2019-05-14
58
+ * [#651](https://github.com/stripe/stripe-php/pull/651) Add support for the Capability resource and APIs
59
+
60
+ ## 6.34.6 - 2019-05-13
61
+ * [#654](https://github.com/stripe/stripe-php/pull/654) Fix typo in definition of `Event::PAYMENT_METHOD_ATTACHED` constant
62
+
63
+ ## 6.34.5 - 2019-05-06
64
+ * [#647](https://github.com/stripe/stripe-php/pull/647) Set the return type to static for more operations
65
+
66
+ ## 6.34.4 - 2019-05-06
67
+ * [#650](https://github.com/stripe/stripe-php/pull/650) Add missing constants for Event types
68
+
69
+ ## 6.34.3 - 2019-05-01
70
+ * [#644](https://github.com/stripe/stripe-php/pull/644) Update return type to `static` to improve static analysis
71
+ * [#645](https://github.com/stripe/stripe-php/pull/645) Fix constant for `payment_intent.payment_failed`
72
+
73
+ ## 6.34.2 - 2019-04-26
74
+ * [#642](https://github.com/stripe/stripe-php/pull/642) Fix an issue where existing idempotency keys would be overwritten when using automatic retries
75
+
76
+ ## 6.34.1 - 2019-04-25
77
+ * [#640](https://github.com/stripe/stripe-php/pull/640) Add missing phpdocs
78
+
79
+ ## 6.34.0 - 2019-04-24
80
+ * [#626](https://github.com/stripe/stripe-php/pull/626) Add support for the `TaxRate` resource and APIs
81
+ * [#639](https://github.com/stripe/stripe-php/pull/639) Fix multiple phpdoc issues
82
+
83
+ ## 6.33.0 - 2019-04-22
84
+ * [#630](https://github.com/stripe/stripe-php/pull/630) Add support for the `TaxId` resource and APIs
85
+
86
+ ## 6.32.1 - 2019-04-19
87
+ * [#636](https://github.com/stripe/stripe-php/pull/636) Correct type of `$personId` in PHPDoc
88
+
89
+ ## 6.32.0 - 2019-04-18
90
+ * [#621](https://github.com/stripe/stripe-php/pull/621) Add support for `CreditNote`
91
+
92
+ ## 6.31.5 - 2019-04-12
93
+ * [#628](https://github.com/stripe/stripe-php/pull/628) Add constants for `person.*` event types
94
+ * [#628](https://github.com/stripe/stripe-php/pull/628) Add missing constants for `Account` and `Person`
95
+
96
+ ## 6.31.4 - 2019-04-05
97
+ * [#624](https://github.com/stripe/stripe-php/pull/624) Fix encoding of nested parameters in multipart requests
98
+
99
+ ## 6.31.3 - 2019-04-02
100
+ * [#623](https://github.com/stripe/stripe-php/pull/623) Only use HTTP/2 with curl >= 7.60.0
101
+
102
+ ## 6.31.2 - 2019-03-25
103
+ * [#619](https://github.com/stripe/stripe-php/pull/619) Fix PHPDoc return types for list methods for nested resources
104
+
105
+ ## 6.31.1 - 2019-03-22
106
+ * [#612](https://github.com/stripe/stripe-php/pull/612) Add a lot of constants
107
+ * [#614](https://github.com/stripe/stripe-php/pull/614) Add missing subscription status constants
108
+
109
+ ## 6.31.0 - 2019-03-18
110
+ * [#600](https://github.com/stripe/stripe-php/pull/600) Add support for the `PaymentMethod` resource and APIs
111
+ * [#606](https://github.com/stripe/stripe-php/pull/606) Add support for retrieving a Checkout `Session`
112
+ * [#611](https://github.com/stripe/stripe-php/pull/611) Add support for deleting a Terminal `Location` and `Reader`
113
+
114
+ ## 6.30.5 - 2019-03-11
115
+ * [#607](https://github.com/stripe/stripe-php/pull/607) Correctly handle case where a metadata key is called `metadata`
116
+
117
+ ## 6.30.4 - 2019-02-27
118
+ * [#602](https://github.com/stripe/stripe-php/pull/602) Add `subscription_schedule` to `Subscription` for PHPDoc.
119
+
120
+ ## 6.30.3 - 2019-02-26
121
+ * [#603](https://github.com/stripe/stripe-php/pull/603) Improve PHPDoc on the `Source` object to cover all types of Sources currently supported.
122
+
123
+ ## 6.30.2 - 2019-02-25
124
+ * [#601](https://github.com/stripe/stripe-php/pull/601) Fix PHPDoc across multiple resources and add support for new events.
125
+
126
+ ## 6.30.1 - 2019-02-16
127
+ * [#599](https://github.com/stripe/stripe-php/pull/599) Fix PHPDoc for `SubscriptionSchedule` and `SubscriptionScheduleRevision`
128
+
129
+ ## 6.30.0 - 2019-02-12
130
+ * [#590](https://github.com/stripe/stripe-php/pull/590) Add support for `SubscriptionSchedule` and `SubscriptionScheduleRevision`
131
+
132
+ ## 6.29.3 - 2019-01-31
133
+ * [#592](https://github.com/stripe/stripe-php/pull/592) Some more PHPDoc fixes
134
+
135
+ ## 6.29.2 - 2019-01-31
136
+ * [#591](https://github.com/stripe/stripe-php/pull/591) Fix PHPDoc for nested resources
137
+
138
+ ## 6.29.1 - 2019-01-25
139
+ * [#566](https://github.com/stripe/stripe-php/pull/566) Fix dangling message contents
140
+ * [#586](https://github.com/stripe/stripe-php/pull/586) Don't overwrite `CURLOPT_HTTP_VERSION` option
141
+
142
+ ## 6.29.0 - 2019-01-23
143
+ * [#579](https://github.com/stripe/stripe-php/pull/579) Rename `CheckoutSession` to `Session` and move it under the `Checkout` namespace. This is a breaking change, but we've reached out to affected merchants and all new merchants would use the new approach.
144
+
145
+ ## 6.28.1 - 2019-01-21
146
+ * [#580](https://github.com/stripe/stripe-php/pull/580) Properly serialize `individual` on `Account` objects
147
+
148
+ ## 6.28.0 - 2019-01-03
149
+ * [#576](https://github.com/stripe/stripe-php/pull/576) Add support for iterating directly over `Collection` instances
150
+
151
+ ## 6.27.0 - 2018-12-21
152
+ * [#571](https://github.com/stripe/stripe-php/pull/571) Add support for the `CheckoutSession` resource
153
+
154
+ ## 6.26.0 - 2018-12-11
155
+ * [#568](https://github.com/stripe/stripe-php/pull/568) Enable persistent connections
156
+
157
+ ## 6.25.0 - 2018-12-10
158
+ * [#567](https://github.com/stripe/stripe-php/pull/567) Add support for account links
159
+
160
+ ## 6.24.0 - 2018-11-28
161
+ * [#562](https://github.com/stripe/stripe-php/pull/562) Add support for the Review resource
162
+ * [#564](https://github.com/stripe/stripe-php/pull/564) Add event name constants for subscription schedule aborted/expiring
163
+
164
+ ## 6.23.0 - 2018-11-27
165
+ * [#542](https://github.com/stripe/stripe-php/pull/542) Add support for `ValueList` and `ValueListItem` for Radar
166
+
167
+ ## 6.22.1 - 2018-11-20
168
+ * [#561](https://github.com/stripe/stripe-php/pull/561) Add cast and some docs to telemetry introduced in 6.22.0/#549
169
+
170
+ ## 6.22.0 - 2018-11-15
171
+ * [#549](https://github.com/stripe/stripe-php/pull/549) Add support for client telemetry
172
+
173
+ ## 6.21.1 - 2018-11-12
174
+ * [#548](https://github.com/stripe/stripe-php/pull/548) Don't mutate `Exception` class properties from `OAuthBase` error
175
+
176
+ ## 6.21.0 - 2018-11-08
177
+ * [#537](https://github.com/stripe/stripe-php/pull/537) Add new API endpoints for the `Invoice` resource.
178
+
179
+ ## 6.20.1 - 2018-11-07
180
+ * [#546](https://github.com/stripe/stripe-php/pull/546) Drop files from the Composer package that aren't needed in the release
181
+
182
+ ## 6.20.0 - 2018-10-30
183
+ * [#536](https://github.com/stripe/stripe-php/pull/536) Add support for the `Person` resource
184
+ * [#541](https://github.com/stripe/stripe-php/pull/541) Add support for the `WebhookEndpoint` resource
185
+
186
+ ## 6.19.5 - 2018-10-17
187
+ * [#539](https://github.com/stripe/stripe-php/pull/539) Fix methods on `\Stripe\PaymentIntent` to properly pass arguments to the API.
188
+
189
+ ## 6.19.4 - 2018-10-11
190
+ * [#534](https://github.com/stripe/stripe-php/pull/534) Fix PSR-4 autoloading for `\Stripe\FileUpload` class alias
191
+
192
+ ## 6.19.3 - 2018-10-09
193
+ * [#530](https://github.com/stripe/stripe-php/pull/530) Add constants for `flow` (`FLOW_*`), `status` (`STATUS_*`) and `usage` (`USAGE_*`) on `\Stripe\Source`
194
+
195
+ ## 6.19.2 - 2018-10-08
196
+ * [#531](https://github.com/stripe/stripe-php/pull/531) Store HTTP response headers in case-insensitive array
197
+
198
+ ## 6.19.1 - 2018-09-25
199
+ * [#526](https://github.com/stripe/stripe-php/pull/526) Ignore null values in request parameters
200
+
201
+ ## 6.19.0 - 2018-09-24
202
+ * [#523](https://github.com/stripe/stripe-php/pull/523) Add support for Stripe Terminal
203
+
204
+ ## 6.18.0 - 2018-09-24
205
+ * [#520](https://github.com/stripe/stripe-php/pull/520) Rename `\Stripe\FileUpload` to `\Stripe\File`
206
+
207
+ ## 6.17.2 - 2018-09-18
208
+ * [#522](https://github.com/stripe/stripe-php/pull/522) Fix warning when adding a new additional owner to an existing array
209
+
210
+ ## 6.17.1 - 2018-09-14
211
+ * [#517](https://github.com/stripe/stripe-php/pull/517) Integer-index encode all sequential arrays
212
+
213
+ ## 6.17.0 - 2018-09-05
214
+ * [#514](https://github.com/stripe/stripe-php/pull/514) Add support for reporting resources
215
+
216
+ ## 6.16.0 - 2018-08-23
217
+ * [#509](https://github.com/stripe/stripe-php/pull/509) Add support for usage record summaries
218
+
219
+ ## 6.15.0 - 2018-08-03
220
+ * [#504](https://github.com/stripe/stripe-php/pull/504) Add cancel support for topups
221
+
222
+ ## 6.14.0 - 2018-08-02
223
+ * [#505](https://github.com/stripe/stripe-php/pull/505) Add support for file links
224
+
225
+ ## 6.13.0 - 2018-07-31
226
+ * [#502](https://github.com/stripe/stripe-php/pull/502) Add `isDeleted()` method to `\Stripe\StripeObject`
227
+
228
+ ## 6.12.0 - 2018-07-28
229
+ * [#501](https://github.com/stripe/stripe-php/pull/501) Add support for scheduled query runs (`\Stripe\Sigma\ScheduledQueryRun`) for Sigma
230
+
231
+ ## 6.11.0 - 2018-07-26
232
+ * [#500](https://github.com/stripe/stripe-php/pull/500) Add support for Stripe Issuing
233
+
234
+ ## 6.10.4 - 2018-07-19
235
+ * [#498](https://github.com/stripe/stripe-php/pull/498) Internal improvements to the `\Stripe\ApiResource.classUrl()` method
236
+
237
+ ## 6.10.3 - 2018-07-16
238
+ * [#497](https://github.com/stripe/stripe-php/pull/497) Use HTTP/2 only for HTTPS requests
239
+
240
+ ## 6.10.2 - 2018-07-11
241
+ * [#494](https://github.com/stripe/stripe-php/pull/494) Enable HTTP/2 support
242
+
243
+ ## 6.10.1 - 2018-07-10
244
+ * [#493](https://github.com/stripe/stripe-php/pull/493) Add PHPDoc for `auto_advance` on `\Stripe\Invoice`
245
+
246
+ ## 6.10.0 - 2018-06-28
247
+ * [#488](https://github.com/stripe/stripe-php/pull/488) Add support for `$appPartnerId` to `Stripe::setAppInfo()`
248
+
249
+ ## 6.9.0 - 2018-06-28
250
+ * [#487](https://github.com/stripe/stripe-php/pull/487) Add support for payment intents
251
+
252
+ ## 6.8.2 - 2018-06-24
253
+ * [#486](https://github.com/stripe/stripe-php/pull/486) Make `Account.deauthorize()` return the `StripeObject` from the API
254
+
255
+ ## 6.8.1 - 2018-06-13
256
+ * [#472](https://github.com/stripe/stripe-php/pull/472) Added phpDoc for `ApiRequestor` and others, especially regarding thrown errors
257
+
258
+ ## 6.8.0 - 2018-06-13
259
+ * [#481](https://github.com/stripe/stripe-php/pull/481) Add new `\Stripe\Discount` and `\Stripe\OrderItem` classes, add more PHPDoc describing object attributes
260
+
261
+ ## 6.7.4 - 2018-05-29
262
+ * [#480](https://github.com/stripe/stripe-php/pull/480) PHPDoc changes for API version 2018-05-21 and the addition of the new `CHARGE_EXPIRED` event type
263
+
264
+ ## 6.7.3 - 2018-05-28
265
+ * [#479](https://github.com/stripe/stripe-php/pull/479) Fix unnecessary traits on `\Stripe\InvoiceLineItem`
266
+
267
+ ## 6.7.2 - 2018-05-28
268
+ * [#471](https://github.com/stripe/stripe-php/pull/471) Add `OBJECT_NAME` constant to all API resource classes, add `\Stripe\InvoiceLineItem` class
269
+
270
+ ## 6.7.1 - 2018-05-13
271
+ * [#468](https://github.com/stripe/stripe-php/pull/468) Update fields in PHP docs for accuracy
272
+
273
+ ## 6.7.0 - 2018-05-09
274
+ * [#466](https://github.com/stripe/stripe-php/pull/466) Add support for issuer fraud records
275
+
276
+ ## 6.6.0 - 2018-04-11
277
+ * [#460](https://github.com/stripe/stripe-php/pull/460) Add support for flexible billing primitives
278
+
279
+ ## 6.5.0 - 2018-04-05
280
+ * [#461](https://github.com/stripe/stripe-php/pull/461) Don't zero keys on non-`metadata` subobjects
281
+
282
+ ## 6.4.2 - 2018-03-17
283
+ * [#458](https://github.com/stripe/stripe-php/pull/458) Add PHPDoc for `account` on `\Stripe\Event`
284
+
285
+ ## 6.4.1 - 2018-03-02
286
+ * [#455](https://github.com/stripe/stripe-php/pull/455) Fix namespaces in PHPDoc
287
+ * [#456](https://github.com/stripe/stripe-php/pull/456) Fix namespaces for some exceptions
288
+
289
+ ## 6.4.0 - 2018-02-28
290
+ * [#453](https://github.com/stripe/stripe-php/pull/453) Add constants for `reason` (`REASON_*`) and `status` (`STATUS_*`) on `\Stripe\Dispute`
291
+
292
+ ## 6.3.2 - 2018-02-27
293
+ * [#452](https://github.com/stripe/stripe-php/pull/452) Add PHPDoc for `amount_paid` and `amount_remaining` on `\Stripe\Invoice`
294
+
295
+ ## 6.3.1 - 2018-02-26
296
+ * [#443](https://github.com/stripe/stripe-php/pull/443) Add event types as constants to `\Stripe\Event` class
297
+
298
+ ## 6.3.0 - 2018-02-23
299
+ * [#450](https://github.com/stripe/stripe-php/pull/450) Add support for `code` attribute on all Stripe exceptions
300
+
301
+ ## 6.2.0 - 2018-02-21
302
+ * [#440](https://github.com/stripe/stripe-php/pull/440) Add support for topups
303
+ * [#442](https://github.com/stripe/stripe-php/pull/442) Fix PHPDoc for `\Stripe\Error\SignatureVerification`
304
+
305
+ ## 6.1.0 - 2018-02-12
306
+ * [#435](https://github.com/stripe/stripe-php/pull/435) Fix header persistence on `Collection` objects
307
+ * [#436](https://github.com/stripe/stripe-php/pull/436) Introduce new `Idempotency` error class
308
+
309
+ ## 6.0.0 - 2018-02-07
310
+ Major version release. List of backwards incompatible changes to watch out for:
311
+ + The minimum PHP version is now 5.4.0. If you're using PHP 5.3 or older, consider upgrading to a more recent version.
312
+ * `\Stripe\AttachedObject` no longer exists. Attributes that used to be instances of `\Stripe\AttachedObject` (such as `metadata`) are now instances of `\Stripe\StripeObject`.
313
+ + Attributes that used to be PHP arrays (such as `legal_entity->additional_owners` on `\Stripe\Account` instances) are now instances of `\Stripe\StripeObject`, except when they are empty. `\Stripe\StripeObject` has array semantics so this should not be an issue unless you are actively checking types.
314
+ * `\Stripe\Collection` now derives from `\Stripe\StripeObject` rather than from `\Stripe\ApiResource`.
315
+
316
+ Pull requests included in this release:
317
+ * [#410](https://github.com/stripe/stripe-php/pull/410) Drop support for PHP 5.3
318
+ * [#411](https://github.com/stripe/stripe-php/pull/411) Use traits for common API operations
319
+ * [#414](https://github.com/stripe/stripe-php/pull/414) Use short array syntax
320
+ * [#404](https://github.com/stripe/stripe-php/pull/404) Fix serialization logic
321
+ * [#417](https://github.com/stripe/stripe-php/pull/417) Remove `ExternalAccount` class
322
+ * [#418](https://github.com/stripe/stripe-php/pull/418) Increase test coverage
323
+ * [#421](https://github.com/stripe/stripe-php/pull/421) Update CA bundle and add script for future updates
324
+ * [#422](https://github.com/stripe/stripe-php/pull/422) Use vendored CA bundle for all requests
325
+ * [#428](https://github.com/stripe/stripe-php/pull/428) Support for automatic request retries
326
+
327
+ ## 5.9.2 - 2018-02-07
328
+ * [#431](https://github.com/stripe/stripe-php/pull/431) Update PHPDoc @property tags for latest API version
329
+
330
+ ## 5.9.1 - 2018-02-06
331
+ * [#427](https://github.com/stripe/stripe-php/pull/427) Add and update PHPDoc @property tags on all API resources
332
+
333
+ ## 5.9.0 - 2018-01-17
334
+ * [#421](https://github.com/stripe/stripe-php/pull/421) Updated bundled CA certificates
335
+ * [#423](https://github.com/stripe/stripe-php/pull/423) Escape unsanitized input in OAuth example
336
+
337
+ ## 5.8.0 - 2017-12-20
338
+ * [#403](https://github.com/stripe/stripe-php/pull/403) Add `__debugInfo()` magic method to `StripeObject`
339
+
340
+ ## 5.7.0 - 2017-11-28
341
+ * [#390](https://github.com/stripe/stripe-php/pull/390) Remove some unsupported API methods
342
+ * [#391](https://github.com/stripe/stripe-php/pull/391) Alphabetize the list of API resources in `Util::convertToStripeObject()` and add missing resources
343
+ * [#393](https://github.com/stripe/stripe-php/pull/393) Fix expiry date update for card sources
344
+
345
+ ## 5.6.0 - 2017-10-31
346
+ * [#386](https://github.com/stripe/stripe-php/pull/386) Support for exchange rates APIs
347
+
348
+ ## 5.5.1 - 2017-10-30
349
+ * [#387](https://github.com/stripe/stripe-php/pull/387) Allow `personal_address_kana` and `personal_address_kanji` to be updated on an account
350
+
351
+ ## 5.5.0 - 2017-10-27
352
+ * [#385](https://github.com/stripe/stripe-php/pull/385) Support for listing source transactions
353
+
354
+ ## 5.4.0 - 2017-10-24
355
+ * [#383](https://github.com/stripe/stripe-php/pull/383) Add static methods to manipulate resources from parent
356
+ * `Account` gains methods for external accounts and login links (e.g. `createExternalAccount`, `createLoginLink`)
357
+ * `ApplicationFee` gains methods for refunds
358
+ * `Customer` gains methods for sources
359
+ * `Transfer` gains methods for reversals
360
+
361
+ ## 5.3.0 - 2017-10-11
362
+ * [#378](https://github.com/stripe/stripe-php/pull/378) Rename source `delete` to `detach` (and deprecate the former)
363
+
364
+ ## 5.2.3 - 2017-09-27
365
+ * Add PHPDoc for `Card`
366
+
367
+ ## 5.2.2 - 2017-09-20
368
+ * Fix deserialization mapping of `FileUpload` objects
369
+
370
+ ## 5.2.1 - 2017-09-14
371
+ * Serialized `shipping` nested attribute
372
+
373
+ ## 5.2.0 - 2017-08-29
374
+ * Add support for `InvalidClient` OAuth error
375
+
376
+ ## 5.1.3 - 2017-08-14
377
+ * Allow `address_kana` and `address_kanji` to be updated for custom accounts
378
+
379
+ ## 5.1.2 - 2017-08-01
380
+ * Fix documented return type of `autoPagingIterator()` (was missing namespace)
381
+
382
+ ## 5.1.1 - 2017-07-03
383
+ * Fix order returns to use the right URL `/v1/order_returns`
384
+
385
+ ## 5.1.0 - 2017-06-30
386
+ * Add support for OAuth
387
+
388
+ ## 5.0.0 - 2017-06-27
389
+ * `pay` on invoice now takes params as well as opts
390
+
391
+ ## 4.13.0 - 2017-06-19
392
+ * Add support for ephemeral keys
393
+
394
+ ## 4.12.0 - 2017-06-05
395
+ * Clients can implement `getUserAgentInfo()` to add additional user agent information
396
+
397
+ ## 4.11.0 - 2017-06-05
398
+ * Implement `Countable` for `AttachedObject` (`metadata` and `additional_owners`)
399
+
400
+ ## 4.10.0 - 2017-05-25
401
+ * Add support for login links
402
+
403
+ ## 4.9.1 - 2017-05-10
404
+ * Fix docs to include arrays on `$id` parameter for retrieve methods
405
+
406
+ ## 4.9.0 - 2017-04-28
407
+ * Support for checking webhook signatures
408
+
409
+ ## 4.8.1 - 2017-04-24
410
+ * Allow nested field `payout_schedule` to be updated
411
+
412
+ ## 4.8.0 - 2017-04-20
413
+ * Add `\Stripe\Stripe::setLogger()` to support an external PSR-3 compatible logger
414
+
415
+ ## 4.7.0 - 2017-04-10
416
+ * Add support for payouts and recipient transfers
417
+
418
+ ## 4.6.0 - 2017-04-06
419
+ * Please see 4.7.0 instead (no-op release)
420
+
421
+ ## 4.5.1 - 2017-03-22
422
+ * Remove hard dependency on cURL
423
+
424
+ ## 4.5.0 - 2017-03-20
425
+ * Support for detaching sources from customers
426
+
427
+ ## 4.4.2 - 2017-02-27
428
+ * Correct handling of `owner` parameter when updating sources
429
+
430
+ ## 4.4.1 - 2017-02-24
431
+ * Correct the error check on a bad JSON decoding
432
+
433
+ ## 4.4.0 - 2017-01-18
434
+ * Add support for updating sources
435
+
436
+ ## 4.3.0 - 2016-11-30
437
+ * Add support for verifying sources
438
+
439
+ ## 4.2.0 - 2016-11-21
440
+ * Add retrieve method for 3-D Secure resources
441
+
442
+ ## 4.1.1 - 2016-10-21
443
+ * Add docblock with model properties for `Plan`
444
+
445
+ ## 4.1.0 - 2016-10-18
446
+ * Support for 403 status codes (permission denied)
447
+
448
+ ## 4.0.1 - 2016-10-17
449
+ * Fix transfer reversal materialization
450
+ * Fixes for some property definitions in docblocks
451
+
452
+ ## 4.0.0 - 2016-09-28
453
+ * Support for subscription items
454
+ * Drop attempt to force TLS 1.2: please note that this could be breaking if you're using old OS distributions or packages and upgraded recently (so please make sure to test your integration!)
455
+
456
+ ## 3.23.0 - 2016-09-15
457
+ * Add support for Apple Pay domains
458
+
459
+ ## 3.22.0 - 2016-09-13
460
+ * Add `Stripe::setAppInfo` to allow plugins to register user agent information
461
+
462
+ ## 3.21.0 - 2016-08-25
463
+ * Add `Source` model for generic payment sources
464
+
465
+ ## 3.20.0 - 2016-08-08
466
+ * Add `getDeclineCode` to card errors
467
+
468
+ ## 3.19.0 - 2016-07-29
469
+ * Opt requests directly into TLS 1.2 where OpenSSL >= 1.0.1 (see #277 for context)
470
+
471
+ ## 3.18.0 - 2016-07-28
472
+ * Add new `STATUS_` constants for subscriptions
473
+
474
+ ## 3.17.1 - 2016-07-28
475
+ * Fix auto-paging iterator so that it plays nicely with `iterator_to_array`
476
+
477
+ ## 3.17.0 - 2016-07-14
478
+ * Add field annotations to model classes for better editor hinting
479
+
480
+ ## 3.16.0 - 2016-07-12
481
+ * Add `ThreeDSecure` model for 3-D secure payments
482
+
483
+ ## 3.15.0 - 2016-06-29
484
+ * Add static `update` method to all resources that can be changed.
485
+
486
+ ## 3.14.3 - 2016-06-20
487
+ * Make sure that cURL never sends `Expects: 100-continue`, even on large request bodies
488
+
489
+ ## 3.14.2 - 2016-06-03
490
+ * Add `inventory` under `SKU` to list of keys that have nested data and can be updated
491
+
492
+ ## 3.14.1 - 2016-05-27
493
+ * Fix some inconsistencies in PHPDoc
494
+
495
+ ## 3.14.0 - 2016-05-25
496
+ * Add support for returning Relay orders
497
+
498
+ ## 3.13.0 - 2016-05-04
499
+ * Add `list`, `create`, `update`, `retrieve`, and `delete` methods to the Subscription class
500
+
501
+ ## 3.12.1 - 2016-04-07
502
+ * Additional check on value arrays for some extra safety
503
+
504
+ ## 3.12.0 - 2016-03-31
505
+ * Fix bug `refreshFrom` on `StripeObject` would not take an `$opts` array
506
+ * Fix bug where `$opts` not passed to parent `save` method in `Account`
507
+ * Fix bug where non-existent variable was referenced in `reverse` in `Transfer`
508
+ * Update CA cert bundle for compatibility with OpenSSL versions below 1.0.1
509
+
510
+ ## 3.11.0 - 2016-03-22
511
+ * Allow `CurlClient` to be initialized with default `CURLOPT_*` options
512
+
513
+ ## 3.10.1 - 2016-03-22
514
+ * Fix bug where request params and options were ignored in `ApplicationFee`'s `refund.`
515
+
516
+ ## 3.10.0 - 2016-03-15
517
+ * Add `reject` on `Account` to support the new API feature
518
+
519
+ ## 3.9.2 - 2016-03-04
520
+ * Fix error when an object's metadata is set more than once
521
+
522
+ ## 3.9.1 - 2016-02-24
523
+ * Fix encoding behavior of nested arrays for requests (see #227)
524
+
525
+ ## 3.9.0 - 2016-02-09
526
+ * Add automatic pagination mechanism with `autoPagingIterator()`
527
+ * Allow global account ID to be set with `Stripe::setAccountId()`
528
+
529
+ ## 3.8.0 - 2016-02-08
530
+ * Add `CountrySpec` model for looking up country payment information
531
+
532
+ ## 3.7.1 - 2016-02-01
533
+ * Update bundled CA certs
534
+
535
+ ## 3.7.0 - 2016-01-27
536
+ * Support deleting Relay products and SKUs
537
+
538
+ ## 3.6.0 - 2016-01-05
539
+ * Allow configuration of HTTP client timeouts
540
+
541
+ ## 3.5.0 - 2015-12-01
542
+ * Add a verification routine for external accounts
543
+
544
+ ## 3.4.0 - 2015-09-14
545
+ * Products, SKUs, and Orders -- https://stripe.com/relay
546
+
547
+ ## 3.3.0 - 2015-09-11
548
+ * Add support for 429 Rate Limit response
549
+
550
+ ## 3.2.0 - 2015-08-17
551
+ * Add refund listing and retrieval without an associated charge
552
+
553
+ ## 3.1.0 - 2015-08-03
554
+ * Add dispute listing and retrieval
555
+ * Add support for manage account deletion
556
+
557
+ ## 3.0.0 - 2015-07-28
558
+ * Rename `\Stripe\Object` to `\Stripe\StripeObject` (PHP 7 compatibility)
559
+ * Rename `getCode` and `getParam` in exceptions to `getStripeCode` and `getStripeParam`
560
+ * Add support for calling `json_encode` on Stripe objects in PHP 5.4+
561
+ * Start supporting/testing PHP 7
562
+
563
+ ## 2.3.0 - 2015-07-06
564
+ * Add request ID to all Stripe exceptions
565
+
566
+ ## 2.2.0 - 2015-06-01
567
+ * Add support for Alipay accounts as sources
568
+ * Add support for bank accounts as sources (private beta)
569
+ * Add support for bank accounts and cards as external_accounts on Account objects
570
+
571
+ ## 2.1.4 - 2015-05-13
572
+ * Fix CA certificate file path (thanks @lphilps & @matthewarkin)
573
+
574
+ ## 2.1.3 - 2015-05-12
575
+ * Fix to account updating to permit `tos_acceptance` and `personal_address` to be set properly
576
+ * Fix to Transfer reversal creation (thanks @neatness!)
577
+ * Network requests are now done through a swappable class for easier mocking
578
+
579
+ ## 2.1.2 - 2015-04-10
580
+ * Remove SSL cert revokation checking (all pre-Heartbleed certs have expired)
581
+ * Bug fixes to account updating
582
+
583
+ ## 2.1.1 - 2015-02-27
584
+ * Support transfer reversals
585
+
586
+ ## 2.1.0 - 2015-02-19
587
+ * Support new API version (2015-02-18)
588
+ * Added Bitcoin Receiever update and delete actions
589
+ * Edited tests to prefer "source" over "card" as per new API version
590
+
591
+ ## 2.0.1 - 2015-02-16
592
+ * Fix to fetching endpoints that use a non-default baseUrl (`FileUpload`)
593
+
594
+ ## 2.0.0 - 2015-02-14
595
+ * Bumped minimum version to 5.3.3
596
+ * Switched to Stripe namespace instead of Stripe_ class name prefiexes (thanks @chadicus!)
597
+ * Switched tests to PHPUnit (thanks @chadicus!)
598
+ * Switched style guide to PSR2 (thanks @chadicus!)
599
+ * Added $opts hash to the end of most methods: this permits passing 'idempotency_key', 'stripe_account', or 'stripe_version'. The last 2 will persist across multiple object loads.
600
+ * Added support for retrieving Account by ID
601
+
602
+ ## 1.18.0 - 2015-01-21
603
+ * Support making bitcoin charges through BitcoinReceiver source object
604
+
605
+ ## 1.17.5 - 2014-12-23
606
+ * Adding support for creating file uploads.
607
+
608
+ ## 1.17.4 - 2014-12-15
609
+ * Saving objects fetched with a custom key now works (thanks @JustinHook & @jpasilan)
610
+ * Added methods for reporting charges as safe or fraudulent and for specifying the reason for refunds
611
+
612
+ ## 1.17.3 - 2014-11-06
613
+ * Better handling of HHVM support for SSL certificate blacklist checking.
614
+
615
+ ## 1.17.2 - 2014-09-23
616
+ * Coupons now are backed by a `Stripe_Coupon` instead of `Stripe_Object`, and support updating metadata
617
+ * Running operations (`create`, `retrieve`, `all`) on upcoming invoice items now works
618
+
619
+ ## 1.17.1 - 2014-07-31
620
+ * Requests now send Content-Type header
621
+
622
+ ## 1.17.0 - 2014-07-29
623
+ * Application Fee refunds now a list instead of array
624
+ * HHVM now works
625
+ * Small bug fixes (thanks @bencromwell & @fastest963)
626
+ * `__toString` now returns the name of the object in addition to its JSON representation
627
+
628
+ ## 1.16.0 - 2014-06-17
629
+ * Add metadata for refunds and disputes
630
+
631
+ ## 1.15.0 - 2014-05-28
632
+ * Support canceling transfers
633
+
634
+ ## 1.14.1 - 2014-05-21
635
+ * Support cards for recipients.
636
+
637
+ ## 1.13.1 - 2014-05-15
638
+ * Fix bug in account resource where `id` wasn't in the result
639
+
640
+ ## 1.13.0 - 2014-04-10
641
+ * Add support for certificate blacklisting
642
+ * Update ca bundle
643
+ * Drop support for HHVM (Temporarily)
644
+
645
+ ## 1.12.0 - 2014-04-01
646
+ * Add Stripe_RateLimitError for catching rate limit errors.
647
+ * Update to Zend coding style (thanks, @jpiasetz)
648
+
649
+ ## 1.11.0 - 2014-01-29
650
+ * Add support for multiple subscriptions per customer
651
+
652
+ ## 1.10.1 - 2013-12-02
653
+ * Add new ApplicationFee
654
+
655
+ ## 1.9.1 - 2013-11-08
656
+ * Fix a bug where a null nestable object causes warnings to fire.
657
+
658
+ ## 1.9.0 - 2013-10-16
659
+ * Add support for metadata API.
660
+
661
+ ## 1.8.4 - 2013-09-18
662
+ * Add support for closing disputes.
663
+
664
+ ## 1.8.3 - 2013-08-13
665
+ * Add new Balance and BalanceTransaction
666
+
667
+ ## 1.8.2 - 2013-08-12
668
+ * Add support for unsetting attributes by updating to NULL. Setting properties to a blank string is now an error.
669
+
670
+ ## 1.8.1 - 2013-07-12
671
+ * Add support for multiple cards API (Stripe API version 2013-07-12: https://stripe.com/docs/upgrades#2013-07-05)
672
+
673
+ ## 1.8.0 - 2013-04-11
674
+ * Allow Transfers to be creatable
675
+ * Add new Recipient resource
676
+
677
+ ## 1.7.15 - 2013-02-21
678
+ * Add 'id' to the list of permanent object attributes
679
+
680
+ ## 1.7.14 - 2013-02-20
681
+
682
+ * Don't re-encode strings that are already encoded in UTF-8. If you were previously using plan or coupon objects with UTF-8 IDs, they may have been treated as ISO-8859-1 (Latin-1) and encoded to UTF-8 a 2nd time. You may now need to pass the IDs to utf8_encode before passing them to Stripe_Plan::retrieve or Stripe_Coupon::retrieve.
683
+ * Ensure that all input is encoded in UTF-8 before submitting it to Stripe's servers. (github issue #27)
684
+
685
+ ## 1.7.13 - 2013-02-01
686
+ * Add support for passing options when retrieving Stripe objects e.g., Stripe_Charge::retrieve(array("id"=>"foo", "expand" => array("customer"))); Stripe_Charge::retrieve("foo") will continue to work
687
+
688
+ ## 1.7.12 - 2013-01-15
689
+ * Add support for setting a Stripe API version override
690
+
691
+ ## 1.7.11 - 2012-12-30
692
+ * Version bump to cleanup constants and such (fix issue #26)
693
+
694
+ ## 1.7.10 - 2012-11-08
695
+ * Add support for updating charge disputes.
696
+ * Fix bug preventing retrieval of null attributes
697
+
698
+ ## 1.7.9 - 2012-11-08
699
+ * Fix usage under autoloaders such as the one generated by composer (fix issue #22)
700
+
701
+ ## 1.7.8 - 2012-10-30
702
+ * Add support for creating invoices.
703
+ * Add support for new invoice lines return format
704
+ * Add support for new list objects
705
+
706
+ ## 1.7.7 - 2012-09-14
707
+ * Get all of the various version numbers in the repo in sync (no other changes)
708
+
709
+ ## 1.7.6 - 2012-08-31
710
+ * Add update and pay methods to Invoice resource
711
+
712
+ ## 1.7.5 - 2012-08-23
713
+ * Change internal function names so that Stripe_SingletonApiRequest is E_STRICT-clean (github issue #16)
714
+
715
+ ## 1.7.4 - 2012-08-21
716
+ * Bugfix so that Stripe objects (e.g. Customer, Charge objects) used in API calls are transparently converted to their object IDs
717
+
718
+ ## 1.7.3 - 2012-08-15
719
+ * Add new Account resource
720
+
721
+ ## 1.7.2 - 2012-06-26
722
+ * Make clearer that you should be including lib/Stripe.php, not test/Stripe.php (github issue #14)
723
+
724
+ ## 1.7.1 - 2012-05-24
725
+ * Add missing argument to Stripe_InvalidRequestError constructor in Stripe_ApiResource::instanceUrl. Fixes a warning when Stripe_ApiResource::instanceUrl is called on a resource with no ID (fix issue #12)
726
+
727
+ ## 1.7.0 - 2012-05-17
728
+ * Support Composer and Packagist (github issue #9)
729
+ * Add new deleteDiscount method to Stripe_Customer
730
+ * Add new Transfer resource
731
+ * Switch from using HTTP Basic auth to Bearer auth. (Note: Stripe will support Basic auth for the indefinite future, but recommends Bearer auth when possible going forward)
732
+ * Numerous test suite improvements
lib/stripe-gateway/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License
2
+
3
+ Copyright (c) 2010-2019 Stripe, Inc. (https://stripe.com)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
lib/stripe-gateway/README.md ADDED
@@ -0,0 +1,257 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Stripe PHP bindings
2
+
3
+ [![Build Status](https://travis-ci.org/stripe/stripe-php.svg?branch=master)](https://travis-ci.org/stripe/stripe-php)
4
+ [![Latest Stable Version](https://poser.pugx.org/stripe/stripe-php/v/stable.svg)](https://packagist.org/packages/stripe/stripe-php)
5
+ [![Total Downloads](https://poser.pugx.org/stripe/stripe-php/downloads.svg)](https://packagist.org/packages/stripe/stripe-php)
6
+ [![License](https://poser.pugx.org/stripe/stripe-php/license.svg)](https://packagist.org/packages/stripe/stripe-php)
7
+ [![Code Coverage](https://coveralls.io/repos/stripe/stripe-php/badge.svg?branch=master)](https://coveralls.io/r/stripe/stripe-php?branch=master)
8
+
9
+ The Stripe PHP library provides convenient access to the Stripe API from
10
+ applications written in the PHP language. It includes a pre-defined set of
11
+ classes for API resources that initialize themselves dynamically from API
12
+ responses which makes it compatible with a wide range of versions of the Stripe
13
+ API.
14
+
15
+ ## Requirements
16
+
17
+ PHP 5.4.0 and later.
18
+
19
+ ## Composer
20
+
21
+ You can install the bindings via [Composer](http://getcomposer.org/). Run the following command:
22
+
23
+ ```bash
24
+ composer require stripe/stripe-php
25
+ ```
26
+
27
+ To use the bindings, use Composer's [autoload](https://getcomposer.org/doc/01-basic-usage.md#autoloading):
28
+
29
+ ```php
30
+ require_once('vendor/autoload.php');
31
+ ```
32
+
33
+ ## Manual Installation
34
+
35
+ If you do not wish to use Composer, you can download the [latest release](https://github.com/stripe/stripe-php/releases). Then, to use the bindings, include the `init.php` file.
36
+
37
+ ```php
38
+ require_once('/path/to/stripe-php/init.php');
39
+ ```
40
+
41
+ ## Dependencies
42
+
43
+ The bindings require the following extensions in order to work properly:
44
+
45
+ - [`curl`](https://secure.php.net/manual/en/book.curl.php), although you can use your own non-cURL client if you prefer
46
+ - [`json`](https://secure.php.net/manual/en/book.json.php)
47
+ - [`mbstring`](https://secure.php.net/manual/en/book.mbstring.php) (Multibyte String)
48
+
49
+ If you use Composer, these dependencies should be handled automatically. If you install manually, you'll want to make sure that these extensions are available.
50
+
51
+ ## Getting Started
52
+
53
+ Simple usage looks like:
54
+
55
+ ```php
56
+ \Stripe\Stripe::setApiKey('sk_test_BQokikJOvBiI2HlWgH4olfQ2');
57
+ $charge = \Stripe\Charge::create(['amount' => 2000, 'currency' => 'usd', 'source' => 'tok_189fqt2eZvKYlo2CTGBeg6Uq']);
58
+ echo $charge;
59
+ ```
60
+
61
+ ## Documentation
62
+
63
+ See the [PHP API docs](https://stripe.com/docs/api/php#intro).
64
+
65
+ ## Legacy Version Support
66
+
67
+ ### PHP 5.3
68
+
69
+ If you are using PHP 5.3, you can download v5.9.2 ([zip](https://github.com/stripe/stripe-php/archive/v5.9.2.zip), [tar.gz](https://github.com/stripe/stripe-php/archive/v5.9.2.tar.gz)) from our [releases page](https://github.com/stripe/stripe-php/releases). This version will continue to work with new versions of the Stripe API for all common uses.
70
+
71
+ ### PHP 5.2
72
+
73
+ If you are using PHP 5.2, you can download v1.18.0 ([zip](https://github.com/stripe/stripe-php/archive/v1.18.0.zip), [tar.gz](https://github.com/stripe/stripe-php/archive/v1.18.0.tar.gz)) from our [releases page](https://github.com/stripe/stripe-php/releases). This version will continue to work with new versions of the Stripe API for all common uses.
74
+
75
+ This legacy version may be included via `require_once("/path/to/stripe-php/lib/Stripe.php");`, and used like:
76
+
77
+ ```php
78
+ Stripe::setApiKey('d8e8fca2dc0f896fd7cb4cb0031ba249');
79
+ $charge = Stripe_Charge::create(array('source' => 'tok_XXXXXXXX', 'amount' => 2000, 'currency' => 'usd'));
80
+ echo $charge;
81
+ ```
82
+
83
+ ## Custom Request Timeouts
84
+
85
+ *NOTE:* We do not recommend decreasing the timeout for non-read-only calls (e.g. charge creation), since even if you locally timeout, the request on Stripe's side can still complete. If you are decreasing timeouts on these calls, make sure to use [idempotency tokens](https://stripe.com/docs/api/php#idempotent_requests) to avoid executing the same transaction twice as a result of timeout retry logic.
86
+
87
+ To modify request timeouts (connect or total, in seconds) you'll need to tell the API client to use a CurlClient other than its default. You'll set the timeouts in that CurlClient.
88
+
89
+ ```php
90
+ // set up your tweaked Curl client
91
+ $curl = new \Stripe\HttpClient\CurlClient();
92
+ $curl->setTimeout(10); // default is \Stripe\HttpClient\CurlClient::DEFAULT_TIMEOUT
93
+ $curl->setConnectTimeout(5); // default is \Stripe\HttpClient\CurlClient::DEFAULT_CONNECT_TIMEOUT
94
+
95
+ echo $curl->getTimeout(); // 10
96
+ echo $curl->getConnectTimeout(); // 5
97
+
98
+ // tell Stripe to use the tweaked client
99
+ \Stripe\ApiRequestor::setHttpClient($curl);
100
+
101
+ // use the Stripe API client as you normally would
102
+ ```
103
+
104
+ ## Custom cURL Options (e.g. proxies)
105
+
106
+ Need to set a proxy for your requests? Pass in the requisite `CURLOPT_*` array to the CurlClient constructor, using the same syntax as `curl_stopt_array()`. This will set the default cURL options for each HTTP request made by the SDK, though many more common options (e.g. timeouts; see above on how to set those) will be overridden by the client even if set here.
107
+
108
+ ```php
109
+ // set up your tweaked Curl client
110
+ $curl = new \Stripe\HttpClient\CurlClient([CURLOPT_PROXY => 'proxy.local:80']);
111
+ // tell Stripe to use the tweaked client
112
+ \Stripe\ApiRequestor::setHttpClient($curl);
113
+ ```
114
+
115
+ Alternately, a callable can be passed to the CurlClient constructor that returns the above array based on request inputs. See `testDefaultOptions()` in `tests/CurlClientTest.php` for an example of this behavior. Note that the callable is called at the beginning of every API request, before the request is sent.
116
+
117
+ ### Configuring a Logger
118
+
119
+ The library does minimal logging, but it can be configured
120
+ with a [`PSR-3` compatible logger][psr3] so that messages
121
+ end up there instead of `error_log`:
122
+
123
+ ```php
124
+ \Stripe\Stripe::setLogger($logger);
125
+ ```
126
+
127
+ ### Accessing response data
128
+
129
+ You can access the data from the last API response on any object via `getLastResponse()`.
130
+
131
+ ```php
132
+ $charge = \Stripe\Charge::create(['amount' => 2000, 'currency' => 'usd', 'source' => 'tok_visa']);
133
+ echo $charge->getLastResponse()->headers['Request-Id'];
134
+ ```
135
+
136
+ ### SSL / TLS compatibility issues
137
+
138
+ Stripe's API now requires that [all connections use TLS 1.2](https://stripe.com/blog/upgrading-tls). Some systems (most notably some older CentOS and RHEL versions) are capable of using TLS 1.2 but will use TLS 1.0 or 1.1 by default. In this case, you'd get an `invalid_request_error` with the following error message: "Stripe no longer supports API requests made with TLS 1.0. Please initiate HTTPS connections with TLS 1.2 or later. You can learn more about this at [https://stripe.com/blog/upgrading-tls](https://stripe.com/blog/upgrading-tls).".
139
+
140
+ The recommended course of action is to [upgrade your cURL and OpenSSL packages](https://support.stripe.com/questions/how-do-i-upgrade-my-stripe-integration-from-tls-1-0-to-tls-1-2#php) so that TLS 1.2 is used by default, but if that is not possible, you might be able to solve the issue by setting the `CURLOPT_SSLVERSION` option to either `CURL_SSLVERSION_TLSv1` or `CURL_SSLVERSION_TLSv1_2`:
141
+
142
+ ```php
143
+ $curl = new \Stripe\HttpClient\CurlClient([CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1]);
144
+ \Stripe\ApiRequestor::setHttpClient($curl);
145
+ ```
146
+
147
+ ### Per-request Configuration
148
+
149
+ For apps that need to use multiple keys during the lifetime of a process, like
150
+ one that uses [Stripe Connect][connect], it's also possible to set a
151
+ per-request key and/or account:
152
+
153
+ ```php
154
+ \Stripe\Charge::all([], [
155
+ 'api_key' => 'sk_test_...',
156
+ 'stripe_account' => 'acct_...'
157
+ ]);
158
+
159
+ \Stripe\Charge::retrieve("ch_18atAXCdGbJFKhCuBAa4532Z", [
160
+ 'api_key' => 'sk_test_...',
161
+ 'stripe_account' => 'acct_...'
162
+ ]);
163
+ ```
164
+
165
+ ### Configuring CA Bundles
166
+
167
+ By default, the library will use its own internal bundle of known CA
168
+ certificates, but it's possible to configure your own:
169
+
170
+ ```php
171
+ \Stripe\Stripe::setCABundlePath("path/to/ca/bundle");
172
+ ```
173
+
174
+ ### Configuring Automatic Retries
175
+
176
+ The library can be configured to automatically retry requests that fail due to
177
+ an intermittent network problem:
178
+
179
+ ```php
180
+ \Stripe\Stripe::setMaxNetworkRetries(2);
181
+ ```
182
+
183
+ [Idempotency keys][idempotency-keys] are added to requests to guarantee that
184
+ retries are safe.
185
+
186
+ ### Request latency telemetry
187
+
188
+ By default, the library sends request latency telemetry to Stripe. These
189
+ numbers help Stripe improve the overall latency of its API for all users.
190
+
191
+ You can disable this behavior if you prefer:
192
+
193
+ ```php
194
+ \Stripe\Stripe::setEnableTelemetry(false);
195
+ ```
196
+
197
+ ## Development
198
+
199
+ Get [Composer][composer]. For example, on Mac OS:
200
+
201
+ ```bash
202
+ brew install composer
203
+ ```
204
+
205
+ Install dependencies:
206
+
207
+ ```bash
208
+ composer install
209
+ ```
210
+
211
+ The test suite depends on [stripe-mock], so make sure to fetch and run it from a
212
+ background terminal ([stripe-mock's README][stripe-mock] also contains
213
+ instructions for installing via Homebrew and other methods):
214
+
215
+ ```bash
216
+ go get -u github.com/stripe/stripe-mock
217
+ stripe-mock
218
+ ```
219
+
220
+ Install dependencies as mentioned above (which will resolve [PHPUnit](http://packagist.org/packages/phpunit/phpunit)), then you can run the test suite:
221
+
222
+ ```bash
223
+ ./vendor/bin/phpunit
224
+ ```
225
+
226
+ Or to run an individual test file:
227
+
228
+ ```bash
229
+ ./vendor/bin/phpunit tests/UtilTest.php
230
+ ```
231
+
232
+ Update bundled CA certificates from the [Mozilla cURL release][curl]:
233
+
234
+ ```bash
235
+ ./update_certs.php
236
+ ```
237
+
238
+ ## Attention plugin developers
239
+
240
+ Are you writing a plugin that integrates Stripe and embeds our library? Then please use the `setAppInfo` function to identify your plugin. For example:
241
+
242
+ ```php
243
+ \Stripe\Stripe::setAppInfo("MyAwesomePlugin", "1.2.34", "https://myawesomeplugin.info");
244
+ ```
245
+
246
+ The method should be called once, before any request is sent to the API. The second and third parameters are optional.
247
+
248
+ ### SSL / TLS configuration option
249
+
250
+ See the "SSL / TLS compatibility issues" paragraph above for full context. If you want to ensure that your plugin can be used on all systems, you should add a configuration option to let your users choose between different values for `CURLOPT_SSLVERSION`: none (default), `CURL_SSLVERSION_TLSv1` and `CURL_SSLVERSION_TLSv1_2`.
251
+
252
+ [composer]: https://getcomposer.org/
253
+ [connect]: https://stripe.com/connect
254
+ [curl]: http://curl.haxx.se/docs/caextract.html
255
+ [psr3]: http://www.php-fig.org/psr/psr-3/
256
+ [idempotency-keys]: https://stripe.com/docs/api/php#idempotent_requests
257
+ [stripe-mock]: https://github.com/stripe/stripe-mock
lib/stripe-gateway/VERSION ADDED
@@ -0,0 +1 @@
 
1
+ 6.43.1
lib/stripe-gateway/build.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+ chdir(dirname(__FILE__));
4
+
5
+ $autoload = (int)$argv[1];
6
+ $returnStatus = null;
7
+
8
+ if (!$autoload) {
9
+ // Modify composer to not autoload Stripe
10
+ $composer = json_decode(file_get_contents('composer.json'), true);
11
+ unset($composer['autoload']);
12
+ unset($composer['require-dev']['squizlabs/php_codesniffer']);
13
+ file_put_contents('composer.json', json_encode($composer, JSON_PRETTY_PRINT));
14
+ }
15
+
16
+ passthru('composer update', $returnStatus);
17
+ if ($returnStatus !== 0) {
18
+ exit(1);
19
+ }
20
+
21
+ if ($autoload) {
22
+ // Only run CS on 1 of the 2 environments
23
+ passthru(
24
+ './vendor/bin/phpcs --standard=PSR2 -n lib tests *.php',
25
+ $returnStatus
26
+ );
27
+ if ($returnStatus !== 0) {
28
+ exit(1);
29
+ }
30
+ }
31
+
32
+ $config = $autoload ? 'phpunit.xml' : 'phpunit.no_autoload.xml';
33
+ passthru("./vendor/bin/phpunit -c $config", $returnStatus);
34
+ if ($returnStatus !== 0) {
35
+ exit(1);
36
+ }
lib/stripe-gateway/composer.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "stripe/stripe-php",
3
+ "description": "Stripe PHP Library",
4
+ "keywords": [
5
+ "stripe",
6
+ "payment processing",
7
+ "api"
8
+ ],
9
+ "homepage": "https://stripe.com/",
10
+ "license": "MIT",
11
+ "authors": [
12
+ {
13
+ "name": "Stripe and contributors",
14
+ "homepage": "https://github.com/stripe/stripe-php/contributors"
15
+ }
16
+ ],
17
+ "require": {
18
+ "php": ">=5.4.0",
19
+ "ext-curl": "*",
20
+ "ext-json": "*",
21
+ "ext-mbstring": "*"
22
+ },
23
+ "require-dev": {
24
+ "phpunit/phpunit": "~4.0",
25
+ "php-coveralls/php-coveralls": "1.*",
26
+ "squizlabs/php_codesniffer": "~2.0",
27
+ "symfony/process": "~2.8"
28
+ },
29
+ "autoload": {
30
+ "psr-4": { "Stripe\\" : "lib/" }
31
+ },
32
+ "extra": {
33
+ "branch-alias": {
34
+ "dev-master": "2.0-dev"
35
+ }
36
+ }
37
+ }
lib/stripe-gateway/data/ca-certificates.crt CHANGED
@@ -1,20 +1,20 @@
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
- ## Certificate data from Mozilla as of: Fri Jan 22 20:39:57 2016
5
  ##
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
8
  ## file (certdata.txt). This file can be found in the mozilla source tree:
9
- ## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
10
  ##
11
  ## It contains the certificates in PEM format and therefore
12
  ## can be directly used with curl / libcurl / php_curl, or with
13
  ## an Apache+mod_ssl webserver for SSL client authentication.
14
  ## Just configure this file as the SSLCACertificateFile.
15
  ##
16
- ## Conversion done with mk-ca-bundle.pl version 1.25.
17
- ## SHA1: 0ab47e2f41518f8d223eab517cb799e5b071231e
18
  ##
19
 
20
 
@@ -130,30 +130,6 @@ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
130
  RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
131
  -----END CERTIFICATE-----
132
 
133
- AddTrust Low-Value Services Root
134
- ================================
135
- -----BEGIN CERTIFICATE-----
136
- MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
137
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
138
- cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
139
- CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
140
- ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
141
- AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
142
- 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
143
- oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
144
- Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
145
- GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
146
- HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
147
- AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
148
- RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
149
- HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
150
- ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
151
- iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
152
- eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
153
- mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
154
- ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
155
- -----END CERTIFICATE-----
156
-
157
  AddTrust External Root
158
  ======================
159
  -----BEGIN CERTIFICATE-----
@@ -178,54 +154,6 @@ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
178
  G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
179
  -----END CERTIFICATE-----
180
 
181
- AddTrust Public Services Root
182
- =============================
183
- -----BEGIN CERTIFICATE-----
184
- MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
185
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
186
- cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
187
- BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
188
- dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
189
- AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
190
- nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
191
- d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
192
- Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
193
- HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
194
- A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
195
- /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
196
- FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
197
- A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
198
- JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
199
- +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
200
- GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
201
- Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
202
- EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
203
- -----END CERTIFICATE-----
204
-
205
- AddTrust Qualified Certificates Root
206
- ====================================
207
- -----BEGIN CERTIFICATE-----
208
- MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
209
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
210
- cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
211
- CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
212
- IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
213
- 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
214
- 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
215
- KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
216
- L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
217
- wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
218
- MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
219
- BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
220
- BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
221
- azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
222
- ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
223
- GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
224
- dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
225
- RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
226
- iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
227
- -----END CERTIFICATE-----
228
-
229
  Entrust Root Certification Authority
230
  ====================================
231
  -----BEGIN CERTIFICATE-----
@@ -252,27 +180,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
252
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
253
  -----END CERTIFICATE-----
254
 
255
- RSA Security 2048 v3
256
- ====================
257
- -----BEGIN CERTIFICATE-----
258
- MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
259
- ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
260
- MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
261
- BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
262
- AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
263
- Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
264
- WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
265
- KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
266
- +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
267
- MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
268
- FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
269
- v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
270
- 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
271
- VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
272
- nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
273
- pKnXwiJPZ9d37CAFYd4=
274
- -----END CERTIFICATE-----
275
-
276
  GeoTrust Global CA
277
  ==================
278
  -----BEGIN CERTIFICATE-----
@@ -294,27 +201,6 @@ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
294
  Mw==
295
  -----END CERTIFICATE-----
296
 
297
- GeoTrust Global CA 2
298
- ====================
299
- -----BEGIN CERTIFICATE-----
300
- MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
301
- R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
302
- MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
303
- LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
304
- ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
305
- NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
306
- LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
307
- Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
308
- HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
309
- MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
310
- K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
311
- srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
312
- ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
313
- OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
314
- x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
315
- H4z1Ir+rzoPz4iIprn2DQKi6bA==
316
- -----END CERTIFICATE-----
317
-
318
  GeoTrust Universal CA
319
  =====================
320
  -----BEGIN CERTIFICATE-----
@@ -440,56 +326,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
440
  12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
441
  -----END CERTIFICATE-----
442
 
443
- Comodo Secure Services root
444
- ===========================
445
- -----BEGIN CERTIFICATE-----
446
- MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
447
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
448
- TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
449
- MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
450
- Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
451
- BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
452
- ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
453
- 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
454
- rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
455
- oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
456
- p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
457
- FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
458
- gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
459
- YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
460
- aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
461
- 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
462
- Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
463
- DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
464
- pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
465
- RR3B7Hzs/Sk=
466
- -----END CERTIFICATE-----
467
-
468
- Comodo Trusted Services root
469
- ============================
470
- -----BEGIN CERTIFICATE-----
471
- MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
472
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
473
- TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
474
- MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
475
- bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
476
- IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
477
- AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
478
- 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
479
- /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
480
- juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
481
- ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
482
- DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
483
- /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
484
- ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
485
- cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
486
- uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
487
- pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
488
- BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
489
- R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
490
- 9y5Xt5hwXsjEeLBi
491
- -----END CERTIFICATE-----
492
-
493
  QuoVadis Root CA
494
  ================
495
  -----BEGIN CERTIFICATE-----
@@ -629,54 +465,6 @@ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
629
  llpwrN9M
630
  -----END CERTIFICATE-----
631
 
632
- Staat der Nederlanden Root CA
633
- =============================
634
- -----BEGIN CERTIFICATE-----
635
- MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
636
- ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
637
- Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
638
- HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
639
- bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
640
- vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
641
- jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
642
- C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
643
- vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
644
- 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
645
- HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
646
- dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
647
- BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
648
- EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
649
- MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
650
- nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
651
- iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
652
- -----END CERTIFICATE-----
653
-
654
- UTN USERFirst Hardware Root CA
655
- ==============================
656
- -----BEGIN CERTIFICATE-----
657
- MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
658
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
659
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
660
- BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
661
- OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
662
- eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
663
- ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
664
- DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
665
- wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
666
- tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
667
- i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
668
- Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
669
- gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
670
- lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
671
- UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
672
- BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
673
- //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
674
- XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
675
- lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
676
- iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
677
- nfhmqA==
678
- -----END CERTIFICATE-----
679
-
680
  Camerfirma Chambers of Commerce Root
681
  ====================================
682
  -----BEGIN CERTIFICATE-----
@@ -731,41 +519,6 @@ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
731
  t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
732
  -----END CERTIFICATE-----
733
 
734
- NetLock Notary (Class A) Root
735
- =============================
736
- -----BEGIN CERTIFICATE-----
737
- MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
738
- EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
739
- dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
740
- ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
741
- DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
742
- EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
743
- VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
744
- cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
745
- D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
746
- z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
747
- /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
748
- tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
749
- 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
750
- A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
751
- Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
752
- bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
753
- IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
754
- LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
755
- ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
756
- IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
757
- IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
758
- b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
759
- bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
760
- Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
761
- bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
762
- ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
763
- ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
764
- CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
765
- KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
766
- 8CgHrTwXZoi1/baI
767
- -----END CERTIFICATE-----
768
-
769
  XRamp Global CA Root
770
  ====================
771
  -----BEGIN CERTIFICATE-----
@@ -909,38 +662,6 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
909
  +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
910
  -----END CERTIFICATE-----
911
 
912
- Swisscom Root CA 1
913
- ==================
914
- -----BEGIN CERTIFICATE-----
915
- MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
916
- EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
917
- dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
918
- MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
919
- aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
920
- IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
921
- MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
922
- NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
923
- AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
924
- b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
925
- 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
926
- cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
927
- WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
928
- haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
929
- MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
930
- HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
931
- BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
932
- MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
933
- jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
934
- MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
935
- VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
936
- vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
937
- OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
938
- 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
939
- nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
940
- x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
941
- NY6E0F/6MBr1mmz0DlP5OlvRHA==
942
- -----END CERTIFICATE-----
943
-
944
  DigiCert Assured ID Root CA
945
  ===========================
946
  -----BEGIN CERTIFICATE-----
@@ -1298,33 +1019,6 @@ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
1298
  ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1299
  -----END CERTIFICATE-----
1300
 
1301
- WellsSecure Public Root Certificate Authority
1302
- =============================================
1303
- -----BEGIN CERTIFICATE-----
1304
- MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
1305
- F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
1306
- NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1307
- MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
1308
- bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
1309
- VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1310
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
1311
- iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
1312
- i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
1313
- bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
1314
- K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
1315
- AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
1316
- cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
1317
- lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
1318
- i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
1319
- GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
1320
- Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
1321
- K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
1322
- bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
1323
- qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
1324
- E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
1325
- tylv2G0xffX8oRAHh84vWdw+WNs=
1326
- -----END CERTIFICATE-----
1327
-
1328
  COMODO ECC Certification Authority
1329
  ==================================
1330
  -----BEGIN CERTIFICATE-----
@@ -1342,30 +1036,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
1342
  U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1343
  -----END CERTIFICATE-----
1344
 
1345
- IGC/A
1346
- =====
1347
- -----BEGIN CERTIFICATE-----
1348
- MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
1349
- VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
1350
- Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
1351
- MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
1352
- EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
1353
- STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
1354
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
1355
- TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
1356
- So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
1357
- HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
1358
- frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
1359
- tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
1360
- egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
1361
- iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
1362
- q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
1363
- MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
1364
- Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
1365
- lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
1366
- 0mBWWg==
1367
- -----END CERTIFICATE-----
1368
-
1369
  Security Communication EV RootCA1
1370
  =================================
1371
  -----BEGIN CERTIFICATE-----
@@ -1410,46 +1080,6 @@ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
1410
  okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
1411
  -----END CERTIFICATE-----
1412
 
1413
- Microsec e-Szigno Root CA
1414
- =========================
1415
- -----BEGIN CERTIFICATE-----
1416
- MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
1417
- BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
1418
- EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
1419
- MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
1420
- dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
1421
- GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
1422
- AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
1423
- d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
1424
- oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
1425
- QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
1426
- PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
1427
- MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
1428
- IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
1429
- VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
1430
- LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
1431
- dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
1432
- AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
1433
- 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
1434
- AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
1435
- egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
1436
- Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
1437
- PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
1438
- c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
1439
- cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
1440
- IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
1441
- WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
1442
- MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
1443
- MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
1444
- Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
1445
- HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
1446
- nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
1447
- aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
1448
- 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
1449
- yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
1450
- S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
1451
- -----END CERTIFICATE-----
1452
-
1453
  Certigna
1454
  ========
1455
  -----BEGIN CERTIFICATE-----
@@ -1575,58 +1205,6 @@ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
1575
  dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
1576
  -----END CERTIFICATE-----
1577
 
1578
- Buypass Class 2 CA 1
1579
- ====================
1580
- -----BEGIN CERTIFICATE-----
1581
- MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
1582
- QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
1583
- MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
1584
- c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
1585
- hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
1586
- cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
1587
- 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
1588
- 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
1589
- uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
1590
- MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
1591
- AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
1592
- 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
1593
- 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
1594
- fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
1595
- wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
1596
- -----END CERTIFICATE-----
1597
-
1598
- EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
1599
- ==========================================================================
1600
- -----BEGIN CERTIFICATE-----
1601
- MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
1602
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
1603
- QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
1604
- Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
1605
- ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
1606
- IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
1607
- SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
1608
- X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
1609
- gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
1610
- eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
1611
- TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
1612
- Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
1613
- uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
1614
- qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
1615
- ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
1616
- Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
1617
- /wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
1618
- Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
1619
- FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
1620
- zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
1621
- XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
1622
- bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
1623
- RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
1624
- 1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
1625
- 2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
1626
- Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
1627
- AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
1628
- -----END CERTIFICATE-----
1629
-
1630
  certSIGN ROOT CA
1631
  ================
1632
  -----BEGIN CERTIFICATE-----
@@ -1647,49 +1225,6 @@ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
1647
  TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
1648
  -----END CERTIFICATE-----
1649
 
1650
- CNNIC ROOT
1651
- ==========
1652
- -----BEGIN CERTIFICATE-----
1653
- MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
1654
- ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
1655
- OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
1656
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
1657
- o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
1658
- VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
1659
- VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
1660
- czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
1661
- y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
1662
- wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
1663
- lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
1664
- Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
1665
- O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
1666
- BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
1667
- G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
1668
- mxE=
1669
- -----END CERTIFICATE-----
1670
-
1671
- ApplicationCA - Japanese Government
1672
- ===================================
1673
- -----BEGIN CERTIFICATE-----
1674
- MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
1675
- SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
1676
- MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
1677
- cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1678
- CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
1679
- fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
1680
- wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
1681
- jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
1682
- nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
1683
- WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
1684
- BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
1685
- vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
1686
- o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
1687
- /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
1688
- io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
1689
- dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
1690
- rosot4LKGAfmt1t06SAZf7IbiVQ=
1691
- -----END CERTIFICATE-----
1692
-
1693
  GeoTrust Primary Certification Authority - G3
1694
  =============================================
1695
  -----BEGIN CERTIFICATE-----
@@ -1821,7 +1356,7 @@ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1821
  -----END CERTIFICATE-----
1822
 
1823
  NetLock Arany (Class Gold) Főtanúsítvány
1824
- ============================================
1825
  -----BEGIN CERTIFICATE-----
1826
  MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
1827
  A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
@@ -1876,58 +1411,6 @@ IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
1876
  66+KAQ==
1877
  -----END CERTIFICATE-----
1878
 
1879
- CA Disig
1880
- ========
1881
- -----BEGIN CERTIFICATE-----
1882
- MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
1883
- QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
1884
- MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
1885
- bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
1886
- DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
1887
- GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
1888
- Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
1889
- hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
1890
- ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
1891
- gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
1892
- AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
1893
- aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
1894
- ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
1895
- BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
1896
- WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
1897
- mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
1898
- CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
1899
- ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
1900
- 4Z7CRneC9VkGjCFMhwnN5ag=
1901
- -----END CERTIFICATE-----
1902
-
1903
- Juur-SK
1904
- =======
1905
- -----BEGIN CERTIFICATE-----
1906
- MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
1907
- c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
1908
- DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
1909
- SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
1910
- aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1911
- ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
1912
- TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
1913
- +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
1914
- UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
1915
- Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
1916
- MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
1917
- HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
1918
- AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
1919
- cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
1920
- AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
1921
- cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
1922
- FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
1923
- A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
1924
- ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
1925
- abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
1926
- IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
1927
- Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
1928
- yyqcjg==
1929
- -----END CERTIFICATE-----
1930
-
1931
  Hongkong Post Root CA 1
1932
  =======================
1933
  -----BEGIN CERTIFICATE-----
@@ -2361,7 +1844,7 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
2361
  -----END CERTIFICATE-----
2362
 
2363
  Certinomis - Autorité Racine
2364
- =============================
2365
  -----BEGIN CERTIFICATE-----
2366
  MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
2367
  Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
@@ -2391,41 +1874,6 @@ wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
2391
  vgt2Fl43N+bYdJeimUV5
2392
  -----END CERTIFICATE-----
2393
 
2394
- Root CA Generalitat Valenciana
2395
- ==============================
2396
- -----BEGIN CERTIFICATE-----
2397
- MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
2398
- ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
2399
- IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
2400
- WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
2401
- CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
2402
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
2403
- F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
2404
- ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
2405
- D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
2406
- JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
2407
- AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
2408
- dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
2409
- ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
2410
- AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
2411
- YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
2412
- AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
2413
- aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
2414
- AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
2415
- YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
2416
- AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
2417
- OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
2418
- dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
2419
- BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
2420
- A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
2421
- b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
2422
- TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
2423
- Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
2424
- NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
2425
- iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
2426
- +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
2427
- -----END CERTIFICATE-----
2428
-
2429
  TWCA Root Certification Authority
2430
  =================================
2431
  -----BEGIN CERTIFICATE-----
@@ -2871,93 +2319,6 @@ poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
2871
  eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
2872
  -----END CERTIFICATE-----
2873
 
2874
- China Internet Network Information Center EV Certificates Root
2875
- ==============================================================
2876
- -----BEGIN CERTIFICATE-----
2877
- MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
2878
- BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
2879
- aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
2880
- Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
2881
- A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
2882
- PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
2883
- cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
2884
- jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
2885
- 98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
2886
- klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
2887
- KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
2888
- 7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
2889
- HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
2890
- glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
2891
- 0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
2892
- 7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
2893
- ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
2894
- 5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
2895
- -----END CERTIFICATE-----
2896
-
2897
- Swisscom Root CA 2
2898
- ==================
2899
- -----BEGIN CERTIFICATE-----
2900
- MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
2901
- EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
2902
- dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
2903
- MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
2904
- aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
2905
- IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
2906
- LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
2907
- ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
2908
- wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
2909
- Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
2910
- SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
2911
- NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
2912
- mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
2913
- Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
2914
- qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
2915
- HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
2916
- BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
2917
- MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
2918
- v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
2919
- 82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
2920
- o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
2921
- a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
2922
- OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
2923
- mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
2924
- +sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
2925
- rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
2926
- 5OfNeOI5wSsSnqaeG8XmDtkx2Q==
2927
- -----END CERTIFICATE-----
2928
-
2929
- Swisscom Root EV CA 2
2930
- =====================
2931
- -----BEGIN CERTIFICATE-----
2932
- MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
2933
- BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
2934
- cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
2935
- MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
2936
- HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
2937
- Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
2938
- o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
2939
- Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
2940
- GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
2941
- qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
2942
- Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
2943
- alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
2944
- m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
2945
- bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
2946
- xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
2947
- BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
2948
- MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
2949
- bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
2950
- j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
2951
- wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
2952
- XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
2953
- 59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
2954
- 23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
2955
- J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
2956
- HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
2957
- uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
2958
- l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
2959
- -----END CERTIFICATE-----
2960
-
2961
  CA Disig Root R1
2962
  ================
2963
  -----BEGIN CERTIFICATE-----
@@ -3756,7 +3117,7 @@ ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
3756
  -----END CERTIFICATE-----
3757
 
3758
  TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
3759
- =========================================================
3760
  -----BEGIN CERTIFICATE-----
3761
  MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
3762
  BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
@@ -3779,30 +3140,6 @@ lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
3779
  B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
3780
  -----END CERTIFICATE-----
3781
 
3782
- TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
3783
- =========================================================
3784
- -----BEGIN CERTIFICATE-----
3785
- MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
3786
- A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
3787
- acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF
3788
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5
3789
- MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL
3790
- BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf
3791
- aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm
3792
- aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
3793
- AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a
3794
- 2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED
3795
- wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb
3796
- HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV
3797
- +DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT
3798
- 9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
3799
- 9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R
3800
- fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy
3801
- o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW
3802
- hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1
3803
- O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw==
3804
- -----END CERTIFICATE-----
3805
-
3806
  Certinomis - Root CA
3807
  ====================
3808
  -----BEGIN CERTIFICATE-----
@@ -3892,28 +3229,418 @@ Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
3892
  a/GRspBl9JrmkO5K
3893
  -----END CERTIFICATE-----
3894
 
3895
- ================================================================
3896
- C: US
3897
- O: GTE Corporation
3898
- OU: GTE CyberTrust Solutions, Inc.
3899
- CN: GTE CyberTrust Global Root
3900
- --
3901
- Not Before: 1998-08-13
3902
- Not After: 2018-08-13
3903
- Signature: md5WithRSAEncryption
3904
- Key: RSA:1024
3905
- -----BEGIN CERTIFICATE-----
3906
- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
3907
- VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
3908
- bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
3909
- b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
3910
- UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
3911
- cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
3912
- b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
3913
- iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
3914
- r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
3915
- 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
3916
- GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
3917
- 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
3918
- lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3919
  -----END CERTIFICATE-----
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
+ ## Certificate data from Mozilla as of: Wed Sep 20 03:12:05 2017 GMT
5
  ##
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
8
  ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
10
  ##
11
  ## It contains the certificates in PEM format and therefore
12
  ## can be directly used with curl / libcurl / php_curl, or with
13
  ## an Apache+mod_ssl webserver for SSL client authentication.
14
  ## Just configure this file as the SSLCACertificateFile.
15
  ##
16
+ ## Conversion done with mk-ca-bundle.pl version 1.27.
17
+ ## SHA256: 2b2dbe5244e0047e088c597998883a913f6c5fffd1cb5c0fe5a368c8466cb2ec
18
  ##
19
 
20
 
130
  RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
131
  -----END CERTIFICATE-----
132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  AddTrust External Root
134
  ======================
135
  -----BEGIN CERTIFICATE-----
154
  G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
155
  -----END CERTIFICATE-----
156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  Entrust Root Certification Authority
158
  ====================================
159
  -----BEGIN CERTIFICATE-----
180
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
181
  -----END CERTIFICATE-----
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  GeoTrust Global CA
184
  ==================
185
  -----BEGIN CERTIFICATE-----
201
  Mw==
202
  -----END CERTIFICATE-----
203
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  GeoTrust Universal CA
205
  =====================
206
  -----BEGIN CERTIFICATE-----
326
  12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
327
  -----END CERTIFICATE-----
328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  QuoVadis Root CA
330
  ================
331
  -----BEGIN CERTIFICATE-----
465
  llpwrN9M
466
  -----END CERTIFICATE-----
467
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468
  Camerfirma Chambers of Commerce Root
469
  ====================================
470
  -----BEGIN CERTIFICATE-----
519
  t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
520
  -----END CERTIFICATE-----
521
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
522
  XRamp Global CA Root
523
  ====================
524
  -----BEGIN CERTIFICATE-----
662
  +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
663
  -----END CERTIFICATE-----
664
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
665
  DigiCert Assured ID Root CA
666
  ===========================
667
  -----BEGIN CERTIFICATE-----
1019
  ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1020
  -----END CERTIFICATE-----
1021
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1022
  COMODO ECC Certification Authority
1023
  ==================================
1024
  -----BEGIN CERTIFICATE-----
1036
  U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1037
  -----END CERTIFICATE-----
1038
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1039
  Security Communication EV RootCA1
1040
  =================================
1041
  -----BEGIN CERTIFICATE-----
1080
  okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
1081
  -----END CERTIFICATE-----
1082
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1083
  Certigna
1084
  ========
1085
  -----BEGIN CERTIFICATE-----
1205
  dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
1206
  -----END CERTIFICATE-----
1207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1208
  certSIGN ROOT CA
1209
  ================
1210
  -----BEGIN CERTIFICATE-----
1225
  TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
1226
  -----END CERTIFICATE-----
1227
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1228
  GeoTrust Primary Certification Authority - G3
1229
  =============================================
1230
  -----BEGIN CERTIFICATE-----
1356
  -----END CERTIFICATE-----
1357
 
1358
  NetLock Arany (Class Gold) Főtanúsítvány
1359
+ ========================================
1360
  -----BEGIN CERTIFICATE-----
1361
  MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
1362
  A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
1411
  66+KAQ==
1412
  -----END CERTIFICATE-----
1413
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1414
  Hongkong Post Root CA 1
1415
  =======================
1416
  -----BEGIN CERTIFICATE-----
1844
  -----END CERTIFICATE-----
1845
 
1846
  Certinomis - Autorité Racine
1847
+ ============================
1848
  -----BEGIN CERTIFICATE-----
1849
  MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
1850
  Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
1874
  vgt2Fl43N+bYdJeimUV5
1875
  -----END CERTIFICATE-----
1876
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1877
  TWCA Root Certification Authority
1878
  =================================
1879
  -----BEGIN CERTIFICATE-----
2319
  eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
2320
  -----END CERTIFICATE-----
2321
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2322
  CA Disig Root R1
2323
  ================
2324
  -----BEGIN CERTIFICATE-----
3117
  -----END CERTIFICATE-----
3118
 
3119
  TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
3120
+ ====================================================
3121
  -----BEGIN CERTIFICATE-----
3122
  MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
3123
  BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
3140
  B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
3141
  -----END CERTIFICATE-----
3142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3143
  Certinomis - Root CA
3144
  ====================
3145
  -----BEGIN CERTIFICATE-----
3229
  a/GRspBl9JrmkO5K
3230
  -----END CERTIFICATE-----
3231
 
3232
+ SZAFIR ROOT CA2
3233
+ ===============
3234
+ -----BEGIN CERTIFICATE-----
3235
+ MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
3236
+ A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
3237
+ BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
3238
+ BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
3239
+ VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
3240
+ qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
3241
+ DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
3242
+ 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
3243
+ ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
3244
+ ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
3245
+ AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
3246
+ AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
3247
+ O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
3248
+ oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
3249
+ 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
3250
+ +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
3251
+ -----END CERTIFICATE-----
3252
+
3253
+ Certum Trusted Network CA 2
3254
+ ===========================
3255
+ -----BEGIN CERTIFICATE-----
3256
+ MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
3257
+ BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
3258
+ bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
3259
+ ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
3260
+ TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
3261
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
3262
+ IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
3263
+ 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
3264
+ CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
3265
+ Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
3266
+ uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
3267
+ GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
3268
+ 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
3269
+ Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
3270
+ hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
3271
+ BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
3272
+ AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
3273
+ hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
3274
+ Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
3275
+ L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
3276
+ clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
3277
+ pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
3278
+ w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
3279
+ J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
3280
+ ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
3281
+ is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
3282
+ zAYspsbiDrW5viSP
3283
+ -----END CERTIFICATE-----
3284
+
3285
+ Hellenic Academic and Research Institutions RootCA 2015
3286
+ =======================================================
3287
+ -----BEGIN CERTIFICATE-----
3288
+ MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
3289
+ BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
3290
+ aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
3291
+ YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
3292
+ MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
3293
+ QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
3294
+ BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
3295
+ MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
3296
+ bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
3297
+ iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
3298
+ 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
3299
+ FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
3300
+ i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
3301
+ GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
3302
+ fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
3303
+ iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
3304
+ Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
3305
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
3306
+ hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
3307
+ D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
3308
+ d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
3309
+ d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
3310
+ 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
3311
+ davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
3312
+ Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
3313
+ J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
3314
+ JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
3315
+ p/UsQu0yrbYhnr68
3316
+ -----END CERTIFICATE-----
3317
+
3318
+ Hellenic Academic and Research Institutions ECC RootCA 2015
3319
+ ===========================================================
3320
+ -----BEGIN CERTIFICATE-----
3321
+ MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
3322
+ aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
3323
+ cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
3324
+ aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
3325
+ MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
3326
+ IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
3327
+ VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
3328
+ Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
3329
+ dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
3330
+ Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
3331
+ BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
3332
+ GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
3333
+ dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
3334
+ -----END CERTIFICATE-----
3335
+
3336
+ Certplus Root CA G1
3337
+ ===================
3338
+ -----BEGIN CERTIFICATE-----
3339
+ MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV
3340
+ BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe
3341
+ Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD
3342
+ ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD
3343
+ ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN
3344
+ r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx
3345
+ Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj
3346
+ BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv
3347
+ LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2
3348
+ z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc
3349
+ 4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd
3350
+ 4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj
3351
+ jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+
3352
+ ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G
3353
+ A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY
3354
+ lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh
3355
+ 66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG
3356
+ YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/
3357
+ 2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F
3358
+ 6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX
3359
+ CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe
3360
+ tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC
3361
+ VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/
3362
+ +mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+
3363
+ qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
3364
+ -----END CERTIFICATE-----
3365
+
3366
+ Certplus Root CA G2
3367
+ ===================
3368
+ -----BEGIN CERTIFICATE-----
3369
+ MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
3370
+ AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
3371
+ NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
3372
+ cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
3373
+ BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
3374
+ Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
3375
+ AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
3376
+ IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
3377
+ HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
3378
+ vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
3379
+ -----END CERTIFICATE-----
3380
+
3381
+ OpenTrust Root CA G1
3382
+ ====================
3383
+ -----BEGIN CERTIFICATE-----
3384
+ MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV
3385
+ BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx
3386
+ MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
3387
+ CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB
3388
+ AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa
3389
+ Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87
3390
+ ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO
3391
+ YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9
3392
+ xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO
3393
+ 9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq
3394
+ 3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi
3395
+ n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9
3396
+ URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr
3397
+ TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
3398
+ /zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px
3399
+ N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E
3400
+ PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv
3401
+ uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK
3402
+ n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh
3403
+ X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80
3404
+ nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm
3405
+ GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/
3406
+ bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o
3407
+ 4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA
3408
+ OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
3409
+ -----END CERTIFICATE-----
3410
+
3411
+ OpenTrust Root CA G2
3412
+ ====================
3413
+ -----BEGIN CERTIFICATE-----
3414
+ MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV
3415
+ BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy
3416
+ MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
3417
+ CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB
3418
+ AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+
3419
+ Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz
3420
+ 4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV
3421
+ eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt
3422
+ UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz
3423
+ 3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj
3424
+ 3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz
3425
+ 9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0
3426
+ 0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT
3427
+ y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
3428
+ /zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59
3429
+ M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz
3430
+ Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI
3431
+ mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG
3432
+ S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp
3433
+ EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ
3434
+ 6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr
3435
+ gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo
3436
+ SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0
3437
+ YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm
3438
+ u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
3439
+ -----END CERTIFICATE-----
3440
+
3441
+ OpenTrust Root CA G3
3442
+ ====================
3443
+ -----BEGIN CERTIFICATE-----
3444
+ MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
3445
+ AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
3446
+ DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
3447
+ ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
3448
+ IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
3449
+ ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
3450
+ /wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
3451
+ BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
3452
+ BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
3453
+ 3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
3454
+ -----END CERTIFICATE-----
3455
+
3456
+ ISRG Root X1
3457
+ ============
3458
+ -----BEGIN CERTIFICATE-----
3459
+ MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE
3460
+ BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD
3461
+ EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG
3462
+ EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
3463
+ DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r
3464
+ Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1
3465
+ 3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K
3466
+ b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN
3467
+ Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ
3468
+ 4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf
3469
+ 1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu
3470
+ hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH
3471
+ usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r
3472
+ OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G
3473
+ A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY
3474
+ 9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
3475
+ ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV
3476
+ 0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt
3477
+ hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw
3478
+ TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
3479
+ e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA
3480
+ JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD
3481
+ YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
3482
+ JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
3483
+ m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
3484
+ -----END CERTIFICATE-----
3485
+
3486
+ AC RAIZ FNMT-RCM
3487
+ ================
3488
+ -----BEGIN CERTIFICATE-----
3489
+ MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT
3490
+ AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw
3491
+ MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD
3492
+ TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
3493
+ ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf
3494
+ qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr
3495
+ btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL
3496
+ j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou
3497
+ 08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw
3498
+ WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT
3499
+ tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ
3500
+ 47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC
3501
+ ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa
3502
+ i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
3503
+ FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o
3504
+ dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD
3505
+ nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s
3506
+ D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ
3507
+ j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT
3508
+ Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW
3509
+ +YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7
3510
+ Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d
3511
+ 8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm
3512
+ 5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG
3513
+ rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=
3514
+ -----END CERTIFICATE-----
3515
+
3516
+ Amazon Root CA 1
3517
+ ================
3518
+ -----BEGIN CERTIFICATE-----
3519
+ MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
3520
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
3521
+ MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
3522
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
3523
+ ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
3524
+ FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
3525
+ gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
3526
+ dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
3527
+ VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
3528
+ /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
3529
+ DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
3530
+ CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
3531
+ 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
3532
+ 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
3533
+ xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
3534
+ -----END CERTIFICATE-----
3535
+
3536
+ Amazon Root CA 2
3537
+ ================
3538
+ -----BEGIN CERTIFICATE-----
3539
+ MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
3540
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
3541
+ MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
3542
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
3543
+ ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
3544
+ kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
3545
+ N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
3546
+ AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
3547
+ fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
3548
+ kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
3549
+ btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
3550
+ Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
3551
+ c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
3552
+ 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
3553
+ DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
3554
+ A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
3555
+ +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
3556
+ YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
3557
+ xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
3558
+ gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
3559
+ aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
3560
+ Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
3561
+ KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
3562
+ JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
3563
+ -----END CERTIFICATE-----
3564
+
3565
+ Amazon Root CA 3
3566
+ ================
3567
+ -----BEGIN CERTIFICATE-----
3568
+ MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
3569
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
3570
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
3571
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
3572
+ f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
3573
+ Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
3574
+ rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
3575
+ eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
3576
+ -----END CERTIFICATE-----
3577
+
3578
+ Amazon Root CA 4
3579
+ ================
3580
+ -----BEGIN CERTIFICATE-----
3581
+ MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
3582
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
3583
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
3584
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
3585
+ /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
3586
+ 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
3587
+ HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
3588
+ MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
3589
+ AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
3590
+ -----END CERTIFICATE-----
3591
+
3592
+ LuxTrust Global Root 2
3593
+ ======================
3594
+ -----BEGIN CERTIFICATE-----
3595
+ MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG
3596
+ A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh
3597
+ bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW
3598
+ MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC
3599
+ AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm
3600
+ Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2
3601
+ xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC
3602
+ wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm
3603
+ 1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm
3604
+ FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF
3605
+ wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/
3606
+ a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U
3607
+ ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ
3608
+ MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB
3609
+ /zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5
3610
+ Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT
3611
+ +Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ
3612
+ FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN
3613
+ H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW
3614
+ 7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu
3615
+ ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA
3616
+ VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR
3617
+ TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt
3618
+ /f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc
3619
+ 7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I
3620
+ iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr
3621
+ -----END CERTIFICATE-----
3622
+
3623
+ TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
3624
+ =============================================
3625
+ -----BEGIN CERTIFICATE-----
3626
+ MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
3627
+ D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
3628
+ IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
3629
+ TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
3630
+ ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
3631
+ VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
3632
+ c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
3633
+ bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
3634
+ IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
3635
+ MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
3636
+ 6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
3637
+ wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
3638
+ 3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
3639
+ WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
3640
+ ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
3641
+ KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
3642
+ AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
3643
+ lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
3644
+ e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
3645
+ q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
3646
  -----END CERTIFICATE-----
lib/stripe-gateway/init.php CHANGED
@@ -5,6 +5,10 @@ require(dirname(__FILE__) . '/lib/Stripe.php');
5
 
6
  // Utilities
7
  require(dirname(__FILE__) . '/lib/Util/AutoPagingIterator.php');
 
 
 
 
8
  require(dirname(__FILE__) . '/lib/Util/RequestOptions.php');
9
  require(dirname(__FILE__) . '/lib/Util/Set.php');
10
  require(dirname(__FILE__) . '/lib/Util/Util.php');
@@ -19,22 +23,43 @@ require(dirname(__FILE__) . '/lib/Error/Api.php');
19
  require(dirname(__FILE__) . '/lib/Error/ApiConnection.php');
20
  require(dirname(__FILE__) . '/lib/Error/Authentication.php');
21
  require(dirname(__FILE__) . '/lib/Error/Card.php');
 
22
  require(dirname(__FILE__) . '/lib/Error/InvalidRequest.php');
 
23
  require(dirname(__FILE__) . '/lib/Error/RateLimit.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  // Plumbing
26
  require(dirname(__FILE__) . '/lib/ApiResponse.php');
27
- require(dirname(__FILE__) . '/lib/JsonSerializable.php');
28
  require(dirname(__FILE__) . '/lib/StripeObject.php');
29
  require(dirname(__FILE__) . '/lib/ApiRequestor.php');
30
  require(dirname(__FILE__) . '/lib/ApiResource.php');
31
  require(dirname(__FILE__) . '/lib/SingletonApiResource.php');
32
- require(dirname(__FILE__) . '/lib/AttachedObject.php');
33
- require(dirname(__FILE__) . '/lib/ExternalAccount.php');
34
 
35
  // Stripe API Resources
36
  require(dirname(__FILE__) . '/lib/Account.php');
 
37
  require(dirname(__FILE__) . '/lib/AlipayAccount.php');
 
38
  require(dirname(__FILE__) . '/lib/ApplicationFee.php');
39
  require(dirname(__FILE__) . '/lib/ApplicationFeeRefund.php');
40
  require(dirname(__FILE__) . '/lib/Balance.php');
@@ -42,27 +67,78 @@ require(dirname(__FILE__) . '/lib/BalanceTransaction.php');
42
  require(dirname(__FILE__) . '/lib/BankAccount.php');
43
  require(dirname(__FILE__) . '/lib/BitcoinReceiver.php');
44
  require(dirname(__FILE__) . '/lib/BitcoinTransaction.php');
 
45
  require(dirname(__FILE__) . '/lib/Card.php');
46
  require(dirname(__FILE__) . '/lib/Charge.php');
 
47
  require(dirname(__FILE__) . '/lib/Collection.php');
48
  require(dirname(__FILE__) . '/lib/CountrySpec.php');
49
  require(dirname(__FILE__) . '/lib/Coupon.php');
 
50
  require(dirname(__FILE__) . '/lib/Customer.php');
 
 
51
  require(dirname(__FILE__) . '/lib/Dispute.php');
 
52
  require(dirname(__FILE__) . '/lib/Event.php');
 
 
 
53
  require(dirname(__FILE__) . '/lib/FileUpload.php');
54
  require(dirname(__FILE__) . '/lib/Invoice.php');
55
  require(dirname(__FILE__) . '/lib/InvoiceItem.php');
 
 
 
 
 
 
 
 
 
56
  require(dirname(__FILE__) . '/lib/Order.php');
 
57
  require(dirname(__FILE__) . '/lib/OrderReturn.php');
 
 
 
 
58
  require(dirname(__FILE__) . '/lib/Plan.php');
59
  require(dirname(__FILE__) . '/lib/Product.php');
 
 
 
60
  require(dirname(__FILE__) . '/lib/Recipient.php');
 
61
  require(dirname(__FILE__) . '/lib/Refund.php');
 
 
 
 
62
  require(dirname(__FILE__) . '/lib/SKU.php');
 
63
  require(dirname(__FILE__) . '/lib/Source.php');
 
64
  require(dirname(__FILE__) . '/lib/Subscription.php');
 
 
 
 
 
 
 
65
  require(dirname(__FILE__) . '/lib/ThreeDSecure.php');
66
  require(dirname(__FILE__) . '/lib/Token.php');
 
67
  require(dirname(__FILE__) . '/lib/Transfer.php');
68
  require(dirname(__FILE__) . '/lib/TransferReversal.php');
 
 
 
 
 
 
 
 
 
 
5
 
6
  // Utilities
7
  require(dirname(__FILE__) . '/lib/Util/AutoPagingIterator.php');
8
+ require(dirname(__FILE__) . '/lib/Util/CaseInsensitiveArray.php');
9
+ require(dirname(__FILE__) . '/lib/Util/LoggerInterface.php');
10
+ require(dirname(__FILE__) . '/lib/Util/DefaultLogger.php');
11
+ require(dirname(__FILE__) . '/lib/Util/RandomGenerator.php');
12
  require(dirname(__FILE__) . '/lib/Util/RequestOptions.php');
13
  require(dirname(__FILE__) . '/lib/Util/Set.php');
14
  require(dirname(__FILE__) . '/lib/Util/Util.php');
23
  require(dirname(__FILE__) . '/lib/Error/ApiConnection.php');
24
  require(dirname(__FILE__) . '/lib/Error/Authentication.php');
25
  require(dirname(__FILE__) . '/lib/Error/Card.php');
26
+ require(dirname(__FILE__) . '/lib/Error/Idempotency.php');
27
  require(dirname(__FILE__) . '/lib/Error/InvalidRequest.php');
28
+ require(dirname(__FILE__) . '/lib/Error/Permission.php');
29
  require(dirname(__FILE__) . '/lib/Error/RateLimit.php');
30
+ require(dirname(__FILE__) . '/lib/Error/SignatureVerification.php');
31
+
32
+ // OAuth errors
33
+ require(dirname(__FILE__) . '/lib/Error/OAuth/OAuthBase.php');
34
+ require(dirname(__FILE__) . '/lib/Error/OAuth/InvalidClient.php');
35
+ require(dirname(__FILE__) . '/lib/Error/OAuth/InvalidGrant.php');
36
+ require(dirname(__FILE__) . '/lib/Error/OAuth/InvalidRequest.php');
37
+ require(dirname(__FILE__) . '/lib/Error/OAuth/InvalidScope.php');
38
+ require(dirname(__FILE__) . '/lib/Error/OAuth/UnsupportedGrantType.php');
39
+ require(dirname(__FILE__) . '/lib/Error/OAuth/UnsupportedResponseType.php');
40
+
41
+ // API operations
42
+ require(dirname(__FILE__) . '/lib/ApiOperations/All.php');
43
+ require(dirname(__FILE__) . '/lib/ApiOperations/Create.php');
44
+ require(dirname(__FILE__) . '/lib/ApiOperations/Delete.php');
45
+ require(dirname(__FILE__) . '/lib/ApiOperations/NestedResource.php');
46
+ require(dirname(__FILE__) . '/lib/ApiOperations/Request.php');
47
+ require(dirname(__FILE__) . '/lib/ApiOperations/Retrieve.php');
48
+ require(dirname(__FILE__) . '/lib/ApiOperations/Update.php');
49
 
50
  // Plumbing
51
  require(dirname(__FILE__) . '/lib/ApiResponse.php');
52
+ require(dirname(__FILE__) . '/lib/RequestTelemetry.php');
53
  require(dirname(__FILE__) . '/lib/StripeObject.php');
54
  require(dirname(__FILE__) . '/lib/ApiRequestor.php');
55
  require(dirname(__FILE__) . '/lib/ApiResource.php');
56
  require(dirname(__FILE__) . '/lib/SingletonApiResource.php');
 
 
57
 
58
  // Stripe API Resources
59
  require(dirname(__FILE__) . '/lib/Account.php');
60
+ require(dirname(__FILE__) . '/lib/AccountLink.php');
61
  require(dirname(__FILE__) . '/lib/AlipayAccount.php');
62
+ require(dirname(__FILE__) . '/lib/ApplePayDomain.php');
63
  require(dirname(__FILE__) . '/lib/ApplicationFee.php');
64
  require(dirname(__FILE__) . '/lib/ApplicationFeeRefund.php');
65
  require(dirname(__FILE__) . '/lib/Balance.php');
67
  require(dirname(__FILE__) . '/lib/BankAccount.php');
68
  require(dirname(__FILE__) . '/lib/BitcoinReceiver.php');
69
  require(dirname(__FILE__) . '/lib/BitcoinTransaction.php');
70
+ require(dirname(__FILE__) . '/lib/Capability.php');
71
  require(dirname(__FILE__) . '/lib/Card.php');
72
  require(dirname(__FILE__) . '/lib/Charge.php');
73
+ require(dirname(__FILE__) . '/lib/Checkout/Session.php');
74
  require(dirname(__FILE__) . '/lib/Collection.php');
75
  require(dirname(__FILE__) . '/lib/CountrySpec.php');
76
  require(dirname(__FILE__) . '/lib/Coupon.php');
77
+ require(dirname(__FILE__) . '/lib/CreditNote.php');
78
  require(dirname(__FILE__) . '/lib/Customer.php');
79
+ require(dirname(__FILE__) . '/lib/CustomerBalanceTransaction.php');
80
+ require(dirname(__FILE__) . '/lib/Discount.php');
81
  require(dirname(__FILE__) . '/lib/Dispute.php');
82
+ require(dirname(__FILE__) . '/lib/EphemeralKey.php');
83
  require(dirname(__FILE__) . '/lib/Event.php');
84
+ require(dirname(__FILE__) . '/lib/ExchangeRate.php');
85
+ require(dirname(__FILE__) . '/lib/File.php');
86
+ require(dirname(__FILE__) . '/lib/FileLink.php');
87
  require(dirname(__FILE__) . '/lib/FileUpload.php');
88
  require(dirname(__FILE__) . '/lib/Invoice.php');
89
  require(dirname(__FILE__) . '/lib/InvoiceItem.php');
90
+ require(dirname(__FILE__) . '/lib/InvoiceLineItem.php');
91
+ require(dirname(__FILE__) . '/lib/IssuerFraudRecord.php');
92
+ require(dirname(__FILE__) . '/lib/Issuing/Authorization.php');
93
+ require(dirname(__FILE__) . '/lib/Issuing/Card.php');
94
+ require(dirname(__FILE__) . '/lib/Issuing/CardDetails.php');
95
+ require(dirname(__FILE__) . '/lib/Issuing/Cardholder.php');
96
+ require(dirname(__FILE__) . '/lib/Issuing/Dispute.php');
97
+ require(dirname(__FILE__) . '/lib/Issuing/Transaction.php');
98
+ require(dirname(__FILE__) . '/lib/LoginLink.php');
99
  require(dirname(__FILE__) . '/lib/Order.php');
100
+ require(dirname(__FILE__) . '/lib/OrderItem.php');
101
  require(dirname(__FILE__) . '/lib/OrderReturn.php');
102
+ require(dirname(__FILE__) . '/lib/PaymentIntent.php');
103
+ require(dirname(__FILE__) . '/lib/PaymentMethod.php');
104
+ require(dirname(__FILE__) . '/lib/Payout.php');
105
+ require(dirname(__FILE__) . '/lib/Person.php');
106
  require(dirname(__FILE__) . '/lib/Plan.php');
107
  require(dirname(__FILE__) . '/lib/Product.php');
108
+ require(dirname(__FILE__) . '/lib/Radar/EarlyFraudWarning.php');
109
+ require(dirname(__FILE__) . '/lib/Radar/ValueList.php');
110
+ require(dirname(__FILE__) . '/lib/Radar/ValueListItem.php');
111
  require(dirname(__FILE__) . '/lib/Recipient.php');
112
+ require(dirname(__FILE__) . '/lib/RecipientTransfer.php');
113
  require(dirname(__FILE__) . '/lib/Refund.php');
114
+ require(dirname(__FILE__) . '/lib/Reporting/ReportRun.php');
115
+ require(dirname(__FILE__) . '/lib/Reporting/ReportType.php');
116
+ require(dirname(__FILE__) . '/lib/Review.php');
117
+ require(dirname(__FILE__) . '/lib/SetupIntent.php');
118
  require(dirname(__FILE__) . '/lib/SKU.php');
119
+ require(dirname(__FILE__) . '/lib/Sigma/ScheduledQueryRun.php');
120
  require(dirname(__FILE__) . '/lib/Source.php');
121
+ require(dirname(__FILE__) . '/lib/SourceTransaction.php');
122
  require(dirname(__FILE__) . '/lib/Subscription.php');
123
+ require(dirname(__FILE__) . '/lib/SubscriptionItem.php');
124
+ require(dirname(__FILE__) . '/lib/SubscriptionSchedule.php');
125
+ require(dirname(__FILE__) . '/lib/TaxId.php');
126
+ require(dirname(__FILE__) . '/lib/TaxRate.php');
127
+ require(dirname(__FILE__) . '/lib/Terminal/ConnectionToken.php');
128
+ require(dirname(__FILE__) . '/lib/Terminal/Location.php');
129
+ require(dirname(__FILE__) . '/lib/Terminal/Reader.php');
130
  require(dirname(__FILE__) . '/lib/ThreeDSecure.php');
131
  require(dirname(__FILE__) . '/lib/Token.php');
132
+ require(dirname(__FILE__) . '/lib/Topup.php');
133
  require(dirname(__FILE__) . '/lib/Transfer.php');
134
  require(dirname(__FILE__) . '/lib/TransferReversal.php');
135
+ require(dirname(__FILE__) . '/lib/UsageRecord.php');
136
+ require(dirname(__FILE__) . '/lib/UsageRecordSummary.php');
137
+
138
+ // OAuth
139
+ require(dirname(__FILE__) . '/lib/OAuth.php');
140
+
141
+ // Webhooks
142
+ require(dirname(__FILE__) . '/lib/Webhook.php');
143
+ require(dirname(__FILE__) . '/lib/WebhookEndpoint.php');
144
+ require(dirname(__FILE__) . '/lib/WebhookSignature.php');
lib/stripe-gateway/lib/Account.php CHANGED
@@ -7,35 +7,88 @@ namespace Stripe;
7
  *
8
  * @property string $id
9
  * @property string $object
10
- * @property mixed $business_logo
11
- * @property string $business_name
12
- * @property mixed $business_url
13
  * @property bool $charges_enabled
 
14
  * @property string $country
15
- * @property bool $debit_negative_balances
16
- * @property mixed $decline_charge_on
17
  * @property string $default_currency
18
  * @property bool $details_submitted
19
- * @property string $display_name
20
  * @property string $email
21
- * @property mixed $external_accounts
22
- * @property mixed $legal_entity
23
- * @property bool $managed
24
- * @property mixed $product_description
25
- * @property mixed $statement_descriptor
26
- * @property mixed $support_email
27
- * @property mixed $support_phone
28
- * @property string $timezone
29
  * @property mixed $tos_acceptance
30
- * @property mixed $transfer_schedule
31
- * @property bool $transfers_enabled
32
- * @property mixed $verification
33
- * @property mixed $keys
34
  *
35
  * @package Stripe
36
  */
37
  class Account extends ApiResource
38
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  public function instanceUrl()
40
  {
41
  if ($this['id'] === null) {
@@ -46,7 +99,8 @@ class Account extends ApiResource
46
  }
47
 
48
  /**
49
- * @param string|null $id
 
50
  * @param array|string|null $opts
51
  *
52
  * @return Account
@@ -64,68 +118,275 @@ class Account extends ApiResource
64
  * @param array|null $params
65
  * @param array|string|null $opts
66
  *
67
- * @return Account
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  */
69
- public static function create($params = null, $opts = null)
70
  {
71
- return self::_create($params, $opts);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  }
73
 
74
  /**
75
- * @param string $id The ID of the account to update.
76
  * @param array|null $params
77
  * @param array|string|null $options
78
  *
79
- * @return Account The updated account.
80
  */
81
- public static function update($id, $params = null, $options = null)
82
  {
83
- return self::_update($id, $params, $options);
 
 
 
 
84
  }
85
 
86
  /**
 
 
87
  * @param array|string|null $opts
88
  *
89
- * @return Account
90
  */
91
- public function save($opts = null)
92
  {
93
- return $this->_save($opts);
94
  }
95
 
96
  /**
 
 
97
  * @param array|null $params
98
  * @param array|string|null $opts
99
  *
100
- * @return Account The deleted account.
101
  */
102
- public function delete($params = null, $opts = null)
103
  {
104
- return $this->_delete($params, $opts);
105
  }
106
 
107
  /**
 
 
108
  * @param array|null $params
109
  * @param array|string|null $opts
110
  *
111
- * @return Account The rejected account.
112
  */
113
- public function reject($params = null, $opts = null)
114
  {
115
- $url = $this->instanceUrl() . '/reject';
116
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
117
- $this->refreshFrom($response, $opts);
118
- return $this;
 
 
 
 
 
 
 
 
 
 
119
  }
120
 
121
  /**
 
122
  * @param array|null $params
123
  * @param array|string|null $opts
124
  *
125
- * @return Collection of Accounts
126
  */
127
- public static function all($params = null, $opts = null)
128
  {
129
- return self::_all($params, $opts);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  }
131
  }
7
  *
8
  * @property string $id
9
  * @property string $object
10
+ * @property mixed $business_profile
11
+ * @property string $business_type
12
+ * @property mixed $capabilities
13
  * @property bool $charges_enabled
14
+ * @property mixed $company
15
  * @property string $country
16
+ * @property int $created
 
17
  * @property string $default_currency
18
  * @property bool $details_submitted
 
19
  * @property string $email
20
+ * @property Collection $external_accounts
21
+ * @property mixed $individual
22
+ * @property StripeObject $metadata
23
+ * @property bool $payouts_enabled
24
+ * @property mixed $requirements
25
+ * @property mixed $settings
 
 
26
  * @property mixed $tos_acceptance
27
+ * @property string $type
 
 
 
28
  *
29
  * @package Stripe
30
  */
31
  class Account extends ApiResource
32
  {
33
+ const OBJECT_NAME = "account";
34
+
35
+ use ApiOperations\All;
36
+ use ApiOperations\Create;
37
+ use ApiOperations\Delete;
38
+ use ApiOperations\NestedResource;
39
+ use ApiOperations\Retrieve {
40
+ retrieve as protected _retrieve;
41
+ }
42
+ use ApiOperations\Update;
43
+
44
+ /**
45
+ * Possible string representations of an account's business type.
46
+ * @link https://stripe.com/docs/api/accounts/object#account_object-business_type
47
+ */
48
+ const BUSINESS_TYPE_COMPANY = 'company';
49
+ const BUSINESS_TYPE_INDIVIDUAL = 'individual';
50
+
51
+ /**
52
+ * Possible string representations of an account's capabilities.
53
+ * @link https://stripe.com/docs/api/accounts/object#account_object-capabilities
54
+ */
55
+ const CAPABILITY_CARD_PAYMENTS = 'card_payments';
56
+ const CAPABILITY_LEGACY_PAYMENTS = 'legacy_payments';
57
+ const CAPABILITY_PLATFORM_PAYMENTS = 'platform_payments';
58
+
59
+ /**
60
+ * Possible string representations of an account's capability status.
61
+ * @link https://stripe.com/docs/api/accounts/object#account_object-capabilities
62
+ */
63
+ const CAPABILITY_STATUS_ACTIVE = 'active';
64
+ const CAPABILITY_STATUS_INACTIVE = 'inactive';
65
+ const CAPABILITY_STATUS_PENDING = 'pending';
66
+
67
+ /**
68
+ * Possible string representations of an account's type.
69
+ * @link https://stripe.com/docs/api/accounts/object#account_object-type
70
+ */
71
+ const TYPE_CUSTOM = 'custom';
72
+ const TYPE_EXPRESS = 'express';
73
+ const TYPE_STANDARD = 'standard';
74
+
75
+ public static function getSavedNestedResources()
76
+ {
77
+ static $savedNestedResources = null;
78
+ if ($savedNestedResources === null) {
79
+ $savedNestedResources = new Util\Set([
80
+ 'external_account',
81
+ 'bank_account',
82
+ ]);
83
+ }
84
+ return $savedNestedResources;
85
+ }
86
+
87
+ const PATH_CAPABILITIES = '/capabilities';
88
+ const PATH_EXTERNAL_ACCOUNTS = '/external_accounts';
89
+ const PATH_LOGIN_LINKS = '/login_links';
90
+ const PATH_PERSONS = '/persons';
91
+
92
  public function instanceUrl()
93
  {
94
  if ($this['id'] === null) {
99
  }
100
 
101
  /**
102
+ * @param array|string|null $id The ID of the account to retrieve, or an
103
+ * options array containing an `id` key.
104
  * @param array|string|null $opts
105
  *
106
  * @return Account
118
  * @param array|null $params
119
  * @param array|string|null $opts
120
  *
121
+ * @return Account The rejected account.
122
+ */
123
+ public function reject($params = null, $opts = null)
124
+ {
125
+ $url = $this->instanceUrl() . '/reject';
126
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
127
+ $this->refreshFrom($response, $opts);
128
+ return $this;
129
+ }
130
+
131
+ /**
132
+ * @param array|null $clientId
133
+ * @param array|string|null $opts
134
+ *
135
+ * @return StripeObject Object containing the response from the API.
136
+ */
137
+ public function deauthorize($clientId = null, $opts = null)
138
+ {
139
+ $params = [
140
+ 'client_id' => $clientId,
141
+ 'stripe_user_id' => $this->id,
142
+ ];
143
+ return OAuth::deauthorize($params, $opts);
144
+ }
145
+
146
+ /*
147
+ * Capabilities methods
148
+ * We can not add the capabilities() method today as the Account object already has a
149
+ * capabilities property which is a hash and not the sub-list of capabilities.
150
+ */
151
+
152
+
153
+ /**
154
+ * @param string $id The ID of the account to which the capability belongs.
155
+ * @param string $capabilityId The ID of the capability to retrieve.
156
+ * @param array|null $params
157
+ * @param array|string|null $opts
158
+ *
159
+ * @return Capability
160
+ */
161
+ public static function retrieveCapability($id, $capabilityId, $params = null, $opts = null)
162
+ {
163
+ return self::_retrieveNestedResource($id, static::PATH_CAPABILITIES, $capabilityId, $params, $opts);
164
+ }
165
+
166
+ /**
167
+ * @param string $id The ID of the account to which the capability belongs.
168
+ * @param string $capabilityId The ID of the capability to update.
169
+ * @param array|null $params
170
+ * @param array|string|null $opts
171
+ *
172
+ * @return Capability
173
  */
174
+ public static function updateCapability($id, $capabilityId, $params = null, $opts = null)
175
  {
176
+ return self::_updateNestedResource($id, static::PATH_CAPABILITIES, $capabilityId, $params, $opts);
177
+ }
178
+
179
+ /**
180
+ * @param string $id The ID of the account on which to retrieve the capabilities.
181
+ * @param array|null $params
182
+ * @param array|string|null $opts
183
+ *
184
+ * @return Collection The list of capabilities.
185
+ */
186
+ public static function allCapabilities($id, $params = null, $opts = null)
187
+ {
188
+ return self::_allNestedResources($id, static::PATH_CAPABILITIES, $params, $opts);
189
+ }
190
+
191
+ /**
192
+ * @param string $id The ID of the account on which to create the external account.
193
+ * @param array|null $params
194
+ * @param array|string|null $opts
195
+ *
196
+ * @return BankAccount|Card
197
+ */
198
+ public static function createExternalAccount($id, $params = null, $opts = null)
199
+ {
200
+ return self::_createNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $params, $opts);
201
+ }
202
+
203
+ /**
204
+ * @param string $id The ID of the account to which the external account belongs.
205
+ * @param string $externalAccountId The ID of the external account to retrieve.
206
+ * @param array|null $params
207
+ * @param array|string|null $opts
208
+ *
209
+ * @return BankAccount|Card
210
+ */
211
+ public static function retrieveExternalAccount($id, $externalAccountId, $params = null, $opts = null)
212
+ {
213
+ return self::_retrieveNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
214
+ }
215
+
216
+ /**
217
+ * @param string $id The ID of the account to which the external account belongs.
218
+ * @param string $externalAccountId The ID of the external account to update.
219
+ * @param array|null $params
220
+ * @param array|string|null $opts
221
+ *
222
+ * @return BankAccount|Card
223
+ */
224
+ public static function updateExternalAccount($id, $externalAccountId, $params = null, $opts = null)
225
+ {
226
+ return self::_updateNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
227
+ }
228
+
229
+ /**
230
+ * @param string $id The ID of the account to which the external account belongs.
231
+ * @param string $externalAccountId The ID of the external account to delete.
232
+ * @param array|null $params
233
+ * @param array|string|null $opts
234
+ *
235
+ * @return BankAccount|Card
236
+ */
237
+ public static function deleteExternalAccount($id, $externalAccountId, $params = null, $opts = null)
238
+ {
239
+ return self::_deleteNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
240
+ }
241
+
242
+ /**
243
+ * @param string $id The ID of the account on which to retrieve the external accounts.
244
+ * @param array|null $params
245
+ * @param array|string|null $opts
246
+ *
247
+ * @return Collection The list of external accounts (BankAccount or Card).
248
+ */
249
+ public static function allExternalAccounts($id, $params = null, $opts = null)
250
+ {
251
+ return self::_allNestedResources($id, static::PATH_EXTERNAL_ACCOUNTS, $params, $opts);
252
+ }
253
+
254
+ /**
255
+ * @param string $id The ID of the account on which to create the login link.
256
+ * @param array|null $params
257
+ * @param array|string|null $opts
258
+ *
259
+ * @return LoginLink
260
+ */
261
+ public static function createLoginLink($id, $params = null, $opts = null)
262
+ {
263
+ return self::_createNestedResource($id, static::PATH_LOGIN_LINKS, $params, $opts);
264
  }
265
 
266
  /**
 
267
  * @param array|null $params
268
  * @param array|string|null $options
269
  *
270
+ * @return Collection The list of persons.
271
  */
272
+ public function persons($params = null, $options = null)
273
  {
274
+ $url = $this->instanceUrl() . '/persons';
275
+ list($response, $opts) = $this->_request('get', $url, $params, $options);
276
+ $obj = Util\Util::convertToStripeObject($response, $opts);
277
+ $obj->setLastResponse($response);
278
+ return $obj;
279
  }
280
 
281
  /**
282
+ * @param string $id The ID of the account on which to create the person.
283
+ * @param array|null $params
284
  * @param array|string|null $opts
285
  *
286
+ * @return Person
287
  */
288
+ public static function createPerson($id, $params = null, $opts = null)
289
  {
290
+ return self::_createNestedResource($id, static::PATH_PERSONS, $params, $opts);
291
  }
292
 
293
  /**
294
+ * @param string $id The ID of the account to which the person belongs.
295
+ * @param string $personId The ID of the person to retrieve.
296
  * @param array|null $params
297
  * @param array|string|null $opts
298
  *
299
+ * @return Person
300
  */
301
+ public static function retrievePerson($id, $personId, $params = null, $opts = null)
302
  {
303
+ return self::_retrieveNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
304
  }
305
 
306
  /**
307
+ * @param string $id The ID of the account to which the person belongs.
308
+ * @param string $personId The ID of the person to update.
309
  * @param array|null $params
310
  * @param array|string|null $opts
311
  *
312
+ * @return Person
313
  */
314
+ public static function updatePerson($id, $personId, $params = null, $opts = null)
315
  {
316
+ return self::_updateNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
317
+ }
318
+
319
+ /**
320
+ * @param string $id The ID of the account to which the person belongs.
321
+ * @param string $personId The ID of the person to delete.
322
+ * @param array|null $params
323
+ * @param array|string|null $opts
324
+ *
325
+ * @return Person
326
+ */
327
+ public static function deletePerson($id, $personId, $params = null, $opts = null)
328
+ {
329
+ return self::_deleteNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
330
  }
331
 
332
  /**
333
+ * @param string $id The ID of the account on which to retrieve the persons.
334
  * @param array|null $params
335
  * @param array|string|null $opts
336
  *
337
+ * @return Collection The list of persons.
338
  */
339
+ public static function allPersons($id, $params = null, $opts = null)
340
  {
341
+ return self::_allNestedResources($id, static::PATH_PERSONS, $params, $opts);
342
+ }
343
+
344
+ public function serializeParameters($force = false)
345
+ {
346
+ $update = parent::serializeParameters($force);
347
+ if (isset($this->_values['legal_entity'])) {
348
+ $entity = $this['legal_entity'];
349
+ if (isset($entity->_values['additional_owners'])) {
350
+ $owners = $entity['additional_owners'];
351
+ $entityUpdate = isset($update['legal_entity']) ? $update['legal_entity'] : [];
352
+ $entityUpdate['additional_owners'] = $this->serializeAdditionalOwners($entity, $owners);
353
+ $update['legal_entity'] = $entityUpdate;
354
+ }
355
+ }
356
+ if (isset($this->_values['individual'])) {
357
+ $individual = $this['individual'];
358
+ if (($individual instanceof Person) && !isset($update['individual'])) {
359
+ $update['individual'] = $individual->serializeParameters($force);
360
+ }
361
+ }
362
+ return $update;
363
+ }
364
+
365
+ private function serializeAdditionalOwners($legalEntity, $additionalOwners)
366
+ {
367
+ if (isset($legalEntity->_originalValues['additional_owners'])) {
368
+ $originalValue = $legalEntity->_originalValues['additional_owners'];
369
+ } else {
370
+ $originalValue = [];
371
+ }
372
+ if (($originalValue) && (count($originalValue) > count($additionalOwners))) {
373
+ throw new \InvalidArgumentException(
374
+ "You cannot delete an item from an array, you must instead set a new array"
375
+ );
376
+ }
377
+
378
+ $updateArr = [];
379
+ foreach ($additionalOwners as $i => $v) {
380
+ $update = ($v instanceof StripeObject) ? $v->serializeParameters() : $v;
381
+
382
+ if ($update !== []) {
383
+ if (!$originalValue ||
384
+ !array_key_exists($i, $originalValue) ||
385
+ ($update != $legalEntity->serializeParamsValue($originalValue[$i], null, false, true))) {
386
+ $updateArr[$i] = $update;
387
+ }
388
+ }
389
+ }
390
+ return $updateArr;
391
  }
392
  }
lib/stripe-gateway/lib/AccountLink.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class AccountLink
7
+ *
8
+ * @property string $object
9
+ * @property int $created
10
+ * @property int $expires_at
11
+ * @property string $url
12
+ *
13
+ * @package Stripe
14
+ */
15
+ class AccountLink extends ApiResource
16
+ {
17
+ const OBJECT_NAME = "account_link";
18
+
19
+ use ApiOperations\Create;
20
+ }
lib/stripe-gateway/lib/AlipayAccount.php CHANGED
@@ -6,8 +6,66 @@ namespace Stripe;
6
  * Class AlipayAccount
7
  *
8
  * @package Stripe
 
 
 
9
  */
10
- class AlipayAccount extends ExternalAccount
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  }
6
  * Class AlipayAccount
7
  *
8
  * @package Stripe
9
+ *
10
+ * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
11
+ * @link https://stripe.com/docs/sources/alipay
12
  */
13
+ class AlipayAccount extends ApiResource
14
  {
15
+ const OBJECT_NAME = "alipay_account";
16
+
17
+ use ApiOperations\Delete;
18
+ use ApiOperations\Update;
19
+
20
+ /**
21
+ * @return string The instance URL for this resource. It needs to be special
22
+ * cased because it doesn't fit into the standard resource pattern.
23
+ */
24
+ public function instanceUrl()
25
+ {
26
+ if ($this['customer']) {
27
+ $base = Customer::classUrl();
28
+ $parent = $this['customer'];
29
+ $path = 'sources';
30
+ } else {
31
+ $msg = "Alipay accounts cannot be accessed without a customer ID.";
32
+ throw new Error\InvalidRequest($msg, null);
33
+ }
34
+ $parentExtn = urlencode(Util\Util::utf8($parent));
35
+ $extn = urlencode(Util\Util::utf8($this['id']));
36
+ return "$base/$parentExtn/$path/$extn";
37
+ }
38
+
39
+ /**
40
+ * @param array|string $_id
41
+ * @param array|string|null $_opts
42
+ *
43
+ * @throws \Stripe\Error\InvalidRequest
44
+ *
45
+ * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
46
+ * @link https://stripe.com/docs/sources/alipay
47
+ */
48
+ public static function retrieve($_id, $_opts = null)
49
+ {
50
+ $msg = "Alipay accounts cannot be accessed without a customer ID. " .
51
+ "Retrieve an Alipay account using \$customer->sources->retrieve('alipay_account_id') instead.";
52
+ throw new Error\InvalidRequest($msg, null);
53
+ }
54
 
55
+ /**
56
+ * @param string $_id
57
+ * @param array|null $_params
58
+ * @param array|string|null $_options
59
+ *
60
+ * @throws \Stripe\Error\InvalidRequest
61
+ *
62
+ * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
63
+ * @link https://stripe.com/docs/sources/alipay
64
+ */
65
+ public static function update($_id, $_params = null, $_options = null)
66
+ {
67
+ $msg = "Alipay accounts cannot be accessed without a customer ID. " .
68
+ "Call save() on \$customer->sources->retrieve('alipay_account_id') instead.";
69
+ throw new Error\InvalidRequest($msg, null);
70
+ }
71
  }
lib/stripe-gateway/lib/ApiOperations/All.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for listable resources. Adds a `all()` static method to the class.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait All
11
+ {
12
+ /**
13
+ * @param array|null $params
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return \Stripe\Collection of ApiResources
17
+ */
18
+ public static function all($params = null, $opts = null)
19
+ {
20
+ self::_validateParams($params);
21
+ $url = static::classUrl();
22
+
23
+ list($response, $opts) = static::_staticRequest('get', $url, $params, $opts);
24
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
25
+ if (!is_a($obj, 'Stripe\\Collection')) {
26
+ $class = get_class($obj);
27
+ $message = "Expected type \"Stripe\\Collection\", got \"$class\" instead";
28
+ throw new \Stripe\Error\Api($message);
29
+ }
30
+ $obj->setLastResponse($response);
31
+ $obj->setRequestParams($params);
32
+ return $obj;
33
+ }
34
+ }
lib/stripe-gateway/lib/ApiOperations/Create.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for creatable resources. Adds a `create()` static method to the class.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait Create
11
+ {
12
+ /**
13
+ * @param array|null $params
14
+ * @param array|string|null $options
15
+ *
16
+ * @return static The created resource.
17
+ */
18
+ public static function create($params = null, $options = null)
19
+ {
20
+ self::_validateParams($params);
21
+ $url = static::classUrl();
22
+
23
+ list($response, $opts) = static::_staticRequest('post', $url, $params, $options);
24
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
25
+ $obj->setLastResponse($response);
26
+ return $obj;
27
+ }
28
+ }
lib/stripe-gateway/lib/ApiOperations/Delete.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for deletable resources. Adds a `delete()` method to the class.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait Delete
11
+ {
12
+ /**
13
+ * @param array|null $params
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return static The deleted resource.
17
+ */
18
+ public function delete($params = null, $opts = null)
19
+ {
20
+ self::_validateParams($params);
21
+
22
+ $url = $this->instanceUrl();
23
+ list($response, $opts) = $this->_request('delete', $url, $params, $opts);
24
+ $this->refreshFrom($response, $opts);
25
+ return $this;
26
+ }
27
+ }
lib/stripe-gateway/lib/ApiOperations/NestedResource.php ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for resources that have nested resources.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait NestedResource
11
+ {
12
+ /**
13
+ * @param string $method
14
+ * @param string $url
15
+ * @param array|null $params
16
+ * @param array|string|null $options
17
+ *
18
+ * @return \Stripe\StripeObject
19
+ */
20
+ protected static function _nestedResourceOperation($method, $url, $params = null, $options = null)
21
+ {
22
+ self::_validateParams($params);
23
+
24
+ list($response, $opts) = static::_staticRequest($method, $url, $params, $options);
25
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
26
+ $obj->setLastResponse($response);
27
+ return $obj;
28
+ }
29
+
30
+ /**
31
+ * @param string $id
32
+ * @param string $nestedPath
33
+ * @param string|null $nestedId
34
+ *
35
+ * @return string
36
+ */
37
+ protected static function _nestedResourceUrl($id, $nestedPath, $nestedId = null)
38
+ {
39
+ $url = static::resourceUrl($id) . $nestedPath;
40
+ if ($nestedId !== null) {
41
+ $url .= "/$nestedId";
42
+ }
43
+ return $url;
44
+ }
45
+
46
+ /**
47
+ * @param string $id
48
+ * @param string $nestedPath
49
+ * @param array|null $params
50
+ * @param array|string|null $options
51
+ *
52
+ * @return \Stripe\StripeObject
53
+ */
54
+ protected static function _createNestedResource($id, $nestedPath, $params = null, $options = null)
55
+ {
56
+ $url = static::_nestedResourceUrl($id, $nestedPath);
57
+ return self::_nestedResourceOperation('post', $url, $params, $options);
58
+ }
59
+
60
+ /**
61
+ * @param string $id
62
+ * @param string $nestedPath
63
+ * @param string|null $nestedId
64
+ * @param array|null $params
65
+ * @param array|string|null $options
66
+ *
67
+ * @return \Stripe\StripeObject
68
+ */
69
+ protected static function _retrieveNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
70
+ {
71
+ $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
72
+ return self::_nestedResourceOperation('get', $url, $params, $options);
73
+ }
74
+
75
+ /**
76
+ * @param string $id
77
+ * @param string $nestedPath
78
+ * @param string|null $nestedId
79
+ * @param array|null $params
80
+ * @param array|string|null $options
81
+ *
82
+ * @return \Stripe\StripeObject
83
+ */
84
+ protected static function _updateNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
85
+ {
86
+ $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
87
+ return self::_nestedResourceOperation('post', $url, $params, $options);
88
+ }
89
+
90
+ /**
91
+ * @param string $id
92
+ * @param string $nestedPath
93
+ * @param string|null $nestedId
94
+ * @param array|null $params
95
+ * @param array|string|null $options
96
+ *
97
+ * @return \Stripe\StripeObject
98
+ */
99
+ protected static function _deleteNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
100
+ {
101
+ $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
102
+ return self::_nestedResourceOperation('delete', $url, $params, $options);
103
+ }
104
+
105
+ /**
106
+ * @param string $id
107
+ * @param string $nestedPath
108
+ * @param array|null $params
109
+ * @param array|string|null $options
110
+ *
111
+ * @return \Stripe\StripeObject
112
+ */
113
+ protected static function _allNestedResources($id, $nestedPath, $params = null, $options = null)
114
+ {
115
+ $url = static::_nestedResourceUrl($id, $nestedPath);
116
+ return self::_nestedResourceOperation('get', $url, $params, $options);
117
+ }
118
+ }
lib/stripe-gateway/lib/ApiOperations/Request.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for resources that need to make API requests.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait Request
11
+ {
12
+ /**
13
+ * @param array|null|mixed $params The list of parameters to validate
14
+ *
15
+ * @throws \Stripe\Error\Api if $params exists and is not an array
16
+ */
17
+ protected static function _validateParams($params = null)
18
+ {
19
+ if ($params && !is_array($params)) {
20
+ $message = "You must pass an array as the first argument to Stripe API "
21
+ . "method calls. (HINT: an example call to create a charge "
22
+ . "would be: \"Stripe\\Charge::create(['amount' => 100, "
23
+ . "'currency' => 'usd', 'source' => 'tok_1234'])\")";
24
+ throw new \Stripe\Error\Api($message);
25
+ }
26
+ }
27
+
28
+ /**
29
+ * @param string $method HTTP method ('get', 'post', etc.)
30
+ * @param string $url URL for the request
31
+ * @param array $params list of parameters for the request
32
+ * @param array|string|null $options
33
+ *
34
+ * @return array tuple containing (the JSON response, $options)
35
+ */
36
+ protected function _request($method, $url, $params = [], $options = null)
37
+ {
38
+ $opts = $this->_opts->merge($options);
39
+ list($resp, $options) = static::_staticRequest($method, $url, $params, $opts);
40
+ $this->setLastResponse($resp);
41
+ return [$resp->json, $options];
42
+ }
43
+
44
+ /**
45
+ * @param string $method HTTP method ('get', 'post', etc.)
46
+ * @param string $url URL for the request
47
+ * @param array $params list of parameters for the request
48
+ * @param array|string|null $options
49
+ *
50
+ * @return array tuple containing (the JSON response, $options)
51
+ */
52
+ protected static function _staticRequest($method, $url, $params, $options)
53
+ {
54
+ $opts = \Stripe\Util\RequestOptions::parse($options);
55
+ $baseUrl = isset($opts->apiBase) ? $opts->apiBase : static::baseUrl();
56
+ $requestor = new \Stripe\ApiRequestor($opts->apiKey, $baseUrl);
57
+ list($response, $opts->apiKey) = $requestor->request($method, $url, $params, $opts->headers);
58
+ $opts->discardNonPersistentHeaders();
59
+ return [$response, $opts];
60
+ }
61
+ }
lib/stripe-gateway/lib/ApiOperations/Retrieve.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for retrievable resources. Adds a `retrieve()` static method to the
7
+ * class.
8
+ *
9
+ * This trait should only be applied to classes that derive from StripeObject.
10
+ */
11
+ trait Retrieve
12
+ {
13
+ /**
14
+ * @param array|string $id The ID of the API resource to retrieve,
15
+ * or an options array containing an `id` key.
16
+ * @param array|string|null $opts
17
+ *
18
+ * @return static
19
+ */
20
+ public static function retrieve($id, $opts = null)
21
+ {
22
+ $opts = \Stripe\Util\RequestOptions::parse($opts);
23
+ $instance = new static($id, $opts);
24
+ $instance->refresh();
25
+ return $instance;
26
+ }
27
+ }
lib/stripe-gateway/lib/ApiOperations/Update.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for updatable resources. Adds an `update()` static method and a
7
+ * `save()` method to the class.
8
+ *
9
+ * This trait should only be applied to classes that derive from StripeObject.
10
+ */
11
+ trait Update
12
+ {
13
+ /**
14
+ * @param string $id The ID of the resource to update.
15
+ * @param array|null $params
16
+ * @param array|string|null $opts
17
+ *
18
+ * @return static The updated resource.
19
+ */
20
+ public static function update($id, $params = null, $opts = null)
21
+ {
22
+ self::_validateParams($params);
23
+ $url = static::resourceUrl($id);
24
+
25
+ list($response, $opts) = static::_staticRequest('post', $url, $params, $opts);
26
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
27
+ $obj->setLastResponse($response);
28
+ return $obj;
29
+ }
30
+
31
+ /**
32
+ * @param array|string|null $opts
33
+ *
34
+ * @return static The saved resource.
35
+ */
36
+ public function save($opts = null)
37
+ {
38
+ $params = $this->serializeParameters();
39
+ if (count($params) > 0) {
40
+ $url = $this->instanceUrl();
41
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
42
+ $this->refreshFrom($response, $opts);
43
+ }
44
+ return $this;
45
+ }
46
+ }
lib/stripe-gateway/lib/ApiRequestor.php CHANGED
@@ -9,12 +9,32 @@ namespace Stripe;
9
  */
10
  class ApiRequestor
11
  {
 
 
 
12
  private $_apiKey;
13
 
 
 
 
14
  private $_apiBase;
15
 
 
 
 
16
  private static $_httpClient;
17
 
 
 
 
 
 
 
 
 
 
 
 
18
  public function __construct($apiKey = null, $apiBase = null)
19
  {
20
  $this->_apiKey = $apiKey;
@@ -24,6 +44,37 @@ class ApiRequestor
24
  $this->_apiBase = $apiBase;
25
  }
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  private static function _encodeObjects($d)
28
  {
29
  if ($d instanceof ApiResource) {
@@ -33,7 +84,7 @@ class ApiRequestor
33
  } elseif ($d === false) {
34
  return 'false';
35
  } elseif (is_array($d)) {
36
- $res = array();
37
  foreach ($d as $k => $v) {
38
  $res[$k] = self::_encodeObjects($v);
39
  }
@@ -44,27 +95,37 @@ class ApiRequestor
44
  }
45
 
46
  /**
47
- * @param string $method
48
- * @param string $url
49
  * @param array|null $params
50
  * @param array|null $headers
51
  *
52
  * @return array An array whose first element is an API response and second
53
  * element is the API key used to make the request.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  */
55
  public function request($method, $url, $params = null, $headers = null)
56
  {
57
- if (!$params) {
58
- $params = array();
59
- }
60
- if (!$headers) {
61
- $headers = array();
62
- }
63
  list($rbody, $rcode, $rheaders, $myApiKey) =
64
  $this->_requestRaw($method, $url, $params, $headers);
65
  $json = $this->_interpretResponse($rbody, $rcode, $rheaders);
66
  $resp = new ApiResponse($rbody, $rcode, $rheaders, $json);
67
- return array($resp, $myApiKey);
68
  }
69
 
70
  /**
@@ -76,13 +137,25 @@ class ApiRequestor
76
  * @throws Error\InvalidRequest if the error is caused by the user.
77
  * @throws Error\Authentication if the error is caused by a lack of
78
  * permissions.
 
 
79
  * @throws Error\Card if the error is the error code is 402 (payment
80
  * required)
 
 
 
 
 
 
 
 
 
 
81
  * @throws Error\RateLimit if the error is caused by too many requests
82
  * hitting the API.
83
  * @throws Error\Api otherwise.
84
  */
85
- public function handleApiError($rbody, $rcode, $rheaders, $resp)
86
  {
87
  if (!is_array($resp) || !isset($resp['error'])) {
88
  $msg = "Invalid response object from API: $rbody "
@@ -90,33 +163,170 @@ class ApiRequestor
90
  throw new Error\Api($msg, $rcode, $rbody, $resp, $rheaders);
91
  }
92
 
93
- $error = $resp['error'];
94
- $msg = isset($error['message']) ? $error['message'] : null;
95
- $param = isset($error['param']) ? $error['param'] : null;
96
- $code = isset($error['code']) ? $error['code'] : null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
  switch ($rcode) {
99
  case 400:
100
  // 'rate_limit' code is deprecated, but left here for backwards compatibility
101
  // for API versions earlier than 2015-09-08
102
  if ($code == 'rate_limit') {
103
- throw new Error\RateLimit($msg, $param, $rcode, $rbody, $resp, $rheaders);
 
 
 
104
  }
105
 
106
- // intentional fall-through
107
  case 404:
108
- throw new Error\InvalidRequest($msg, $param, $rcode, $rbody, $resp, $rheaders);
109
  case 401:
110
- throw new Error\Authentication($msg, $rcode, $rbody, $resp, $rheaders);
111
  case 402:
112
- throw new Error\Card($msg, $param, $code, $rcode, $rbody, $resp, $rheaders);
 
 
113
  case 429:
114
- throw new Error\RateLimit($msg, $param, $rcode, $rbody, $resp, $rheaders);
115
  default:
116
- throw new Error\Api($msg, $rcode, $rbody, $resp, $rheaders);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  }
 
 
118
  }
119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  private function _requestRaw($method, $url, $params, $headers)
121
  {
122
  $myApiKey = $this->_apiKey;
@@ -132,22 +342,17 @@ class ApiRequestor
132
  throw new Error\Authentication($msg);
133
  }
134
 
 
 
 
 
 
 
 
 
135
  $absUrl = $this->_apiBase.$url;
136
  $params = self::_encodeObjects($params);
137
- $langVersion = phpversion();
138
- $uname = php_uname();
139
- $ua = array(
140
- 'bindings_version' => Stripe::VERSION,
141
- 'lang' => 'php',
142
- 'lang_version' => $langVersion,
143
- 'publisher' => 'stripe',
144
- 'uname' => $uname,
145
- );
146
- $defaultHeaders = array(
147
- 'X-Stripe-Client-User-Agent' => json_encode($ua),
148
- 'User-Agent' => 'Stripe/v1 PhpBindings/' . Stripe::VERSION,
149
- 'Authorization' => 'Bearer ' . $myApiKey,
150
- );
151
  if (Stripe::$apiVersion) {
152
  $defaultHeaders['Stripe-Version'] = Stripe::$apiVersion;
153
  }
@@ -156,6 +361,10 @@ class ApiRequestor
156
  $defaultHeaders['Stripe-Account'] = Stripe::$accountId;
157
  }
158
 
 
 
 
 
159
  $hasFile = false;
160
  $hasCurlFile = class_exists('\CURLFile', false);
161
  foreach ($params as $k => $v) {
@@ -174,12 +383,14 @@ class ApiRequestor
174
  }
175
 
176
  $combinedHeaders = array_merge($defaultHeaders, $headers);
177
- $rawHeaders = array();
178
 
179
  foreach ($combinedHeaders as $header => $value) {
180
  $rawHeaders[] = $header . ': ' . $value;
181
  }
182
 
 
 
183
  list($rbody, $rcode, $rheaders) = $this->httpClient()->request(
184
  $method,
185
  $absUrl,
@@ -187,9 +398,24 @@ class ApiRequestor
187
  $params,
188
  $hasFile
189
  );
190
- return array($rbody, $rcode, $rheaders, $myApiKey);
 
 
 
 
 
 
 
 
191
  }
192
 
 
 
 
 
 
 
 
193
  private function _processResourceParam($resource, $hasCurlFile)
194
  {
195
  if (get_resource_type($resource) !== 'stream') {
@@ -213,27 +439,65 @@ class ApiRequestor
213
  }
214
  }
215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  private function _interpretResponse($rbody, $rcode, $rheaders)
217
  {
218
- try {
219
- $resp = json_decode($rbody, true);
220
- } catch (Exception $e) {
221
  $msg = "Invalid response body from API: $rbody "
222
- . "(HTTP response code was $rcode)";
223
  throw new Error\Api($msg, $rcode, $rbody);
224
  }
225
 
226
  if ($rcode < 200 || $rcode >= 300) {
227
- $this->handleApiError($rbody, $rcode, $rheaders, $resp);
228
  }
229
  return $resp;
230
  }
231
 
 
 
 
 
 
232
  public static function setHttpClient($client)
233
  {
234
  self::$_httpClient = $client;
235
  }
236
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  private function httpClient()
238
  {
239
  if (!self::$_httpClient) {
9
  */
10
  class ApiRequestor
11
  {
12
+ /**
13
+ * @var string|null
14
+ */
15
  private $_apiKey;
16
 
17
+ /**
18
+ * @var string
19
+ */
20
  private $_apiBase;
21
 
22
+ /**
23
+ * @var HttpClient\ClientInterface
24
+ */
25
  private static $_httpClient;
26
 
27
+ /**
28
+ * @var RequestTelemetry
29
+ */
30
+ private static $requestTelemetry;
31
+
32
+ /**
33
+ * ApiRequestor constructor.
34
+ *
35
+ * @param string|null $apiKey
36
+ * @param string|null $apiBase
37
+ */
38
  public function __construct($apiKey = null, $apiBase = null)
39
  {
40
  $this->_apiKey = $apiKey;
44
  $this->_apiBase = $apiBase;
45
  }
46
 
47
+ /**
48
+ * Creates a telemetry json blob for use in 'X-Stripe-Client-Telemetry' headers
49
+ * @static
50
+ *
51
+ * @param RequestTelemetry $requestTelemetry
52
+ * @return string
53
+ */
54
+ private static function _telemetryJson($requestTelemetry)
55
+ {
56
+ $payload = array(
57
+ 'last_request_metrics' => array(
58
+ 'request_id' => $requestTelemetry->requestId,
59
+ 'request_duration_ms' => $requestTelemetry->requestDuration,
60
+ ));
61
+
62
+ $result = json_encode($payload);
63
+ if ($result != false) {
64
+ return $result;
65
+ } else {
66
+ Stripe::getLogger()->error("Serializing telemetry payload failed!");
67
+ return "{}";
68
+ }
69
+ }
70
+
71
+ /**
72
+ * @static
73
+ *
74
+ * @param ApiResource|bool|array|mixed $d
75
+ *
76
+ * @return ApiResource|array|string|mixed
77
+ */
78
  private static function _encodeObjects($d)
79
  {
80
  if ($d instanceof ApiResource) {
84
  } elseif ($d === false) {
85
  return 'false';
86
  } elseif (is_array($d)) {
87
+ $res = [];
88
  foreach ($d as $k => $v) {
89
  $res[$k] = self::_encodeObjects($v);
90
  }
95
  }
96
 
97
  /**
98
+ * @param string $method
99
+ * @param string $url
100
  * @param array|null $params
101
  * @param array|null $headers
102
  *
103
  * @return array An array whose first element is an API response and second
104
  * element is the API key used to make the request.
105
+ * @throws Error\Api
106
+ * @throws Error\Authentication
107
+ * @throws Error\Card
108
+ * @throws Error\InvalidRequest
109
+ * @throws Error\OAuth\InvalidClient
110
+ * @throws Error\OAuth\InvalidGrant
111
+ * @throws Error\OAuth\InvalidRequest
112
+ * @throws Error\OAuth\InvalidScope
113
+ * @throws Error\OAuth\UnsupportedGrantType
114
+ * @throws Error\OAuth\UnsupportedResponseType
115
+ * @throws Error\Permission
116
+ * @throws Error\RateLimit
117
+ * @throws Error\Idempotency
118
+ * @throws Error\ApiConnection
119
  */
120
  public function request($method, $url, $params = null, $headers = null)
121
  {
122
+ $params = $params ?: [];
123
+ $headers = $headers ?: [];
 
 
 
 
124
  list($rbody, $rcode, $rheaders, $myApiKey) =
125
  $this->_requestRaw($method, $url, $params, $headers);
126
  $json = $this->_interpretResponse($rbody, $rcode, $rheaders);
127
  $resp = new ApiResponse($rbody, $rcode, $rheaders, $json);
128
+ return [$resp, $myApiKey];
129
  }
130
 
131
  /**
137
  * @throws Error\InvalidRequest if the error is caused by the user.
138
  * @throws Error\Authentication if the error is caused by a lack of
139
  * permissions.
140
+ * @throws Error\Permission if the error is caused by insufficient
141
+ * permissions.
142
  * @throws Error\Card if the error is the error code is 402 (payment
143
  * required)
144
+ * @throws Error\InvalidRequest if the error is caused by the user.
145
+ * @throws Error\Idempotency if the error is caused by an idempotency key.
146
+ * @throws Error\OAuth\InvalidClient
147
+ * @throws Error\OAuth\InvalidGrant
148
+ * @throws Error\OAuth\InvalidRequest
149
+ * @throws Error\OAuth\InvalidScope
150
+ * @throws Error\OAuth\UnsupportedGrantType
151
+ * @throws Error\OAuth\UnsupportedResponseType
152
+ * @throws Error\Permission if the error is caused by insufficient
153
+ * permissions.
154
  * @throws Error\RateLimit if the error is caused by too many requests
155
  * hitting the API.
156
  * @throws Error\Api otherwise.
157
  */
158
+ public function handleErrorResponse($rbody, $rcode, $rheaders, $resp)
159
  {
160
  if (!is_array($resp) || !isset($resp['error'])) {
161
  $msg = "Invalid response object from API: $rbody "
163
  throw new Error\Api($msg, $rcode, $rbody, $resp, $rheaders);
164
  }
165
 
166
+ $errorData = $resp['error'];
167
+
168
+ $error = null;
169
+ if (is_string($errorData)) {
170
+ $error = self::_specificOAuthError($rbody, $rcode, $rheaders, $resp, $errorData);
171
+ }
172
+ if (!$error) {
173
+ $error = self::_specificAPIError($rbody, $rcode, $rheaders, $resp, $errorData);
174
+ }
175
+
176
+ throw $error;
177
+ }
178
+
179
+ /**
180
+ * @static
181
+ *
182
+ * @param string $rbody
183
+ * @param int $rcode
184
+ * @param array $rheaders
185
+ * @param array $resp
186
+ * @param array $errorData
187
+ *
188
+ * @return Error\RateLimit|Error\Idempotency|Error\InvalidRequest|Error\Authentication|Error\Card|Error\Permission|Error\Api
189
+ */
190
+ private static function _specificAPIError($rbody, $rcode, $rheaders, $resp, $errorData)
191
+ {
192
+ $msg = isset($errorData['message']) ? $errorData['message'] : null;
193
+ $param = isset($errorData['param']) ? $errorData['param'] : null;
194
+ $code = isset($errorData['code']) ? $errorData['code'] : null;
195
+ $type = isset($errorData['type']) ? $errorData['type'] : null;
196
 
197
  switch ($rcode) {
198
  case 400:
199
  // 'rate_limit' code is deprecated, but left here for backwards compatibility
200
  // for API versions earlier than 2015-09-08
201
  if ($code == 'rate_limit') {
202
+ return new Error\RateLimit($msg, $param, $rcode, $rbody, $resp, $rheaders);
203
+ }
204
+ if ($type == 'idempotency_error') {
205
+ return new Error\Idempotency($msg, $rcode, $rbody, $resp, $rheaders);
206
  }
207
 
208
+ // no break
209
  case 404:
210
+ return new Error\InvalidRequest($msg, $param, $rcode, $rbody, $resp, $rheaders);
211
  case 401:
212
+ return new Error\Authentication($msg, $rcode, $rbody, $resp, $rheaders);
213
  case 402:
214
+ return new Error\Card($msg, $param, $code, $rcode, $rbody, $resp, $rheaders);
215
+ case 403:
216
+ return new Error\Permission($msg, $rcode, $rbody, $resp, $rheaders);
217
  case 429:
218
+ return new Error\RateLimit($msg, $param, $rcode, $rbody, $resp, $rheaders);
219
  default:
220
+ return new Error\Api($msg, $rcode, $rbody, $resp, $rheaders);
221
+ }
222
+ }
223
+
224
+ /**
225
+ * @static
226
+ *
227
+ * @param string|bool $rbody
228
+ * @param int $rcode
229
+ * @param array $rheaders
230
+ * @param array $resp
231
+ * @param string $errorCode
232
+ *
233
+ * @return null|Error\OAuth\InvalidClient|Error\OAuth\InvalidGrant|Error\OAuth\InvalidRequest|Error\OAuth\InvalidScope|Error\OAuth\UnsupportedGrantType|Error\OAuth\UnsupportedResponseType
234
+ */
235
+ private static function _specificOAuthError($rbody, $rcode, $rheaders, $resp, $errorCode)
236
+ {
237
+ $description = isset($resp['error_description']) ? $resp['error_description'] : $errorCode;
238
+
239
+ switch ($errorCode) {
240
+ case 'invalid_client':
241
+ return new Error\OAuth\InvalidClient($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
242
+ case 'invalid_grant':
243
+ return new Error\OAuth\InvalidGrant($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
244
+ case 'invalid_request':
245
+ return new Error\OAuth\InvalidRequest($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
246
+ case 'invalid_scope':
247
+ return new Error\OAuth\InvalidScope($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
248
+ case 'unsupported_grant_type':
249
+ return new Error\OAuth\UnsupportedGrantType($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
250
+ case 'unsupported_response_type':
251
+ return new Error\OAuth\UnsupportedResponseType($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
252
  }
253
+
254
+ return null;
255
  }
256
 
257
+ /**
258
+ * @static
259
+ *
260
+ * @param null|array $appInfo
261
+ *
262
+ * @return null|string
263
+ */
264
+ private static function _formatAppInfo($appInfo)
265
+ {
266
+ if ($appInfo !== null) {
267
+ $string = $appInfo['name'];
268
+ if ($appInfo['version'] !== null) {
269
+ $string .= '/' . $appInfo['version'];
270
+ }
271
+ if ($appInfo['url'] !== null) {
272
+ $string .= ' (' . $appInfo['url'] . ')';
273
+ }
274
+ return $string;
275
+ } else {
276
+ return null;
277
+ }
278
+ }
279
+
280
+ /**
281
+ * @static
282
+ *
283
+ * @param string $apiKey
284
+ * @param null $clientInfo
285
+ *
286
+ * @return array
287
+ */
288
+ private static function _defaultHeaders($apiKey, $clientInfo = null)
289
+ {
290
+ $uaString = 'Stripe/v1 PhpBindings/' . Stripe::VERSION;
291
+
292
+ $langVersion = phpversion();
293
+ $uname = php_uname();
294
+
295
+ $appInfo = Stripe::getAppInfo();
296
+ $ua = [
297
+ 'bindings_version' => Stripe::VERSION,
298
+ 'lang' => 'php',
299
+ 'lang_version' => $langVersion,
300
+ 'publisher' => 'stripe',
301
+ 'uname' => $uname,
302
+ ];
303
+ if ($clientInfo) {
304
+ $ua = array_merge($clientInfo, $ua);
305
+ }
306
+ if ($appInfo !== null) {
307
+ $uaString .= ' ' . self::_formatAppInfo($appInfo);
308
+ $ua['application'] = $appInfo;
309
+ }
310
+
311
+ $defaultHeaders = [
312
+ 'X-Stripe-Client-User-Agent' => json_encode($ua),
313
+ 'User-Agent' => $uaString,
314
+ 'Authorization' => 'Bearer ' . $apiKey,
315
+ ];
316
+ return $defaultHeaders;
317
+ }
318
+
319
+ /**
320
+ * @param string $method
321
+ * @param string $url
322
+ * @param array $params
323
+ * @param array $headers
324
+ *
325
+ * @return array
326
+ * @throws Error\Api
327
+ * @throws Error\ApiConnection
328
+ * @throws Error\Authentication
329
+ */
330
  private function _requestRaw($method, $url, $params, $headers)
331
  {
332
  $myApiKey = $this->_apiKey;
342
  throw new Error\Authentication($msg);
343
  }
344
 
345
+ // Clients can supply arbitrary additional keys to be included in the
346
+ // X-Stripe-Client-User-Agent header via the optional getUserAgentInfo()
347
+ // method
348
+ $clientUAInfo = null;
349
+ if (method_exists($this->httpClient(), 'getUserAgentInfo')) {
350
+ $clientUAInfo = $this->httpClient()->getUserAgentInfo();
351
+ }
352
+
353
  $absUrl = $this->_apiBase.$url;
354
  $params = self::_encodeObjects($params);
355
+ $defaultHeaders = $this->_defaultHeaders($myApiKey, $clientUAInfo);
 
 
 
 
 
 
 
 
 
 
 
 
 
356
  if (Stripe::$apiVersion) {
357
  $defaultHeaders['Stripe-Version'] = Stripe::$apiVersion;
358
  }
361
  $defaultHeaders['Stripe-Account'] = Stripe::$accountId;
362
  }
363
 
364
+ if (Stripe::$enableTelemetry && self::$requestTelemetry != null) {
365
+ $defaultHeaders["X-Stripe-Client-Telemetry"] = self::_telemetryJson(self::$requestTelemetry);
366
+ }
367
+
368
  $hasFile = false;
369
  $hasCurlFile = class_exists('\CURLFile', false);
370
  foreach ($params as $k => $v) {
383
  }
384
 
385
  $combinedHeaders = array_merge($defaultHeaders, $headers);
386
+ $rawHeaders = [];
387
 
388
  foreach ($combinedHeaders as $header => $value) {
389
  $rawHeaders[] = $header . ': ' . $value;
390
  }
391
 
392
+ $requestStartMs = Util\Util::currentTimeMillis();
393
+
394
  list($rbody, $rcode, $rheaders) = $this->httpClient()->request(
395
  $method,
396
  $absUrl,
398
  $params,
399
  $hasFile
400
  );
401
+
402
+ if (array_key_exists('request-id', $rheaders)) {
403
+ self::$requestTelemetry = new RequestTelemetry(
404
+ $rheaders['request-id'],
405
+ Util\Util::currentTimeMillis() - $requestStartMs
406
+ );
407
+ }
408
+
409
+ return [$rbody, $rcode, $rheaders, $myApiKey];
410
  }
411
 
412
+ /**
413
+ * @param resource $resource
414
+ * @param bool $hasCurlFile
415
+ *
416
+ * @return \CURLFile|string
417
+ * @throws Error\Api
418
+ */
419
  private function _processResourceParam($resource, $hasCurlFile)
420
  {
421
  if (get_resource_type($resource) !== 'stream') {
439
  }
440
  }
441
 
442
+ /**
443
+ * @param string $rbody
444
+ * @param int $rcode
445
+ * @param array $rheaders
446
+ *
447
+ * @return mixed
448
+ * @throws Error\Api
449
+ * @throws Error\Authentication
450
+ * @throws Error\Card
451
+ * @throws Error\InvalidRequest
452
+ * @throws Error\OAuth\InvalidClient
453
+ * @throws Error\OAuth\InvalidGrant
454
+ * @throws Error\OAuth\InvalidRequest
455
+ * @throws Error\OAuth\InvalidScope
456
+ * @throws Error\OAuth\UnsupportedGrantType
457
+ * @throws Error\OAuth\UnsupportedResponseType
458
+ * @throws Error\Permission
459
+ * @throws Error\RateLimit
460
+ * @throws Error\Idempotency
461
+ */
462
  private function _interpretResponse($rbody, $rcode, $rheaders)
463
  {
464
+ $resp = json_decode($rbody, true);
465
+ $jsonError = json_last_error();
466
+ if ($resp === null && $jsonError !== JSON_ERROR_NONE) {
467
  $msg = "Invalid response body from API: $rbody "
468
+ . "(HTTP response code was $rcode, json_last_error() was $jsonError)";
469
  throw new Error\Api($msg, $rcode, $rbody);
470
  }
471
 
472
  if ($rcode < 200 || $rcode >= 300) {
473
+ $this->handleErrorResponse($rbody, $rcode, $rheaders, $resp);
474
  }
475
  return $resp;
476
  }
477
 
478
+ /**
479
+ * @static
480
+ *
481
+ * @param HttpClient\ClientInterface $client
482
+ */
483
  public static function setHttpClient($client)
484
  {
485
  self::$_httpClient = $client;
486
  }
487
 
488
+ /**
489
+ * @static
490
+ *
491
+ * Resets any stateful telemetry data
492
+ */
493
+ public static function resetTelemetry()
494
+ {
495
+ self::$requestTelemetry = null;
496
+ }
497
+
498
+ /**
499
+ * @return HttpClient\ClientInterface
500
+ */
501
  private function httpClient()
502
  {
503
  if (!self::$_httpClient) {
lib/stripe-gateway/lib/ApiResource.php CHANGED
@@ -9,11 +9,42 @@ namespace Stripe;
9
  */
10
  abstract class ApiResource extends StripeObject
11
  {
12
- private static $HEADERS_TO_PERSIST = array('Stripe-Account' => true, 'Stripe-Version' => true);
13
 
14
- public static function baseUrl()
 
 
 
 
 
 
 
15
  {
16
- return Stripe::$apiBase;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  }
18
 
19
  /**
@@ -36,27 +67,11 @@ abstract class ApiResource extends StripeObject
36
  }
37
 
38
  /**
39
- * @return string The name of the class, with namespacing and underscores
40
- * stripped.
41
  */
42
- public static function className()
43
  {
44
- $class = get_called_class();
45
- // Useful for namespaces: Foo\Charge
46
- if ($postfixNamespaces = strrchr($class, '\\')) {
47
- $class = substr($postfixNamespaces, 1);
48
- }
49
- // Useful for underscored 'namespaces': Foo_Charge
50
- if ($postfixFakeNamespaces = strrchr($class, '')) {
51
- $class = $postfixFakeNamespaces;
52
- }
53
- if (substr($class, 0, strlen('Stripe')) == 'Stripe') {
54
- $class = substr($class, strlen('Stripe'));
55
- }
56
- $class = str_replace('_', '', $class);
57
- $name = urlencode($class);
58
- $name = strtolower($name);
59
- return $name;
60
  }
61
 
62
  /**
@@ -64,7 +79,9 @@ abstract class ApiResource extends StripeObject
64
  */
65
  public static function classUrl()
66
  {
67
- $base = static::className();
 
 
68
  return "/v1/${base}s";
69
  }
70
 
@@ -92,114 +109,4 @@ abstract class ApiResource extends StripeObject
92
  {
93
  return static::resourceUrl($this['id']);
94
  }
95
-
96
- private static function _validateParams($params = null)
97
- {
98
- if ($params && !is_array($params)) {
99
- $message = "You must pass an array as the first argument to Stripe API "
100
- . "method calls. (HINT: an example call to create a charge "
101
- . "would be: \"Stripe\\Charge::create(array('amount' => 100, "
102
- . "'currency' => 'usd', 'card' => array('number' => "
103
- . "4242424242424242, 'exp_month' => 5, 'exp_year' => 2015)))\")";
104
- throw new Error\Api($message);
105
- }
106
- }
107
-
108
- protected function _request($method, $url, $params = array(), $options = null)
109
- {
110
- $opts = $this->_opts->merge($options);
111
- list($resp, $options) = static::_staticRequest($method, $url, $params, $opts);
112
- $this->setLastResponse($resp);
113
- return array($resp->json, $options);
114
- }
115
-
116
- protected static function _staticRequest($method, $url, $params, $options)
117
- {
118
- $opts = Util\RequestOptions::parse($options);
119
- $requestor = new ApiRequestor($opts->apiKey, static::baseUrl());
120
- list($response, $opts->apiKey) = $requestor->request($method, $url, $params, $opts->headers);
121
- foreach ($opts->headers as $k => $v) {
122
- if (!array_key_exists($k, self::$HEADERS_TO_PERSIST)) {
123
- unset($opts->headers[$k]);
124
- }
125
- }
126
- return array($response, $opts);
127
- }
128
-
129
- protected static function _retrieve($id, $options = null)
130
- {
131
- $opts = Util\RequestOptions::parse($options);
132
- $instance = new static($id, $opts);
133
- $instance->refresh();
134
- return $instance;
135
- }
136
-
137
- protected static function _all($params = null, $options = null)
138
- {
139
- self::_validateParams($params);
140
- $url = static::classUrl();
141
-
142
- list($response, $opts) = static::_staticRequest('get', $url, $params, $options);
143
- $obj = Util\Util::convertToStripeObject($response->json, $opts);
144
- if (!is_a($obj, 'Stripe\\Collection')) {
145
- $class = get_class($obj);
146
- $message = "Expected type \"Stripe\\Collection\", got \"$class\" instead";
147
- throw new Error\Api($message);
148
- }
149
- $obj->setLastResponse($response);
150
- $obj->setRequestParams($params);
151
- return $obj;
152
- }
153
-
154
- protected static function _create($params = null, $options = null)
155
- {
156
- self::_validateParams($params);
157
- $base = static::baseUrl();
158
- $url = static::classUrl();
159
-
160
- list($response, $opts) = static::_staticRequest('post', $url, $params, $options);
161
- $obj = Util\Util::convertToStripeObject($response->json, $opts);
162
- $obj->setLastResponse($response);
163
- return $obj;
164
- }
165
-
166
- /**
167
- * @param string $id The ID of the API resource to update.
168
- * @param array|null $params
169
- * @param array|string|null $opts
170
- *
171
- * @return ApiResource the updated API resource
172
- */
173
- protected static function _update($id, $params = null, $options = null)
174
- {
175
- self::_validateParams($params);
176
- $base = static::baseUrl();
177
- $url = static::resourceUrl($id);
178
-
179
- list($response, $opts) = static::_staticRequest('post', $url, $params, $options);
180
- $obj = Util\Util::convertToStripeObject($response->json, $opts);
181
- $obj->setLastResponse($response);
182
- return $obj;
183
- }
184
-
185
- protected function _save($options = null)
186
- {
187
- $params = $this->serializeParameters();
188
- if (count($params) > 0) {
189
- $url = $this->instanceUrl();
190
- list($response, $opts) = $this->_request('post', $url, $params, $options);
191
- $this->refreshFrom($response, $opts);
192
- }
193
- return $this;
194
- }
195
-
196
- protected function _delete($params = null, $options = null)
197
- {
198
- self::_validateParams($params);
199
-
200
- $url = $this->instanceUrl();
201
- list($response, $opts) = $this->_request('delete', $url, $params, $options);
202
- $this->refreshFrom($response, $opts);
203
- return $this;
204
- }
205
  }
9
  */
10
  abstract class ApiResource extends StripeObject
11
  {
12
+ use ApiOperations\Request;
13
 
14
+ /**
15
+ * @return \Stripe\Util\Set A list of fields that can be their own type of
16
+ * API resource (say a nested card under an account for example), and if
17
+ * that resource is set, it should be transmitted to the API on a create or
18
+ * update. Doing so is not the default behavior because API resources
19
+ * should normally be persisted on their own RESTful endpoints.
20
+ */
21
+ public static function getSavedNestedResources()
22
  {
23
+ static $savedNestedResources = null;
24
+ if ($savedNestedResources === null) {
25
+ $savedNestedResources = new Util\Set();
26
+ }
27
+ return $savedNestedResources;
28
+ }
29
+
30
+ /**
31
+ * @var boolean A flag that can be set a behavior that will cause this
32
+ * resource to be encoded and sent up along with an update of its parent
33
+ * resource. This is usually not desirable because resources are updated
34
+ * individually on their own endpoints, but there are certain cases,
35
+ * replacing a customer's source for example, where this is allowed.
36
+ */
37
+ public $saveWithParent = false;
38
+
39
+ public function __set($k, $v)
40
+ {
41
+ parent::__set($k, $v);
42
+ $v = $this->$k;
43
+ if ((static::getSavedNestedResources()->includes($k)) &&
44
+ ($v instanceof ApiResource)) {
45
+ $v->saveWithParent = true;
46
+ }
47
+ return $v;
48
  }
49
 
50
  /**
67
  }
68
 
69
  /**
70
+ * @return string The base URL for the given class.
 
71
  */
72
+ public static function baseUrl()
73
  {
74
+ return Stripe::$apiBase;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  }
76
 
77
  /**
79
  */
80
  public static function classUrl()
81
  {
82
+ // Replace dots with slashes for namespaced resources, e.g. if the object's name is
83
+ // "foo.bar", then its URL will be "/v1/foo/bars".
84
+ $base = str_replace('.', '/', static::OBJECT_NAME);
85
  return "/v1/${base}s";
86
  }
87
 
109
  {
110
  return static::resourceUrl($this['id']);
111
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  }
lib/stripe-gateway/lib/ApiResponse.php CHANGED
@@ -2,6 +2,8 @@
2
 
3
  namespace Stripe;
4
 
 
 
5
  /**
6
  * Class ApiResponse
7
  *
@@ -17,7 +19,7 @@ class ApiResponse
17
  /**
18
  * @param string $body
19
  * @param integer $code
20
- * @param array|null $headers
21
  * @param array|null $json
22
  *
23
  * @return obj An APIResponse
2
 
3
  namespace Stripe;
4
 
5
+ use Stripe\Util\CaseInsensitiveArray;
6
+
7
  /**
8
  * Class ApiResponse
9
  *
19
  /**
20
  * @param string $body
21
  * @param integer $code
22
+ * @param array|CaseInsensitiveArray|null $headers
23
  * @param array|null $json
24
  *
25
  * @return obj An APIResponse
lib/stripe-gateway/lib/ApplePayDomain.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ApplePayDomain
7
+ *
8
+ * @package Stripe
9
+ */
10
+ class ApplePayDomain extends ApiResource
11
+ {
12
+ const OBJECT_NAME = "apple_pay_domain";
13
+
14
+ use ApiOperations\All;
15
+ use ApiOperations\Create;
16
+ use ApiOperations\Delete;
17
+ use ApiOperations\Retrieve;
18
+
19
+ /**
20
+ * @return string The class URL for this resource. It needs to be special
21
+ * cased because it doesn't fit into the standard resource pattern.
22
+ */
23
+ public static function classUrl()
24
+ {
25
+ return '/v1/apple_pay/domains';
26
+ }
27
+ }
lib/stripe-gateway/lib/ApplicationFee.php CHANGED
@@ -5,65 +5,93 @@ namespace Stripe;
5
  /**
6
  * Class ApplicationFee
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class ApplicationFee extends ApiResource
11
  {
 
 
 
 
 
 
 
 
12
  /**
13
- * This is a special case because the application fee endpoint has an
14
- * underscore in it. The parent `className` function strips underscores.
15
  *
16
- * @return string The name of the class.
17
  */
18
- public static function className()
19
  {
20
- return 'application_fee';
 
 
21
  }
22
 
23
  /**
24
- * @param string $id The ID of the application fee to retrieve.
 
25
  * @param array|string|null $opts
26
  *
27
- * @return ApplicationFee
28
  */
29
- public static function retrieve($id, $opts = null)
30
  {
31
- return self::_retrieve($id, $opts);
32
  }
33
 
34
  /**
35
- * @param string $id The ID of the application fee to update.
 
36
  * @param array|null $params
37
- * @param array|string|null $options
38
  *
39
- * @return ApplicationFee The updated application fee.
40
  */
41
- public static function update($id, $params = null, $options = null)
42
  {
43
- return self::_update($id, $params, $options);
44
  }
45
 
46
  /**
 
 
47
  * @param array|null $params
48
  * @param array|string|null $opts
49
  *
50
- * @return Collection of ApplicationFees
51
  */
52
- public static function all($params = null, $opts = null)
53
  {
54
- return self::_all($params, $opts);
55
  }
56
 
57
  /**
 
58
  * @param array|null $params
59
  * @param array|string|null $opts
60
  *
61
- * @return ApplicationFee The refunded application fee.
62
  */
63
- public function refund($params = null, $opts = null)
64
  {
65
- $this->refunds->create($params, $opts);
66
- $this->refresh();
67
- return $this;
68
  }
69
  }
5
  /**
6
  * Class ApplicationFee
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $account
11
+ * @property int $amount
12
+ * @property int $amount_refunded
13
+ * @property string $application
14
+ * @property string $balance_transaction
15
+ * @property string $charge
16
+ * @property int $created
17
+ * @property string $currency
18
+ * @property bool $livemode
19
+ * @property string $originating_transaction
20
+ * @property bool $refunded
21
+ * @property Collection $refunds
22
+ *
23
  * @package Stripe
24
  */
25
  class ApplicationFee extends ApiResource
26
  {
27
+ const OBJECT_NAME = "application_fee";
28
+
29
+ use ApiOperations\All;
30
+ use ApiOperations\NestedResource;
31
+ use ApiOperations\Retrieve;
32
+
33
+ const PATH_REFUNDS = '/refunds';
34
+
35
  /**
36
+ * @param array|null $params
37
+ * @param array|string|null $opts
38
  *
39
+ * @return ApplicationFee The refunded application fee.
40
  */
41
+ public function refund($params = null, $opts = null)
42
  {
43
+ $this->refunds->create($params, $opts);
44
+ $this->refresh();
45
+ return $this;
46
  }
47
 
48
  /**
49
+ * @param string|null $id The ID of the application fee on which to create the refund.
50
+ * @param array|null $params
51
  * @param array|string|null $opts
52
  *
53
+ * @return ApplicationFeeRefund
54
  */
55
+ public static function createRefund($id, $params = null, $opts = null)
56
  {
57
+ return self::_createNestedResource($id, static::PATH_REFUNDS, $params, $opts);
58
  }
59
 
60
  /**
61
+ * @param string|null $id The ID of the application fee to which the refund belongs.
62
+ * @param array|null $refundId The ID of the refund to retrieve.
63
  * @param array|null $params
64
+ * @param array|string|null $opts
65
  *
66
+ * @return ApplicationFeeRefund
67
  */
68
+ public static function retrieveRefund($id, $refundId, $params = null, $opts = null)
69
  {
70
+ return self::_retrieveNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts);
71
  }
72
 
73
  /**
74
+ * @param string|null $id The ID of the application fee to which the refund belongs.
75
+ * @param array|null $refundId The ID of the refund to update.
76
  * @param array|null $params
77
  * @param array|string|null $opts
78
  *
79
+ * @return ApplicationFeeRefund
80
  */
81
+ public static function updateRefund($id, $refundId, $params = null, $opts = null)
82
  {
83
+ return self::_updateNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts);
84
  }
85
 
86
  /**
87
+ * @param string|null $id The ID of the application fee on which to retrieve the refunds.
88
  * @param array|null $params
89
  * @param array|string|null $opts
90
  *
91
+ * @return Collection The list of refunds.
92
  */
93
+ public static function allRefunds($id, $params = null, $opts = null)
94
  {
95
+ return self::_allNestedResources($id, static::PATH_REFUNDS, $params, $opts);
 
 
96
  }
97
  }
lib/stripe-gateway/lib/ApplicationFeeRefund.php CHANGED
@@ -5,10 +5,25 @@ namespace Stripe;
5
  /**
6
  * Class ApplicationFeeRefund
7
  *
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class ApplicationFeeRefund extends ApiResource
11
  {
 
 
 
 
 
 
12
  /**
13
  * @return string The API URL for this Stripe refund.
14
  */
5
  /**
6
  * Class ApplicationFeeRefund
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property string $balance_transaction
12
+ * @property int $created
13
+ * @property string $currency
14
+ * @property string $fee
15
+ * @property StripeObject $metadata
16
+ *
17
  * @package Stripe
18
  */
19
  class ApplicationFeeRefund extends ApiResource
20
  {
21
+ const OBJECT_NAME = "fee_refund";
22
+
23
+ use ApiOperations\Update {
24
+ save as protected _save;
25
+ }
26
+
27
  /**
28
  * @return string The API URL for this Stripe refund.
29
  */
lib/stripe-gateway/lib/Balance.php CHANGED
@@ -5,15 +5,18 @@ namespace Stripe;
5
  /**
6
  * Class Balance
7
  *
8
- * @param string $object
9
- * @param mixed $available
10
- * @param bool $livedmode
11
- * @param mixed $pending
 
12
  *
13
  * @package Stripe
14
  */
15
  class Balance extends SingletonApiResource
16
  {
 
 
17
  /**
18
  * @param array|string|null $opts
19
  *
5
  /**
6
  * Class Balance
7
  *
8
+ * @property string $object
9
+ * @property array $available
10
+ * @property array $connect_reserved
11
+ * @property bool $livemode
12
+ * @property array $pending
13
  *
14
  * @package Stripe
15
  */
16
  class Balance extends SingletonApiResource
17
  {
18
+ const OBJECT_NAME = "balance";
19
+
20
  /**
21
  * @param array|string|null $opts
22
  *
lib/stripe-gateway/lib/BalanceTransaction.php CHANGED
@@ -12,11 +12,11 @@ namespace Stripe;
12
  * @property int $created
13
  * @property string $currency
14
  * @property string $description
 
15
  * @property int $fee
16
  * @property mixed $fee_details
17
  * @property int $net
18
  * @property string $source
19
- * @property mixed $sourced_transfers
20
  * @property string $status
21
  * @property string $type
22
  *
@@ -24,34 +24,42 @@ namespace Stripe;
24
  */
25
  class BalanceTransaction extends ApiResource
26
  {
27
- /**
28
- * @return string The class URL for this resource. It needs to be special
29
- * cased because it doesn't fit into the standard resource pattern.
30
- */
31
- public static function classUrl()
32
- {
33
- return "/v1/balance/history";
34
- }
35
 
36
- /**
37
- * @param string $id The ID of the balance transaction to retrieve.
38
- * @param array|string|null $opts
39
- *
40
- * @return BalanceTransaction
41
- */
42
- public static function retrieve($id, $opts = null)
43
- {
44
- return self::_retrieve($id, $opts);
45
- }
46
 
47
  /**
48
- * @param array|null $params
49
- * @param array|string|null $opts
50
- *
51
- * @return Collection of BalanceTransactions
52
  */
53
- public static function all($params = null, $opts = null)
54
- {
55
- return self::_all($params, $opts);
56
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  }
12
  * @property int $created
13
  * @property string $currency
14
  * @property string $description
15
+ * @property float $exchange_rate
16
  * @property int $fee
17
  * @property mixed $fee_details
18
  * @property int $net
19
  * @property string $source
 
20
  * @property string $status
21
  * @property string $type
22
  *
24
  */
25
  class BalanceTransaction extends ApiResource
26
  {
27
+ const OBJECT_NAME = "balance_transaction";
 
 
 
 
 
 
 
28
 
29
+ use ApiOperations\All;
30
+ use ApiOperations\Retrieve;
 
 
 
 
 
 
 
 
31
 
32
  /**
33
+ * Possible string representations of the type of balance transaction.
34
+ * @link https://stripe.com/docs/api/balance/balance_transaction#balance_transaction_object-type
 
 
35
  */
36
+ const TYPE_ADJUSTMENT = 'adjustment';
37
+ const TYPE_ADVANCE = 'advance';
38
+ const TYPE_ADVANCE_FUNDING = 'advance_funding';
39
+ const TYPE_APPLICATION_FEE = 'application_fee';
40
+ const TYPE_APPLICATION_FEE_REFUND = 'application_fee_refund';
41
+ const TYPE_CHARGE = 'charge';
42
+ const TYPE_CONNECT_COLLECTION_TRANSFER = 'connect_collection_transfer';
43
+ const TYPE_ISSUING_AUTHORIZATION_HOLD = 'issuing_authorization_hold';
44
+ const TYPE_ISSUING_AUTHORIZATION_RELEASE = 'issuing_authorization_release';
45
+ const TYPE_ISSUING_TRANSACTION = 'issuing_transaction';
46
+ const TYPE_PAYMENT = 'payment';
47
+ const TYPE_PAYMENT_FAILURE_REFUND = 'payment_failure_refund';
48
+ const TYPE_PAYMENT_REFUND = 'payment_refund';
49
+ const TYPE_PAYOUT = 'payout';
50
+ const TYPE_PAYOUT_CANCEL = 'payout_cancel';
51
+ const TYPE_PAYOUT_FAILURE = 'payout_failure';
52
+ const TYPE_REFUND = 'refund';
53
+ const TYPE_REFUND_FAILURE = 'refund_failure';
54
+ const TYPE_RESERVE_TRANSACTION = 'reserve_transaction';
55
+ const TYPE_RESERVED_FUNDS = 'reserved_funds';
56
+ const TYPE_STRIPE_FEE = 'stripe_fee';
57
+ const TYPE_STRIPE_FX_FEE = 'stripe_fx_fee';
58
+ const TYPE_TAX_FEE = 'tax_fee';
59
+ const TYPE_TOPUP = 'topup';
60
+ const TYPE_TOPUP_REVERSAL = 'topup_reversal';
61
+ const TYPE_TRANSFER = 'transfer';
62
+ const TYPE_TRANSFER_CANCEL = 'transfer_cancel';
63
+ const TYPE_TRANSFER_FAILURE = 'transfer_failure';
64
+ const TYPE_TRANSFER_REFUND = 'transfer_refund';
65
  }
lib/stripe-gateway/lib/BankAccount.php CHANGED
@@ -5,16 +5,99 @@ namespace Stripe;
5
  /**
6
  * Class BankAccount
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
- class BankAccount extends ExternalAccount
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  /**
13
- * @param array|null $params
14
- * @param array|string|null $options
15
  *
16
- * @return BankAccount The verified bank account.
17
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  public function verify($params = null, $options = null)
19
  {
20
  $url = $this->instanceUrl() . '/verify';
5
  /**
6
  * Class BankAccount
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $account
11
+ * @property string $account_holder_name
12
+ * @property string $account_holder_type
13
+ * @property string $bank_name
14
+ * @property string $country
15
+ * @property string $currency
16
+ * @property string $customer
17
+ * @property bool $default_for_currency
18
+ * @property string $fingerprint
19
+ * @property string $last4
20
+ * @property StripeObject $metadata
21
+ * @property string $routing_number
22
+ * @property string $status
23
+ *
24
  * @package Stripe
25
  */
26
+ class BankAccount extends ApiResource
27
  {
28
+ const OBJECT_NAME = "bank_account";
29
+
30
+ use ApiOperations\Delete;
31
+ use ApiOperations\Update;
32
+
33
+ /**
34
+ * Possible string representations of the bank verification status.
35
+ * @link https://stripe.com/docs/api/external_account_bank_accounts/object#account_bank_account_object-status
36
+ */
37
+ const STATUS_NEW = 'new';
38
+ const STATUS_VALIDATED = 'validated';
39
+ const STATUS_VERIFIED = 'verified';
40
+ const STATUS_VERIFICATION_FAILED = 'verification_failed';
41
+ const STATUS_ERRORED = 'errored';
42
+
43
+ /**
44
+ * @return string The instance URL for this resource. It needs to be special
45
+ * cased because it doesn't fit into the standard resource pattern.
46
+ */
47
+ public function instanceUrl()
48
+ {
49
+ if ($this['customer']) {
50
+ $base = Customer::classUrl();
51
+ $parent = $this['customer'];
52
+ $path = 'sources';
53
+ } elseif ($this['account']) {
54
+ $base = Account::classUrl();
55
+ $parent = $this['account'];
56
+ $path = 'external_accounts';
57
+ } else {
58
+ $msg = "Bank accounts cannot be accessed without a customer ID or account ID.";
59
+ throw new Error\InvalidRequest($msg, null);
60
+ }
61
+ $parentExtn = urlencode(Util\Util::utf8($parent));
62
+ $extn = urlencode(Util\Util::utf8($this['id']));
63
+ return "$base/$parentExtn/$path/$extn";
64
+ }
65
+
66
  /**
67
+ * @param array|string $_id
68
+ * @param array|string|null $_opts
69
  *
70
+ * @throws \Stripe\Error\InvalidRequest
71
  */
72
+ public static function retrieve($_id, $_opts = null)
73
+ {
74
+ $msg = "Bank accounts cannot be accessed without a customer ID or account ID. " .
75
+ "Retrieve a bank account using \$customer->sources->retrieve('bank_account_id') or " .
76
+ "\$account->external_accounts->retrieve('bank_account_id') instead.";
77
+ throw new Error\InvalidRequest($msg, null);
78
+ }
79
+
80
+ /**
81
+ * @param string $_id
82
+ * @param array|null $_params
83
+ * @param array|string|null $_options
84
+ *
85
+ * @throws \Stripe\Error\InvalidRequest
86
+ */
87
+ public static function update($_id, $_params = null, $_options = null)
88
+ {
89
+ $msg = "Bank accounts cannot be accessed without a customer ID or account ID. " .
90
+ "Call save() on \$customer->sources->retrieve('bank_account_id') or " .
91
+ "\$account->external_accounts->retrieve('bank_account_id') instead.";
92
+ throw new Error\InvalidRequest($msg, null);
93
+ }
94
+
95
+ /**
96
+ * @param array|null $params
97
+ * @param array|string|null $options
98
+ *
99
+ * @return BankAccount The verified bank account.
100
+ */
101
  public function verify($params = null, $options = null)
102
  {
103
  $url = $this->instanceUrl() . '/verify';
lib/stripe-gateway/lib/BitcoinReceiver.php CHANGED
@@ -6,9 +6,17 @@ namespace Stripe;
6
  * Class BitcoinReceiver
7
  *
8
  * @package Stripe
 
 
 
9
  */
10
- class BitcoinReceiver extends ExternalAccount
11
  {
 
 
 
 
 
12
  /**
13
  * @return string The class URL for this resource. It needs to be special
14
  * cased because it doesn't fit into the standard resource pattern.
@@ -24,62 +32,17 @@ class BitcoinReceiver extends ExternalAccount
24
  */
25
  public function instanceUrl()
26
  {
27
- $result = parent::instanceUrl();
28
- if ($result) {
29
- return $result;
 
 
 
 
30
  } else {
31
- $id = $this['id'];
32
- $id = Util\Util::utf8($id);
33
- $extn = urlencode($id);
34
  $base = BitcoinReceiver::classUrl();
 
35
  return "$base/$extn";
36
  }
37
  }
38
-
39
- /**
40
- * @param string $id The ID of the Bitcoin Receiver to retrieve.
41
- * @param array|string|null $opts
42
- *
43
- * @return BitcoinReceiver
44
- */
45
- public static function retrieve($id, $opts = null)
46
- {
47
- return self::_retrieve($id, $opts);
48
- }
49
-
50
- /**
51
- * @param array|null $params
52
- * @param array|string|null $opts
53
- *
54
- * @return Collection of BitcoinReceivers
55
- */
56
- public static function all($params = null, $opts = null)
57
- {
58
- return self::_all($params, $opts);
59
- }
60
-
61
- /**
62
- * @param array|null $params
63
- * @param array|string|null $opts
64
- *
65
- * @return BitcoinReceiver The created Bitcoin Receiver item.
66
- */
67
- public static function create($params = null, $opts = null)
68
- {
69
- return self::_create($params, $opts);
70
- }
71
-
72
- /**
73
- * @param array|null $params
74
- * @param array|string|null $options
75
- *
76
- * @return BitcoinReceiver The refunded Bitcoin Receiver item.
77
- */
78
- public function refund($params = null, $options = null)
79
- {
80
- $url = $this->instanceUrl() . '/refund';
81
- list($response, $opts) = $this->_request('post', $url, $params, $options);
82
- $this->refreshFrom($response, $opts);
83
- return $this;
84
- }
85
  }
6
  * Class BitcoinReceiver
7
  *
8
  * @package Stripe
9
+ *
10
+ * @deprecated Bitcoin receivers are deprecated. Please use the sources API instead.
11
+ * @link https://stripe.com/docs/sources/bitcoin
12
  */
13
+ class BitcoinReceiver extends ApiResource
14
  {
15
+ const OBJECT_NAME = "bitcoin_receiver";
16
+
17
+ use ApiOperations\All;
18
+ use ApiOperations\Retrieve;
19
+
20
  /**
21
  * @return string The class URL for this resource. It needs to be special
22
  * cased because it doesn't fit into the standard resource pattern.
32
  */
33
  public function instanceUrl()
34
  {
35
+ if ($this['customer']) {
36
+ $base = Customer::classUrl();
37
+ $parent = $this['customer'];
38
+ $path = 'sources';
39
+ $parentExtn = urlencode(Util\Util::utf8($parent));
40
+ $extn = urlencode(Util\Util::utf8($this['id']));
41
+ return "$base/$parentExtn/$path/$extn";
42
  } else {
 
 
 
43
  $base = BitcoinReceiver::classUrl();
44
+ $extn = urlencode(Util\Util::utf8($this['id']));
45
  return "$base/$extn";
46
  }
47
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  }
lib/stripe-gateway/lib/BitcoinTransaction.php CHANGED
@@ -9,5 +9,5 @@ namespace Stripe;
9
  */
10
  class BitcoinTransaction extends ApiResource
11
  {
12
-
13
  }
9
  */
10
  class BitcoinTransaction extends ApiResource
11
  {
12
+ const OBJECT_NAME = "bitcoin_transaction";
13
  }
lib/stripe-gateway/lib/Capability.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Capability
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property string $account
13
+ * @property bool $requested
14
+ * @property int $requested_at
15
+ * @property mixed $requirements
16
+ * @property string $status
17
+ */
18
+ class Capability extends ApiResource
19
+ {
20
+ const OBJECT_NAME = "capability";
21
+
22
+ use ApiOperations\Update;
23
+
24
+ /**
25
+ * Possible string representations of a capability's status.
26
+ * @link https://stripe.com/docs/api/capabilities/object#capability_object-status
27
+ */
28
+ const STATUS_ACTIVE = 'active';
29
+ const STATUS_INACTIVE = 'inactive';
30
+ const STATUS_PENDING = 'pending';
31
+ const STATUS_UNREQUESTED = 'unrequested';
32
+
33
+ /**
34
+ * @return string The API URL for this Stripe account reversal.
35
+ */
36
+ public function instanceUrl()
37
+ {
38
+ $id = $this['id'];
39
+ $account = $this['account'];
40
+ if (!$id) {
41
+ throw new Error\InvalidRequest(
42
+ "Could not determine which URL to request: " .
43
+ "class instance has invalid ID: $id",
44
+ null
45
+ );
46
+ }
47
+ $id = Util\Util::utf8($id);
48
+ $account = Util\Util::utf8($account);
49
+
50
+ $base = Account::classUrl();
51
+ $accountExtn = urlencode($account);
52
+ $extn = urlencode($id);
53
+ return "$base/$accountExtn/capabilities/$extn";
54
+ }
55
+
56
+ /**
57
+ * @param array|string $_id
58
+ * @param array|string|null $_opts
59
+ *
60
+ * @throws \Stripe\Error\InvalidRequest
61
+ */
62
+ public static function retrieve($_id, $_opts = null)
63
+ {
64
+ $msg = "Capabilities cannot be accessed without an account ID. " .
65
+ "Retrieve a Capability using \$account->retrieveCapability('acap_123') instead.";
66
+ throw new Error\InvalidRequest($msg, null);
67
+ }
68
+
69
+ /**
70
+ * @param string $_id
71
+ * @param array|null $_params
72
+ * @param array|string|null $_options
73
+ *
74
+ * @throws \Stripe\Error\InvalidRequest
75
+ */
76
+ public static function update($_id, $_params = null, $_options = null)
77
+ {
78
+ $msg = "Capabilities cannot be accessed without an account ID. " .
79
+ "Update a Capability using \$account->updateCapability('acap_123') instead.";
80
+ throw new Error\InvalidRequest($msg, null);
81
+ }
82
+ }
lib/stripe-gateway/lib/Card.php CHANGED
@@ -5,9 +5,125 @@ namespace Stripe;
5
  /**
6
  * Class Card
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
- class Card extends ExternalAccount
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  }
5
  /**
6
  * Class Card
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $account
11
+ * @property string $address_city
12
+ * @property string $address_country
13
+ * @property string $address_line1
14
+ * @property string $address_line1_check
15
+ * @property string $address_line2
16
+ * @property string $address_state
17
+ * @property string $address_zip
18
+ * @property string $address_zip_check
19
+ * @property string[] $available_payout_methods
20
+ * @property string $brand
21
+ * @property string $country
22
+ * @property string $currency
23
+ * @property string $customer
24
+ * @property string $cvc_check
25
+ * @property bool $default_for_currency
26
+ * @property string $dynamic_last4
27
+ * @property int $exp_month
28
+ * @property int $exp_year
29
+ * @property string $fingerprint
30
+ * @property string $funding
31
+ * @property string $last4
32
+ * @property StripeObject $metadata
33
+ * @property string $name
34
+ * @property string $recipient
35
+ * @property string $tokenization_method
36
+ *
37
  * @package Stripe
38
  */
39
+ class Card extends ApiResource
40
  {
41
+ const OBJECT_NAME = "card";
42
+
43
+ use ApiOperations\Delete;
44
+ use ApiOperations\Update;
45
+
46
+ /**
47
+ * Possible string representations of the CVC check status.
48
+ * @link https://stripe.com/docs/api/cards/object#card_object-cvc_check
49
+ */
50
+ const CVC_CHECK_FAIL = 'fail';
51
+ const CVC_CHECK_PASS = 'pass';
52
+ const CVC_CHECK_UNAVAILABLE = 'unavailable';
53
+ const CVC_CHECK_UNCHECKED = 'unchecked';
54
+
55
+ /**
56
+ * Possible string representations of the funding of the card.
57
+ * @link https://stripe.com/docs/api/cards/object#card_object-funding
58
+ */
59
+ const FUNDING_CREDIT = 'credit';
60
+ const FUNDING_DEBIT = 'debit';
61
+ const FUNDING_PREPAID = 'prepaid';
62
+ const FUNDING_UNKNOWN = 'unknown';
63
+
64
+ /**
65
+ * Possible string representations of the tokenization method when using Apple Pay or Google Pay.
66
+ * @link https://stripe.com/docs/api/cards/object#card_object-tokenization_method
67
+ */
68
+ const TOKENIZATION_METHOD_APPLE_PAY = 'apple_pay';
69
+ const TOKENIZATION_METHOD_GOOGLE_PAY = 'google_pay';
70
+
71
+ /**
72
+ * @return string The instance URL for this resource. It needs to be special
73
+ * cased because cards are nested resources that may belong to different
74
+ * top-level resources.
75
+ */
76
+ public function instanceUrl()
77
+ {
78
+ if ($this['customer']) {
79
+ $base = Customer::classUrl();
80
+ $parent = $this['customer'];
81
+ $path = 'sources';
82
+ } elseif ($this['account']) {
83
+ $base = Account::classUrl();
84
+ $parent = $this['account'];
85
+ $path = 'external_accounts';
86
+ } elseif ($this['recipient']) {
87
+ $base = Recipient::classUrl();
88
+ $parent = $this['recipient'];
89
+ $path = 'cards';
90
+ } else {
91
+ $msg = "Cards cannot be accessed without a customer ID, account ID or recipient ID.";
92
+ throw new Error\InvalidRequest($msg, null);
93
+ }
94
+ $parentExtn = urlencode(Util\Util::utf8($parent));
95
+ $extn = urlencode(Util\Util::utf8($this['id']));
96
+ return "$base/$parentExtn/$path/$extn";
97
+ }
98
+
99
+ /**
100
+ * @param array|string $_id
101
+ * @param array|string|null $_opts
102
+ *
103
+ * @throws \Stripe\Error\InvalidRequest
104
+ */
105
+ public static function retrieve($_id, $_opts = null)
106
+ {
107
+ $msg = "Cards cannot be accessed without a customer, recipient or account ID. " .
108
+ "Retrieve a card using \$customer->sources->retrieve('card_id'), " .
109
+ "\$recipient->cards->retrieve('card_id'), or " .
110
+ "\$account->external_accounts->retrieve('card_id') instead.";
111
+ throw new Error\InvalidRequest($msg, null);
112
+ }
113
 
114
+ /**
115
+ * @param string $_id
116
+ * @param array|null $_params
117
+ * @param array|string|null $_options
118
+ *
119
+ * @throws \Stripe\Error\InvalidRequest
120
+ */
121
+ public static function update($_id, $_params = null, $_options = null)
122
+ {
123
+ $msg = "Cards cannot be accessed without a customer, recipient or account ID. " .
124
+ "Call save() on \$customer->sources->retrieve('card_id'), " .
125
+ "\$recipient->cards->retrieve('card_id'), or " .
126
+ "\$account->external_accounts->retrieve('card_id') instead.";
127
+ throw new Error\InvalidRequest($msg, null);
128
+ }
129
  }
lib/stripe-gateway/lib/Charge.php CHANGED
@@ -9,91 +9,113 @@ namespace Stripe;
9
  * @property string $object
10
  * @property int $amount
11
  * @property int $amount_refunded
12
- * @property mixed $application_fee
 
 
13
  * @property string $balance_transaction
 
14
  * @property bool $captured
15
  * @property int $created
16
  * @property string $currency
17
  * @property string $customer
18
- * @property mixed $description
19
- * @property mixed $destination
20
- * @property mixed $dispute
21
- * @property mixed $failure_code
22
- * @property mixed $failure_message
23
  * @property mixed $fraud_details
24
- * @property mixed $invoice
25
  * @property bool $livemode
26
- * @property mixed $metadata
27
- * @property mixed $order
 
 
28
  * @property bool $paid
29
- * @property mixed $receipt_email
30
- * @property mixed $receipt_number
 
 
 
 
31
  * @property bool $refunded
32
- * @property mixed $refunds
 
33
  * @property mixed $shipping
34
  * @property mixed $source
35
- * @property mixed $source_transfer
36
- * @property mixed $statement_descriptor
37
  * @property string $status
 
 
 
38
  *
39
  * @package Stripe
40
  */
41
  class Charge extends ApiResource
42
  {
43
- /**
44
- * @param string $id The ID of the charge to retrieve.
45
- * @param array|string|null $options
46
- *
47
- * @return Charge
48
- */
49
- public static function retrieve($id, $options = null)
50
- {
51
- return self::_retrieve($id, $options);
52
- }
53
 
54
- /**
55
- * @param array|null $params
56
- * @param array|string|null $options
57
- *
58
- * @return Collection of Charges
59
- */
60
- public static function all($params = null, $options = null)
61
- {
62
- return self::_all($params, $options);
63
- }
64
 
65
  /**
66
- * @param array|null $params
67
- * @param array|string|null $options
68
- *
69
- * @return Charge The created charge.
70
  */
71
- public static function create($params = null, $options = null)
72
- {
73
- return self::_create($params, $options);
74
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
  /**
77
- * @param string $id The ID of the charge to update.
78
- * @param array|null $params
79
- * @param array|string|null $options
80
- *
81
- * @return Charge The updated charge.
82
  */
83
- public static function update($id, $params = null, $options = null)
84
- {
85
- return self::_update($id, $params, $options);
86
- }
87
-
88
- /**
89
- * @param array|string|null $options
90
- *
91
- * @return Charge The saved charge.
92
- */
93
- public function save($options = null)
94
- {
95
- return $this->_save($options);
96
- }
97
 
98
  /**
99
  * @param array|null $params
@@ -135,7 +157,7 @@ class Charge extends ApiResource
135
  {
136
  $url = $this->instanceUrl() . '/dispute';
137
  list($response, $opts) = $this->_request('post', $url, $params, $options);
138
- $this->refreshFrom(array('dispute' => $response), $opts, true);
139
  return $this->dispute;
140
  }
141
 
@@ -161,7 +183,7 @@ class Charge extends ApiResource
161
  */
162
  public function markAsFraudulent($opts = null)
163
  {
164
- $params = array('fraud_details' => array('user_report' => 'fraudulent'));
165
  $url = $this->instanceUrl();
166
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
167
  $this->refreshFrom($response, $opts);
@@ -175,7 +197,7 @@ class Charge extends ApiResource
175
  */
176
  public function markAsSafe($opts = null)
177
  {
178
- $params = array('fraud_details' => array('user_report' => 'safe'));
179
  $url = $this->instanceUrl();
180
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
181
  $this->refreshFrom($response, $opts);
9
  * @property string $object
10
  * @property int $amount
11
  * @property int $amount_refunded
12
+ * @property string $application
13
+ * @property string $application_fee
14
+ * @property int $application_fee_amount
15
  * @property string $balance_transaction
16
+ * @property mixed $billing_details
17
  * @property bool $captured
18
  * @property int $created
19
  * @property string $currency
20
  * @property string $customer
21
+ * @property string $description
22
+ * @property string $destination
23
+ * @property string $dispute
24
+ * @property string $failure_code
25
+ * @property string $failure_message
26
  * @property mixed $fraud_details
27
+ * @property string $invoice
28
  * @property bool $livemode
29
+ * @property StripeObject $metadata
30
+ * @property string $on_behalf_of
31
+ * @property string $order
32
+ * @property mixed $outcome
33
  * @property bool $paid
34
+ * @property string $payment_intent
35
+ * @property string $payment_method
36
+ * @property mixed $payment_method_details
37
+ * @property string $receipt_email
38
+ * @property string $receipt_number
39
+ * @property string $receipt_url
40
  * @property bool $refunded
41
+ * @property Collection $refunds
42
+ * @property string $review
43
  * @property mixed $shipping
44
  * @property mixed $source
45
+ * @property string $source_transfer
46
+ * @property string $statement_descriptor
47
  * @property string $status
48
+ * @property string $transfer
49
+ * @property mixed $transfer_data
50
+ * @property string $transfer_group
51
  *
52
  * @package Stripe
53
  */
54
  class Charge extends ApiResource
55
  {
56
+ const OBJECT_NAME = "charge";
 
 
 
 
 
 
 
 
 
57
 
58
+ use ApiOperations\All;
59
+ use ApiOperations\Create;
60
+ use ApiOperations\Retrieve;
61
+ use ApiOperations\Update;
 
 
 
 
 
 
62
 
63
  /**
64
+ * Possible string representations of decline codes.
65
+ * These strings are applicable to the decline_code property of the \Stripe\Error\Card exception.
66
+ * @link https://stripe.com/docs/declines/codes
 
67
  */
68
+ const DECLINED_APPROVE_WITH_ID = 'approve_with_id';
69
+ const DECLINED_CALL_ISSUER = 'call_issuer';
70
+ const DECLINED_CARD_NOT_SUPPORTED = 'card_not_supported';
71
+ const DECLINED_CARD_VELOCITY_EXCEEDED = 'card_velocity_exceeded';
72
+ const DECLINED_CURRENCY_NOT_SUPPORTED = 'currency_not_supported';
73
+ const DECLINED_DO_NOT_HONOR = 'do_not_honor';
74
+ const DECLINED_DO_NOT_TRY_AGAIN = 'do_not_try_again';
75
+ const DECLINED_DUPLICATED_TRANSACTION = 'duplicate_transaction';
76
+ const DECLINED_EXPIRED_CARD = 'expired_card';
77
+ const DECLINED_FRAUDULENT = 'fraudulent';
78
+ const DECLINED_GENERIC_DECLINE = 'generic_decline';
79
+ const DECLINED_INCORRECT_NUMBER = 'incorrect_number';
80
+ const DECLINED_INCORRECT_CVC = 'incorrect_cvc';
81
+ const DECLINED_INCORRECT_PIN = 'incorrect_pin';
82
+ const DECLINED_INCORRECT_ZIP = 'incorrect_zip';
83
+ const DECLINED_INSUFFICIENT_FUNDS = 'insufficient_funds';
84
+ const DECLINED_INVALID_ACCOUNT = 'invalid_account';
85
+ const DECLINED_INVALID_AMOUNT = 'invalid_amount';
86
+ const DECLINED_INVALID_CVC = 'invalid_cvc';
87
+ const DECLINED_INVALID_EXPIRY_YEAR = 'invalid_expiry_year';
88
+ const DECLINED_INVALID_NUMBER = 'invalid_number';
89
+ const DECLINED_INVALID_PIN = 'invalid_pin';
90
+ const DECLINED_ISSUER_NOT_AVAILABLE = 'issuer_not_available';
91
+ const DECLINED_LOST_CARD = 'lost_card';
92
+ const DECLINED_MERCHANT_BLACKLIST = 'merchant_blacklist';
93
+ const DECLINED_NEW_ACCOUNT_INFORMATION_AVAILABLE = 'new_account_information_available';
94
+ const DECLINED_NO_ACTION_TAKEN = 'no_action_taken';
95
+ const DECLINED_NOT_PERMITTED = 'not_permitted';
96
+ const DECLINED_PICKUP_CARD = 'pickup_card';
97
+ const DECLINED_PIN_TRY_EXCEEDED = 'pin_try_exceeded';
98
+ const DECLINED_PROCESSING_ERROR = 'processing_error';
99
+ const DECLINED_REENTER_TRANSACTION = 'reenter_transaction';
100
+ const DECLINED_RESTRICTED_CARD = 'restricted_card';
101
+ const DECLINED_REVOCATION_OF_ALL_AUTHORIZATIONS = 'revocation_of_all_authorizations';
102
+ const DECLINED_REVOCATION_OF_AUTHORIZATION = 'revocation_of_authorization';
103
+ const DECLINED_SECURITY_VIOLATION = 'security_violation';
104
+ const DECLINED_SERVICE_NOT_ALLOWED = 'service_not_allowed';
105
+ const DECLINED_STOLEN_CARD = 'stolen_card';
106
+ const DECLINED_STOP_PAYMENT_ORDER = 'stop_payment_order';
107
+ const DECLINED_TESTMODE_DECLINE = 'testmode_decline';
108
+ const DECLINED_TRANSACTION_NOT_ALLOWED = 'transaction_not_allowed';
109
+ const DECLINED_TRY_AGAIN_LATER = 'try_again_later';
110
+ const DECLINED_WITHDRAWAL_COUNT_LIMIT_EXCEEDED = 'withdrawal_count_limit_exceeded';
111
 
112
  /**
113
+ * Possible string representations of the status of the charge.
114
+ * @link https://stripe.com/docs/api/charges/object#charge_object-status
 
 
 
115
  */
116
+ const STATUS_FAILED = 'failed';
117
+ const STATUS_PENDING = 'pending';
118
+ const STATUS_SUCCEEDED = 'succeeded';
 
 
 
 
 
 
 
 
 
 
 
119
 
120
  /**
121
  * @param array|null $params
157
  {
158
  $url = $this->instanceUrl() . '/dispute';
159
  list($response, $opts) = $this->_request('post', $url, $params, $options);
160
+ $this->refreshFrom(['dispute' => $response], $opts, true);
161
  return $this->dispute;
162
  }
163
 
183
  */
184
  public function markAsFraudulent($opts = null)
185
  {
186
+ $params = ['fraud_details' => ['user_report' => 'fraudulent']];
187
  $url = $this->instanceUrl();
188
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
189
  $this->refreshFrom($response, $opts);
197
  */
198
  public function markAsSafe($opts = null)
199
  {
200
+ $params = ['fraud_details' => ['user_report' => 'safe']];
201
  $url = $this->instanceUrl();
202
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
203
  $this->refreshFrom($response, $opts);
lib/stripe-gateway/lib/Checkout/Session.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Checkout;
4
+
5
+ /**
6
+ * Class Session
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $cancel_url
11
+ * @property string $client_reference_id
12
+ * @property string $customer
13
+ * @property string $customer_email
14
+ * @property mixed $display_items
15
+ * @property bool $livemode
16
+ * @property string $payment_intent
17
+ * @property string[] $payment_method_types
18
+ * @property string $submit_type
19
+ * @property string $subscription
20
+ * @property string $success_url
21
+ *
22
+ * @package Stripe
23
+ */
24
+ class Session extends \Stripe\ApiResource
25
+ {
26
+ const OBJECT_NAME = "checkout.session";
27
+
28
+ use \Stripe\ApiOperations\Create;
29
+ use \Stripe\ApiOperations\Retrieve;
30
+
31
+ /**
32
+ * Possible string representations of submit type.
33
+ * @link https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session-submit_type
34
+ */
35
+ const SUBMIT_TYPE_AUTO = 'auto';
36
+ const SUBMIT_TYPE_BOOK = 'book';
37
+ const SUBMIT_TYPE_DONATE = 'donate';
38
+ const SUBMIT_TYPE_PAY = 'pay';
39
+ }
lib/stripe-gateway/lib/Collection.php CHANGED
@@ -5,16 +5,28 @@ namespace Stripe;
5
  /**
6
  * Class Collection
7
  *
8
- * @param string $object
9
- * @param string $url
10
- * @param bool $has_more
11
- * @param mixed $data
12
  *
13
  * @package Stripe
14
  */
15
- class Collection extends ApiResource
16
  {
17
- protected $_requestParams = array();
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
  public function setRequestParams($params)
20
  {
@@ -56,7 +68,16 @@ class Collection extends ApiResource
56
  }
57
 
58
  /**
59
- * @return AutoPagingIterator An iterator that can be used to iterate
 
 
 
 
 
 
 
 
 
60
  * across all objects across all pages. As page boundaries are
61
  * encountered, the next page will be fetched automatically for
62
  * continued iteration.
@@ -76,12 +97,11 @@ class Collection extends ApiResource
76
  if (isset($url['query'])) {
77
  // If the URL contains a query param, parse it out into $params so they
78
  // don't interact weirdly with each other.
79
- $query = array();
80
  parse_str($url['query'], $query);
81
- // PHP 5.2 doesn't support the ?: operator :(
82
- $params = array_merge($params ? $params : array(), $query);
83
  }
84
 
85
- return array($url['path'], $params);
86
  }
87
  }
5
  /**
6
  * Class Collection
7
  *
8
+ * @property string $object
9
+ * @property string $url
10
+ * @property bool $has_more
11
+ * @property mixed $data
12
  *
13
  * @package Stripe
14
  */
15
+ class Collection extends StripeObject implements \IteratorAggregate
16
  {
17
+ const OBJECT_NAME = "list";
18
+
19
+ use ApiOperations\Request;
20
+
21
+ protected $_requestParams = [];
22
+
23
+ /**
24
+ * @return string The base URL for the given class.
25
+ */
26
+ public static function baseUrl()
27
+ {
28
+ return Stripe::$apiBase;
29
+ }
30
 
31
  public function setRequestParams($params)
32
  {
68
  }
69
 
70
  /**
71
+ * @return \ArrayIterator An iterator that can be used to iterate
72
+ * across objects in the current page.
73
+ */
74
+ public function getIterator()
75
+ {
76
+ return new \ArrayIterator($this->data);
77
+ }
78
+
79
+ /**
80
+ * @return Util\AutoPagingIterator An iterator that can be used to iterate
81
  * across all objects across all pages. As page boundaries are
82
  * encountered, the next page will be fetched automatically for
83
  * continued iteration.
97
  if (isset($url['query'])) {
98
  // If the URL contains a query param, parse it out into $params so they
99
  // don't interact weirdly with each other.
100
+ $query = [];
101
  parse_str($url['query'], $query);
102
+ $params = array_merge($params ?: [], $query);
 
103
  }
104
 
105
+ return [$url['path'], $params];
106
  }
107
  }
lib/stripe-gateway/lib/CountrySpec.php CHANGED
@@ -5,40 +5,21 @@ namespace Stripe;
5
  /**
6
  * Class CountrySpec
7
  *
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class CountrySpec extends ApiResource
11
  {
12
- /**
13
- * This is a special case because the country specs endpoint has an
14
- * underscore in it. The parent `className` function strips underscores.
15
- *
16
- * @return string The name of the class.
17
- */
18
- public static function className()
19
- {
20
- return 'country_spec';
21
- }
22
-
23
- /**
24
- * @param string $country The ISO country code of the country we retrieve the CountrySpec for.
25
- * @param array|string|null $opts
26
- *
27
- * @return CountrySpec
28
- */
29
- public static function retrieve($country, $opts = null)
30
- {
31
- return self::_retrieve($country, $opts);
32
- }
33
 
34
- /**
35
- * @param array|null $params
36
- * @param array|string|null $opts
37
- *
38
- * @return Collection of CountrySpecs
39
- */
40
- public static function all($params = null, $opts = null)
41
- {
42
- return self::_all($params, $opts);
43
- }
44
  }
5
  /**
6
  * Class CountrySpec
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $default_currency
11
+ * @property mixed $supported_bank_account_currencies
12
+ * @property string[] $supported_payment_currencies
13
+ * @property string[] $supported_payment_methods
14
+ * @property string[] $supported_transfer_countries
15
+ * @property mixed $verification_fields
16
+ *
17
  * @package Stripe
18
  */
19
  class CountrySpec extends ApiResource
20
  {
21
+ const OBJECT_NAME = "country_spec";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
+ use ApiOperations\All;
24
+ use ApiOperations\Retrieve;
 
 
 
 
 
 
 
 
25
  }
lib/stripe-gateway/lib/Coupon.php CHANGED
@@ -5,73 +5,31 @@ namespace Stripe;
5
  /**
6
  * Class Coupon
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class Coupon extends ApiResource
11
  {
12
- /**
13
- * @param string $id The ID of the coupon to retrieve.
14
- * @param array|string|null $opts
15
- *
16
- * @return Coupon
17
- */
18
- public static function retrieve($id, $opts = null)
19
- {
20
- return self::_retrieve($id, $opts);
21
- }
22
-
23
- /**
24
- * @param array|null $params
25
- * @param array|string|null $opts
26
- *
27
- * @return Coupon The created coupon.
28
- */
29
- public static function create($params = null, $opts = null)
30
- {
31
- return self::_create($params, $opts);
32
- }
33
-
34
- /**
35
- * @param string $id The ID of the coupon to update.
36
- * @param array|null $params
37
- * @param array|string|null $options
38
- *
39
- * @return Coupon The updated coupon.
40
- */
41
- public static function update($id, $params = null, $options = null)
42
- {
43
- return self::_update($id, $params, $options);
44
- }
45
-
46
- /**
47
- * @param array|null $params
48
- * @param array|string|null $opts
49
- *
50
- * @return Coupon The deleted coupon.
51
- */
52
- public function delete($params = null, $opts = null)
53
- {
54
- return $this->_delete($params, $opts);
55
- }
56
-
57
- /**
58
- * @param array|string|null $opts
59
- *
60
- * @return Coupon The saved coupon.
61
- */
62
- public function save($opts = null)
63
- {
64
- return $this->_save($opts);
65
- }
66
 
67
- /**
68
- * @param array|null $params
69
- * @param array|string|null $opts
70
- *
71
- * @return Collection of Coupons
72
- */
73
- public static function all($params = null, $opts = null)
74
- {
75
- return self::_all($params, $opts);
76
- }
77
  }
5
  /**
6
  * Class Coupon
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount_off
11
+ * @property int $created
12
+ * @property string $currency
13
+ * @property string $duration
14
+ * @property int $duration_in_months
15
+ * @property bool $livemode
16
+ * @property int $max_redemptions
17
+ * @property StripeObject $metadata
18
+ * @property string $name
19
+ * @property float $percent_off
20
+ * @property int $redeem_by
21
+ * @property int $times_redeemed
22
+ * @property bool $valid
23
+ *
24
  * @package Stripe
25
  */
26
  class Coupon extends ApiResource
27
  {
28
+ const OBJECT_NAME = "coupon";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
+ use ApiOperations\All;
31
+ use ApiOperations\Create;
32
+ use ApiOperations\Delete;
33
+ use ApiOperations\Retrieve;
34
+ use ApiOperations\Update;
 
 
 
 
 
35
  }
lib/stripe-gateway/lib/CreditNote.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class CreditNote
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property string $customer_balance_transaction
12
+ * @property int $created
13
+ * @property string $currency
14
+ * @property string $customer
15
+ * @property string $invoice
16
+ * @property bool $livemode
17
+ * @property string $memo
18
+ * @property StripeObject $metadata
19
+ * @property string $number
20
+ * @property string $pdf
21
+ * @property string $reason
22
+ * @property string $refund
23
+ * @property string $status
24
+ * @property string $type
25
+ *
26
+ * @package Stripe
27
+ */
28
+ class CreditNote extends ApiResource
29
+ {
30
+ const OBJECT_NAME = "credit_note";
31
+
32
+ use ApiOperations\All;
33
+ use ApiOperations\Create;
34
+ use ApiOperations\Retrieve;
35
+ use ApiOperations\Update;
36
+
37
+ /**
38
+ * Possible string representations of the credit note reason.
39
+ * @link https://stripe.com/docs/api/credit_notes/object#credit_note_object-reason
40
+ */
41
+ const REASON_DUPLICATE = 'duplicate';
42
+ const REASON_FRAUDULENT = 'fraudulent';
43
+ const REASON_ORDER_CHANGE = 'order_change';
44
+ const REASON_PRODUCT_UNSATISFACTORY = 'product_unsatisfactory';
45
+
46
+ /**
47
+ * Possible string representations of the credit note status.
48
+ * @link https://stripe.com/docs/api/credit_notes/object#credit_note_object-status
49
+ */
50
+ const STATUS_ISSUED = 'issued';
51
+ const STATUS_VOID = 'void';
52
+
53
+ /**
54
+ * Possible string representations of the credit note type.
55
+ * @link https://stripe.com/docs/api/credit_notes/object#credit_note_object-status
56
+ */
57
+ const TYPE_POST_PAYMENT = 'post_payment';
58
+ const TYPE_PRE_PAYMENT = 'pre_payment';
59
+
60
+ /**
61
+ * @param array|null $params
62
+ * @param array|string|null $opts
63
+ *
64
+ * @return CreditNote The voided credit note.
65
+ */
66
+ public function voidCreditNote($params = null, $opts = null)
67
+ {
68
+ $url = $this->instanceUrl() . '/void';
69
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
70
+ $this->refreshFrom($response, $opts);
71
+ return $this;
72
+ }
73
+ }
lib/stripe-gateway/lib/Customer.php CHANGED
@@ -7,184 +7,313 @@ namespace Stripe;
7
  *
8
  * @property string $id
9
  * @property string $object
10
- * @property int $account_balance
11
- * @property string $business_vat_id
12
  * @property string $created
13
  * @property string $currency
14
  * @property string $default_source
15
  * @property bool $delinquent
16
  * @property string $description
17
- * @property mixed $discount
18
  * @property string $email
 
 
19
  * @property bool $livemode
20
- * @property array $metadata
 
 
 
21
  * @property mixed $shipping
22
  * @property Collection $sources
23
  * @property Collection $subscriptions
 
 
24
  *
25
  * @package Stripe
26
  */
27
  class Customer extends ApiResource
28
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  /**
30
- * @param string $id The ID of the customer to retrieve.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  * @param array|string|null $opts
32
  *
33
- * @return Customer
34
  */
35
- public static function retrieve($id, $opts = null)
36
  {
37
- return self::_retrieve($id, $opts);
38
  }
39
 
40
  /**
 
 
41
  * @param array|null $params
42
  * @param array|string|null $opts
43
  *
44
- * @return Collection of Customers
45
  */
46
- public static function all($params = null, $opts = null)
47
  {
48
- return self::_all($params, $opts);
49
  }
50
 
51
  /**
 
 
52
  * @param array|null $params
53
  * @param array|string|null $opts
54
  *
55
- * @return Customer The created customer.
56
  */
57
- public static function create($params = null, $opts = null)
58
  {
59
- return self::_create($params, $opts);
60
  }
61
 
62
  /**
63
- * @param string $id The ID of the customer to update.
 
64
  * @param array|null $params
65
- * @param array|string|null $options
66
  *
67
- * @return Customer The updated customer.
68
  */
69
- public static function update($id, $params = null, $options = null)
70
  {
71
- return self::_update($id, $params, $options);
72
  }
73
 
74
  /**
 
 
75
  * @param array|string|null $opts
76
  *
77
- * @return Customer The saved customer.
78
  */
79
- public function save($opts = null)
80
  {
81
- return $this->_save($opts);
82
  }
83
 
84
  /**
 
85
  * @param array|null $params
86
  * @param array|string|null $opts
87
  *
88
- * @return Customer The deleted customer.
89
  */
90
- public function delete($params = null, $opts = null)
91
  {
92
- return $this->_delete($params, $opts);
93
  }
94
 
95
  /**
 
 
96
  * @param array|null $params
 
97
  *
98
- * @return InvoiceItem The resulting invoice item.
99
  */
100
- public function addInvoiceItem($params = null)
101
  {
102
- if (!$params) {
103
- $params = array();
104
- }
105
- $params['customer'] = $this->id;
106
- $ii = InvoiceItem::create($params, $this->_opts);
107
- return $ii;
108
  }
109
 
110
  /**
 
 
111
  * @param array|null $params
 
112
  *
113
- * @return array An array of the customer's Invoices.
114
  */
115
- public function invoices($params = null)
116
  {
117
- if (!$params) {
118
- $params = array();
119
- }
120
- $params['customer'] = $this->id;
121
- $invoices = Invoice::all($params, $this->_opts);
122
- return $invoices;
123
  }
124
 
125
  /**
 
126
  * @param array|null $params
 
127
  *
128
- * @return array An array of the customer's InvoiceItems.
129
  */
130
- public function invoiceItems($params = null)
131
  {
132
- if (!$params) {
133
- $params = array();
134
- }
135
- $params['customer'] = $this->id;
136
- $iis = InvoiceItem::all($params, $this->_opts);
137
- return $iis;
138
  }
139
 
140
  /**
 
141
  * @param array|null $params
 
142
  *
143
- * @return array An array of the customer's Charges.
144
  */
145
- public function charges($params = null)
146
  {
147
- if (!$params) {
148
- $params = array();
149
- }
150
- $params['customer'] = $this->id;
151
- $charges = Charge::all($params, $this->_opts);
152
- return $charges;
153
  }
154
 
155
  /**
 
 
156
  * @param array|null $params
 
157
  *
158
- * @return Subscription The updated subscription.
159
  */
160
- public function updateSubscription($params = null)
161
  {
162
- $url = $this->instanceUrl() . '/subscription';
163
- list($response, $opts) = $this->_request('post', $url, $params);
164
- $this->refreshFrom(array('subscription' => $response), $opts, true);
165
- return $this->subscription;
166
  }
167
 
168
  /**
 
 
169
  * @param array|null $params
 
170
  *
171
- * @return Subscription The cancelled subscription.
 
172
  */
173
- public function cancelSubscription($params = null)
174
  {
175
- $url = $this->instanceUrl() . '/subscription';
176
- list($response, $opts) = $this->_request('delete', $url, $params);
177
- $this->refreshFrom(array('subscription' => $response), $opts, true);
178
- return $this->subscription;
179
  }
180
 
181
  /**
182
- * @return Customer The updated customer.
 
 
 
 
183
  */
184
- public function deleteDiscount()
185
  {
186
- $url = $this->instanceUrl() . '/discount';
187
- list($response, $opts) = $this->_request('delete', $url);
188
- $this->refreshFrom(array('discount' => null), $opts, true);
189
  }
190
  }
7
  *
8
  * @property string $id
9
  * @property string $object
10
+ * @property mixed $address
11
+ * @property int $balance
12
  * @property string $created
13
  * @property string $currency
14
  * @property string $default_source
15
  * @property bool $delinquent
16
  * @property string $description
17
+ * @property Discount $discount
18
  * @property string $email
19
+ * @property string $invoice_prefix
20
+ * @property mixed $invoice_settings
21
  * @property bool $livemode
22
+ * @property StripeObject $metadata
23
+ * @property string $name
24
+ * @property string $phone
25
+ * @property string[] preferred_locales
26
  * @property mixed $shipping
27
  * @property Collection $sources
28
  * @property Collection $subscriptions
29
+ * @property string $tax_exempt
30
+ * @property Collection $tax_ids
31
  *
32
  * @package Stripe
33
  */
34
  class Customer extends ApiResource
35
  {
36
+ const OBJECT_NAME = "customer";
37
+
38
+ use ApiOperations\All;
39
+ use ApiOperations\Create;
40
+ use ApiOperations\Delete;
41
+ use ApiOperations\NestedResource;
42
+ use ApiOperations\Retrieve;
43
+ use ApiOperations\Update;
44
+
45
+ /**
46
+ * Possible string representations of the customer's type of tax exemption.
47
+ * @link https://stripe.com/docs/api/customers/object#customer_object-tax_exempt
48
+ */
49
+ const TAX_EXEMPT_NONE = 'none';
50
+ const TAX_EXEMPT_EXEMPT = 'exempt';
51
+ const TAX_EXEMPT_REVERSE = 'reverse';
52
+
53
+ public static function getSavedNestedResources()
54
+ {
55
+ static $savedNestedResources = null;
56
+ if ($savedNestedResources === null) {
57
+ $savedNestedResources = new Util\Set([
58
+ 'source',
59
+ ]);
60
+ }
61
+ return $savedNestedResources;
62
+ }
63
+
64
+ const PATH_BALANCE_TRANSACTIONS = '/balance_transactions';
65
+ const PATH_SOURCES = '/sources';
66
+ const PATH_TAX_IDS = '/tax_ids';
67
+
68
+ /**
69
+ * @param array|null $params
70
+ *
71
+ * @return InvoiceItem The resulting invoice item.
72
+ */
73
+ public function addInvoiceItem($params = null)
74
+ {
75
+ $params = $params ?: [];
76
+ $params['customer'] = $this->id;
77
+ $ii = InvoiceItem::create($params, $this->_opts);
78
+ return $ii;
79
+ }
80
+
81
+ /**
82
+ * @param array|null $params
83
+ *
84
+ * @return array An array of the customer's Invoices.
85
+ */
86
+ public function invoices($params = null)
87
+ {
88
+ $params = $params ?: [];
89
+ $params['customer'] = $this->id;
90
+ $invoices = Invoice::all($params, $this->_opts);
91
+ return $invoices;
92
+ }
93
+
94
+ /**
95
+ * @param array|null $params
96
+ *
97
+ * @return array An array of the customer's InvoiceItems.
98
+ */
99
+ public function invoiceItems($params = null)
100
+ {
101
+ $params = $params ?: [];
102
+ $params['customer'] = $this->id;
103
+ $iis = InvoiceItem::all($params, $this->_opts);
104
+ return $iis;
105
+ }
106
+
107
+ /**
108
+ * @param array|null $params
109
+ *
110
+ * @return array An array of the customer's Charges.
111
+ */
112
+ public function charges($params = null)
113
+ {
114
+ $params = $params ?: [];
115
+ $params['customer'] = $this->id;
116
+ $charges = Charge::all($params, $this->_opts);
117
+ return $charges;
118
+ }
119
+
120
+ /**
121
+ * @param array|null $params
122
+ *
123
+ * @return Subscription The updated subscription.
124
+ */
125
+ public function updateSubscription($params = null)
126
+ {
127
+ $url = $this->instanceUrl() . '/subscription';
128
+ list($response, $opts) = $this->_request('post', $url, $params);
129
+ $this->refreshFrom(['subscription' => $response], $opts, true);
130
+ return $this->subscription;
131
+ }
132
+
133
  /**
134
+ * @param array|null $params
135
+ *
136
+ * @return Subscription The cancelled subscription.
137
+ */
138
+ public function cancelSubscription($params = null)
139
+ {
140
+ $url = $this->instanceUrl() . '/subscription';
141
+ list($response, $opts) = $this->_request('delete', $url, $params);
142
+ $this->refreshFrom(['subscription' => $response], $opts, true);
143
+ return $this->subscription;
144
+ }
145
+
146
+ /**
147
+ * @return Customer The updated customer.
148
+ */
149
+ public function deleteDiscount()
150
+ {
151
+ $url = $this->instanceUrl() . '/discount';
152
+ list($response, $opts) = $this->_request('delete', $url);
153
+ $this->refreshFrom(['discount' => null], $opts, true);
154
+ }
155
+
156
+ /**
157
+ * @param string|null $id The ID of the customer on which to create the source.
158
+ * @param array|null $params
159
  * @param array|string|null $opts
160
  *
161
+ * @return ApiResource
162
  */
163
+ public static function createSource($id, $params = null, $opts = null)
164
  {
165
+ return self::_createNestedResource($id, static::PATH_SOURCES, $params, $opts);
166
  }
167
 
168
  /**
169
+ * @param string|null $id The ID of the customer to which the source belongs.
170
+ * @param string|null $sourceId The ID of the source to retrieve.
171
  * @param array|null $params
172
  * @param array|string|null $opts
173
  *
174
+ * @return ApiResource
175
  */
176
+ public static function retrieveSource($id, $sourceId, $params = null, $opts = null)
177
  {
178
+ return self::_retrieveNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
179
  }
180
 
181
  /**
182
+ * @param string|null $id The ID of the customer to which the source belongs.
183
+ * @param string|null $sourceId The ID of the source to update.
184
  * @param array|null $params
185
  * @param array|string|null $opts
186
  *
187
+ * @return ApiResource
188
  */
189
+ public static function updateSource($id, $sourceId, $params = null, $opts = null)
190
  {
191
+ return self::_updateNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
192
  }
193
 
194
  /**
195
+ * @param string|null $id The ID of the customer to which the source belongs.
196
+ * @param string|null $sourceId The ID of the source to delete.
197
  * @param array|null $params
198
+ * @param array|string|null $opts
199
  *
200
+ * @return ApiResource
201
  */
202
+ public static function deleteSource($id, $sourceId, $params = null, $opts = null)
203
  {
204
+ return self::_deleteNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
205
  }
206
 
207
  /**
208
+ * @param string|null $id The ID of the customer on which to retrieve the sources.
209
+ * @param array|null $params
210
  * @param array|string|null $opts
211
  *
212
+ * @return Collection The list of sources.
213
  */
214
+ public static function allSources($id, $params = null, $opts = null)
215
  {
216
+ return self::_allNestedResources($id, static::PATH_SOURCES, $params, $opts);
217
  }
218
 
219
  /**
220
+ * @param string|null $id The ID of the customer on which to create the tax id.
221
  * @param array|null $params
222
  * @param array|string|null $opts
223
  *
224
+ * @return ApiResource
225
  */
226
+ public static function createTaxId($id, $params = null, $opts = null)
227
  {
228
+ return self::_createNestedResource($id, static::PATH_TAX_IDS, $params, $opts);
229
  }
230
 
231
  /**
232
+ * @param string|null $id The ID of the customer to which the tax id belongs.
233
+ * @param string|null $taxIdId The ID of the tax id to retrieve.
234
  * @param array|null $params
235
+ * @param array|string|null $opts
236
  *
237
+ * @return ApiResource
238
  */
239
+ public static function retrieveTaxId($id, $taxIdId, $params = null, $opts = null)
240
  {
241
+ return self::_retrieveNestedResource($id, static::PATH_TAX_IDS, $taxIdId, $params, $opts);
 
 
 
 
 
242
  }
243
 
244
  /**
245
+ * @param string|null $id The ID of the customer to which the tax id belongs.
246
+ * @param string|null $taxIdId The ID of the tax id to delete.
247
  * @param array|null $params
248
+ * @param array|string|null $opts
249
  *
250
+ * @return ApiResource
251
  */
252
+ public static function deleteTaxId($id, $taxIdId, $params = null, $opts = null)
253
  {
254
+ return self::_deleteNestedResource($id, static::PATH_TAX_IDS, $taxIdId, $params, $opts);
 
 
 
 
 
255
  }
256
 
257
  /**
258
+ * @param string|null $id The ID of the customer on which to retrieve the tax ids.
259
  * @param array|null $params
260
+ * @param array|string|null $opts
261
  *
262
+ * @return Collection The list of tax ids.
263
  */
264
+ public static function allTaxIds($id, $params = null, $opts = null)
265
  {
266
+ return self::_allNestedResources($id, static::PATH_TAX_IDS, $params, $opts);
 
 
 
 
 
267
  }
268
 
269
  /**
270
+ * @param string|null $id The ID of the customer on which to create the balance transaction.
271
  * @param array|null $params
272
+ * @param array|string|null $opts
273
  *
274
+ * @return ApiResource
275
  */
276
+ public static function createBalanceTransaction($id, $params = null, $opts = null)
277
  {
278
+ return self::_createNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $params, $opts);
 
 
 
 
 
279
  }
280
 
281
  /**
282
+ * @param string|null $id The ID of the customer to which the balance transaction belongs.
283
+ * @param string|null $balanceTransactionId The ID of the balance transaction to retrieve.
284
  * @param array|null $params
285
+ * @param array|string|null $opts
286
  *
287
+ * @return ApiResource
288
  */
289
+ public static function retrieveBalanceTransaction($id, $balanceTransactionId, $params = null, $opts = null)
290
  {
291
+ return self::_retrieveNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $balanceTransactionId, $params, $opts);
 
 
 
292
  }
293
 
294
  /**
295
+ * @param string|null $id The ID of the customer on which to update the balance transaction.
296
+ * @param string|null $balanceTransactionId The ID of the balance transaction to update.
297
  * @param array|null $params
298
+ * @param array|string|null $opts
299
  *
300
+ *
301
+ * @return ApiResource
302
  */
303
+ public static function updateBalanceTransaction($id, $balanceTransactionId, $params = null, $opts = null)
304
  {
305
+ return self::_updateNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $balanceTransactionId, $params, $opts);
 
 
 
306
  }
307
 
308
  /**
309
+ * @param string|null $id The ID of the customer on which to retrieve the customer balance transactions.
310
+ * @param array|null $params
311
+ * @param array|string|null $opts
312
+ *
313
+ * @return Collection The list of customer balance transactions.
314
  */
315
+ public static function allBalanceTransactions($id, $params = null, $opts = null)
316
  {
317
+ return self::_allNestedResources($id, static::PATH_BALANCE_TRANSACTIONS, $params, $opts);
 
 
318
  }
319
  }
lib/stripe-gateway/lib/CustomerBalanceTransaction.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class CustomerBalanceTransaction
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property int $amount
13
+ * @property string $credit_note
14
+ * @property int $created
15
+ * @property string $currency
16
+ * @property string $customer
17
+ * @property string $description
18
+ * @property int $ending_balance
19
+ * @property string $invoice
20
+ * @property bool $livemode
21
+ * @property StripeObject $metadata
22
+ * @property string $type
23
+ */
24
+ class CustomerBalanceTransaction extends ApiResource
25
+ {
26
+ const OBJECT_NAME = "customer_balance_transaction";
27
+
28
+ /**
29
+ * Possible string representations of a balance transaction's type.
30
+ * @link https://stripe.com/docs/api/customers/customer_balance_transaction_object#customer_balance_transaction_object-type
31
+ */
32
+ const TYPE_ADJUSTEMENT = 'adjustment';
33
+ const TYPE_APPLIED_TO_INVOICE = 'applied_to_invoice';
34
+ const TYPE_CREDIT_NOTE = 'credit_note';
35
+ const TYPE_INITIAL = 'initial';
36
+ const TYPE_INVOICE_TOO_LARGE = 'invoice_too_large';
37
+ const TYPE_INVOICE_TOO_SMALL = 'invoice_too_small';
38
+ const TYPE_UNSPENT_RECEIVER_CREDIT = 'unspent_receiver_credit';
39
+
40
+ /**
41
+ * @return string The API URL for this balance transaction.
42
+ */
43
+ public function instanceUrl()
44
+ {
45
+ $id = $this['id'];
46
+ $customer = $this['customer'];
47
+ if (!$id) {
48
+ throw new Error\InvalidRequest(
49
+ "Could not determine which URL to request: class instance has invalid ID: $id",
50
+ null
51
+ );
52
+ }
53
+ $id = Util\Util::utf8($id);
54
+ $customer = Util\Util::utf8($customer);
55
+
56
+ $base = Customer::classUrl();
57
+ $customerExtn = urlencode($customer);
58
+ $extn = urlencode($id);
59
+ return "$base/$customerExtn/balance_transactions/$extn";
60
+ }
61
+
62
+ /**
63
+ * @param array|string $_id
64
+ * @param array|string|null $_opts
65
+ *
66
+ * @throws \Stripe\Error\InvalidRequest
67
+ */
68
+ public static function retrieve($_id, $_opts = null)
69
+ {
70
+ $msg = "Customer Balance Transactions cannot be accessed without a customer ID. " .
71
+ "Retrieve a balance transaction using Customer::retrieveBalanceTransaction('cus_123', 'cbtxn_123') instead.";
72
+ throw new Error\InvalidRequest($msg, null);
73
+ }
74
+
75
+ /**
76
+ * @param string $_id
77
+ * @param array|null $_params
78
+ * @param array|string|null $_options
79
+ *
80
+ * @throws \Stripe\Error\InvalidRequest
81
+ */
82
+ public static function update($_id, $_params = null, $_options = null)
83
+ {
84
+ $msg = "Customer Balance Transactions cannot be accessed without a customer ID. " .
85
+ "Update a balance transaction using Customer::updateBalanceTransaction('cus_123', 'cbtxn_123', \$params) instead.";
86
+ throw new Error\InvalidRequest($msg, null);
87
+ }
88
+ }
lib/stripe-gateway/lib/Discount.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Discount
7
+ *
8
+ * @property string $object
9
+ * @property Coupon $coupon
10
+ * @property string $customer
11
+ * @property int $end
12
+ * @property int $start
13
+ * @property string $subscription
14
+ *
15
+ * @package Stripe
16
+ */
17
+ class Discount extends StripeObject
18
+ {
19
+ const OBJECT_NAME = "discount";
20
+ }
lib/stripe-gateway/lib/Dispute.php CHANGED
@@ -8,7 +8,7 @@ namespace Stripe;
8
  * @property string $id
9
  * @property string $object
10
  * @property int $amount
11
- * @property mixed $balance_transactions
12
  * @property string $charge
13
  * @property int $created
14
  * @property string $currency
@@ -16,7 +16,7 @@ namespace Stripe;
16
  * @property mixed $evidence_details
17
  * @property bool $is_charge_refundable
18
  * @property bool $livemode
19
- * @property mixed $metadata
20
  * @property string $reason
21
  * @property string $status
22
  *
@@ -24,49 +24,43 @@ namespace Stripe;
24
  */
25
  class Dispute extends ApiResource
26
  {
27
- /**
28
- * @param string $id The ID of the dispute to retrieve.
29
- * @param array|string|null $options
30
- *
31
- * @return Dispute
32
- */
33
- public static function retrieve($id, $options = null)
34
- {
35
- return self::_retrieve($id, $options);
36
- }
37
 
38
- /**
39
- * @param array|null $params
40
- * @param array|string|null $options
41
- *
42
- * @return array An array of Disputes.
43
- */
44
- public static function all($params = null, $options = null)
45
- {
46
- return self::_all($params, $options);
47
- }
48
 
49
  /**
50
- * @param string $id The ID of the dispute to update.
51
- * @param array|null $params
52
- * @param array|string|null $options
53
- *
54
- * @return Dispute The updated dispute.
55
  */
56
- public static function update($id, $params = null, $options = null)
57
- {
58
- return self::_update($id, $params, $options);
59
- }
 
 
 
 
 
 
 
 
 
 
60
 
61
  /**
62
- * @param array|string|null $options
63
- *
64
- * @return Dispute The saved charge.
65
  */
66
- public function save($options = null)
67
- {
68
- return $this->_save($options);
69
- }
 
 
 
 
70
 
71
  /**
72
  * @param array|string|null $options
8
  * @property string $id
9
  * @property string $object
10
  * @property int $amount
11
+ * @property BalanceTransaction[] $balance_transactions
12
  * @property string $charge
13
  * @property int $created
14
  * @property string $currency
16
  * @property mixed $evidence_details
17
  * @property bool $is_charge_refundable
18
  * @property bool $livemode
19
+ * @property StripeObject $metadata
20
  * @property string $reason
21
  * @property string $status
22
  *
24
  */
25
  class Dispute extends ApiResource
26
  {
27
+ const OBJECT_NAME = "dispute";
 
 
 
 
 
 
 
 
 
28
 
29
+ use ApiOperations\All;
30
+ use ApiOperations\Retrieve;
31
+ use ApiOperations\Update;
 
 
 
 
 
 
 
32
 
33
  /**
34
+ * Possible string representations of dispute reasons.
35
+ * @link https://stripe.com/docs/api#dispute_object
 
 
 
36
  */
37
+ const REASON_BANK_CANNOT_PROCESS = 'bank_cannot_process';
38
+ const REASON_CHECK_RETURNED = 'check_returned';
39
+ const REASON_CREDIT_NOT_PROCESSED = 'credit_not_processed';
40
+ const REASON_CUSTOMER_INITIATED = 'customer_initiated';
41
+ const REASON_DEBIT_NOT_AUTHORIZED = 'debit_not_authorized';
42
+ const REASON_DUPLICATE = 'duplicate';
43
+ const REASON_FRAUDULENT = 'fraudulent';
44
+ const REASON_GENERAL = 'general';
45
+ const REASON_INCORRECT_ACCOUNT_DETAILS = 'incorrect_account_details';
46
+ const REASON_INSUFFICIENT_FUNDS = 'insufficient_funds';
47
+ const REASON_PRODUCT_NOT_RECEIVED = 'product_not_received';
48
+ const REASON_PRODUCT_UNACCEPTABLE = 'product_unacceptable';
49
+ const REASON_SUBSCRIPTION_CANCELED = 'subscription_canceled';
50
+ const REASON_UNRECOGNIZED = 'unrecognized';
51
 
52
  /**
53
+ * Possible string representations of dispute statuses.
54
+ * @link https://stripe.com/docs/api#dispute_object
 
55
  */
56
+ const STATUS_CHARGE_REFUNDED = 'charge_refunded';
57
+ const STATUS_LOST = 'lost';
58
+ const STATUS_NEEDS_RESPONSE = 'needs_response';
59
+ const STATUS_UNDER_REVIEW = 'under_review';
60
+ const STATUS_WARNING_CLOSED = 'warning_closed';
61
+ const STATUS_WARNING_NEEDS_RESPONSE = 'warning_needs_response';
62
+ const STATUS_WARNING_UNDER_REVIEW = 'warning_under_review';
63
+ const STATUS_WON = 'won';
64
 
65
  /**
66
  * @param array|string|null $options
lib/stripe-gateway/lib/EphemeralKey.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class EphemeralKey
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $created
11
+ * @property int $expires
12
+ * @property bool $livemode
13
+ * @property string $secret
14
+ * @property array $associated_objects
15
+ *
16
+ * @package Stripe
17
+ */
18
+ class EphemeralKey extends ApiResource
19
+ {
20
+ const OBJECT_NAME = "ephemeral_key";
21
+
22
+ use ApiOperations\Create {
23
+ create as protected _create;
24
+ }
25
+ use ApiOperations\Delete;
26
+
27
+ /**
28
+ * @param array|null $params
29
+ * @param array|string|null $opts
30
+ *
31
+ * @return EphemeralKey The created key.
32
+ */
33
+ public static function create($params = null, $opts = null)
34
+ {
35
+ if (!$opts['stripe_version']) {
36
+ throw new \InvalidArgumentException('stripe_version must be specified to create an ephemeral key');
37
+ }
38
+ return self::_create($params, $opts);
39
+ }
40
+ }
lib/stripe-gateway/lib/Error/Base.php CHANGED
@@ -20,11 +20,20 @@ abstract class Base extends Exception
20
  $this->httpHeaders = $httpHeaders;
21
  $this->requestId = null;
22
 
 
 
 
 
23
  if ($httpHeaders && isset($httpHeaders['Request-Id'])) {
24
  $this->requestId = $httpHeaders['Request-Id'];
25
  }
26
  }
27
 
 
 
 
 
 
28
  public function getHttpStatus()
29
  {
30
  return $this->httpStatus;
20
  $this->httpHeaders = $httpHeaders;
21
  $this->requestId = null;
22
 
23
+ // TODO: make this a proper constructor argument in the next major
24
+ // release.
25
+ $this->stripeCode = isset($jsonBody["error"]["code"]) ? $jsonBody["error"]["code"] : null;
26
+
27
  if ($httpHeaders && isset($httpHeaders['Request-Id'])) {
28
  $this->requestId = $httpHeaders['Request-Id'];
29
  }
30
  }
31
 
32
+ public function getStripeCode()
33
+ {
34
+ return $this->stripeCode;
35
+ }
36
+
37
  public function getHttpStatus()
38
  {
39
  return $this->httpStatus;
lib/stripe-gateway/lib/Error/Card.php CHANGED
@@ -15,12 +15,16 @@ class Card extends Base
15
  ) {
16
  parent::__construct($message, $httpStatus, $httpBody, $jsonBody, $httpHeaders);
17
  $this->stripeParam = $stripeParam;
 
 
 
18
  $this->stripeCode = $stripeCode;
19
 
20
  // This one is not like the others because it was added later and we're
21
  // trying to do our best not to change the public interface of this class'
22
- // constructor. We should consider changing its implementation on the
23
- // next major version bump of this library.
 
24
  $this->declineCode = isset($jsonBody["error"]["decline_code"]) ? $jsonBody["error"]["decline_code"] : null;
25
  }
26
 
@@ -29,11 +33,6 @@ class Card extends Base
29
  return $this->declineCode;
30
  }
31
 
32
- public function getStripeCode()
33
- {
34
- return $this->stripeCode;
35
- }
36
-
37
  public function getStripeParam()
38
  {
39
  return $this->stripeParam;
15
  ) {
16
  parent::__construct($message, $httpStatus, $httpBody, $jsonBody, $httpHeaders);
17
  $this->stripeParam = $stripeParam;
18
+
19
+ // TODO: once Error\Base accepts the error code as an argument, pass it
20
+ // in the call to parent::__construct() and stop setting it here.
21
  $this->stripeCode = $stripeCode;
22
 
23
  // This one is not like the others because it was added later and we're
24
  // trying to do our best not to change the public interface of this class'
25
+ // constructor.
26
+ // TODO: make this a proper constructor argument in the next major
27
+ // release.
28
  $this->declineCode = isset($jsonBody["error"]["decline_code"]) ? $jsonBody["error"]["decline_code"] : null;
29
  }
30
 
33
  return $this->declineCode;
34
  }
35
 
 
 
 
 
 
36
  public function getStripeParam()
37
  {
38
  return $this->stripeParam;
lib/stripe-gateway/lib/Error/Idempotency.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class Idempotency extends Base
6
+ {
7
+ }
lib/stripe-gateway/lib/Error/OAuth/InvalidClient.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error\OAuth;
4
+
5
+ /**
6
+ * InvalidClient is raised when authentication fails.
7
+ */
8
+ class InvalidClient extends OAuthBase
9
+ {
10
+ }
lib/stripe-gateway/lib/Error/OAuth/InvalidGrant.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error\OAuth;
4
+
5
+ /**
6
+ * InvalidGrant is raised when a specified code doesn't exist, is
7
+ * expired, has been used, or doesn't belong to you; a refresh token doesn't
8
+ * exist, or doesn't belong to you; or if an API key's mode (live or test)
9
+ * doesn't match the mode of a code or refresh token.
10
+ */
11
+ class InvalidGrant extends OAuthBase
12
+ {
13
+ }
lib/stripe-gateway/lib/Error/OAuth/InvalidRequest.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error\OAuth;
4
+
5
+ /**
6
+ * InvalidRequest is raised when a code, refresh token, or grant type
7
+ * parameter is not provided, but was required.
8
+ */
9
+ class InvalidRequest extends OAuthBase
10
+ {
11
+ }
lib/stripe-gateway/lib/Error/OAuth/InvalidScope.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error\OAuth;
4
+
5
+ /**
6
+ * InvalidScope is raised when an invalid scope parameter is provided.
7
+ */
8
+ class InvalidScope extends OAuthBase
9
+ {
10
+ }
lib/stripe-gateway/lib/Error/OAuth/OAuthBase.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error\OAuth;
4
+
5
+ class OAuthBase extends \Stripe\Error\Base
6
+ {
7
+ public function __construct(
8
+ $code,
9
+ $description,
10
+ $httpStatus = null,
11
+ $httpBody = null,
12
+ $jsonBody = null,
13
+ $httpHeaders = null
14
+ ) {
15
+ parent::__construct($description, $httpStatus, $httpBody, $jsonBody, $httpHeaders);
16
+ $this->errorCode = $code;
17
+ }
18
+
19
+ public function getErrorCode()
20
+ {
21
+ return $this->errorCode;
22
+ }
23
+ }
lib/stripe-gateway/lib/Error/OAuth/UnsupportedGrantType.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error\OAuth;
4
+
5
+ /**
6
+ * UnsupportedGrantType is raised when an unuspported grant type
7
+ * parameter is specified.
8
+ */
9
+ class UnsupportedGrantType extends OAuthBase
10
+ {
11
+ }
lib/stripe-gateway/lib/Error/OAuth/UnsupportedResponseType.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error\OAuth;
4
+
5
+ /**
6
+ * UnsupportedResponseType is raised when an unsupported response type
7
+ * parameter is specified.
8
+ */
9
+ class UnsupportedResponseType extends OAuthBase
10
+ {
11
+ }
lib/stripe-gateway/lib/Error/Permission.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class Permission extends Base
6
+ {
7
+ }
lib/stripe-gateway/lib/Error/SignatureVerification.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class SignatureVerification extends Base
6
+ {
7
+ public function __construct(
8
+ $message,
9
+ $sigHeader,
10
+ $httpBody = null
11
+ ) {
12
+ parent::__construct($message, null, $httpBody, null, null);
13
+ $this->sigHeader = $sigHeader;
14
+ }
15
+
16
+ public function getSigHeader()
17
+ {
18
+ return $this->sigHeader;
19
+ }
20
+ }
lib/stripe-gateway/lib/Event.php CHANGED
@@ -7,37 +7,161 @@ namespace Stripe;
7
  *
8
  * @property string $id
9
  * @property string $object
 
10
  * @property string $api_version
11
- * @property int $created
12
- * @property mixed $data
13
- * @property bool $livemode
14
- * @property int $pending_webhooks
15
- * @property string $request
16
  * @property string $type
17
  *
18
  * @package Stripe
19
  */
20
  class Event extends ApiResource
21
  {
22
- /**
23
- * @param string $id The ID of the event to retrieve.
24
- * @param array|string|null $opts
25
- *
26
- * @return Event
27
- */
28
- public static function retrieve($id, $opts = null)
29
- {
30
- return self::_retrieve($id, $opts);
31
- }
32
 
33
  /**
34
- * @param array|null $params
35
- * @param array|string|null $opts
36
- *
37
- * @return Collection of Events
38
  */
39
- public static function all($params = null, $opts = null)
40
- {
41
- return self::_all($params, $opts);
42
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
7
  *
8
  * @property string $id
9
  * @property string $object
10
+ * @property string $account
11
  * @property string $api_version
12
+ * @property int $created
13
+ * @property mixed $data
14
+ * @property bool $livemode
15
+ * @property int $pending_webhooks
16
+ * @property mixed $request
17
  * @property string $type
18
  *
19
  * @package Stripe
20
  */
21
  class Event extends ApiResource
22
  {
23
+ const OBJECT_NAME = "event";
 
 
 
 
 
 
 
 
 
24
 
25
  /**
26
+ * Possible string representations of event types.
27
+ * @link https://stripe.com/docs/api#event_types
 
 
28
  */
29
+ const ACCOUNT_UPDATED = 'account.updated';
30
+ const ACCOUNT_APPLICATION_AUTHORIZED = 'account.application.authorized';
31
+ const ACCOUNT_APPLICATION_DEAUTHORIZED = 'account.application.deauthorized';
32
+ const ACCOUNT_EXTERNAL_ACCOUNT_CREATED = 'account.external_account.created';
33
+ const ACCOUNT_EXTERNAL_ACCOUNT_DELETED = 'account.external_account.deleted';
34
+ const ACCOUNT_EXTERNAL_ACCOUNT_UPDATED = 'account.external_account.updated';
35
+ const APPLICATION_FEE_CREATED = 'application_fee.created';
36
+ const APPLICATION_FEE_REFUNDED = 'application_fee.refunded';
37
+ const APPLICATION_FEE_REFUND_UPDATED = 'application_fee.refund.updated';
38
+ const BALANCE_AVAILABLE = 'balance.available';
39
+ const CHARGE_CAPTURED = 'charge.captured';
40
+ const CHARGE_EXPIRED = 'charge.expired';
41
+ const CHARGE_FAILED = 'charge.failed';
42
+ const CHARGE_PENDING = 'charge.pending';
43
+ const CHARGE_REFUNDED = 'charge.refunded';
44
+ const CHARGE_SUCCEEDED = 'charge.succeeded';
45
+ const CHARGE_UPDATED = 'charge.updated';
46
+ const CHARGE_DISPUTE_CLOSED = 'charge.dispute.closed';
47
+ const CHARGE_DISPUTE_CREATED = 'charge.dispute.created';
48
+ const CHARGE_DISPUTE_FUNDS_REINSTATED = 'charge.dispute.funds_reinstated';
49
+ const CHARGE_DISPUTE_FUNDS_WITHDRAWN = 'charge.dispute.funds_withdrawn';
50
+ const CHARGE_DISPUTE_UPDATED = 'charge.dispute.updated';
51
+ const CHARGE_REFUND_UPDATED = 'charge.refund.updated';
52
+ const CHECKOUT_SESSION_COMPLETED = 'checkout.session.completed';
53
+ const COUPON_CREATED = 'coupon.created';
54
+ const COUPON_DELETED = 'coupon.deleted';
55
+ const COUPON_UPDATED = 'coupon.updated';
56
+ const CREDIT_NOTE_CREATED = 'credit_note.created';
57
+ const CREDIT_NOTE_UPDATED = 'credit_note.updated';
58
+ const CREDIT_NOTE_VOIDED = 'credit_note.voided';
59
+ const CUSTOMER_CREATED = 'customer.created';
60
+ const CUSTOMER_DELETED = 'customer.deleted';
61
+ const CUSTOMER_UPDATED = 'customer.updated';
62
+ const CUSTOMER_DISCOUNT_CREATED = 'customer.discount.created';
63
+ const CUSTOMER_DISCOUNT_DELETED = 'customer.discount.deleted';
64
+ const CUSTOMER_DISCOUNT_UPDATED = 'customer.discount.updated';
65
+ const CUSTOMER_SOURCE_CREATED = 'customer.source.created';
66
+ const CUSTOMER_SOURCE_DELETED = 'customer.source.deleted';
67
+ const CUSTOMER_SOURCE_EXPIRING = 'customer.source.expiring';
68
+ const CUSTOMER_SOURCE_UPDATED = 'customer.source.updated';
69
+ const CUSTOMER_SUBSCRIPTION_CREATED = 'customer.subscription.created';
70
+ const CUSTOMER_SUBSCRIPTION_DELETED = 'customer.subscription.deleted';
71
+ const CUSTOMER_SUBSCRIPTION_TRIAL_WILL_END = 'customer.subscription.trial_will_end';
72
+ const CUSTOMER_SUBSCRIPTION_UPDATED = 'customer.subscription.updated';
73
+ const FILE_CREATED = 'file.created';
74
+ const INVOICE_CREATED = 'invoice.created';
75
+ const INVOICE_DELETED = 'invoice.deleted';
76
+ const INVOICE_FINALIZED = 'invoice.finalized';
77
+ const INVOICE_MARKED_UNCOLLECTIBLE = 'invoice.marked_uncollectible';
78
+ const INVOICE_PAYMENT_ACTION_REQUIRED = 'invoice.payment_action_required';
79
+ const INVOICE_PAYMENT_FAILED = 'invoice.payment_failed';
80
+ const INVOICE_PAYMENT_SUCCEEDED = 'invoice.payment_succeeded';
81
+ const INVOICE_SENT = 'invoice.sent';
82
+ const INVOICE_UPCOMING = 'invoice.upcoming';
83
+ const INVOICE_UPDATED = 'invoice.updated';
84
+ const INVOICE_VOIDED = 'invoice.voided';
85
+ const INVOICEITEM_CREATED = 'invoiceitem.created';
86
+ const INVOICEITEM_DELETED = 'invoiceitem.deleted';
87
+ const INVOICEITEM_UPDATED = 'invoiceitem.updated';
88
+ const ISSUER_FRAUD_RECORD_CREATED = 'issuer_fraud_record.created';
89
+ const ISSUING_AUTHORIZATION_CREATED = 'issuing_authorization.created';
90
+ const ISSUING_AUTHORIZATION_REQUEST = 'issuing_authorization.request';
91
+ const ISSUING_AUTHORIZATION_UPDATED = 'issuing_authorization.updated';
92
+ const ISSUING_CARD_CREATED = 'issuing_card.created';
93
+ const ISSUING_CARD_UPDATED = 'issuing_card.updated';
94
+ const ISSUING_CARDHOLDER_CREATED = 'issuing_cardholder.created';
95
+ const ISSUING_CARDHOLDER_UPDATED = 'issuing_cardholder.updated';
96
+ const ISSUING_DISPUTE_CREATED = 'issuing_dispute.created';
97
+ const ISSUING_DISPUTE_UPDATED = 'issuing_dispute.updated';
98
+ const ISSUING_TRANSACTION_CREATED = 'issuing_transaction.created';
99
+ const ISSUING_TRANSACTION_UPDATED = 'issuing_transaction.updated';
100
+ const ORDER_CREATED = 'order.created';
101
+ const ORDER_PAYMENT_FAILED = 'order.payment_failed';
102
+ const ORDER_PAYMENT_SUCCEEDED = 'order.payment_succeeded';
103
+ const ORDER_UPDATED = 'order.updated';
104
+ const ORDER_RETURN_CREATED = 'order_return.created';
105
+ const PAYMENT_INTENT_AMOUNT_CAPTURABLE_UPDATED = 'payment_intent.amount_capturable_updated';
106
+ const PAYMENT_INTENT_CREATED = 'payment_intent.created';
107
+ const PAYMENT_INTENT_PAYMENT_FAILED = 'payment_intent.payment_failed';
108
+ const PAYMENT_INTENT_SUCCEEDED = 'payment_intent.succeeded';
109
+ const PAYMENT_METHOD_ATTACHED = 'payment_method.attached';
110
+ const PAYMENT_METHOD_CARD_AUTOMATICALLY_UPDATED = 'payment_method.card_automatically_updated';
111
+ const PAYMENT_METHOD_DETACHED = 'payment_method.detached';
112
+ const PAYMENT_METHOD_UPDATED = 'payment_method.updated';
113
+ const PAYOUT_CANCELED = 'payout.canceled';
114
+ const PAYOUT_CREATED = 'payout.created';
115
+ const PAYOUT_FAILED = 'payout.failed';
116
+ const PAYOUT_PAID = 'payout.paid';
117
+ const PAYOUT_UPDATED = 'payout.updated';
118
+ const PERSON_CREATED = 'person.created';
119
+ const PERSON_DELETED = 'person.deleted';
120
+ const PERSON_UPDATED = 'person.updated';
121
+ const PING = 'ping';
122
+ const PLAN_CREATED = 'plan.created';
123
+ const PLAN_DELETED = 'plan.deleted';
124
+ const PLAN_UPDATED = 'plan.updated';
125
+ const PRODUCT_CREATED = 'product.created';
126
+ const PRODUCT_DELETED = 'product.deleted';
127
+ const PRODUCT_UPDATED = 'product.updated';
128
+ const RECIPIENT_CREATED = 'recipient.created';
129
+ const RECIPIENT_DELETED = 'recipient.deleted';
130
+ const RECIPIENT_UPDATED = 'recipient.updated';
131
+ const REPORTING_REPORT_RUN_FAILED = 'reporting.report_run.failed';
132
+ const REPORTING_REPORT_RUN_SUCCEEDED = 'reporting.report_run.succeeded';
133
+ const REPORTING_REPORT_TYPE_UPDATED = 'reporting.report_type.updated';
134
+ const REVIEW_CLOSED = 'review.closed';
135
+ const REVIEW_OPENED = 'review.opened';
136
+ const SIGMA_SCHEDULED_QUERY_RUN_CREATED = 'sigma.scheduled_query_run.created';
137
+ const SKU_CREATED = 'sku.created';
138
+ const SKU_DELETED = 'sku.deleted';
139
+ const SKU_UPDATED = 'sku.updated';
140
+ const SOURCE_CANCELED = 'source.canceled';
141
+ const SOURCE_CHARGEABLE = 'source.chargeable';
142
+ const SOURCE_FAILED = 'source.failed';
143
+ const SOURCE_MANDATE_NOTIFICATION = 'source.mandate_notification';
144
+ const SOURCE_REFUND_ATTRIBUTES_REQUIRED = 'source.refund_attributes_required';
145
+ const SOURCE_TRANSACTION_CREATED = 'source.transaction.created';
146
+ const SOURCE_TRANSACTION_UPDATED = 'source.transaction.updated';
147
+ const SUBSCRIPTION_SCHEDULE_ABORTED = 'subscription_schedule.aborted';
148
+ const SUBSCRIPTION_SCHEDULE_CANCELED = 'subscription_schedule.canceled';
149
+ const SUBSCRIPTION_SCHEDULE_COMPLETED = 'subscription_schedule.completed';
150
+ const SUBSCRIPTION_SCHEDULE_CREATED = 'subscription_schedule.created';
151
+ const SUBSCRIPTION_SCHEDULE_EXPIRING = 'subscription_schedule.expiring';
152
+ const SUBSCRIPTION_SCHEDULE_RELEASED = 'subscription_schedule.released';
153
+ const SUBSCRIPTION_SCHEDULE_UPDATED = 'subscription_schedule.updated';
154
+ const TAX_RATE_CREATED = 'tax_rate.created';
155
+ const TAX_RATE_UPDATED = 'tax_rate.updated';
156
+ const TOPUP_CANCELED = 'topup.canceled';
157
+ const TOPUP_CREATED = 'topup.created';
158
+ const TOPUP_FAILED = 'topup.failed';
159
+ const TOPUP_REVERSED = 'topup.reversed';
160
+ const TOPUP_SUCCEEDED = 'topup.succeeded';
161
+ const TRANSFER_CREATED = 'transfer.created';
162
+ const TRANSFER_REVERSED = 'transfer.reversed';
163
+ const TRANSFER_UPDATED = 'transfer.updated';
164
+
165
+ use ApiOperations\All;
166
+ use ApiOperations\Retrieve;
167
  }
lib/stripe-gateway/lib/ExchangeRate.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ExchangeRate
7
+ *
8
+ * @package Stripe
9
+ */
10
+ class ExchangeRate extends ApiResource
11
+ {
12
+ const OBJECT_NAME = "exchange_rate";
13
+
14
+ use ApiOperations\All;
15
+ use ApiOperations\Retrieve;
16
+ }
lib/stripe-gateway/lib/File.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class File
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $created
11
+ * @property string $filename
12
+ * @property Collection $links
13
+ * @property string $purpose
14
+ * @property int $size
15
+ * @property string $title
16
+ * @property string $type
17
+ * @property string $url
18
+ *
19
+ * @package Stripe
20
+ */
21
+ class File extends ApiResource
22
+ {
23
+ // This resource can have two different object names. In latter API
24
+ // versions, only `file` is used, but since stripe-php may be used with
25
+ // any API version, we need to support deserializing the older
26
+ // `file_upload` object into the same class.
27
+ const OBJECT_NAME = "file";
28
+ const OBJECT_NAME_ALT = "file_upload";
29
+
30
+ use ApiOperations\All;
31
+ use ApiOperations\Create {
32
+ create as protected _create;
33
+ }
34
+ use ApiOperations\Retrieve;
35
+
36
+ public static function classUrl()
37
+ {
38
+ return '/v1/files';
39
+ }
40
+
41
+ /**
42
+ * @param array|null $params
43
+ * @param array|string|null $options
44
+ *
45
+ * @return \Stripe\File The created resource.
46
+ */
47
+ public static function create($params = null, $options = null)
48
+ {
49
+ $opts = \Stripe\Util\RequestOptions::parse($options);
50
+ if (is_null($opts->apiBase)) {
51
+ $opts->apiBase = Stripe::$apiUploadBase;
52
+ }
53
+ // Manually flatten params, otherwise curl's multipart encoder will
54
+ // choke on nested arrays.
55
+ // TODO: use array_column() once we drop support for PHP 5.4
56
+ $flatParams = [];
57
+ foreach (\Stripe\Util\Util::flattenParams($params) as $pair) {
58
+ $flatParams[$pair[0]] = $pair[1];
59
+ }
60
+ return static::_create($flatParams, $opts);
61
+ }
62
+ }
lib/stripe-gateway/lib/FileLink.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class FileLink
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $created
11
+ * @property bool $expired
12
+ * @property int $expires_at
13
+ * @property string $file
14
+ * @property bool $livemode
15
+ * @property StripeObject $metadata
16
+ * @property string $url
17
+ *
18
+ * @package Stripe
19
+ */
20
+ class FileLink extends ApiResource
21
+ {
22
+ const OBJECT_NAME = "file_link";
23
+
24
+ use ApiOperations\All;
25
+ use ApiOperations\Create;
26
+ use ApiOperations\Retrieve;
27
+ use ApiOperations\Update;
28
+ }
lib/stripe-gateway/lib/FileUpload.php CHANGED
@@ -2,60 +2,5 @@
2
 
3
  namespace Stripe;
4
 
5
- /**
6
- * Class FileUpload
7
- *
8
- * @property string $id
9
- * @property string $object
10
- * @property int $created
11
- * @property string $purpose
12
- * @property int $size
13
- * @property string $type
14
- *
15
- * @package Stripe
16
- */
17
- class FileUpload extends ApiResource
18
- {
19
- public static function baseUrl()
20
- {
21
- return Stripe::$apiUploadBase;
22
- }
23
-
24
- public static function className()
25
- {
26
- return 'file';
27
- }
28
-
29
- /**
30
- * @param string $id The ID of the file upload to retrieve.
31
- * @param array|string|null $opts
32
- *
33
- * @return FileUpload
34
- */
35
- public static function retrieve($id, $opts = null)
36
- {
37
- return self::_retrieve($id, $opts);
38
- }
39
-
40
- /**
41
- * @param array|null $params
42
- * @param array|string|null $opts
43
- *
44
- * @return FileUpload The created file upload.
45
- */
46
- public static function create($params = null, $opts = null)
47
- {
48
- return self::_create($params, $opts);
49
- }
50
-
51
- /**
52
- * @param array|null $params
53
- * @param array|string|null $opts
54
- *
55
- * @return Collection of FileUploads
56
- */
57
- public static function all($params = null, $opts = null)
58
- {
59
- return self::_all($params, $opts);
60
- }
61
- }
2
 
3
  namespace Stripe;
4
 
5
+ // For backwards compatibility, the `File` class is aliased to `FileUpload`.
6
+ class_alias('Stripe\\File', 'Stripe\\FileUpload');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe-gateway/lib/HttpClient/ClientInterface.php CHANGED
@@ -11,8 +11,11 @@ interface ClientInterface
11
  * @param array $params KV pairs for parameters. Can be nested for arrays and hashes
12
  * @param boolean $hasFile Whether or not $params references a file (via an @ prefix or
13
  * CurlFile)
14
- * @throws Error\Api & Error\ApiConnection
15
- * @return array($rawBody, $httpStatusCode, $httpHeader)
 
 
 
16
  */
17
  public function request($method, $absUrl, $headers, $params, $hasFile);
18
  }
11
  * @param array $params KV pairs for parameters. Can be nested for arrays and hashes
12
  * @param boolean $hasFile Whether or not $params references a file (via an @ prefix or
13
  * CurlFile)
14
+ *
15
+ * @throws \Stripe\Error\Api
16
+ * @throws \Stripe\Error\ApiConnection
17
+ * @return array An array whose first element is raw request body, second
18
+ * element is HTTP status code and third array of HTTP headers.
19
  */
20
  public function request($method, $absUrl, $headers, $params, $hasFile);
21
  }
lib/stripe-gateway/lib/HttpClient/CurlClient.php CHANGED
@@ -6,6 +6,26 @@ use Stripe\Stripe;
6
  use Stripe\Error;
7
  use Stripe\Util;
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  class CurlClient implements ClientInterface
10
  {
11
  private static $instance;
@@ -20,6 +40,14 @@ class CurlClient implements ClientInterface
20
 
21
  protected $defaultOptions;
22
 
 
 
 
 
 
 
 
 
23
  /**
24
  * CurlClient constructor.
25
  *
@@ -33,9 +61,31 @@ class CurlClient implements ClientInterface
33
  *
34
  * @param array|callable|null $defaultOptions
35
  */
36
- public function __construct($defaultOptions = null)
37
  {
38
  $this->defaultOptions = $defaultOptions;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  }
40
 
41
  public function getDefaultOptions()
@@ -43,6 +93,43 @@ class CurlClient implements ClientInterface
43
  return $this->defaultOptions;
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  // USER DEFINED TIMEOUTS
47
 
48
  const DEFAULT_TIMEOUT = 80;
@@ -77,10 +164,9 @@ class CurlClient implements ClientInterface
77
 
78
  public function request($method, $absUrl, $headers, $params, $hasFile)
79
  {
80
- $curl = curl_init();
81
  $method = strtolower($method);
82
 
83
- $opts = array();
84
  if (is_callable($this->defaultOptions)) { // call defaultOptions callback, set options to return value
85
  $opts = call_user_func_array($this->defaultOptions, func_get_args());
86
  if (!is_array($opts)) {
@@ -90,6 +176,8 @@ class CurlClient implements ClientInterface
90
  $opts = $this->defaultOptions;
91
  }
92
 
 
 
93
  if ($method == 'get') {
94
  if ($hasFile) {
95
  throw new Error\Api(
@@ -98,24 +186,32 @@ class CurlClient implements ClientInterface
98
  }
99
  $opts[CURLOPT_HTTPGET] = 1;
100
  if (count($params) > 0) {
101
- $encoded = self::encode($params);
102
  $absUrl = "$absUrl?$encoded";
103
  }
104
  } elseif ($method == 'post') {
105
  $opts[CURLOPT_POST] = 1;
106
- $opts[CURLOPT_POSTFIELDS] = $hasFile ? $params : self::encode($params);
107
  } elseif ($method == 'delete') {
108
  $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
109
  if (count($params) > 0) {
110
- $encoded = self::encode($params);
111
  $absUrl = "$absUrl?$encoded";
112
  }
113
  } else {
114
  throw new Error\Api("Unrecognized method $method");
115
  }
116
 
 
 
 
 
 
 
 
 
117
  // Create a callback to capture HTTP headers for the response
118
- $rheaders = array();
119
  $headerCallback = function ($curl, $header_line) use (&$rheaders) {
120
  // Ignore the HTTP request line (HTTP/1.1 200 OK)
121
  if (strpos($header_line, ":") === false) {
@@ -147,82 +243,70 @@ class CurlClient implements ClientInterface
147
  $opts[CURLOPT_TIMEOUT] = $this->timeout;
148
  $opts[CURLOPT_HEADERFUNCTION] = $headerCallback;
149
  $opts[CURLOPT_HTTPHEADER] = $headers;
150
- if (!Stripe::$verifySslCerts) {
 
151
  $opts[CURLOPT_SSL_VERIFYPEER] = false;
152
  }
153
 
154
- // @codingStandardsIgnoreStart
155
- // PSR2 requires all constants be upper case. Sadly, the CURL_SSLVERSION
156
- // constants to not abide by those rules.
157
- //
158
- // Explicitly set a TLS version for cURL to use now that we're starting
159
- // to block 1.0 and 1.1 requests.
160
- //
161
- // If users are on OpenSSL >= 1.0.1, we know that they support TLS 1.2,
162
- // so set that explicitly because on some older Linux distros, clients may
163
- // default to TLS 1.0 even when they have TLS 1.2 available.
164
- //
165
- // For users on much older versions of OpenSSL, set a valid range of
166
- // TLS 1.0 to 1.2 (CURL_SSLVERSION_TLSv1). Note that this may result in
167
- // their requests being blocked unless they're specially flagged into
168
- // being able to use an old TLS version.
169
- //
170
- // Note: The int on the right is pulled from the source of OpenSSL 1.0.1a.
171
- if (OPENSSL_VERSION_NUMBER >= 0x1000100f) {
172
- if (!defined('CURL_SSLVERSION_TLSv1_2')) {
173
- // Note the value 6 comes from its position in the enum that
174
- // defines it in cURL's source code.
175
- define('CURL_SSLVERSION_TLSv1_2', 6); // constant not defined in PHP < 5.5
176
- }
177
- $opts[CURLOPT_SSLVERSION] = CURL_SSLVERSION_TLSv1_2;
178
- } else {
179
- if (!defined('CURL_SSLVERSION_TLSv1')) {
180
- define('CURL_SSLVERSION_TLSv1', 1); // constant not defined in PHP < 5.5
181
- }
182
- $opts[CURLOPT_SSLVERSION] = CURL_SSLVERSION_TLSv1;
183
  }
184
- // @codingStandardsIgnoreEnd
185
 
186
- curl_setopt_array($curl, $opts);
187
- $rbody = curl_exec($curl);
188
 
189
- if (!defined('CURLE_SSL_CACERT_BADFILE')) {
190
- define('CURLE_SSL_CACERT_BADFILE', 77); // constant not defined in PHP
191
- }
192
 
193
- $errno = curl_errno($curl);
194
- if ($errno == CURLE_SSL_CACERT ||
195
- $errno == CURLE_SSL_PEER_CERTIFICATE ||
196
- $errno == CURLE_SSL_CACERT_BADFILE
197
- ) {
198
- array_push(
199
- $headers,
200
- 'X-Stripe-Client-Info: {"ca":"using Stripe-supplied CA bundle"}'
201
- );
202
- $cert = self::caBundle();
203
- curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
204
- curl_setopt($curl, CURLOPT_CAINFO, $cert);
205
- $rbody = curl_exec($curl);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
206
  }
207
 
208
  if ($rbody === false) {
209
- $errno = curl_errno($curl);
210
- $message = curl_error($curl);
211
- curl_close($curl);
212
- $this->handleCurlError($absUrl, $errno, $message);
213
  }
214
 
215
- $rcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
216
- curl_close($curl);
217
- return array($rbody, $rcode, $rheaders);
218
  }
219
 
220
  /**
221
- * @param number $errno
 
222
  * @param string $message
 
223
  * @throws Error\ApiConnection
224
  */
225
- private function handleCurlError($url, $errno, $message)
226
  {
227
  switch ($errno) {
228
  case CURLE_COULDNT_CONNECT:
@@ -247,52 +331,130 @@ class CurlClient implements ClientInterface
247
  $msg .= " let us know at support@stripe.com.";
248
 
249
  $msg .= "\n\n(Network error [errno $errno]: $message)";
 
 
 
 
 
250
  throw new Error\ApiConnection($msg);
251
  }
252
 
253
- private static function caBundle()
 
 
 
 
 
 
 
 
 
254
  {
255
- return dirname(__FILE__) . '/../../data/ca-certificates.crt';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  }
257
 
258
  /**
259
- * @param array $arr An map of param keys to values.
260
- * @param string|null $prefix
261
- *
262
- * Only public for testability, should not be called outside of CurlClient
263
- *
264
- * @return string A querystring, essentially.
 
 
 
 
265
  */
266
- public static function encode($arr, $prefix = null)
267
  {
268
- if (!is_array($arr)) {
269
- return $arr;
 
270
  }
 
271
 
272
- $r = array();
273
- foreach ($arr as $k => $v) {
274
- if (is_null($v)) {
275
- continue;
276
- }
 
 
 
 
 
 
 
277
 
278
- if ($prefix) {
279
- if ($k !== null && (!is_int($k) || is_array($v))) {
280
- $k = $prefix."[".$k."]";
281
- } else {
282
- $k = $prefix."[]";
283
- }
284
- }
 
 
 
 
 
285
 
286
- if (is_array($v)) {
287
- $enc = self::encode($v, $k);
288
- if ($enc) {
289
- $r[] = $enc;
290
- }
291
- } else {
292
- $r[] = urlencode($k)."=".urlencode($v);
 
 
 
 
 
293
  }
294
  }
295
 
296
- return implode("&", $r);
297
  }
298
  }
6
  use Stripe\Error;
7
  use Stripe\Util;
8
 
9
+ // cURL constants are not defined in PHP < 5.5
10
+
11
+ // @codingStandardsIgnoreStart
12
+ // PSR2 requires all constants be upper case. Sadly, the CURL_SSLVERSION
13
+ // constants do not abide by those rules.
14
+
15
+ // Note the values 1 and 6 come from their position in the enum that
16
+ // defines them in cURL's source code.
17
+ if (!defined('CURL_SSLVERSION_TLSv1')) {
18
+ define('CURL_SSLVERSION_TLSv1', 1);
19
+ }
20
+ if (!defined('CURL_SSLVERSION_TLSv1_2')) {
21
+ define('CURL_SSLVERSION_TLSv1_2', 6);
22
+ }
23
+ // @codingStandardsIgnoreEnd
24
+
25
+ if (!defined('CURL_HTTP_VERSION_2TLS')) {
26
+ define('CURL_HTTP_VERSION_2TLS', 4);
27
+ }
28
+
29
  class CurlClient implements ClientInterface
30
  {
31
  private static $instance;
40
 
41
  protected $defaultOptions;
42
 
43
+ protected $userAgentInfo;
44
+
45
+ protected $enablePersistentConnections = null;
46
+
47
+ protected $enableHttp2 = null;
48
+
49
+ protected $curlHandle = null;
50
+
51
  /**
52
  * CurlClient constructor.
53
  *
61
  *
62
  * @param array|callable|null $defaultOptions
63
  */
64
+ public function __construct($defaultOptions = null, $randomGenerator = null)
65
  {
66
  $this->defaultOptions = $defaultOptions;
67
+ $this->randomGenerator = $randomGenerator ?: new Util\RandomGenerator();
68
+ $this->initUserAgentInfo();
69
+
70
+ // TODO: curl_reset requires PHP >= 5.5.0. Once we drop support for PHP 5.4, we can simply
71
+ // initialize this to true.
72
+ $this->enablePersistentConnections = function_exists('curl_reset');
73
+
74
+ $this->enableHttp2 = $this->canSafelyUseHttp2();
75
+ }
76
+
77
+ public function __destruct()
78
+ {
79
+ $this->closeCurlHandle();
80
+ }
81
+
82
+ public function initUserAgentInfo()
83
+ {
84
+ $curlVersion = curl_version();
85
+ $this->userAgentInfo = [
86
+ 'httplib' => 'curl ' . $curlVersion['version'],
87
+ 'ssllib' => $curlVersion['ssl_version'],
88
+ ];
89
  }
90
 
91
  public function getDefaultOptions()
93
  return $this->defaultOptions;
94
  }
95
 
96
+ public function getUserAgentInfo()
97
+ {
98
+ return $this->userAgentInfo;
99
+ }
100
+
101
+ /**
102
+ * @return boolean
103
+ */
104
+ public function getEnablePersistentConnections()
105
+ {
106
+ return $this->enablePersistentConnections;
107
+ }
108
+
109
+ /**
110
+ * @param boolean $enable
111
+ */
112
+ public function setEnablePersistentConnections($enable)
113
+ {
114
+ $this->enablePersistentConnections = $enable;
115
+ }
116
+
117
+ /**
118
+ * @return boolean
119
+ */
120
+ public function getEnableHttp2()
121
+ {
122
+ return $this->enableHttp2;
123
+ }
124
+
125
+ /**
126
+ * @param boolean $enable
127
+ */
128
+ public function setEnableHttp2($enable)
129
+ {
130
+ $this->enableHttp2 = $enable;
131
+ }
132
+
133
  // USER DEFINED TIMEOUTS
134
 
135
  const DEFAULT_TIMEOUT = 80;
164
 
165
  public function request($method, $absUrl, $headers, $params, $hasFile)
166
  {
 
167
  $method = strtolower($method);
168
 
169
+ $opts = [];
170
  if (is_callable($this->defaultOptions)) { // call defaultOptions callback, set options to return value
171
  $opts = call_user_func_array($this->defaultOptions, func_get_args());
172
  if (!is_array($opts)) {
176
  $opts = $this->defaultOptions;
177
  }
178
 
179
+ $params = Util\Util::objectsToIds($params);
180
+
181
  if ($method == 'get') {
182
  if ($hasFile) {
183
  throw new Error\Api(
186
  }
187
  $opts[CURLOPT_HTTPGET] = 1;
188
  if (count($params) > 0) {
189
+ $encoded = Util\Util::encodeParameters($params);
190
  $absUrl = "$absUrl?$encoded";
191
  }
192
  } elseif ($method == 'post') {
193
  $opts[CURLOPT_POST] = 1;
194
+ $opts[CURLOPT_POSTFIELDS] = $hasFile ? $params : Util\Util::encodeParameters($params);
195
  } elseif ($method == 'delete') {
196
  $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
197
  if (count($params) > 0) {
198
+ $encoded = Util\Util::encodeParameters($params);
199
  $absUrl = "$absUrl?$encoded";
200
  }
201
  } else {
202
  throw new Error\Api("Unrecognized method $method");
203
  }
204
 
205
+ // It is only safe to retry network failures on POST requests if we
206
+ // add an Idempotency-Key header
207
+ if (($method == 'post') && (Stripe::$maxNetworkRetries > 0)) {
208
+ if (!$this->hasHeader($headers, "Idempotency-Key")) {
209
+ array_push($headers, 'Idempotency-Key: ' . $this->randomGenerator->uuid());
210
+ }
211
+ }
212
+
213
  // Create a callback to capture HTTP headers for the response
214
+ $rheaders = new Util\CaseInsensitiveArray();
215
  $headerCallback = function ($curl, $header_line) use (&$rheaders) {
216
  // Ignore the HTTP request line (HTTP/1.1 200 OK)
217
  if (strpos($header_line, ":") === false) {
243
  $opts[CURLOPT_TIMEOUT] = $this->timeout;
244
  $opts[CURLOPT_HEADERFUNCTION] = $headerCallback;
245
  $opts[CURLOPT_HTTPHEADER] = $headers;
246
+ $opts[CURLOPT_CAINFO] = Stripe::getCABundlePath();
247
+ if (!Stripe::getVerifySslCerts()) {
248
  $opts[CURLOPT_SSL_VERIFYPEER] = false;
249
  }
250
 
251
+ if (!isset($opts[CURLOPT_HTTP_VERSION]) && $this->getEnableHttp2()) {
252
+ // For HTTPS requests, enable HTTP/2, if supported
253
+ $opts[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_2TLS;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  }
 
255
 
256
+ list($rbody, $rcode) = $this->executeRequestWithRetries($opts, $absUrl);
 
257
 
258
+ return [$rbody, $rcode, $rheaders];
259
+ }
 
260
 
261
+ /**
262
+ * @param array $opts cURL options
263
+ */
264
+ private function executeRequestWithRetries($opts, $absUrl)
265
+ {
266
+ $numRetries = 0;
267
+
268
+ while (true) {
269
+ $rcode = 0;
270
+ $errno = 0;
271
+
272
+ $this->resetCurlHandle();
273
+ curl_setopt_array($this->curlHandle, $opts);
274
+ $rbody = curl_exec($this->curlHandle);
275
+
276
+ if ($rbody === false) {
277
+ $errno = curl_errno($this->curlHandle);
278
+ $message = curl_error($this->curlHandle);
279
+ } else {
280
+ $rcode = curl_getinfo($this->curlHandle, CURLINFO_HTTP_CODE);
281
+ }
282
+ if (!$this->getEnablePersistentConnections()) {
283
+ $this->closeCurlHandle();
284
+ }
285
+
286
+ if ($this->shouldRetry($errno, $rcode, $numRetries)) {
287
+ $numRetries += 1;
288
+ $sleepSeconds = $this->sleepTime($numRetries);
289
+ usleep(intval($sleepSeconds * 1000000));
290
+ } else {
291
+ break;
292
+ }
293
  }
294
 
295
  if ($rbody === false) {
296
+ $this->handleCurlError($absUrl, $errno, $message, $numRetries);
 
 
 
297
  }
298
 
299
+ return [$rbody, $rcode];
 
 
300
  }
301
 
302
  /**
303
+ * @param string $url
304
+ * @param int $errno
305
  * @param string $message
306
+ * @param int $numRetries
307
  * @throws Error\ApiConnection
308
  */
309
+ private function handleCurlError($url, $errno, $message, $numRetries)
310
  {
311
  switch ($errno) {
312
  case CURLE_COULDNT_CONNECT:
331
  $msg .= " let us know at support@stripe.com.";
332
 
333
  $msg .= "\n\n(Network error [errno $errno]: $message)";
334
+
335
+ if ($numRetries > 0) {
336
+ $msg .= "\n\nRequest was retried $numRetries times.";
337
+ }
338
+
339
  throw new Error\ApiConnection($msg);
340
  }
341
 
342
+ /**
343
+ * Checks if an error is a problem that we should retry on. This includes both
344
+ * socket errors that may represent an intermittent problem and some special
345
+ * HTTP statuses.
346
+ * @param int $errno
347
+ * @param int $rcode
348
+ * @param int $numRetries
349
+ * @return bool
350
+ */
351
+ private function shouldRetry($errno, $rcode, $numRetries)
352
  {
353
+ if ($numRetries >= Stripe::getMaxNetworkRetries()) {
354
+ return false;
355
+ }
356
+
357
+ // Retry on timeout-related problems (either on open or read).
358
+ if ($errno === CURLE_OPERATION_TIMEOUTED) {
359
+ return true;
360
+ }
361
+
362
+ // Destination refused the connection, the connection was reset, or a
363
+ // variety of other connection failures. This could occur from a single
364
+ // saturated server, so retry in case it's intermittent.
365
+ if ($errno === CURLE_COULDNT_CONNECT) {
366
+ return true;
367
+ }
368
+
369
+ // 409 conflict
370
+ if ($rcode === 409) {
371
+ return true;
372
+ }
373
+
374
+ return false;
375
+ }
376
+
377
+ private function sleepTime($numRetries)
378
+ {
379
+ // Apply exponential backoff with $initialNetworkRetryDelay on the
380
+ // number of $numRetries so far as inputs. Do not allow the number to exceed
381
+ // $maxNetworkRetryDelay.
382
+ $sleepSeconds = min(
383
+ Stripe::getInitialNetworkRetryDelay() * 1.0 * pow(2, $numRetries - 1),
384
+ Stripe::getMaxNetworkRetryDelay()
385
+ );
386
+
387
+ // Apply some jitter by randomizing the value in the range of
388
+ // ($sleepSeconds / 2) to ($sleepSeconds).
389
+ $sleepSeconds *= 0.5 * (1 + $this->randomGenerator->randFloat());
390
+
391
+ // But never sleep less than the base sleep seconds.
392
+ $sleepSeconds = max(Stripe::getInitialNetworkRetryDelay(), $sleepSeconds);
393
+
394
+ return $sleepSeconds;
395
  }
396
 
397
  /**
398
+ * Initializes the curl handle. If already initialized, the handle is closed first.
399
+ */
400
+ private function initCurlHandle()
401
+ {
402
+ $this->closeCurlHandle();
403
+ $this->curlHandle = curl_init();
404
+ }
405
+
406
+ /**
407
+ * Closes the curl handle if initialized. Do nothing if already closed.
408
  */
409
+ private function closeCurlHandle()
410
  {
411
+ if (!is_null($this->curlHandle)) {
412
+ curl_close($this->curlHandle);
413
+ $this->curlHandle = null;
414
  }
415
+ }
416
 
417
+ /**
418
+ * Resets the curl handle. If the handle is not already initialized, or if persistent
419
+ * connections are disabled, the handle is reinitialized instead.
420
+ */
421
+ private function resetCurlHandle()
422
+ {
423
+ if (!is_null($this->curlHandle) && $this->getEnablePersistentConnections()) {
424
+ curl_reset($this->curlHandle);
425
+ } else {
426
+ $this->initCurlHandle();
427
+ }
428
+ }
429
 
430
+ /**
431
+ * Indicates whether it is safe to use HTTP/2 or not.
432
+ *
433
+ * @return boolean
434
+ */
435
+ private function canSafelyUseHttp2()
436
+ {
437
+ // Versions of curl older than 7.60.0 don't respect GOAWAY frames
438
+ // (cf. https://github.com/curl/curl/issues/2416), which Stripe use.
439
+ $curlVersion = curl_version()['version'];
440
+ return (version_compare($curlVersion, '7.60.0') >= 0);
441
+ }
442
 
443
+ /**
444
+ * Checks if a list of headers contains a specific header name.
445
+ *
446
+ * @param string[] $headers
447
+ * @param string $name
448
+ * @return boolean
449
+ */
450
+ private function hasHeader($headers, $name)
451
+ {
452
+ foreach ($headers as $header) {
453
+ if (strncasecmp($header, "{$name}: ", strlen($name) + 2) === 0) {
454
+ return true;
455
  }
456
  }
457
 
458
+ return false;
459
  }
460
  }
lib/stripe-gateway/lib/Invoice.php CHANGED
@@ -5,53 +5,170 @@ namespace Stripe;
5
  /**
6
  * Class Invoice
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class Invoice extends ApiResource
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  /**
13
  * @param array|null $params
14
  * @param array|string|null $opts
15
  *
16
- * @return Invoice The created invoice.
17
  */
18
- public static function create($params = null, $opts = null)
19
  {
20
- return self::_create($params, $opts);
 
 
 
21
  }
22
 
23
  /**
24
- * @param string $id The ID of the invoice to retrieve.
25
  * @param array|string|null $opts
26
  *
27
- * @return Invoice
28
  */
29
- public static function retrieve($id, $opts = null)
30
  {
31
- return self::_retrieve($id, $opts);
 
 
 
32
  }
33
 
34
  /**
35
  * @param array|null $params
36
  * @param array|string|null $opts
37
  *
38
- * @return Collection of Invoices
39
  */
40
- public static function all($params = null, $opts = null)
41
  {
42
- return self::_all($params, $opts);
 
 
 
43
  }
44
 
45
  /**
46
- * @param string $id The ID of the invoice to update.
47
  * @param array|null $params
48
- * @param array|string|null $options
49
  *
50
- * @return Invoice The updated invoice.
51
  */
52
- public static function update($id, $params = null, $options = null)
53
  {
54
- return self::_update($id, $params, $options);
 
 
 
55
  }
56
 
57
  /**
@@ -70,22 +187,15 @@ class Invoice extends ApiResource
70
  }
71
 
72
  /**
 
73
  * @param array|string|null $opts
74
  *
75
- * @return Invoice The saved invoice.
76
- */
77
- public function save($opts = null)
78
- {
79
- return $this->_save($opts);
80
- }
81
-
82
- /**
83
- * @return Invoice The paid invoice.
84
  */
85
- public function pay($opts = null)
86
  {
87
- $url = $this->instanceUrl() . '/pay';
88
- list($response, $opts) = $this->_request('post', $url, null, $opts);
89
  $this->refreshFrom($response, $opts);
90
  return $this;
91
  }
5
  /**
6
  * Class Invoice
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $account_country
11
+ * @property string $account_name
12
+ * @property int $amount_due
13
+ * @property int $amount_paid
14
+ * @property int $amount_remaining
15
+ * @property int $application_fee_amount
16
+ * @property int $attempt_count
17
+ * @property bool $attempted
18
+ * @property bool $auto_advance
19
+ * @property string $billing
20
+ * @property string $billing_reason
21
+ * @property string $charge
22
+ * @property string $collection_method
23
+ * @property int $created
24
+ * @property string $currency
25
+ * @property array $custom_fields
26
+ * @property string $customer
27
+ * @property mixed $customer_address
28
+ * @property string $customer_email
29
+ * @property string $customer_name
30
+ * @property string $customer_phone
31
+ * @property mixed $customer_shipping
32
+ * @property string $customer_tax_exempt
33
+ * @property array $customer_tax_ids
34
+ * @property string $default_payment_method
35
+ * @property string $default_source
36
+ * @property array $default_tax_rates
37
+ * @property string $description
38
+ * @property Discount $discount
39
+ * @property int $due_date
40
+ * @property int $ending_balance
41
+ * @property string $footer
42
+ * @property string $hosted_invoice_url
43
+ * @property string $invoice_pdf
44
+ * @property Collection $lines
45
+ * @property bool $livemode
46
+ * @property StripeObject $metadata
47
+ * @property int $next_payment_attempt
48
+ * @property string $number
49
+ * @property bool $paid
50
+ * @property string $payment_intent
51
+ * @property int $period_end
52
+ * @property int $period_start
53
+ * @property int $post_payment_credit_notes_amount
54
+ * @property int $pre_payment_credit_notes_amount
55
+ * @property string $receipt_number
56
+ * @property int $starting_balance
57
+ * @property string $statement_descriptor
58
+ * @property string $status
59
+ * @property mixed $status_transitions
60
+ * @property string $subscription
61
+ * @property int $subscription_proration_date
62
+ * @property int $subtotal
63
+ * @property int $tax
64
+ * @property mixed $threshold_reason
65
+ * @property int $total
66
+ * @property array $total_tax_amounts
67
+ * @property int $webhooks_delivered_at
68
+ *
69
  * @package Stripe
70
  */
71
  class Invoice extends ApiResource
72
  {
73
+ const OBJECT_NAME = "invoice";
74
+
75
+ use ApiOperations\All;
76
+ use ApiOperations\Create;
77
+ use ApiOperations\Delete;
78
+ use ApiOperations\Retrieve;
79
+ use ApiOperations\Update;
80
+
81
+ /**
82
+ * Possible string representations of the billing reason.
83
+ * @link https://stripe.com/docs/api/invoices/object#invoice_object-billing_reason
84
+ */
85
+ const BILLING_REASON_MANUAL = 'manual';
86
+ const BILLING_REASON_SUBSCRIPTION = 'subscription';
87
+ const BILLING_REASON_SUBSCRIPTION_CREATE = 'subscription_create';
88
+ const BILLING_REASON_SUBSCRIPTION_CYCLE = 'subscription_cycle';
89
+ const BILLING_REASON_SUBSCRIPTION_THRESHOLD = 'subscription_threshold';
90
+ const BILLING_REASON_SUBSCRIPTION_UPDATE = 'subscription_update';
91
+ const BILLING_REASON_UPCOMING = 'upcoming';
92
+
93
+ /**
94
+ * Possible string representations of the `collection_method` property.
95
+ * @link https://stripe.com/docs/api/invoices/object#invoice_object-collection_method
96
+ */
97
+ const COLLECTION_METHOD_CHARGE_AUTOMATICALLY = 'charge_automatically';
98
+ const COLLECTION_METHOD_SEND_INVOICE = 'send_invoice';
99
+
100
+ /**
101
+ * Possible string representations of the invoice status.
102
+ * @link https://stripe.com/docs/api/invoices/object#invoice_object-status
103
+ */
104
+ const STATUS_DRAFT = 'draft';
105
+ const STATUS_OPEN = 'open';
106
+ const STATUS_PAID = 'paid';
107
+ const STATUS_UNCOLLECTIBLE = 'uncollectible';
108
+ const STATUS_VOID = 'void';
109
+
110
+ /**
111
+ * Possible string representations of the `billing` property.
112
+ * @deprecated Use `collection_method` instead.
113
+ * @link https://stripe.com/docs/api/invoices/object#invoice_object-billing
114
+ */
115
+ const BILLING_CHARGE_AUTOMATICALLY = 'charge_automatically';
116
+ const BILLING_SEND_INVOICE = 'send_invoice';
117
+
118
  /**
119
  * @param array|null $params
120
  * @param array|string|null $opts
121
  *
122
+ * @return Invoice The finalized invoice.
123
  */
124
+ public function finalizeInvoice($params = null, $opts = null)
125
  {
126
+ $url = $this->instanceUrl() . '/finalize';
127
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
128
+ $this->refreshFrom($response, $opts);
129
+ return $this;
130
  }
131
 
132
  /**
133
+ * @param array|null $params
134
  * @param array|string|null $opts
135
  *
136
+ * @return Invoice The uncollectible invoice.
137
  */
138
+ public function markUncollectible($params = null, $opts = null)
139
  {
140
+ $url = $this->instanceUrl() . '/mark_uncollectible';
141
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
142
+ $this->refreshFrom($response, $opts);
143
+ return $this;
144
  }
145
 
146
  /**
147
  * @param array|null $params
148
  * @param array|string|null $opts
149
  *
150
+ * @return Invoice The paid invoice.
151
  */
152
+ public function pay($params = null, $opts = null)
153
  {
154
+ $url = $this->instanceUrl() . '/pay';
155
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
156
+ $this->refreshFrom($response, $opts);
157
+ return $this;
158
  }
159
 
160
  /**
 
161
  * @param array|null $params
162
+ * @param array|string|null $opts
163
  *
164
+ * @return Invoice The sent invoice.
165
  */
166
+ public function sendInvoice($params = null, $opts = null)
167
  {
168
+ $url = $this->instanceUrl() . '/send';
169
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
170
+ $this->refreshFrom($response, $opts);
171
+ return $this;
172
  }
173
 
174
  /**
187
  }
188
 
189
  /**
190
+ * @param array|null $params
191
  * @param array|string|null $opts
192
  *
193
+ * @return Invoice The voided invoice.
 
 
 
 
 
 
 
 
194
  */
195
+ public function voidInvoice($params = null, $opts = null)
196
  {
197
+ $url = $this->instanceUrl() . '/void';
198
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
199
  $this->refreshFrom($response, $opts);
200
  return $this;
201
  }
lib/stripe-gateway/lib/InvoiceItem.php CHANGED
@@ -5,73 +5,35 @@ namespace Stripe;
5
  /**
6
  * Class InvoiceItem
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class InvoiceItem extends ApiResource
11
  {
12
- /**
13
- * @param string $id The ID of the invoice item to retrieve.
14
- * @param array|string|null $opts
15
- *
16
- * @return InvoiceItem
17
- */
18
- public static function retrieve($id, $opts = null)
19
- {
20
- return self::_retrieve($id, $opts);
21
- }
22
-
23
- /**
24
- * @param array|null $params
25
- * @param array|string|null $opts
26
- *
27
- * @return Collection of InvoiceItems
28
- */
29
- public static function all($params = null, $opts = null)
30
- {
31
- return self::_all($params, $opts);
32
- }
33
-
34
- /**
35
- * @param array|null $params
36
- * @param array|string|null $opts
37
- *
38
- * @return InvoiceItem The created invoice item.
39
- */
40
- public static function create($params = null, $opts = null)
41
- {
42
- return self::_create($params, $opts);
43
- }
44
-
45
- /**
46
- * @param string $id The ID of the invoice item to update.
47
- * @param array|null $params
48
- * @param array|string|null $options
49
- *
50
- * @return InvoiceItem The updated invoice item.
51
- */
52
- public static function update($id, $params = null, $options = null)
53
- {
54
- return self::_update($id, $params, $options);
55
- }
56
-
57
- /**
58
- * @param array|string|null $opts
59
- *
60
- * @return InvoiceItem The saved invoice item.
61
- */
62
- public function save($opts = null)
63
- {
64
- return $this->_save($opts);
65
- }
66
 
67
- /**
68
- * @param array|null $params
69
- * @param array|string|null $opts
70
- *
71
- * @return InvoiceItem The deleted invoice item.
72
- */
73
- public function delete($params = null, $opts = null)
74
- {
75
- return $this->_delete($params, $opts);
76
- }
77
  }
5
  /**
6
  * Class InvoiceItem
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property string $currency
12
+ * @property string $customer
13
+ * @property int $date
14
+ * @property string $description
15
+ * @property bool $discountable
16
+ * @property string $invoice
17
+ * @property bool $livemode
18
+ * @property StripeObject $metadata
19
+ * @property mixed $period
20
+ * @property Plan $plan
21
+ * @property bool $proration
22
+ * @property int $quantity
23
+ * @property string $subscription
24
+ * @property string $subscription_item
25
+ * @property array $tax_rates
26
+ * @property int $unit_amount
27
+ *
28
  * @package Stripe
29
  */
30
  class InvoiceItem extends ApiResource
31
  {
32
+ const OBJECT_NAME = "invoiceitem";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
+ use ApiOperations\All;
35
+ use ApiOperations\Create;
36
+ use ApiOperations\Delete;
37
+ use ApiOperations\Retrieve;
38
+ use ApiOperations\Update;
 
 
 
 
 
39
  }
lib/stripe-gateway/lib/InvoiceLineItem.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class InvoiceLineItem
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property string $currency
12
+ * @property string $description
13
+ * @property bool $discountable
14
+ * @property string $invoice_item
15
+ * @property bool $livemode
16
+ * @property StripeObject $metadata
17
+ * @property mixed $period
18
+ * @property Plan $plan
19
+ * @property bool $proration
20
+ * @property int $quantity
21
+ * @property string $subscription
22
+ * @property string $subscription_item
23
+ * @property array $tax_amounts
24
+ * @property array $tax_rates
25
+ * @property string $type
26
+ *
27
+ * @package Stripe
28
+ */
29
+ class InvoiceLineItem extends ApiResource
30
+ {
31
+ const OBJECT_NAME = "line_item";
32
+ }
lib/stripe-gateway/lib/IssuerFraudRecord.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class IssuerFraudRecord
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $charge
11
+ * @property int $created
12
+ * @property int $post_date
13
+ * @property string $fraud_type
14
+ * @property bool $livemode
15
+ *
16
+ * @package Stripe
17
+ */
18
+ class IssuerFraudRecord extends ApiResource
19
+ {
20
+ const OBJECT_NAME = "issuer_fraud_record";
21
+
22
+ use ApiOperations\All;
23
+ use ApiOperations\Retrieve;
24
+ }
lib/stripe-gateway/lib/Issuing/Authorization.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Issuing;
4
+
5
+ /**
6
+ * Class Authorization
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property bool $approved
11
+ * @property string $authorization_method
12
+ * @property int $authorized_amount
13
+ * @property string $authorized_currency
14
+ * @property \Stripe\Collection $balance_transactions
15
+ * @property Card $card
16
+ * @property Cardholder $cardholder
17
+ * @property int $created
18
+ * @property int $held_amount
19
+ * @property string $held_currency
20
+ * @property bool $is_held_amount_controllable
21
+ * @property bool $livemode
22
+ * @property mixed $merchant_data
23
+ * @property \Stripe\StripeObject $metadata
24
+ * @property int $pending_authorized_amount
25
+ * @property int $pending_held_amount
26
+ * @property mixed $request_history
27
+ * @property string $status
28
+ * @property \Stripe\Collection $transactions
29
+ * @property mixed $verification_data
30
+ *
31
+ * @package Stripe\Issuing
32
+ */
33
+ class Authorization extends \Stripe\ApiResource
34
+ {
35
+ const OBJECT_NAME = "issuing.authorization";
36
+
37
+ use \Stripe\ApiOperations\All;
38
+ use \Stripe\ApiOperations\Retrieve;
39
+ use \Stripe\ApiOperations\Update;
40
+
41
+ /**
42
+ * @param array|null $params
43
+ * @param array|string|null $options
44
+ *
45
+ * @return Authorization The approved authorization.
46
+ */
47
+ public function approve($params = null, $options = null)
48
+ {
49
+ $url = $this->instanceUrl() . '/approve';
50
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
51
+ $this->refreshFrom($response, $opts);
52
+ return $this;
53
+ }
54
+
55
+ /**
56
+ * @param array|null $params
57
+ * @param array|string|null $options
58
+ *
59
+ * @return Authorization The declined authorization.
60
+ */
61
+ public function decline($params = null, $options = null)
62
+ {
63
+ $url = $this->instanceUrl() . '/decline';
64
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
65
+ $this->refreshFrom($response, $opts);
66
+ return $this;
67
+ }
68
+ }
lib/stripe-gateway/lib/Issuing/Card.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Issuing;
4
+
5
+ /**
6
+ * Class Card
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $authorization_controls
11
+ * @property mixed $billing
12
+ * @property string $brand
13
+ * @property Cardholder $cardholder
14
+ * @property int $created
15
+ * @property string $currency
16
+ * @property int $exp_month
17
+ * @property int $exp_year
18
+ * @property string $last4
19
+ * @property bool $livemode
20
+ * @property \Stripe\StripeObject $metadata
21
+ * @property string $name
22
+ * @property mixed $shipping
23
+ * @property string $status
24
+ * @property string $type
25
+ *
26
+ * @package Stripe\Issuing
27
+ */
28
+ class Card extends \Stripe\ApiResource
29
+ {
30
+ const OBJECT_NAME = "issuing.card";
31
+
32
+ use \Stripe\ApiOperations\All;
33
+ use \Stripe\ApiOperations\Create;
34
+ use \Stripe\ApiOperations\Retrieve;
35
+ use \Stripe\ApiOperations\Update;
36
+
37
+ /**
38
+ * @param array|null $params
39
+ * @param array|string|null $options
40
+ *
41
+ * @return CardDetails The card details associated with that issuing card.
42
+ */
43
+ public function details($params = null, $options = null)
44
+ {
45
+ $url = $this->instanceUrl() . '/details';
46
+ list($response, $opts) = $this->_request('get', $url, $params, $options);
47
+ $obj = \Stripe\Util\Util::convertToStripeObject($response, $opts);
48
+ $obj->setLastResponse($response);
49
+ return $obj;
50
+ }
51
+ }
lib/stripe-gateway/lib/Issuing/CardDetails.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Issuing;
4
+
5
+ /**
6
+ * Class CardDetails
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property Card $card
11
+ * @property string $cvc
12
+ * @property int $exp_month
13
+ * @property int $exp_year
14
+ * @property string $number
15
+ *
16
+ * @package Stripe\Issuing
17
+ */
18
+ class CardDetails extends \Stripe\ApiResource
19
+ {
20
+ const OBJECT_NAME = "issuing.card_details";
21
+ }
lib/stripe-gateway/lib/Issuing/Cardholder.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Issuing;
4
+
5
+ /**
6
+ * Class Cardholder
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $billing
11
+ * @property int $created
12
+ * @property string $email
13
+ * @property bool $livemode
14
+ * @property \Stripe\StripeObject $metadata
15
+ * @property string $name
16
+ * @property string $phone_number
17
+ * @property string $status
18
+ * @property string $type
19
+ *
20
+ * @package Stripe\Issuing
21
+ */
22
+ class Cardholder extends \Stripe\ApiResource
23
+ {
24
+ const OBJECT_NAME = "issuing.cardholder";
25
+
26
+ use \Stripe\ApiOperations\All;
27
+ use \Stripe\ApiOperations\Create;
28
+ use \Stripe\ApiOperations\Retrieve;
29
+ use \Stripe\ApiOperations\Update;
30
+ }
lib/stripe-gateway/lib/Issuing/Dispute.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Issuing;
4
+
5
+ /**
6
+ * Class Dispute
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $created
12
+ * @property string $currency
13
+ * @property mixed $evidence
14
+ * @property bool $livemode
15
+ * @property \Stripe\StripeObject $metadata
16
+ * @property string $reason
17
+ * @property string $status
18
+ * @property Transaction $transaction
19
+ *
20
+ * @package Stripe\Issuing
21
+ */
22
+ class Dispute extends \Stripe\ApiResource
23
+ {
24
+ const OBJECT_NAME = "issuing.dispute";
25
+
26
+ use \Stripe\ApiOperations\All;
27
+ use \Stripe\ApiOperations\Create;
28
+ use \Stripe\ApiOperations\Retrieve;
29
+ use \Stripe\ApiOperations\Update;
30
+ }
lib/stripe-gateway/lib/Issuing/Transaction.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Issuing;
4
+
5
+ /**
6
+ * Class Transaction
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property string $authorization
12
+ * @property string $balance_transaction
13
+ * @property string $card
14
+ * @property string $cardholder
15
+ * @property int $created
16
+ * @property string $currency
17
+ * @property string $dispute
18
+ * @property bool $livemode
19
+ * @property mixed $merchant_data
20
+ * @property int $merchant_amount
21
+ * @property string $merchant_currency
22
+ * @property \Stripe\StripeObject $metadata
23
+ * @property string $type
24
+ *
25
+ * @package Stripe\Issuing
26
+ */
27
+ class Transaction extends \Stripe\ApiResource
28
+ {
29
+ const OBJECT_NAME = "issuing.transaction";
30
+
31
+ use \Stripe\ApiOperations\All;
32
+ use \Stripe\ApiOperations\Create;
33
+ use \Stripe\ApiOperations\Retrieve;
34
+ use \Stripe\ApiOperations\Update;
35
+ }
lib/stripe-gateway/lib/LoginLink.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class LoginLink
7
+ *
8
+ * @property string $object
9
+ * @property int $created
10
+ * @property string $url
11
+ *
12
+ * @package Stripe
13
+ */
14
+ class LoginLink extends ApiResource
15
+ {
16
+ const OBJECT_NAME = "login_link";
17
+ }
lib/stripe-gateway/lib/OAuth.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ abstract class OAuth
6
+ {
7
+ /**
8
+ * Generates a URL to Stripe's OAuth form.
9
+ *
10
+ * @param array|null $params
11
+ * @param array|null $opts
12
+ *
13
+ * @return string The URL to Stripe's OAuth form.
14
+ */
15
+ public static function authorizeUrl($params = null, $opts = null)
16
+ {
17
+ $params = $params ?: [];
18
+
19
+ $base = ($opts && array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase;
20
+
21
+ $params['client_id'] = self::_getClientId($params);
22
+ if (!array_key_exists('response_type', $params)) {
23
+ $params['response_type'] = 'code';
24
+ }
25
+ $query = Util\Util::encodeParameters($params);
26
+
27
+ return $base . '/oauth/authorize?' . $query;
28
+ }
29
+
30
+ /**
31
+ * Use an authoriztion code to connect an account to your platform and
32
+ * fetch the user's credentials.
33
+ *
34
+ * @param array|null $params
35
+ * @param array|null $opts
36
+ *
37
+ * @return StripeObject Object containing the response from the API.
38
+ */
39
+ public static function token($params = null, $opts = null)
40
+ {
41
+ $base = ($opts && array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase;
42
+ $requestor = new ApiRequestor(null, $base);
43
+ list($response, $apiKey) = $requestor->request(
44
+ 'post',
45
+ '/oauth/token',
46
+ $params,
47
+ null
48
+ );
49
+ return Util\Util::convertToStripeObject($response->json, $opts);
50
+ }
51
+
52
+ /**
53
+ * Disconnects an account from your platform.
54
+ *
55
+ * @param array|null $params
56
+ * @param array|null $opts
57
+ *
58
+ * @return StripeObject Object containing the response from the API.
59
+ */
60
+ public static function deauthorize($params = null, $opts = null)
61
+ {
62
+ $params = $params ?: [];
63
+ $base = ($opts && array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase;
64
+ $requestor = new ApiRequestor(null, $base);
65
+ $params['client_id'] = self::_getClientId($params);
66
+ list($response, $apiKey) = $requestor->request(
67
+ 'post',
68
+ '/oauth/deauthorize',
69
+ $params,
70
+ null
71
+ );
72
+ return Util\Util::convertToStripeObject($response->json, $opts);
73
+ }
74
+
75
+ private static function _getClientId($params = null)
76
+ {
77
+ $clientId = ($params && array_key_exists('client_id', $params)) ? $params['client_id'] : null;
78
+ if ($clientId === null) {
79
+ $clientId = Stripe::getClientId();
80
+ }
81
+ if ($clientId === null) {
82
+ $msg = 'No client_id provided. (HINT: set your client_id using '
83
+ . '"Stripe::setClientId(<CLIENT-ID>)". You can find your client_ids '
84
+ . 'in your Stripe dashboard at '
85
+ . 'https://dashboard.stripe.com/account/applications/settings, '
86
+ . 'after registering your account as a platform. See '
87
+ . 'https://stripe.com/docs/connect/standard-accounts for details, '
88
+ . 'or email support@stripe.com if you have any questions.';
89
+ throw new Error\Authentication($msg);
90
+ }
91
+ return $clientId;
92
+ }
93
+ }
lib/stripe-gateway/lib/Order.php CHANGED
@@ -5,64 +5,40 @@ namespace Stripe;
5
  /**
6
  * Class Order
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class Order extends ApiResource
11
  {
12
- /**
13
- * @param string $id The ID of the Order to retrieve.
14
- * @param array|string|null $opts
15
- *
16
- * @return Order
17
- */
18
- public static function retrieve($id, $opts = null)
19
- {
20
- return self::_retrieve($id, $opts);
21
- }
22
-
23
- /**
24
- * @param array|null $params
25
- * @param array|string|null $opts
26
- *
27
- * @return Order The created Order.
28
- */
29
- public static function create($params = null, $opts = null)
30
- {
31
- return self::_create($params, $opts);
32
- }
33
-
34
- /**
35
- * @param string $id The ID of the order to update.
36
- * @param array|null $params
37
- * @param array|string|null $options
38
- *
39
- * @return Order The updated order.
40
- */
41
- public static function update($id, $params = null, $options = null)
42
- {
43
- return self::_update($id, $params, $options);
44
- }
45
-
46
- /**
47
- * @param array|string|null $opts
48
- *
49
- * @return Order The saved Order.
50
- */
51
- public function save($opts = null)
52
- {
53
- return $this->_save($opts);
54
- }
55
 
56
- /**
57
- * @param array|null $params
58
- * @param array|string|null $opts
59
- *
60
- * @return Collection of Orders
61
- */
62
- public static function all($params = null, $opts = null)
63
- {
64
- return self::_all($params, $opts);
65
- }
66
 
67
  /**
68
  * @return Order The paid order.
5
  /**
6
  * Class Order
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $amount_returned
12
+ * @property string $application
13
+ * @property int $application_fee
14
+ * @property string $charge
15
+ * @property int $created
16
+ * @property string $currency
17
+ * @property string $customer
18
+ * @property string $email
19
+ * @property string $external_coupon_code
20
+ * @property OrderItem[] $items
21
+ * @property bool $livemode
22
+ * @property StripeObject $metadata
23
+ * @property Collection $returns
24
+ * @property string $selected_shipping_method
25
+ * @property mixed $shipping
26
+ * @property array $shipping_methods
27
+ * @property string $status
28
+ * @property mixed $status_transitions
29
+ * @property int $updated
30
+ * @property string $upstream_id
31
+ *
32
  * @package Stripe
33
  */
34
  class Order extends ApiResource
35
  {
36
+ const OBJECT_NAME = "order";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
+ use ApiOperations\All;
39
+ use ApiOperations\Create;
40
+ use ApiOperations\Retrieve;
41
+ use ApiOperations\Update;
 
 
 
 
 
 
42
 
43
  /**
44
  * @return Order The paid order.
lib/stripe-gateway/lib/OrderItem.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class OrderItem
7
+ *
8
+ * @property string $object
9
+ * @property int $amount
10
+ * @property string $currency
11
+ * @property string $description
12
+ * @property string $parent
13
+ * @property int $quantity
14
+ * @property string $type
15
+ *
16
+ * @package Stripe
17
+ */
18
+ class OrderItem extends StripeObject
19
+ {
20
+ const OBJECT_NAME = "order_item";
21
+ }
lib/stripe-gateway/lib/OrderReturn.php CHANGED
@@ -5,29 +5,22 @@ namespace Stripe;
5
  /**
6
  * Class OrderReturn
7
  *
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class OrderReturn extends ApiResource
11
  {
12
- /**
13
- * @param string $id The ID of the OrderReturn to retrieve.
14
- * @param array|string|null $opts
15
- *
16
- * @return Order
17
- */
18
- public static function retrieve($id, $opts = null)
19
- {
20
- return self::_retrieve($id, $opts);
21
- }
22
 
23
- /**
24
- * @param array|null $params
25
- * @param array|string|null $opts
26
- *
27
- * @return Collection of OrderReturns
28
- */
29
- public static function all($params = null, $opts = null)
30
- {
31
- return self::_all($params, $opts);
32
- }
33
  }
5
  /**
6
  * Class OrderReturn
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $created
12
+ * @property string $currency
13
+ * @property OrderItem[] $items
14
+ * @property bool $livemode
15
+ * @property string $order
16
+ * @property string $refund
17
+ *
18
  * @package Stripe
19
  */
20
  class OrderReturn extends ApiResource
21
  {
22
+ const OBJECT_NAME = "order_return";
 
 
 
 
 
 
 
 
 
23
 
24
+ use ApiOperations\All;
25
+ use ApiOperations\Retrieve;
 
 
 
 
 
 
 
 
26
  }
lib/stripe-gateway/lib/PaymentIntent.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class PaymentIntent
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $amount_capturable
12
+ * @property int $amount_received
13
+ * @property string $application
14
+ * @property int $application_fee_amount
15
+ * @property int $canceled_at
16
+ * @property string $cancellation_reason
17
+ * @property string $capture_method
18
+ * @property Collection $charges
19
+ * @property string $client_secret
20
+ * @property string $confirmation_method
21
+ * @property int $created
22
+ * @property string $currency
23
+ * @property string $customer
24
+ * @property string $description
25
+ * @property mixed $last_payment_error
26
+ * @property bool $livemode
27
+ * @property StripeObject $metadata
28
+ * @property mixed $next_action
29
+ * @property string $on_behalf_of
30
+ * @property string $payment_method
31
+ * @property string[] $payment_method_types
32
+ * @property string $receipt_email
33
+ * @property string $review
34
+ * @property mixed $shipping
35
+ * @property string $source
36
+ * @property string $statement_descriptor
37
+ * @property string $status
38
+ * @property mixed $transfer_data
39
+ * @property string $transfer_group
40
+ *
41
+ * @package Stripe
42
+ */
43
+ class PaymentIntent extends ApiResource
44
+ {
45
+ const OBJECT_NAME = "payment_intent";
46
+
47
+ use ApiOperations\All;
48
+ use ApiOperations\Create;
49
+ use ApiOperations\Retrieve;
50
+ use ApiOperations\Update;
51
+
52
+ /**
53
+ * These constants are possible representations of the status field.
54
+ *
55
+ * @link https://stripe.com/docs/api/payment_intents/object#payment_intent_object-status
56
+ */
57
+ const STATUS_CANCELED = 'canceled';
58
+ const STATUS_PROCESSING = 'processing';
59
+ const STATUS_REQUIRES_ACTION = 'requires_action';
60
+ const STATUS_REQUIRES_CAPTURE = 'requires_capture';
61
+ const STATUS_REQUIRES_CONFIRMATION = 'requires_confirmation';
62
+ const STATUS_REQUIRES_PAYMENT_METHOD = 'requires_payment_method';
63
+ const STATUS_SUCCEEDED = 'succeeded';
64
+
65
+ /**
66
+ * @param array|null $params
67
+ * @param array|string|null $options
68
+ *
69
+ * @return PaymentIntent The canceled payment intent.
70
+ */
71
+ public function cancel($params = null, $options = null)
72
+ {
73
+ $url = $this->instanceUrl() . '/cancel';
74
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
75
+ $this->refreshFrom($response, $opts);
76
+ return $this;
77
+ }
78
+
79
+ /**
80
+ * @param array|null $params
81
+ * @param array|string|null $options
82
+ *
83
+ * @return PaymentIntent The captured payment intent.
84
+ */
85
+ public function capture($params = null, $options = null)
86
+ {
87
+ $url = $this->instanceUrl() . '/capture';
88
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
89
+ $this->refreshFrom($response, $opts);
90
+ return $this;
91
+ }
92
+
93
+ /**
94
+ * @param array|null $params
95
+ * @param array|string|null $options
96
+ *
97
+ * @return PaymentIntent The confirmed payment intent.
98
+ */
99
+ public function confirm($params = null, $options = null)
100
+ {
101
+ $url = $this->instanceUrl() . '/confirm';
102
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
103
+ $this->refreshFrom($response, $opts);
104
+ return $this;
105
+ }
106
+ }
lib/stripe-gateway/lib/PaymentMethod.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class PaymentMethod
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $billing_details
11
+ * @property mixed $card
12
+ * @property mixed $card_present
13
+ * @property int $created
14
+ * @property string $customer
15
+ * @property mixed $ideal
16
+ * @property bool $livemode
17
+ * @property StripeObject $metadata
18
+ * @property mixed $sepa_debit
19
+ * @property string $type
20
+ *
21
+ * @package Stripe
22
+ */
23
+ class PaymentMethod extends ApiResource
24
+ {
25
+ const OBJECT_NAME = "payment_method";
26
+
27
+ use ApiOperations\All;
28
+ use ApiOperations\Create;
29
+ use ApiOperations\Retrieve;
30
+ use ApiOperations\Update;
31
+
32
+ /**
33
+ * @param array|null $params
34
+ * @param array|string|null $opts
35
+ *
36
+ * @return PaymentMethod The attached payment method.
37
+ */
38
+ public function attach($params = null, $opts = null)
39
+ {
40
+ $url = $this->instanceUrl() . '/attach';
41
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
42
+ $this->refreshFrom($response, $opts);
43
+ return $this;
44
+ }
45
+
46
+ /**
47
+ * @param array|null $params
48
+ * @param array|string|null $opts
49
+ *
50
+ * @return PaymentMethod The detached payment method.
51
+ */
52
+ public function detach($params = null, $opts = null)
53
+ {
54
+ $url = $this->instanceUrl() . '/detach';
55
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
56
+ $this->refreshFrom($response, $opts);
57
+ return $this;
58
+ }
59
+ }
lib/stripe-gateway/lib/Payout.php ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Payout
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $arrival_date
12
+ * @property bool $automatic
13
+ * @property string $balance_transaction
14
+ * @property int $created
15
+ * @property string $currency
16
+ * @property string $description
17
+ * @property string $destination
18
+ * @property string $failure_balance_transaction
19
+ * @property string $failure_code
20
+ * @property string $failure_message
21
+ * @property bool $livemode
22
+ * @property StripeObject $metadata
23
+ * @property string $method
24
+ * @property string $source_type
25
+ * @property string $statement_descriptor
26
+ * @property string $status
27
+ * @property string $type
28
+ *
29
+ * @package Stripe
30
+ */
31
+ class Payout extends ApiResource
32
+ {
33
+ const OBJECT_NAME = "payout";
34
+
35
+ use ApiOperations\All;
36
+ use ApiOperations\Create;
37
+ use ApiOperations\Retrieve;
38
+ use ApiOperations\Update;
39
+
40
+ /**
41
+ * Types of payout failure codes.
42
+ * @link https://stripe.com/docs/api#payout_failures
43
+ */
44
+ const FAILURE_ACCOUNT_CLOSED = 'account_closed';
45
+ const FAILURE_ACCOUNT_FROZEN = 'account_frozen';
46
+ const FAILURE_BANK_ACCOUNT_RESTRICTED = 'bank_account_restricted';
47
+ const FAILURE_BANK_OWNERSHIP_CHANGED = 'bank_ownership_changed';
48
+ const FAILURE_COULD_NOT_PROCESS = 'could_not_process';
49
+ const FAILURE_DEBIT_NOT_AUTHORIZED = 'debit_not_authorized';
50
+ const FAILURE_DECLINED = 'declined';
51
+ const FAILURE_INCORRECT_ACCOUNT_HOLDER_NAME = 'incorrect_account_holder_name';
52
+ const FAILURE_INSUFFICIENT_FUNDS = 'insufficient_funds';
53
+ const FAILURE_INVALID_ACCOUNT_NUMBER = 'invalid_account_number';
54
+ const FAILURE_INVALID_CURRENCY = 'invalid_currency';
55
+ const FAILURE_NO_ACCOUNT = 'no_account';
56
+ const FAILURE_UNSUPPORTED_CARD = 'unsupported_card';
57
+
58
+ /**
59
+ * Possible string representations of the payout methods.
60
+ * @link https://stripe.com/docs/api/payouts/object#payout_object-method
61
+ */
62
+ const METHOD_STANDARD = 'standard';
63
+ const METHOD_INSTANT = 'instant';
64
+
65
+ /**
66
+ * Possible string representations of the status of the payout.
67
+ * @link https://stripe.com/docs/api/payouts/object#payout_object-status
68
+ */
69
+ const STATUS_CANCELED = 'canceled';
70
+ const STATUS_IN_TRANSIT = 'in_transit';
71
+ const STATUS_FAILED = 'failed';
72
+ const STATUS_PAID = 'paid';
73
+ const STATUS_PENDING = 'pending';
74
+
75
+ /**
76
+ * Possible string representations of the type of payout.
77
+ * @link https://stripe.com/docs/api/payouts/object#payout_object-type
78
+ */
79
+ const TYPE_BANK_ACCOUNT = 'bank_account';
80
+ const TYPE_CARD = 'card';
81
+
82
+ /**
83
+ * @return Payout The canceled payout.
84
+ */
85
+ public function cancel()
86
+ {
87
+ $url = $this->instanceUrl() . '/cancel';
88
+ list($response, $opts) = $this->_request('post', $url);
89
+ $this->refreshFrom($response, $opts);
90
+ return $this;
91
+ }
92
+ }
lib/stripe-gateway/lib/Person.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Person
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property string $account
13
+ * @property mixed $address
14
+ * @property mixed $address_kana
15
+ * @property mixed $address_kanji
16
+ * @property int $created
17
+ * @property bool $deleted
18
+ * @property mixed $dob
19
+ * @property string $email
20
+ * @property string $first_name
21
+ * @property string $first_name_kana
22
+ * @property string $first_name_kanji
23
+ * @property string $gender
24
+ * @property bool $id_number_provided
25
+ * @property string $last_name
26
+ * @property string $last_name_kana
27
+ * @property string $last_name_kanji
28
+ * @property string $maiden_name
29
+ * @property StripeObject $metadata
30
+ * @property string $phone
31
+ * @property mixed $relationship
32
+ * @property mixed $requirements
33
+ * @property bool $ssn_last_4_provided
34
+ * @property mixed $verification
35
+ */
36
+ class Person extends ApiResource
37
+ {
38
+ const OBJECT_NAME = "person";
39
+
40
+ use ApiOperations\Delete;
41
+ use ApiOperations\Update;
42
+
43
+ /**
44
+ * Possible string representations of a person's gender.
45
+ * @link https://stripe.com/docs/api/persons/object#person_object-gender
46
+ */
47
+ const GENDER_MALE = 'male';
48
+ const GENDER_FEMALE = 'female';
49
+
50
+ /**
51
+ * Possible string representations of a person's verification status.
52
+ * @link https://stripe.com/docs/api/persons/object#person_object-verification-status
53
+ */
54
+ const VERIFICATION_STATUS_PENDING = 'pending';
55
+ const VERIFICATION_STATUS_UNVERIFIED = 'unverified';
56
+ const VERIFICATION_STATUS_VERIFIED = 'verified';
57
+
58
+ /**
59
+ * @return string The API URL for this Stripe account reversal.
60
+ */
61
+ public function instanceUrl()
62
+ {
63
+ $id = $this['id'];
64
+ $account = $this['account'];
65
+ if (!$id) {
66
+ throw new Error\InvalidRequest(
67
+ "Could not determine which URL to request: " .
68
+ "class instance has invalid ID: $id",
69
+ null
70
+ );
71
+ }
72
+ $id = Util\Util::utf8($id);
73
+ $account = Util\Util::utf8($account);
74
+
75
+ $base = Account::classUrl();
76
+ $accountExtn = urlencode($account);
77
+ $extn = urlencode($id);
78
+ return "$base/$accountExtn/persons/$extn";
79
+ }
80
+
81
+ /**
82
+ * @param array|string $_id
83
+ * @param array|string|null $_opts
84
+ *
85
+ * @throws \Stripe\Error\InvalidRequest
86
+ */
87
+ public static function retrieve($_id, $_opts = null)
88
+ {
89
+ $msg = "Persons cannot be accessed without an account ID. " .
90
+ "Retrieve a Person using \$account->retrievePerson('person_id') instead.";
91
+ throw new Error\InvalidRequest($msg, null);
92
+ }
93
+
94
+ /**
95
+ * @param string $_id
96
+ * @param array|null $_params
97
+ * @param array|string|null $_options
98
+ *
99
+ * @throws \Stripe\Error\InvalidRequest
100
+ */
101
+ public static function update($_id, $_params = null, $_options = null)
102
+ {
103
+ $msg = "Persons cannot be accessed without an account ID. " .
104
+ "Retrieve a Person using \$account->retrievePerson('person_id') instead.";
105
+ throw new Error\InvalidRequest($msg, null);
106
+ }
107
+ }
lib/stripe-gateway/lib/Plan.php CHANGED
@@ -6,72 +6,34 @@ namespace Stripe;
6
  * Class Plan
7
  *
8
  * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class Plan extends ApiResource
11
  {
12
- /**
13
- * @param string $id The ID of the plan to retrieve.
14
- * @param array|string|null $opts
15
- *
16
- * @return Plan
17
- */
18
- public static function retrieve($id, $opts = null)
19
- {
20
- return self::_retrieve($id, $opts);
21
- }
22
-
23
- /**
24
- * @param array|null $params
25
- * @param array|string|null $opts
26
- *
27
- * @return Plan The created plan.
28
- */
29
- public static function create($params = null, $opts = null)
30
- {
31
- return self::_create($params, $opts);
32
- }
33
-
34
- /**
35
- * @param string $id The ID of the plan to update.
36
- * @param array|null $params
37
- * @param array|string|null $options
38
- *
39
- * @return Plan The updated plan.
40
- */
41
- public static function update($id, $params = null, $options = null)
42
- {
43
- return self::_update($id, $params, $options);
44
- }
45
-
46
- /**
47
- * @param array|null $params
48
- * @param array|string|null $opts
49
- *
50
- * @return Plan The deleted plan.
51
- */
52
- public function delete($params = null, $opts = null)
53
- {
54
- return $this->_delete($params, $opts);
55
- }
56
-
57
- /**
58
- * @param array|string|null $opts
59
- *
60
- * @return Plan The saved plan.
61
- */
62
- public function save($opts = null)
63
- {
64
- return $this->_save($opts);
65
- }
66
 
67
- /**
68
- * @param array|null $params
69
- * @param array|string|null $opts
70
- *
71
- * @return Collection of Plans
72
- */
73
- public static function all($params = null, $opts = null)
74
- {
75
- return self::_all($params, $opts);
76
- }
77
  }
6
  * Class Plan
7
  *
8
  * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property bool $active
13
+ * @property string $aggregate_usage
14
+ * @property int $amount
15
+ * @property string $billing_scheme
16
+ * @property int $created
17
+ * @property string $currency
18
+ * @property string $interval
19
+ * @property int $interval_count
20
+ * @property bool $livemode
21
+ * @property StripeObject $metadata
22
+ * @property string $nickname
23
+ * @property string $product
24
+ * @property mixed $tiers
25
+ * @property string $tiers_mode
26
+ * @property mixed $transform_usage
27
+ * @property int $trial_period_days
28
+ * @property string $usage_type
29
  */
30
  class Plan extends ApiResource
31
  {
32
+ const OBJECT_NAME = "plan";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
+ use ApiOperations\All;
35
+ use ApiOperations\Create;
36
+ use ApiOperations\Delete;
37
+ use ApiOperations\Retrieve;
38
+ use ApiOperations\Update;
 
 
 
 
 
39
  }
lib/stripe-gateway/lib/Product.php CHANGED
@@ -5,73 +5,42 @@ namespace Stripe;
5
  /**
6
  * Class Product
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class Product extends ApiResource
11
  {
12
- /**
13
- * @param string $id The ID of the Product to retrieve.
14
- * @param array|string|null $opts
15
- *
16
- * @return Product
17
- */
18
- public static function retrieve($id, $opts = null)
19
- {
20
- return self::_retrieve($id, $opts);
21
- }
22
-
23
- /**
24
- * @param array|null $params
25
- * @param array|string|null $opts
26
- *
27
- * @return Product The created Product.
28
- */
29
- public static function create($params = null, $opts = null)
30
- {
31
- return self::_create($params, $opts);
32
- }
33
-
34
- /**
35
- * @param string $id The ID of the product to update.
36
- * @param array|null $params
37
- * @param array|string|null $options
38
- *
39
- * @return Product The updated product.
40
- */
41
- public static function update($id, $params = null, $options = null)
42
- {
43
- return self::_update($id, $params, $options);
44
- }
45
 
46
- /**
47
- * @param array|string|null $opts
48
- *
49
- * @return Product The saved Product.
50
- */
51
- public function save($opts = null)
52
- {
53
- return $this->_save($opts);
54
- }
55
-
56
- /**
57
- * @param array|null $params
58
- * @param array|string|null $opts
59
- *
60
- * @return Collection of Products
61
- */
62
- public static function all($params = null, $opts = null)
63
- {
64
- return self::_all($params, $opts);
65
- }
66
 
67
  /**
68
- * @param array|null $params
69
- * @param array|string|null $opts
70
- *
71
- * @return Product The deleted product.
72
  */
73
- public function delete($params = null, $opts = null)
74
- {
75
- return $this->_delete($params, $opts);
76
- }
77
  }
5
  /**
6
  * Class Product
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property bool $active
11
+ * @property string[] $attributes
12
+ * @property string $caption
13
+ * @property int $created
14
+ * @property string[] $deactivate_on
15
+ * @property string $description
16
+ * @property string[] $images
17
+ * @property bool $livemode
18
+ * @property StripeObject $metadata
19
+ * @property string $name
20
+ * @property mixed $package_dimensions
21
+ * @property bool $shippable
22
+ * @property string $statement_descriptor
23
+ * @property string $type
24
+ * @property string $unit_label
25
+ * @property int $updated
26
+ * @property string $url
27
+ *
28
  * @package Stripe
29
  */
30
  class Product extends ApiResource
31
  {
32
+ const OBJECT_NAME = "product";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
+ use ApiOperations\All;
35
+ use ApiOperations\Create;
36
+ use ApiOperations\Delete;
37
+ use ApiOperations\Retrieve;
38
+ use ApiOperations\Update;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
  /**
41
+ * Possible string representations of the type of product.
42
+ * @link https://stripe.com/docs/api/service_products/object#service_product_object-type
 
 
43
  */
44
+ const TYPE_GOOD = 'good';
45
+ const TYPE_SERVICE = 'service';
 
 
46
  }
lib/stripe-gateway/lib/Radar/EarlyFraudWarning.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Radar;
4
+
5
+ /**
6
+ * Class EarlyFraudWarning
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property bool $actionable
11
+ * @property string $charge
12
+ * @property int $created
13
+ * @property string $fraud_type
14
+ * @property bool $livemode
15
+ *
16
+ * @package Stripe\Radar
17
+ */
18
+ class EarlyFraudWarning extends \Stripe\ApiResource
19
+ {
20
+ const OBJECT_NAME = "radar.early_fraud_warning";
21
+
22
+ use \Stripe\ApiOperations\All;
23
+ use \Stripe\ApiOperations\Retrieve;
24
+
25
+ /**
26
+ * Possible string representations of an early fraud warning's fraud type.
27
+ * @link https://stripe.com/docs/api/early_fraud_warnings/object#early_fraud_warning_object-fraud_type
28
+ */
29
+ const FRAUD_TYPE_CARD_NEVER_RECEIVED = 'card_never_received';
30
+ const FRAUD_TYPE_FRAUDULENT_CARD_APPLICATION = 'fraudulent_card_application';
31
+ const FRAUD_TYPE_MADE_WITH_COUNTERFEIT_CARD = 'made_with_counterfeit_card';
32
+ const FRAUD_TYPE_MADE_WITH_LOST_CARD = 'made_with_lost_card';
33
+ const FRAUD_TYPE_MADE_WITH_STOLEN_CARD = 'made_with_stolen_card';
34
+ const FRAUD_TYPE_MISC = 'misc';
35
+ const FRAUD_TYPE_UNAUTHORIZED_USE_OF_CARD = 'unauthorized_use_of_card';
36
+ }
lib/stripe-gateway/lib/Radar/ValueList.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Radar;
4
+
5
+ /**
6
+ * Class ValueList
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $alias
11
+ * @property int $created
12
+ * @property string $created_by
13
+ * @property string $item_type
14
+ * @property Collection $list_items
15
+ * @property bool $livemode
16
+ * @property StripeObject $metadata
17
+ * @property mixed $name
18
+ * @property int $updated
19
+ * @property string $updated_by
20
+ *
21
+ * @package Stripe\Radar
22
+ */
23
+ class ValueList extends \Stripe\ApiResource
24
+ {
25
+ const OBJECT_NAME = "radar.value_list";
26
+
27
+ use \Stripe\ApiOperations\All;
28
+ use \Stripe\ApiOperations\Create;
29
+ use \Stripe\ApiOperations\Delete;
30
+ use \Stripe\ApiOperations\Retrieve;
31
+ use \Stripe\ApiOperations\Update;
32
+ }
lib/stripe-gateway/lib/Radar/ValueListItem.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Radar;
4
+
5
+ /**
6
+ * Class ValueListItem
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $created
11
+ * @property string $created_by
12
+ * @property string $list
13
+ * @property bool $livemode
14
+ * @property string $value
15
+ *
16
+ * @package Stripe\Radar
17
+ */
18
+ class ValueListItem extends \Stripe\ApiResource
19
+ {
20
+ const OBJECT_NAME = "radar.value_list_item";
21
+
22
+ use \Stripe\ApiOperations\All;
23
+ use \Stripe\ApiOperations\Create;
24
+ use \Stripe\ApiOperations\Delete;
25
+ use \Stripe\ApiOperations\Retrieve;
26
+ }
lib/stripe-gateway/lib/Recipient.php CHANGED
@@ -6,74 +6,31 @@ namespace Stripe;
6
  * Class Recipient
7
  *
8
  * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class Recipient extends ApiResource
11
  {
12
- /**
13
- * @param string $id The ID of the recipient to retrieve.
14
- * @param array|string|null $opts
15
- *
16
- * @return Recipient
17
- */
18
- public static function retrieve($id, $opts = null)
19
- {
20
- return self::_retrieve($id, $opts);
21
- }
22
-
23
- /**
24
- * @param array|null $params
25
- * @param array|string|null $opts
26
- *
27
- * @return Collection of Recipients
28
- */
29
- public static function all($params = null, $opts = null)
30
- {
31
- return self::_all($params, $opts);
32
- }
33
-
34
- /**
35
- * @param array|null $params
36
- * @param array|string|null $opts
37
- *
38
- * @return Recipient The created recipient.
39
- */
40
- public static function create($params = null, $opts = null)
41
- {
42
- return self::_create($params, $opts);
43
- }
44
-
45
- /**
46
- * @param string $id The ID of the recipient to update.
47
- * @param array|null $params
48
- * @param array|string|null $options
49
- *
50
- * @return Recipient The updated recipient.
51
- */
52
- public static function update($id, $params = null, $options = null)
53
- {
54
- return self::_update($id, $params, $options);
55
- }
56
-
57
- /**
58
- * @param array|string|null $opts
59
- *
60
- * @return Recipient The saved recipient.
61
- */
62
- public function save($opts = null)
63
- {
64
- return $this->_save($opts);
65
- }
66
-
67
- /**
68
- * @param array|null $params
69
- *
70
- * @return Recipient The deleted recipient.
71
- */
72
- public function delete($params = null, $opts = null)
73
- {
74
- return $this->_delete($params, $opts);
75
- }
76
 
 
 
 
 
 
77
 
78
  /**
79
  * @param array|null $params
@@ -82,9 +39,7 @@ class Recipient extends ApiResource
82
  */
83
  public function transfers($params = null)
84
  {
85
- if ($params === null) {
86
- $params = array();
87
- }
88
  $params['recipient'] = $this->id;
89
  $transfers = Transfer::all($params, $this->_opts);
90
  return $transfers;
6
  * Class Recipient
7
  *
8
  * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property mixed $active_account
13
+ * @property Collection $cards
14
+ * @property int $created
15
+ * @property string $default_card
16
+ * @property string $description
17
+ * @property string $email
18
+ * @property bool $livemode
19
+ * @property StripeObject $metadata
20
+ * @property string $migrated_to
21
+ * @property string $name
22
+ * @property string $rolled_back_from
23
+ * @property string $type
24
  */
25
  class Recipient extends ApiResource
26
  {
27
+ const OBJECT_NAME = "recipient";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
+ use ApiOperations\All;
30
+ use ApiOperations\Create;
31
+ use ApiOperations\Delete;
32
+ use ApiOperations\Retrieve;
33
+ use ApiOperations\Update;
34
 
35
  /**
36
  * @param array|null $params
39
  */
40
  public function transfers($params = null)
41
  {
42
+ $params = $params ?: [];
 
 
43
  $params['recipient'] = $this->id;
44
  $transfers = Transfer::all($params, $this->_opts);
45
  return $transfers;
lib/stripe-gateway/lib/RecipientTransfer.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class RecipientTransfer
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $amount_reversed
12
+ * @property string $balance_transaction
13
+ * @property string $bank_account
14
+ * @property string $card
15
+ * @property int $created
16
+ * @property string $currency
17
+ * @property int $date
18
+ * @property string $description
19
+ * @property string $destination
20
+ * @property string $failure_code
21
+ * @property string $failure_message
22
+ * @property bool $livemode
23
+ * @property StripeObject $metadata
24
+ * @property string $method
25
+ * @property string $recipient
26
+ * @property mixed $reversals
27
+ * @property bool $reversed
28
+ * @property string $source_type
29
+ * @property string $statement_descriptor
30
+ * @property string $status
31
+ * @property string $type
32
+ *
33
+ * @package Stripe
34
+ */
35
+ class RecipientTransfer extends ApiResource
36
+ {
37
+ const OBJECT_NAME = "recipient_transfer";
38
+ }
lib/stripe-gateway/lib/Refund.php CHANGED
@@ -8,72 +8,53 @@ namespace Stripe;
8
  * @property string $id
9
  * @property string $object
10
  * @property int $amount
11
- * @property mixed $balance_transaction
12
  * @property string $charge
13
  * @property int $created
14
  * @property string $currency
15
- * @property mixed $metadata
16
- * @property mixed $reason
17
- * @property mixed $receipt_number
 
 
 
 
18
  * @property string $status
 
19
  *
20
  * @package Stripe
21
  */
22
  class Refund extends ApiResource
23
  {
 
24
 
25
- /**
26
- * @param string $id The ID of the refund to retrieve.
27
- * @param array|string|null $options
28
- *
29
- * @return Refund
30
- */
31
- public static function retrieve($id, $options = null)
32
- {
33
- return self::_retrieve($id, $options);
34
- }
35
-
36
- /**
37
- * @param string $id The ID of the refund to update.
38
- * @param array|null $params
39
- * @param array|string|null $options
40
- *
41
- * @return Refund The updated refund.
42
- */
43
- public static function update($id, $params = null, $options = null)
44
- {
45
- return self::_update($id, $params, $options);
46
- }
47
 
48
  /**
49
- * @param array|null $params
50
- * @param array|string|null $options
51
- *
52
- * @return Collection of Refunds
53
  */
54
- public static function all($params = null, $options = null)
55
- {
56
- return self::_all($params, $options);
57
- }
58
 
59
  /**
60
- * @param array|null $params
61
- * @param array|string|null $options
62
- *
63
- * @return Refund The created refund.
64
  */
65
- public static function create($params = null, $options = null)
66
- {
67
- return self::_create($params, $options);
68
- }
69
 
70
  /**
71
- * @param array|string|null $opts
72
- *
73
- * @return Refund The saved refund.
74
  */
75
- public function save($opts = null)
76
- {
77
- return $this->_save($opts);
78
- }
79
  }
8
  * @property string $id
9
  * @property string $object
10
  * @property int $amount
11
+ * @property string $balance_transaction
12
  * @property string $charge
13
  * @property int $created
14
  * @property string $currency
15
+ * @property string $description
16
+ * @property string $failure_balance_transaction
17
+ * @property string $failure_reason
18
+ * @property StripeObject $metadata
19
+ * @property string $reason
20
+ * @property string $receipt_number
21
+ * @property string $source_transfer_reversal
22
  * @property string $status
23
+ * @property string $transfer_reversal
24
  *
25
  * @package Stripe
26
  */
27
  class Refund extends ApiResource
28
  {
29
+ const OBJECT_NAME = "refund";
30
 
31
+ use ApiOperations\All;
32
+ use ApiOperations\Create;
33
+ use ApiOperations\Retrieve;
34
+ use ApiOperations\Update;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  /**
37
+ * Possible string representations of the failure reason.
38
+ * @link https://stripe.com/docs/api/refunds/object#refund_object-failure_reason
 
 
39
  */
40
+ const FAILURE_REASON = 'expired_or_canceled_card';
41
+ const FAILURE_REASON_LOST_OR_STOLEN_CARD = 'lost_or_stolen_card';
42
+ const FAILURE_REASON_UNKNOWN = 'unknown';
 
43
 
44
  /**
45
+ * Possible string representations of the refund reason.
46
+ * @link https://stripe.com/docs/api/refunds/object#refund_object-reason
 
 
47
  */
48
+ const REASON_DUPLICATE = 'duplicate';
49
+ const REASON_FRAUDULENT = 'fraudulent';
50
+ const REASON_REQUESTED_BY_CUSTOMER = 'requested_by_customer';
 
51
 
52
  /**
53
+ * Possible string representations of the refund status.
54
+ * @link https://stripe.com/docs/api/refunds/object#refund_object-status
 
55
  */
56
+ const STATUS_CANCELED = 'canceled';
57
+ const STATUS_FAILED = 'failed';
58
+ const STATUS_PENDING = 'pending';
59
+ const STATUS_SUCCEEDED = 'succeeded';
60
  }
lib/stripe-gateway/lib/Reporting/ReportRun.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Reporting;
4
+
5
+ /**
6
+ * Class ReportRun
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $created
11
+ * @property string $error
12
+ * @property bool $livemode
13
+ * @property mixed $parameters
14
+ * @property string $report_type
15
+ * @property mixed $result
16
+ * @property string $status
17
+ * @property int $succeeded_at
18
+ *
19
+ * @package Stripe\Reporting
20
+ */
21
+ class ReportRun extends \Stripe\ApiResource
22
+ {
23
+ const OBJECT_NAME = "reporting.report_run";
24
+
25
+ use \Stripe\ApiOperations\All;
26
+ use \Stripe\ApiOperations\Create;
27
+ use \Stripe\ApiOperations\Retrieve;
28
+ }
lib/stripe-gateway/lib/Reporting/ReportType.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Reporting;
4
+
5
+ /**
6
+ * Class ReportType
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $data_available_end
11
+ * @property int $data_available_start
12
+ * @property string $name
13
+ * @property int $updated
14
+ * @property string $version
15
+ *
16
+ * @package Stripe\Reporting
17
+ */
18
+ class ReportType extends \Stripe\ApiResource
19
+ {
20
+ const OBJECT_NAME = "reporting.report_type";
21
+
22
+ use \Stripe\ApiOperations\All;
23
+ use \Stripe\ApiOperations\Retrieve;
24
+ }
lib/stripe-gateway/lib/RequestTelemetry.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class RequestTelemetry
7
+ *
8
+ * Tracks client request telemetry
9
+ * @package Stripe
10
+ */
11
+ class RequestTelemetry
12
+ {
13
+ public $requestId;
14
+ public $requestDuration;
15
+
16
+ /**
17
+ * Initialize a new telemetry object.
18
+ *
19
+ * @param string $requestId The request's request ID.
20
+ * @param int $requestDuration The request's duration in milliseconds.
21
+ */
22
+ public function __construct($requestId, $requestDuration)
23
+ {
24
+ $this->requestId = $requestId;
25
+ $this->requestDuration = $requestDuration;
26
+ }
27
+ }
lib/stripe-gateway/lib/Review.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Review
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $billing_zip
11
+ * @property string $charge
12
+ * @property string $closed_reason
13
+ * @property int $created
14
+ * @property string $ip_address
15
+ * @property mixed $ip_address_location
16
+ * @property bool $livemode
17
+ * @property bool $open
18
+ * @property string $opened_reason
19
+ * @property string $payment_intent
20
+ * @property string $reason
21
+ * @property mixed $session
22
+ *
23
+ * @package Stripe
24
+ */
25
+ class Review extends ApiResource
26
+ {
27
+ const OBJECT_NAME = "review";
28
+
29
+ use ApiOperations\All;
30
+ use ApiOperations\Retrieve;
31
+
32
+ /**
33
+ * Possible string representations of the current, the opening or the closure reason of the review.
34
+ * Not all of these enumeration apply to all of the ´reason´ fields. Please consult the Review object to
35
+ * determine where these are apply.
36
+ * @link https://stripe.com/docs/api/radar/reviews/object
37
+ */
38
+ const REASON_APPROVED = 'approved';
39
+ const REASON_DISPUTED = 'disputed';
40
+ const REASON_MANUAL = 'manual';
41
+ const REASON_REFUNDED = 'refunded';
42
+ const REASON_REFUNDED_AS_FRAUD = 'refunded_as_fraud';
43
+ const REASON_RULE = 'rule';
44
+
45
+ /**
46
+ * @param array|string|null $options
47
+ *
48
+ * @return Review The approved review.
49
+ */
50
+ public function approve($params = null, $options = null)
51
+ {
52
+ $url = $this->instanceUrl() . '/approve';
53
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
54
+ $this->refreshFrom($response, $opts);
55
+ return $this;
56
+ }
57
+ }
lib/stripe-gateway/lib/SKU.php CHANGED
@@ -5,73 +5,30 @@ namespace Stripe;
5
  /**
6
  * Class SKU
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class SKU extends ApiResource
11
  {
12
- /**
13
- * @param string $id The ID of the SKU to retrieve.
14
- * @param array|string|null $opts
15
- *
16
- * @return SKU
17
- */
18
- public static function retrieve($id, $opts = null)
19
- {
20
- return self::_retrieve($id, $opts);
21
- }
22
-
23
- /**
24
- * @param array|null $params
25
- * @param array|string|null $opts
26
- *
27
- * @return SKU The created SKU.
28
- */
29
- public static function create($params = null, $opts = null)
30
- {
31
- return self::_create($params, $opts);
32
- }
33
-
34
- /**
35
- * @param string $id The ID of the SKU to update.
36
- * @param array|null $params
37
- * @param array|string|null $options
38
- *
39
- * @return SKU The updated SKU.
40
- */
41
- public static function update($id, $params = null, $options = null)
42
- {
43
- return self::_update($id, $params, $options);
44
- }
45
-
46
- /**
47
- * @param array|string|null $opts
48
- *
49
- * @return SKU The saved SKU.
50
- */
51
- public function save($opts = null)
52
- {
53
- return $this->_save($opts);
54
- }
55
-
56
- /**
57
- * @param array|null $params
58
- * @param array|string|null $opts
59
- *
60
- * @return Collection of SKUs
61
- */
62
- public static function all($params = null, $opts = null)
63
- {
64
- return self::_all($params, $opts);
65
- }
66
 
67
- /**
68
- * @param array|null $params
69
- * @param array|string|null $opts
70
- *
71
- * @return SKU The deleted sku.
72
- */
73
- public function delete($params = null, $opts = null)
74
- {
75
- return $this->_delete($params, $opts);
76
- }
77
  }
5
  /**
6
  * Class SKU
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property bool $active
11
+ * @property mixed $attributes
12
+ * @property int $created
13
+ * @property string $currency
14
+ * @property string $image
15
+ * @property mixed $inventory
16
+ * @property bool $livemode
17
+ * @property StripeObject $metadata
18
+ * @property mixed $package_dimensions
19
+ * @property int $price
20
+ * @property string $product
21
+ * @property int $updated
22
+ *
23
  * @package Stripe
24
  */
25
  class SKU extends ApiResource
26
  {
27
+ const OBJECT_NAME = "sku";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
+ use ApiOperations\All;
30
+ use ApiOperations\Create;
31
+ use ApiOperations\Delete;
32
+ use ApiOperations\Retrieve;
33
+ use ApiOperations\Update;
 
 
 
 
 
34
  }
lib/stripe-gateway/lib/SetupIntent.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class SetupIntent
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $application
11
+ * @property string $client_secret
12
+ * @property int $created
13
+ * @property string $customer
14
+ * @property string $description
15
+ * @property mixed $last_setup_error
16
+ * @property bool $livemode
17
+ * @property StripeObject $metadata
18
+ * @property mixed $next_action
19
+ * @property string $on_behalf_of
20
+ * @property string $payment_method
21
+ * @property string[] $payment_method_types
22
+ * @property string $status
23
+ *
24
+ * @package Stripe
25
+ */
26
+ class SetupIntent extends ApiResource
27
+ {
28
+ const OBJECT_NAME = "setup_intent";
29
+
30
+ use ApiOperations\All;
31
+ use ApiOperations\Create;
32
+ use ApiOperations\Retrieve;
33
+ use ApiOperations\Update;
34
+
35
+ /**
36
+ * These constants are possible representations of the status field.
37
+ *
38
+ * @link https://stripe.com/docs/api/setup_intents/object#setup_intent_object-status
39
+ */
40
+ const STATUS_CANCELED = 'canceled';
41
+ const STATUS_PROCESSING = 'processing';
42
+ const STATUS_REQUIRES_ACTION = 'requires_action';
43
+ const STATUS_REQUIRES_CONFIRMATION = 'requires_confirmation';
44
+ const STATUS_REQUIRES_PAYMENT_METHOD = 'requires_payment_method';
45
+ const STATUS_SUCCEEDED = 'succeeded';
46
+
47
+ /**
48
+ * @param array|null $params
49
+ * @param array|string|null $options
50
+ *
51
+ * @return SetupIntent The canceled setup intent.
52
+ */
53
+ public function cancel($params = null, $options = null)
54
+ {
55
+ $url = $this->instanceUrl() . '/cancel';
56
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
57
+ $this->refreshFrom($response, $opts);
58
+ return $this;
59
+ }
60
+
61
+ /**
62
+ * @param array|null $params
63
+ * @param array|string|null $options
64
+ *
65
+ * @return SetupIntent The confirmed setup intent.
66
+ */
67
+ public function confirm($params = null, $options = null)
68
+ {
69
+ $url = $this->instanceUrl() . '/confirm';
70
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
71
+ $this->refreshFrom($response, $opts);
72
+ return $this;
73
+ }
74
+ }
lib/stripe-gateway/lib/Sigma/ScheduledQueryRun.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Sigma;
4
+
5
+ /**
6
+ * Class Authorization
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $created
11
+ * @property int $data_load_time
12
+ * @property string $error
13
+ * @property \Stripe\FileUpload $file
14
+ * @property bool $livemode
15
+ * @property int $result_available_until
16
+ * @property string $sql
17
+ * @property string $status
18
+ * @property string $title
19
+ *
20
+ * @package Stripe\Sigma
21
+ */
22
+ class ScheduledQueryRun extends \Stripe\ApiResource
23
+ {
24
+ const OBJECT_NAME = "scheduled_query_run";
25
+
26
+ use \Stripe\ApiOperations\All;
27
+ use \Stripe\ApiOperations\Retrieve;
28
+
29
+ public static function classUrl()
30
+ {
31
+ return "/v1/sigma/scheduled_query_runs";
32
+ }
33
+ }
lib/stripe-gateway/lib/SingletonApiResource.php CHANGED
@@ -22,7 +22,9 @@ abstract class SingletonApiResource extends ApiResource
22
  */
23
  public static function classUrl()
24
  {
25
- $base = static::className();
 
 
26
  return "/v1/${base}";
27
  }
28
 
22
  */
23
  public static function classUrl()
24
  {
25
+ // Replace dots with slashes for namespaced resources, e.g. if the object's name is
26
+ // "foo.bar", then its URL will be "/v1/foo/bar".
27
+ $base = str_replace('.', '/', static::OBJECT_NAME);
28
  return "/v1/${base}";
29
  }
30
 
lib/stripe-gateway/lib/Source.php CHANGED
@@ -5,40 +5,149 @@ namespace Stripe;
5
  /**
6
  * Class Source
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class Source extends ApiResource
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  /**
13
- * @param string $id The ID of the Source to retrieve.
14
- * @param array|string|null $opts
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  *
16
- * @return Source
17
  */
18
- public static function retrieve($id, $opts = null)
19
  {
20
- return self::_retrieve($id, $opts);
21
  }
22
 
23
  /**
24
  * @param array|null $params
25
- * @param array|string|null $opts
26
  *
27
- * @return Collection of Sources
28
  */
29
- public static function all($params = null, $opts = null)
30
  {
31
- return self::_all($params, $opts);
 
 
 
 
32
  }
33
 
34
  /**
35
  * @param array|null $params
36
- * @param array|string|null $opts
37
  *
38
- * @return Source The created Source.
39
  */
40
- public static function create($params = null, $opts = null)
41
  {
42
- return self::_create($params, $opts);
 
 
 
43
  }
44
  }
5
  /**
6
  * Class Source
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $ach_credit_transfer
11
+ * @property mixed $ach_debit
12
+ * @property mixed $alipay
13
+ * @property int $amount
14
+ * @property mixed $bancontact
15
+ * @property mixed $card
16
+ * @property mixed $card_present
17
+ * @property string $client_secret
18
+ * @property mixed $code_verification
19
+ * @property int $created
20
+ * @property string $currency
21
+ * @property string $customer
22
+ * @property mixed $eps
23
+ * @property string $flow
24
+ * @property mixed $giropay
25
+ * @property mixed $ideal
26
+ * @property bool $livemode
27
+ * @property StripeObject $metadata
28
+ * @property mixed $multibanco
29
+ * @property mixed $owner
30
+ * @property mixed $p24
31
+ * @property mixed $receiver
32
+ * @property mixed $redirect
33
+ * @property mixed $sepa_debit
34
+ * @property mixed $sofort
35
+ * @property string $statement_descriptor
36
+ * @property string $status
37
+ * @property mixed $three_d_secure
38
+ * @property string $type
39
+ * @property string $usage
40
+ * @property mixed $wechat
41
+
42
  * @package Stripe
43
  */
44
  class Source extends ApiResource
45
  {
46
+ const OBJECT_NAME = "source";
47
+
48
+ use ApiOperations\Create;
49
+ use ApiOperations\Retrieve;
50
+ use ApiOperations\Update;
51
+
52
+ /**
53
+ * Possible string representations of source flows.
54
+ * @link https://stripe.com/docs/api#source_object-flow
55
+ */
56
+ const FLOW_REDIRECT = 'redirect';
57
+ const FLOW_RECEIVER = 'receiver';
58
+ const FLOW_CODE_VERIFICATION = 'code_verification';
59
+ const FLOW_NONE = 'none';
60
+
61
+ /**
62
+ * Possible string representations of source statuses.
63
+ * @link https://stripe.com/docs/api#source_object-status
64
+ */
65
+ const STATUS_CANCELED = 'canceled';
66
+ const STATUS_CHARGEABLE = 'chargeable';
67
+ const STATUS_CONSUMED = 'consumed';
68
+ const STATUS_FAILED = 'failed';
69
+ const STATUS_PENDING = 'pending';
70
+
71
+ /**
72
+ * Possible string representations of source usage.
73
+ * @link https://stripe.com/docs/api#source_object-usage
74
+ */
75
+ const USAGE_REUSABLE = 'reusable';
76
+ const USAGE_SINGLE_USE = 'single_use';
77
+
78
  /**
79
+ * @param array|null $params
80
+ * @param array|string|null $options
81
+ *
82
+ * @return Source The detached source.
83
+ */
84
+ public function detach($params = null, $options = null)
85
+ {
86
+ self::_validateParams($params);
87
+
88
+ $id = $this['id'];
89
+ if (!$id) {
90
+ $class = get_class($this);
91
+ $msg = "Could not determine which URL to request: $class instance "
92
+ . "has invalid ID: $id";
93
+ throw new Error\InvalidRequest($msg, null);
94
+ }
95
+
96
+ if ($this['customer']) {
97
+ $base = Customer::classUrl();
98
+ $parentExtn = urlencode(Util\Util::utf8($this['customer']));
99
+ $extn = urlencode(Util\Util::utf8($id));
100
+ $url = "$base/$parentExtn/sources/$extn";
101
+
102
+ list($response, $opts) = $this->_request('delete', $url, $params, $options);
103
+ $this->refreshFrom($response, $opts);
104
+ return $this;
105
+ } else {
106
+ $message = "This source object does not appear to be currently attached "
107
+ . "to a customer object.";
108
+ throw new Error\Api($message);
109
+ }
110
+ }
111
+
112
+ /**
113
+ * @param array|null $params
114
+ * @param array|string|null $options
115
+ *
116
+ * @return Source The detached source.
117
  *
118
+ * @deprecated Use the `detach` method instead.
119
  */
120
+ public function delete($params = null, $options = null)
121
  {
122
+ $this->detach($params, $options);
123
  }
124
 
125
  /**
126
  * @param array|null $params
127
+ * @param array|string|null $options
128
  *
129
+ * @return Collection The list of source transactions.
130
  */
131
+ public function sourceTransactions($params = null, $options = null)
132
  {
133
+ $url = $this->instanceUrl() . '/source_transactions';
134
+ list($response, $opts) = $this->_request('get', $url, $params, $options);
135
+ $obj = Util\Util::convertToStripeObject($response, $opts);
136
+ $obj->setLastResponse($response);
137
+ return $obj;
138
  }
139
 
140
  /**
141
  * @param array|null $params
142
+ * @param array|string|null $options
143
  *
144
+ * @return Source The verified source.
145
  */
146
+ public function verify($params = null, $options = null)
147
  {
148
+ $url = $this->instanceUrl() . '/verify';
149
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
150
+ $this->refreshFrom($response, $opts);
151
+ return $this;
152
  }
153
  }
lib/stripe-gateway/lib/SourceTransaction.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class SourceTransaction
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $created
12
+ * @property string $customer_data
13
+ * @property string $currency
14
+ * @property string $type
15
+ * @property mixed $ach_credit_transfer
16
+ *
17
+ * @package Stripe
18
+ */
19
+ class SourceTransaction extends ApiResource
20
+ {
21
+ const OBJECT_NAME = "source_transaction";
22
+ }
lib/stripe-gateway/lib/Stripe.php CHANGED
@@ -12,11 +12,17 @@ class Stripe
12
  // @var string The Stripe API key to be used for requests.
13
  public static $apiKey;
14
 
 
 
 
15
  // @var string The base URL for the Stripe API.
16
  public static $apiBase = 'https://api.stripe.com';
17
 
 
 
 
18
  // @var string The base URL for the Stripe API uploads endpoint.
19
- public static $apiUploadBase = 'https://uploads.stripe.com';
20
 
21
  // @var string|null The version of the Stripe API to use for requests.
22
  public static $apiVersion = null;
@@ -24,10 +30,32 @@ class Stripe
24
  // @var string|null The account ID for connected accounts requests.
25
  public static $accountId = null;
26
 
 
 
 
27
  // @var boolean Defaults to true.
28
  public static $verifySslCerts = true;
29
 
30
- const VERSION = '3.21.0';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  /**
33
  * @return string The API key used for requests.
@@ -37,6 +65,35 @@ class Stripe
37
  return self::$apiKey;
38
  }
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  /**
41
  * Sets the API key to be used for requests.
42
  *
@@ -47,6 +104,16 @@ class Stripe
47
  self::$apiKey = $apiKey;
48
  }
49
 
 
 
 
 
 
 
 
 
 
 
50
  /**
51
  * @return string The API version used for requests. null if we're using the
52
  * latest version.
@@ -64,6 +131,30 @@ class Stripe
64
  self::$apiVersion = $apiVersion;
65
  }
66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  /**
68
  * @return boolean
69
  */
@@ -97,4 +188,78 @@ class Stripe
97
  {
98
  self::$accountId = $accountId;
99
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  }
12
  // @var string The Stripe API key to be used for requests.
13
  public static $apiKey;
14
 
15
+ // @var string The Stripe client_id to be used for Connect requests.
16
+ public static $clientId;
17
+
18
  // @var string The base URL for the Stripe API.
19
  public static $apiBase = 'https://api.stripe.com';
20
 
21
+ // @var string The base URL for the OAuth API.
22
+ public static $connectBase = 'https://connect.stripe.com';
23
+
24
  // @var string The base URL for the Stripe API uploads endpoint.
25
+ public static $apiUploadBase = 'https://files.stripe.com';
26
 
27
  // @var string|null The version of the Stripe API to use for requests.
28
  public static $apiVersion = null;
30
  // @var string|null The account ID for connected accounts requests.
31
  public static $accountId = null;
32
 
33
+ // @var string Path to the CA bundle used to verify SSL certificates
34
+ public static $caBundlePath = null;
35
+
36
  // @var boolean Defaults to true.
37
  public static $verifySslCerts = true;
38
 
39
+ // @var array The application's information (name, version, URL)
40
+ public static $appInfo = null;
41
+
42
+ // @var Util\LoggerInterface|null The logger to which the library will
43
+ // produce messages.
44
+ public static $logger = null;
45
+
46
+ // @var int Maximum number of request retries
47
+ public static $maxNetworkRetries = 0;
48
+
49
+ // @var boolean Whether client telemetry is enabled. Defaults to true.
50
+ public static $enableTelemetry = true;
51
+
52
+ // @var float Maximum delay between retries, in seconds
53
+ private static $maxNetworkRetryDelay = 2.0;
54
+
55
+ // @var float Initial delay between retries, in seconds
56
+ private static $initialNetworkRetryDelay = 0.5;
57
+
58
+ const VERSION = '6.43.1';
59
 
60
  /**
61
  * @return string The API key used for requests.
65
  return self::$apiKey;
66
  }
67
 
68
+ /**
69
+ * @return string The client_id used for Connect requests.
70
+ */
71
+ public static function getClientId()
72
+ {
73
+ return self::$clientId;
74
+ }
75
+
76
+ /**
77
+ * @return Util\LoggerInterface The logger to which the library will
78
+ * produce messages.
79
+ */
80
+ public static function getLogger()
81
+ {
82
+ if (self::$logger == null) {
83
+ return new Util\DefaultLogger();
84
+ }
85
+ return self::$logger;
86
+ }
87
+
88
+ /**
89
+ * @param Util\LoggerInterface $logger The logger to which the library
90
+ * will produce messages.
91
+ */
92
+ public static function setLogger($logger)
93
+ {
94
+ self::$logger = $logger;
95
+ }
96
+
97
  /**
98
  * Sets the API key to be used for requests.
99
  *
104
  self::$apiKey = $apiKey;
105
  }
106
 
107
+ /**
108
+ * Sets the client_id to be used for Connect requests.
109
+ *
110
+ * @param string $clientId
111
+ */
112
+ public static function setClientId($clientId)
113
+ {
114
+ self::$clientId = $clientId;
115
+ }
116
+
117
  /**
118
  * @return string The API version used for requests. null if we're using the
119
  * latest version.
131
  self::$apiVersion = $apiVersion;
132
  }
133
 
134
+ /**
135
+ * @return string
136
+ */
137
+ private static function getDefaultCABundlePath()
138
+ {
139
+ return realpath(dirname(__FILE__) . '/../data/ca-certificates.crt');
140
+ }
141
+
142
+ /**
143
+ * @return string
144
+ */
145
+ public static function getCABundlePath()
146
+ {
147
+ return self::$caBundlePath ?: self::getDefaultCABundlePath();
148
+ }
149
+
150
+ /**
151
+ * @param string $caBundlePath
152
+ */
153
+ public static function setCABundlePath($caBundlePath)
154
+ {
155
+ self::$caBundlePath = $caBundlePath;
156
+ }
157
+
158
  /**
159
  * @return boolean
160
  */
188
  {
189
  self::$accountId = $accountId;
190
  }
191
+
192
+ /**
193
+ * @return array | null The application's information
194
+ */
195
+ public static function getAppInfo()
196
+ {
197
+ return self::$appInfo;
198
+ }
199
+
200
+ /**
201
+ * @param string $appName The application's name
202
+ * @param string $appVersion The application's version
203
+ * @param string $appUrl The application's URL
204
+ */
205
+ public static function setAppInfo($appName, $appVersion = null, $appUrl = null, $appPartnerId = null)
206
+ {
207
+ self::$appInfo = self::$appInfo ?: [];
208
+ self::$appInfo['name'] = $appName;
209
+ self::$appInfo['partner_id'] = $appPartnerId;
210
+ self::$appInfo['url'] = $appUrl;
211
+ self::$appInfo['version'] = $appVersion;
212
+ }
213
+
214
+ /**
215
+ * @return int Maximum number of request retries
216
+ */
217
+ public static function getMaxNetworkRetries()
218
+ {
219
+ return self::$maxNetworkRetries;
220
+ }
221
+
222
+ /**
223
+ * @param int $maxNetworkRetries Maximum number of request retries
224
+ */
225
+ public static function setMaxNetworkRetries($maxNetworkRetries)
226
+ {
227
+ self::$maxNetworkRetries = $maxNetworkRetries;
228
+ }
229
+
230
+ /**
231
+ * @return float Maximum delay between retries, in seconds
232
+ */
233
+ public static function getMaxNetworkRetryDelay()
234
+ {
235
+ return self::$maxNetworkRetryDelay;
236
+ }
237
+
238
+ /**
239
+ * @return float Initial delay between retries, in seconds
240
+ */
241
+ public static function getInitialNetworkRetryDelay()
242
+ {
243
+ return self::$initialNetworkRetryDelay;
244
+ }
245
+
246
+ /**
247
+ * @return bool Whether client telemetry is enabled
248
+ */
249
+ public static function getEnableTelemetry()
250
+ {
251
+ return self::$enableTelemetry;
252
+ }
253
+
254
+ /**
255
+ * @param bool $enableTelemetry Enables client telemetry.
256
+ *
257
+ * Client telemetry enables timing and request metrics to be sent back to Stripe as an HTTP Header
258
+ * with the current request. This enables Stripe to do latency and metrics analysis without adding extra
259
+ * overhead (such as extra network calls) on the client.
260
+ */
261
+ public static function setEnableTelemetry($enableTelemetry)
262
+ {
263
+ self::$enableTelemetry = $enableTelemetry;
264
+ }
265
  }
lib/stripe-gateway/lib/StripeObject.php CHANGED
@@ -2,126 +2,158 @@
2
 
3
  namespace Stripe;
4
 
5
- use ArrayAccess;
6
- use InvalidArgumentException;
7
-
8
  /**
9
  * Class StripeObject
10
  *
11
  * @package Stripe
12
  */
13
- class StripeObject implements ArrayAccess, JsonSerializable
14
  {
15
- /**
16
- * @var Util\Set Attributes that should not be sent to the API because
17
- * they're not updatable (e.g. API key, ID).
18
- */
19
- public static $permanentAttributes;
20
- /**
21
- * @var Util\Set Attributes that are nested but still updatable from
22
- * the parent class's URL (e.g. metadata).
23
- */
24
- public static $nestedUpdatableAttributes;
25
-
26
- public static function init()
27
- {
28
- self::$permanentAttributes = new Util\Set(array('_opts', 'id'));
29
- self::$nestedUpdatableAttributes = new Util\Set(array(
30
- 'metadata', 'legal_entity', 'address', 'dob', 'transfer_schedule', 'verification',
31
- 'tos_acceptance', 'personal_address',
32
- // will make the array into an AttachedObject: weird, but works for now
33
- 'additional_owners', 0, 1, 2, 3, 4, // Max 3, but leave the 4th so errors work properly
34
- 'inventory'
35
- ));
36
- }
37
 
38
  /**
39
- * @return object The last response from the Stripe API
 
40
  */
41
- public function getLastResponse()
42
  {
43
- return $this->_lastResponse;
 
 
 
 
 
 
44
  }
45
 
46
  /**
47
- * @param ApiResponse
 
 
 
 
 
 
 
 
 
48
  *
49
- * @return void Set the last response from the Stripe API
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  */
51
- public function setLastResponse($resp)
52
  {
53
- $this->_lastResponse = $resp;
 
 
 
 
 
 
 
 
 
 
 
 
54
  }
55
 
56
- protected $_opts;
57
- protected $_values;
58
- protected $_unsavedValues;
59
- protected $_transientValues;
60
- protected $_retrieveOptions;
61
- protected $_lastResponse;
62
-
63
  public function __construct($id = null, $opts = null)
64
  {
65
- $this->_opts = $opts ? $opts : new Util\RequestOptions();
66
- $this->_values = array();
 
 
67
  $this->_unsavedValues = new Util\Set();
68
  $this->_transientValues = new Util\Set();
69
-
70
- $this->_retrieveOptions = array();
71
- if (is_array($id)) {
72
- foreach ($id as $key => $value) {
73
- if ($key != 'id') {
74
- $this->_retrieveOptions[$key] = $value;
75
- }
76
- }
77
- $id = $id['id'];
78
- }
79
-
80
  if ($id !== null) {
81
- $this->id = $id;
82
  }
83
  }
84
 
85
  // Standard accessor magic methods
86
  public function __set($k, $v)
87
  {
 
 
 
 
 
 
 
88
  if ($v === "") {
89
- throw new InvalidArgumentException(
90
  'You cannot set \''.$k.'\'to an empty string. '
91
  .'We interpret empty strings as NULL in requests. '
92
  .'You may set obj->'.$k.' = NULL to delete the property'
93
  );
94
  }
95
 
96
- if (self::$nestedUpdatableAttributes->includes($k)
97
- && isset($this->$k) && $this->$k instanceof AttachedObject && is_array($v)) {
98
- $this->$k->replaceWith($v);
99
- } else {
100
- // TODO: may want to clear from $_transientValues (Won't be user-visible).
101
- $this->_values[$k] = $v;
102
- }
103
- if (!self::$permanentAttributes->includes($k)) {
104
- $this->_unsavedValues->add($k);
105
- }
106
  }
107
 
108
  public function __isset($k)
109
  {
110
  return isset($this->_values[$k]);
111
  }
 
112
  public function __unset($k)
113
  {
114
  unset($this->_values[$k]);
115
  $this->_transientValues->add($k);
116
  $this->_unsavedValues->discard($k);
117
  }
 
118
  public function &__get($k)
119
  {
120
  // function should return a reference, using $nullval to return a reference to null
121
  $nullval = null;
122
  if (!empty($this->_values) && array_key_exists($k, $this->_values)) {
123
  return $this->_values[$k];
124
- } else if (!empty($this->_transientValues) && $this->_transientValues->includes($k)) {
125
  $class = get_class($this);
126
  $attrs = join(', ', array_keys($this->_values));
127
  $message = "Stripe Notice: Undefined property of $class instance: $k. "
@@ -130,15 +162,21 @@ class StripeObject implements ArrayAccess, JsonSerializable
130
  . "with the result returned by Stripe's API, "
131
  . "probably as a result of a save(). The attributes currently "
132
  . "available on this object are: $attrs";
133
- error_log($message);
134
  return $nullval;
135
  } else {
136
  $class = get_class($this);
137
- error_log("Stripe Notice: Undefined property of $class instance: $k");
138
  return $nullval;
139
  }
140
  }
141
 
 
 
 
 
 
 
142
  // ArrayAccess methods
143
  public function offsetSet($k, $v)
144
  {
@@ -154,25 +192,37 @@ class StripeObject implements ArrayAccess, JsonSerializable
154
  {
155
  unset($this->$k);
156
  }
 
157
  public function offsetGet($k)
158
  {
159
  return array_key_exists($k, $this->_values) ? $this->_values[$k] : null;
160
  }
161
 
 
 
 
 
 
 
162
  public function keys()
163
  {
164
  return array_keys($this->_values);
165
  }
166
 
 
 
 
 
 
167
  /**
168
  * This unfortunately needs to be public to be used in Util\Util
169
  *
170
  * @param array $values
171
- * @param array $opts
172
  *
173
- * @return StripeObject The object constructed from the given values.
174
  */
175
- public static function constructFrom($values, $opts)
176
  {
177
  $obj = new static(isset($values['id']) ? $values['id'] : null);
178
  $obj->refreshFrom($values, $opts);
@@ -183,16 +233,18 @@ class StripeObject implements ArrayAccess, JsonSerializable
183
  * Refreshes this object using the provided values.
184
  *
185
  * @param array $values
186
- * @param array|Util\RequestOptions $opts
187
  * @param boolean $partial Defaults to false.
188
  */
189
  public function refreshFrom($values, $opts, $partial = false)
190
  {
191
- if (is_array($opts)) {
192
- $opts = Util\RequestOptions::parse($opts);
193
- }
194
 
195
- $this->_opts = $opts;
 
 
 
 
196
 
197
  // Wipe old state before setting new. This is useful for e.g. updating a
198
  // customer, where there is no persistent card parameter. Mark those values
@@ -200,30 +252,43 @@ class StripeObject implements ArrayAccess, JsonSerializable
200
  if ($partial) {
201
  $removed = new Util\Set();
202
  } else {
203
- $removed = array_diff(array_keys($this->_values), array_keys($values));
204
  }
205
 
206
- foreach ($removed as $k) {
207
- if (self::$permanentAttributes->includes($k)) {
208
- continue;
209
- }
210
-
211
  unset($this->$k);
212
  }
213
 
 
214
  foreach ($values as $k => $v) {
215
- if (self::$permanentAttributes->includes($k) && isset($this[$k])) {
216
- continue;
217
- }
 
218
 
219
- if (self::$nestedUpdatableAttributes->includes($k) && is_array($v)) {
220
- $this->_values[$k] = AttachedObject::constructFrom($v, $opts);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  } else {
222
  $this->_values[$k] = Util\Util::convertToStripeObject($v, $opts);
223
  }
224
-
225
- $this->_transientValues->discard($k);
226
- $this->_unsavedValues->discard($k);
 
227
  }
228
  }
229
 
@@ -231,33 +296,107 @@ class StripeObject implements ArrayAccess, JsonSerializable
231
  * @return array A recursive mapping of attributes to values for this object,
232
  * including the proper value for deleted attributes.
233
  */
234
- public function serializeParameters()
235
  {
236
- $params = array();
237
- if ($this->_unsavedValues) {
238
- foreach ($this->_unsavedValues->toArray() as $k) {
239
- $v = $this->$k;
240
- if ($v === null) {
241
- $v = '';
242
- }
243
-
244
- $params[$k] = $v;
 
 
 
 
 
 
 
 
 
 
 
 
245
  }
246
  }
247
 
248
- // Get nested updates.
249
- foreach (self::$nestedUpdatableAttributes->toArray() as $property) {
250
- if (isset($this->$property)) {
251
- if ($this->$property instanceof StripeObject) {
252
- $serialized = $this->$property->serializeParameters();
253
- if ($serialized) {
254
- $params[$property] = $serialized;
255
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  }
 
 
 
 
 
 
 
 
257
  }
 
 
 
258
  }
259
-
260
- return $params;
261
  }
262
 
263
  public function jsonSerialize()
@@ -267,11 +406,7 @@ class StripeObject implements ArrayAccess, JsonSerializable
267
 
268
  public function __toJSON()
269
  {
270
- if (defined('JSON_PRETTY_PRINT')) {
271
- return json_encode($this->__toArray(true), JSON_PRETTY_PRINT);
272
- } else {
273
- return json_encode($this->__toArray(true));
274
- }
275
  }
276
 
277
  public function __toString()
@@ -288,6 +423,101 @@ class StripeObject implements ArrayAccess, JsonSerializable
288
  return $this->_values;
289
  }
290
  }
291
- }
292
 
293
- StripeObject::init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  namespace Stripe;
4
 
 
 
 
5
  /**
6
  * Class StripeObject
7
  *
8
  * @package Stripe
9
  */
10
+ class StripeObject implements \ArrayAccess, \Countable, \JsonSerializable
11
  {
12
+ protected $_opts;
13
+ protected $_originalValues;
14
+ protected $_values;
15
+ protected $_unsavedValues;
16
+ protected $_transientValues;
17
+ protected $_retrieveOptions;
18
+ protected $_lastResponse;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  /**
21
+ * @return Util\Set Attributes that should not be sent to the API because
22
+ * they're not updatable (e.g. ID).
23
  */
24
+ public static function getPermanentAttributes()
25
  {
26
+ static $permanentAttributes = null;
27
+ if ($permanentAttributes === null) {
28
+ $permanentAttributes = new Util\Set([
29
+ 'id',
30
+ ]);
31
+ }
32
+ return $permanentAttributes;
33
  }
34
 
35
  /**
36
+ * Additive objects are subobjects in the API that don't have the same
37
+ * semantics as most subobjects, which are fully replaced when they're set.
38
+ * This is best illustrated by example. The `source` parameter sent when
39
+ * updating a subscription is *not* additive; if we set it:
40
+ *
41
+ * source[object]=card&source[number]=123
42
+ *
43
+ * We expect the old `source` object to have been overwritten completely. If
44
+ * the previous source had an `address_state` key associated with it and we
45
+ * didn't send one this time, that value of `address_state` is gone.
46
  *
47
+ * By contrast, additive objects are those that will have new data added to
48
+ * them while keeping any existing data in place. The only known case of its
49
+ * use is for `metadata`, but it could in theory be more general. As an
50
+ * example, say we have a `metadata` object that looks like this on the
51
+ * server side:
52
+ *
53
+ * metadata = ["old" => "old_value"]
54
+ *
55
+ * If we update the object with `metadata[new]=new_value`, the server side
56
+ * object now has *both* fields:
57
+ *
58
+ * metadata = ["old" => "old_value", "new" => "new_value"]
59
+ *
60
+ * This is okay in itself because usually users will want to treat it as
61
+ * additive:
62
+ *
63
+ * $obj->metadata["new"] = "new_value";
64
+ * $obj->save();
65
+ *
66
+ * However, in other cases, they may want to replace the entire existing
67
+ * contents:
68
+ *
69
+ * $obj->metadata = ["new" => "new_value"];
70
+ * $obj->save();
71
+ *
72
+ * This is where things get a little bit tricky because in order to clear
73
+ * any old keys that may have existed, we actually have to send an explicit
74
+ * empty string to the server. So the operation above would have to send
75
+ * this form to get the intended behavior:
76
+ *
77
+ * metadata[old]=&metadata[new]=new_value
78
+ *
79
+ * This method allows us to track which parameters are considered additive,
80
+ * and lets us behave correctly where appropriate when serializing
81
+ * parameters to be sent.
82
+ *
83
+ * @return Util\Set Set of additive parameters
84
  */
85
+ public static function getAdditiveParams()
86
  {
87
+ static $additiveParams = null;
88
+ if ($additiveParams === null) {
89
+ // Set `metadata` as additive so that when it's set directly we remember
90
+ // to clear keys that may have been previously set by sending empty
91
+ // values for them.
92
+ //
93
+ // It's possible that not every object has `metadata`, but having this
94
+ // option set when there is no `metadata` field is not harmful.
95
+ $additiveParams = new Util\Set([
96
+ 'metadata',
97
+ ]);
98
+ }
99
+ return $additiveParams;
100
  }
101
 
 
 
 
 
 
 
 
102
  public function __construct($id = null, $opts = null)
103
  {
104
+ list($id, $this->_retrieveOptions) = Util\Util::normalizeId($id);
105
+ $this->_opts = Util\RequestOptions::parse($opts);
106
+ $this->_originalValues = [];
107
+ $this->_values = [];
108
  $this->_unsavedValues = new Util\Set();
109
  $this->_transientValues = new Util\Set();
 
 
 
 
 
 
 
 
 
 
 
110
  if ($id !== null) {
111
+ $this->_values['id'] = $id;
112
  }
113
  }
114
 
115
  // Standard accessor magic methods
116
  public function __set($k, $v)
117
  {
118
+ if (static::getPermanentAttributes()->includes($k)) {
119
+ throw new \InvalidArgumentException(
120
+ "Cannot set $k on this object. HINT: you can't set: " .
121
+ join(', ', static::getPermanentAttributes()->toArray())
122
+ );
123
+ }
124
+
125
  if ($v === "") {
126
+ throw new \InvalidArgumentException(
127
  'You cannot set \''.$k.'\'to an empty string. '
128
  .'We interpret empty strings as NULL in requests. '
129
  .'You may set obj->'.$k.' = NULL to delete the property'
130
  );
131
  }
132
 
133
+ $this->_values[$k] = Util\Util::convertToStripeObject($v, $this->_opts);
134
+ $this->dirtyValue($this->_values[$k]);
135
+ $this->_unsavedValues->add($k);
 
 
 
 
 
 
 
136
  }
137
 
138
  public function __isset($k)
139
  {
140
  return isset($this->_values[$k]);
141
  }
142
+
143
  public function __unset($k)
144
  {
145
  unset($this->_values[$k]);
146
  $this->_transientValues->add($k);
147
  $this->_unsavedValues->discard($k);
148
  }
149
+
150
  public function &__get($k)
151
  {
152
  // function should return a reference, using $nullval to return a reference to null
153
  $nullval = null;
154
  if (!empty($this->_values) && array_key_exists($k, $this->_values)) {
155
  return $this->_values[$k];
156
+ } elseif (!empty($this->_transientValues) && $this->_transientValues->includes($k)) {
157
  $class = get_class($this);
158
  $attrs = join(', ', array_keys($this->_values));
159
  $message = "Stripe Notice: Undefined property of $class instance: $k. "
162
  . "with the result returned by Stripe's API, "
163
  . "probably as a result of a save(). The attributes currently "
164
  . "available on this object are: $attrs";
165
+ Stripe::getLogger()->error($message);
166
  return $nullval;
167
  } else {
168
  $class = get_class($this);
169
+ Stripe::getLogger()->error("Stripe Notice: Undefined property of $class instance: $k");
170
  return $nullval;
171
  }
172
  }
173
 
174
+ // Magic method for var_dump output. Only works with PHP >= 5.6
175
+ public function __debugInfo()
176
+ {
177
+ return $this->_values;
178
+ }
179
+
180
  // ArrayAccess methods
181
  public function offsetSet($k, $v)
182
  {
192
  {
193
  unset($this->$k);
194
  }
195
+
196
  public function offsetGet($k)
197
  {
198
  return array_key_exists($k, $this->_values) ? $this->_values[$k] : null;
199
  }
200
 
201
+ // Countable method
202
+ public function count()
203
+ {
204
+ return count($this->_values);
205
+ }
206
+
207
  public function keys()
208
  {
209
  return array_keys($this->_values);
210
  }
211
 
212
+ public function values()
213
+ {
214
+ return array_values($this->_values);
215
+ }
216
+
217
  /**
218
  * This unfortunately needs to be public to be used in Util\Util
219
  *
220
  * @param array $values
221
+ * @param null|string|array|Util\RequestOptions $opts
222
  *
223
+ * @return static The object constructed from the given values.
224
  */
225
+ public static function constructFrom($values, $opts = null)
226
  {
227
  $obj = new static(isset($values['id']) ? $values['id'] : null);
228
  $obj->refreshFrom($values, $opts);
233
  * Refreshes this object using the provided values.
234
  *
235
  * @param array $values
236
+ * @param null|string|array|Util\RequestOptions $opts
237
  * @param boolean $partial Defaults to false.
238
  */
239
  public function refreshFrom($values, $opts, $partial = false)
240
  {
241
+ $this->_opts = Util\RequestOptions::parse($opts);
 
 
242
 
243
+ $this->_originalValues = self::deepCopy($values);
244
+
245
+ if ($values instanceof StripeObject) {
246
+ $values = $values->__toArray(true);
247
+ }
248
 
249
  // Wipe old state before setting new. This is useful for e.g. updating a
250
  // customer, where there is no persistent card parameter. Mark those values
252
  if ($partial) {
253
  $removed = new Util\Set();
254
  } else {
255
+ $removed = new Util\Set(array_diff(array_keys($this->_values), array_keys($values)));
256
  }
257
 
258
+ foreach ($removed->toArray() as $k) {
 
 
 
 
259
  unset($this->$k);
260
  }
261
 
262
+ $this->updateAttributes($values, $opts, false);
263
  foreach ($values as $k => $v) {
264
+ $this->_transientValues->discard($k);
265
+ $this->_unsavedValues->discard($k);
266
+ }
267
+ }
268
 
269
+ /**
270
+ * Mass assigns attributes on the model.
271
+ *
272
+ * @param array $values
273
+ * @param null|string|array|Util\RequestOptions $opts
274
+ * @param boolean $dirty Defaults to true.
275
+ */
276
+ public function updateAttributes($values, $opts = null, $dirty = true)
277
+ {
278
+ foreach ($values as $k => $v) {
279
+ // Special-case metadata to always be cast as a StripeObject
280
+ // This is necessary in case metadata is empty, as PHP arrays do
281
+ // not differentiate between lists and hashes, and we consider
282
+ // empty arrays to be lists.
283
+ if (($k === "metadata") && (is_array($v))) {
284
+ $this->_values[$k] = StripeObject::constructFrom($v, $opts);
285
  } else {
286
  $this->_values[$k] = Util\Util::convertToStripeObject($v, $opts);
287
  }
288
+ if ($dirty) {
289
+ $this->dirtyValue($this->_values[$k]);
290
+ }
291
+ $this->_unsavedValues->add($k);
292
  }
293
  }
294
 
296
  * @return array A recursive mapping of attributes to values for this object,
297
  * including the proper value for deleted attributes.
298
  */
299
+ public function serializeParameters($force = false)
300
  {
301
+ $updateParams = [];
302
+
303
+ foreach ($this->_values as $k => $v) {
304
+ // There are a few reasons that we may want to add in a parameter for
305
+ // update:
306
+ //
307
+ // 1. The `$force` option has been set.
308
+ // 2. We know that it was modified.
309
+ // 3. Its value is a StripeObject. A StripeObject may contain modified
310
+ // values within in that its parent StripeObject doesn't know about.
311
+ //
312
+ $original = array_key_exists($k, $this->_originalValues) ? $this->_originalValues[$k] : null;
313
+ $unsaved = $this->_unsavedValues->includes($k);
314
+ if ($force || $unsaved || $v instanceof StripeObject) {
315
+ $updateParams[$k] = $this->serializeParamsValue(
316
+ $this->_values[$k],
317
+ $original,
318
+ $unsaved,
319
+ $force,
320
+ $k
321
+ );
322
  }
323
  }
324
 
325
+ // a `null` that makes it out of `serializeParamsValue` signals an empty
326
+ // value that we shouldn't appear in the serialized form of the object
327
+ $updateParams = array_filter(
328
+ $updateParams,
329
+ function ($v) {
330
+ return $v !== null;
331
+ }
332
+ );
333
+
334
+ return $updateParams;
335
+ }
336
+
337
+
338
+ public function serializeParamsValue($value, $original, $unsaved, $force, $key = null)
339
+ {
340
+ // The logic here is that essentially any object embedded in another
341
+ // object that had a `type` is actually an API resource of a different
342
+ // type that's been included in the response. These other resources must
343
+ // be updated from their proper endpoints, and therefore they are not
344
+ // included when serializing even if they've been modified.
345
+ //
346
+ // There are _some_ known exceptions though.
347
+ //
348
+ // For example, if the value is unsaved (meaning the user has set it), and
349
+ // it looks like the API resource is persisted with an ID, then we include
350
+ // the object so that parameters are serialized with a reference to its
351
+ // ID.
352
+ //
353
+ // Another example is that on save API calls it's sometimes desirable to
354
+ // update a customer's default source by setting a new card (or other)
355
+ // object with `->source=` and then saving the customer. The
356
+ // `saveWithParent` flag to override the default behavior allows us to
357
+ // handle these exceptions.
358
+ //
359
+ // We throw an error if a property was set explicitly but we can't do
360
+ // anything with it because the integration is probably not working as the
361
+ // user intended it to.
362
+ if ($value === null) {
363
+ return "";
364
+ } elseif (($value instanceof APIResource) && (!$value->saveWithParent)) {
365
+ if (!$unsaved) {
366
+ return null;
367
+ } elseif (isset($value->id)) {
368
+ return $value;
369
+ } else {
370
+ throw new \InvalidArgumentException(
371
+ "Cannot save property `$key` containing an API resource of type " .
372
+ get_class($value) . ". It doesn't appear to be persisted and is " .
373
+ "not marked as `saveWithParent`."
374
+ );
375
+ }
376
+ } elseif (is_array($value)) {
377
+ if (Util\Util::isList($value)) {
378
+ // Sequential array, i.e. a list
379
+ $update = [];
380
+ foreach ($value as $v) {
381
+ array_push($update, $this->serializeParamsValue($v, null, true, $force));
382
+ }
383
+ // This prevents an array that's unchanged from being resent.
384
+ if ($update !== $this->serializeParamsValue($original, null, true, $force, $key)) {
385
+ return $update;
386
  }
387
+ } else {
388
+ // Associative array, i.e. a map
389
+ return Util\Util::convertToStripeObject($value, $this->_opts)->serializeParameters();
390
+ }
391
+ } elseif ($value instanceof StripeObject) {
392
+ $update = $value->serializeParameters($force);
393
+ if ($original && $unsaved && $key && static::getAdditiveParams()->includes($key)) {
394
+ $update = array_merge(self::emptyValues($original), $update);
395
  }
396
+ return $update;
397
+ } else {
398
+ return $value;
399
  }
 
 
400
  }
401
 
402
  public function jsonSerialize()
406
 
407
  public function __toJSON()
408
  {
409
+ return json_encode($this->__toArray(true), JSON_PRETTY_PRINT);
 
 
 
 
410
  }
411
 
412
  public function __toString()
423
  return $this->_values;
424
  }
425
  }
 
426
 
427
+ /**
428
+ * Sets all keys within the StripeObject as unsaved so that they will be
429
+ * included with an update when `serializeParameters` is called. This
430
+ * method is also recursive, so any StripeObjects contained as values or
431
+ * which are values in a tenant array are also marked as dirty.
432
+ */
433
+ public function dirty()
434
+ {
435
+ $this->_unsavedValues = new Util\Set(array_keys($this->_values));
436
+ foreach ($this->_values as $k => $v) {
437
+ $this->dirtyValue($v);
438
+ }
439
+ }
440
+
441
+ protected function dirtyValue($value)
442
+ {
443
+ if (is_array($value)) {
444
+ foreach ($value as $v) {
445
+ $this->dirtyValue($v);
446
+ }
447
+ } elseif ($value instanceof StripeObject) {
448
+ $value->dirty();
449
+ }
450
+ }
451
+
452
+ /**
453
+ * Produces a deep copy of the given object including support for arrays
454
+ * and StripeObjects.
455
+ */
456
+ protected static function deepCopy($obj)
457
+ {
458
+ if (is_array($obj)) {
459
+ $copy = [];
460
+ foreach ($obj as $k => $v) {
461
+ $copy[$k] = self::deepCopy($v);
462
+ }
463
+ return $copy;
464
+ } elseif ($obj instanceof StripeObject) {
465
+ return $obj::constructFrom(
466
+ self::deepCopy($obj->_values),
467
+ clone $obj->_opts
468
+ );
469
+ } else {
470
+ return $obj;
471
+ }
472
+ }
473
+
474
+ /**
475
+ * Returns a hash of empty values for all the values that are in the given
476
+ * StripeObject.
477
+ */
478
+ public static function emptyValues($obj)
479
+ {
480
+ if (is_array($obj)) {
481
+ $values = $obj;
482
+ } elseif ($obj instanceof StripeObject) {
483
+ $values = $obj->_values;
484
+ } else {
485
+ throw new \InvalidArgumentException(
486
+ "empty_values got got unexpected object type: " . get_class($obj)
487
+ );
488
+ }
489
+ $update = array_fill_keys(array_keys($values), "");
490
+ return $update;
491
+ }
492
+
493
+ /**
494
+ * @return object The last response from the Stripe API
495
+ */
496
+ public function getLastResponse()
497
+ {
498
+ return $this->_lastResponse;
499
+ }
500
+
501
+ /**
502
+ * Sets the last response from the Stripe API
503
+ *
504
+ * @param ApiResponse $resp
505
+ * @return void
506
+ */
507
+ public function setLastResponse($resp)
508
+ {
509
+ $this->_lastResponse = $resp;
510
+ }
511
+
512
+ /**
513
+ * Indicates whether or not the resource has been deleted on the server.
514
+ * Note that some, but not all, resources can indicate whether they have
515
+ * been deleted.
516
+ *
517
+ * @return bool Whether the resource is deleted.
518
+ */
519
+ public function isDeleted()
520
+ {
521
+ return isset($this->_values['deleted']) ? $this->_values['deleted'] : false;
522
+ }
523
+ }
lib/stripe-gateway/lib/Subscription.php CHANGED
@@ -5,64 +5,76 @@ namespace Stripe;
5
  /**
6
  * Class Subscription
7
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * @package Stripe
9
  */
10
  class Subscription extends ApiResource
11
  {
12
- /**
13
- * These constants are possible representations of the status field.
14
- *
15
- * @link https://stripe.com/docs/api#subscription_object-status
16
- */
17
- const STATUS_ACTIVE = 'active';
18
- const STATUS_CANCELED = 'canceled';
19
- const STATUS_PAST_DUE = 'past_due';
20
- const STATUS_TRIALING = 'trialing';
21
- const STATUS_UNPAID = 'unpaid';
22
 
23
- /**
24
- * @param string $id The ID of the subscription to retrieve.
25
- * @param array|string|null $opts
26
- *
27
- * @return Subscription
28
- */
29
- public static function retrieve($id, $opts = null)
30
- {
31
- return self::_retrieve($id, $opts);
32
- }
33
-
34
- /**
35
- * @param array|null $params
36
- * @param array|string|null $opts
37
- *
38
- * @return Collection of Subscriptions
39
- */
40
- public static function all($params = null, $opts = null)
41
- {
42
- return self::_all($params, $opts);
43
  }
 
 
44
 
45
  /**
46
- * @param array|null $params
47
- * @param array|string|null $opts
48
  *
49
- * @return Subscription The created subscription.
50
  */
51
- public static function create($params = null, $opts = null)
52
- {
53
- return self::_create($params, $opts);
54
- }
 
 
 
55
 
56
- /**
57
- * @param string $id The ID of the subscription to retrieve.
58
- * @param array|null $params
59
- * @param array|string|null $options
60
- *
61
- * @return Subscription The updated subscription.
62
- */
63
- public static function update($id, $params = null, $options = null)
64
  {
65
- return self::_update($id, $params, $options);
 
 
 
 
 
 
66
  }
67
 
68
  /**
@@ -75,16 +87,6 @@ class Subscription extends ApiResource
75
  return $this->_delete($params, $opts);
76
  }
77
 
78
- /**
79
- * @param array|string|null $opts
80
- *
81
- * @return Subscription The saved subscription.
82
- */
83
- public function save($opts = null)
84
- {
85
- return $this->_save($opts);
86
- }
87
-
88
  /**
89
  * @return Subscription The updated subscription.
90
  */
@@ -92,6 +94,6 @@ class Subscription extends ApiResource
92
  {
93
  $url = $this->instanceUrl() . '/discount';
94
  list($response, $opts) = $this->_request('delete', $url);
95
- $this->refreshFrom(array('discount' => null), $opts, true);
96
  }
97
  }
5
  /**
6
  * Class Subscription
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property float $application_fee_percent
11
+ * @property string $billing
12
+ * @property int $billing_cycle_anchor
13
+ * @property mixed $billing_thresholds
14
+ * @property bool $cancel_at_period_end
15
+ * @property int $canceled_at
16
+ * @property string $collection_method
17
+ * @property int $created
18
+ * @property int $current_period_end
19
+ * @property int $current_period_start
20
+ * @property string $customer
21
+ * @property int $days_until_due
22
+ * @property string $default_payment_method
23
+ * @property string $default_source
24
+ * @property array $default_tax_rates
25
+ * @property Discount $discount
26
+ * @property int $ended_at
27
+ * @property Collection $items
28
+ * @property string $latest_invoice
29
+ * @property boolean $livemode
30
+ * @property StripeObject $metadata
31
+ * @property string $pending_setup_intent
32
+ * @property Plan $plan
33
+ * @property int $quantity
34
+ * @property SubscriptionSchedule $schedule
35
+ * @property int $start
36
+ * @property int $start_date
37
+ * @property string $status
38
+ * @property float $tax_percent
39
+ * @property int $trial_end
40
+ * @property int $trial_start
41
+ *
42
  * @package Stripe
43
  */
44
  class Subscription extends ApiResource
45
  {
46
+ const OBJECT_NAME = "subscription";
 
 
 
 
 
 
 
 
 
47
 
48
+ use ApiOperations\All;
49
+ use ApiOperations\Create;
50
+ use ApiOperations\Delete {
51
+ delete as protected _delete;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  }
53
+ use ApiOperations\Retrieve;
54
+ use ApiOperations\Update;
55
 
56
  /**
57
+ * These constants are possible representations of the status field.
 
58
  *
59
+ * @link https://stripe.com/docs/api#subscription_object-status
60
  */
61
+ const STATUS_ACTIVE = 'active';
62
+ const STATUS_CANCELED = 'canceled';
63
+ const STATUS_PAST_DUE = 'past_due';
64
+ const STATUS_TRIALING = 'trialing';
65
+ const STATUS_UNPAID = 'unpaid';
66
+ const STATUS_INCOMPLETE = 'incomplete';
67
+ const STATUS_INCOMPLETE_EXPIRED = 'incomplete_expired';
68
 
69
+ public static function getSavedNestedResources()
 
 
 
 
 
 
 
70
  {
71
+ static $savedNestedResources = null;
72
+ if ($savedNestedResources === null) {
73
+ $savedNestedResources = new Util\Set([
74
+ 'source',
75
+ ]);
76
+ }
77
+ return $savedNestedResources;
78
  }
79
 
80
  /**
87
  return $this->_delete($params, $opts);
88
  }
89
 
 
 
 
 
 
 
 
 
 
 
90
  /**
91
  * @return Subscription The updated subscription.
92
  */
94
  {
95
  $url = $this->instanceUrl() . '/discount';
96
  list($response, $opts) = $this->_request('delete', $url);
97
+ $this->refreshFrom(['discount' => null], $opts, true);
98
  }
99
  }
lib/stripe-gateway/lib/SubscriptionItem.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class SubscriptionItem
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $billing_thresholds
11
+ * @property int $created
12
+ * @property StripeObject $metadata
13
+ * @property Plan $plan
14
+ * @property int $quantity
15
+ * @property string $subscription
16
+ * @property array $tax_rates
17
+ *
18
+ * @package Stripe
19
+ */
20
+ class SubscriptionItem extends ApiResource
21
+ {
22
+ const OBJECT_NAME = "subscription_item";
23
+
24
+ const PATH_USAGE_RECORDS = '/usage_records';
25
+
26
+ use ApiOperations\All;
27
+ use ApiOperations\Create;
28
+ use ApiOperations\Delete;
29
+ use ApiOperations\NestedResource;
30
+ use ApiOperations\Retrieve;
31
+ use ApiOperations\Update;
32
+
33
+ /**
34
+ * @param string|null $id The ID of the subscription item on which to create the usage record.
35
+ * @param array|null $params
36
+ * @param array|string|null $opts
37
+ *
38
+ * @return ApiResource
39
+ */
40
+ public static function createUsageRecord($id, $params = null, $opts = null)
41
+ {
42
+ return self::_createNestedResource($id, static::PATH_USAGE_RECORDS, $params, $opts);
43
+ }
44
+
45
+ /**
46
+ * @param array|null $params
47
+ * @param array|string|null $options
48
+ *
49
+ * @return Collection The list of usage record summaries.
50
+ */
51
+ public function usageRecordSummaries($params = null, $options = null)
52
+ {
53
+ $url = $this->instanceUrl() . '/usage_record_summaries';
54
+ list($response, $opts) = $this->_request('get', $url, $params, $options);
55
+ $obj = Util\Util::convertToStripeObject($response, $opts);
56
+ $obj->setLastResponse($response);
57
+ return $obj;
58
+ }
59
+ }
lib/stripe-gateway/lib/SubscriptionSchedule.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class SubscriptionSchedule
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $billing
11
+ * @property mixed $billing_thresholds
12
+ * @property int $canceled_at
13
+ * @property int $completed_at
14
+ * @property int $created
15
+ * @property mixed $current_phase
16
+ * @property string $customer
17
+ * @property mixed $invoice_settings
18
+ * @property boolean $livemode
19
+ * @property StripeObject $metadata
20
+ * @property mixed $phases
21
+ * @property int $released_at
22
+ * @property string $released_subscription
23
+ * @property string $renewal_behavior
24
+ * @property mixed $renewal_interval
25
+ * @property string $revision
26
+ * @property string $status
27
+ * @property string $subscription
28
+ *
29
+ * @package Stripe
30
+ */
31
+ class SubscriptionSchedule extends ApiResource
32
+ {
33
+ const OBJECT_NAME = "subscription_schedule";
34
+
35
+ use ApiOperations\All;
36
+ use ApiOperations\Create;
37
+ use ApiOperations\Retrieve;
38
+ use ApiOperations\Update;
39
+ use ApiOperations\NestedResource;
40
+
41
+ /**
42
+ * @param array|null $params
43
+ * @param array|string|null $opts
44
+ *
45
+ * @return SubscriptionSchedule The canceled subscription schedule.
46
+ */
47
+ public function cancel($params = null, $opts = null)
48
+ {
49
+ $url = $this->instanceUrl() . '/cancel';
50
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
51
+ $this->refreshFrom($response, $opts);
52
+ return $this;
53
+ }
54
+
55
+ /**
56
+ * @param array|null $params
57
+ * @param array|string|null $opts
58
+ *
59
+ * @return SubscriptionSchedule The released subscription schedule.
60
+ */
61
+ public function release($params = null, $opts = null)
62
+ {
63
+ $url = $this->instanceUrl() . '/release';
64
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
65
+ $this->refreshFrom($response, $opts);
66
+ return $this;
67
+ }
68
+ }
lib/stripe-gateway/lib/TaxId.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class TaxId
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property string $country
13
+ * @property int $created
14
+ * @property string $customer
15
+ * @property bool $livemode
16
+ * @property string $type
17
+ * @property string $value
18
+ * @property mixed $verification
19
+ */
20
+ class TaxId extends ApiResource
21
+ {
22
+ const OBJECT_NAME = "tax_id";
23
+
24
+ use ApiOperations\Delete;
25
+
26
+ /**
27
+ * Possible string representations of a tax id's type.
28
+ * @link https://stripe.com/docs/api/customer_tax_ids/object#tax_id_object-type
29
+ */
30
+ const TYPE_AU_ABN = 'au_abn';
31
+ const TYPE_EU_VAT = 'eu_vat';
32
+ const TYPE_IN_GST = 'in_gst';
33
+ const TYPE_NO_VAT = 'no_vat';
34
+ const TYPE_NZ_GST = 'nz_gst';
35
+ const TYPE_UNKNOWN = 'unknown';
36
+
37
+ /**
38
+ * Possible string representations of the verification status.
39
+ * @link https://stripe.com/docs/api/customer_tax_ids/object#tax_id_object-verification
40
+ */
41
+ const VERIFICATION_STATUS_PENDING = 'pending';
42
+ const VERIFICATION_STATUS_UNAVAILABLE = 'unavailable';
43
+ const VERIFICATION_STATUS_UNVERIFIED = 'unverified';
44
+ const VERIFICATION_STATUS_VERIFIED = 'verified';
45
+
46
+ /**
47
+ * @return string The API URL for this tax id.
48
+ */
49
+ public function instanceUrl()
50
+ {
51
+ $id = $this['id'];
52
+ $customer = $this['customer'];
53
+ if (!$id) {
54
+ throw new Error\InvalidRequest(
55
+ "Could not determine which URL to request: class instance has invalid ID: $id",
56
+ null
57
+ );
58
+ }
59
+ $id = Util\Util::utf8($id);
60
+ $customer = Util\Util::utf8($customer);
61
+
62
+ $base = Customer::classUrl();
63
+ $customerExtn = urlencode($customer);
64
+ $extn = urlencode($id);
65
+ return "$base/$customerExtn/tax_ids/$extn";
66
+ }
67
+
68
+ /**
69
+ * @param array|string $_id
70
+ * @param array|string|null $_opts
71
+ *
72
+ * @throws \Stripe\Error\InvalidRequest
73
+ */
74
+ public static function retrieve($_id, $_opts = null)
75
+ {
76
+ $msg = "Tax Ids cannot be accessed without a customer ID. " .
77
+ "Retrieve a Tax Id using Customer::retrieveTaxId('tax_id') instead.";
78
+ throw new Error\InvalidRequest($msg, null);
79
+ }
80
+ }
lib/stripe-gateway/lib/TaxRate.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class TaxRate
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property bool $active
11
+ * @property int $created
12
+ * @property string $description
13
+ * @property string $display_name
14
+ * @property bool $inclusive
15
+ * @property string $jurisdiction
16
+ * @property bool $livemode
17
+ * @property StripeObject $metadata
18
+ * @property float $percentage
19
+ *
20
+ * @package Stripe
21
+ */
22
+ class TaxRate extends ApiResource
23
+ {
24
+ const OBJECT_NAME = "tax_rate";
25
+
26
+ use ApiOperations\All;
27
+ use ApiOperations\Create;
28
+ use ApiOperations\Retrieve;
29
+ use ApiOperations\Update;
30
+ }
lib/stripe-gateway/lib/Terminal/ConnectionToken.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Terminal;
4
+
5
+ /**
6
+ * Class ConnectionToken
7
+ *
8
+ * @property string $secret
9
+ *
10
+ * @package Stripe\Terminal
11
+ */
12
+ class ConnectionToken extends \Stripe\ApiResource
13
+ {
14
+ const OBJECT_NAME = "terminal.connection_token";
15
+
16
+ use \Stripe\ApiOperations\Create;
17
+ }
lib/stripe-gateway/lib/Terminal/Location.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Terminal;
4
+
5
+ /**
6
+ * Class Location
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $address
11
+ * @property bool $deleted
12
+ * @property string $display_name
13
+ *
14
+ * @package Stripe\Terminal
15
+ */
16
+ class Location extends \Stripe\ApiResource
17
+ {
18
+ const OBJECT_NAME = "terminal.location";
19
+
20
+ use \Stripe\ApiOperations\All;
21
+ use \Stripe\ApiOperations\Create;
22
+ use \Stripe\ApiOperations\Delete;
23
+ use \Stripe\ApiOperations\Retrieve;
24
+ use \Stripe\ApiOperations\Update;
25
+ }
lib/stripe-gateway/lib/Terminal/Reader.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Terminal;
4
+
5
+ /**
6
+ * Class Reader
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property bool $deleted
11
+ * @property string $device_sw_version
12
+ * @property string $device_type
13
+ * @property string $ip_address
14
+ * @property string $label
15
+ * @property string $location
16
+ * @property string $serial_number
17
+ * @property string $status
18
+ *
19
+ * @package Stripe\Terminal
20
+ */
21
+ class Reader extends \Stripe\ApiResource
22
+ {
23
+ const OBJECT_NAME = "terminal.reader";
24
+
25
+ use \Stripe\ApiOperations\All;
26
+ use \Stripe\ApiOperations\Create;
27
+ use \Stripe\ApiOperations\Delete;
28
+ use \Stripe\ApiOperations\Retrieve;
29
+ use \Stripe\ApiOperations\Update;
30
+ }
lib/stripe-gateway/lib/ThreeDSecure.php CHANGED
@@ -4,6 +4,11 @@ namespace Stripe;
4
 
5
  class ThreeDSecure extends ApiResource
6
  {
 
 
 
 
 
7
  /**
8
  * @return string The endpoint URL for the given class.
9
  */
@@ -11,15 +16,4 @@ class ThreeDSecure extends ApiResource
11
  {
12
  return "/v1/3d_secure";
13
  }
14
-
15
- /**
16
- * @param array|null $params
17
- * @param array|string|null $opts
18
- *
19
- * @return ThreeDSecure The created 3D Secure object.
20
- */
21
- public static function create($params = null, $opts = null)
22
- {
23
- return self::_create($params, $opts);
24
- }
25
  }
4
 
5
  class ThreeDSecure extends ApiResource
6
  {
7
+ const OBJECT_NAME = "three_d_secure";
8
+
9
+ use ApiOperations\Create;
10
+ use ApiOperations\Retrieve;
11
+
12
  /**
13
  * @return string The endpoint URL for the given class.
14
  */
16
  {
17
  return "/v1/3d_secure";
18
  }
 
 
 
 
 
 
 
 
 
 
 
19
  }
lib/stripe-gateway/lib/Token.php CHANGED
@@ -7,9 +7,9 @@ namespace Stripe;
7
  *
8
  * @property string $id
9
  * @property string $object
10
- * @property mixed $bank_account
11
- * @property mixed $card
12
- * @property mixed $client_ip
13
  * @property int $created
14
  * @property bool $livemode
15
  * @property string $type
@@ -19,25 +19,17 @@ namespace Stripe;
19
  */
20
  class Token extends ApiResource
21
  {
22
- /**
23
- * @param string $id The ID of the token to retrieve.
24
- * @param array|string|null $opts
25
- *
26
- * @return Token
27
- */
28
- public static function retrieve($id, $opts = null)
29
- {
30
- return self::_retrieve($id, $opts);
31
- }
32
 
33
  /**
34
- * @param array|null $params
35
- * @param array|string|null $opts
36
- *
37
- * @return Token The created token.
38
  */
39
- public static function create($params = null, $opts = null)
40
- {
41
- return self::_create($params, $opts);
42
- }
43
  }
7
  *
8
  * @property string $id
9
  * @property string $object
10
+ * @property BankAccount $bank_account
11
+ * @property Card $card
12
+ * @property string $client_ip
13
  * @property int $created
14
  * @property bool $livemode
15
  * @property string $type
19
  */
20
  class Token extends ApiResource
21
  {
22
+ const OBJECT_NAME = "token";
23
+
24
+ use ApiOperations\Create;
25
+ use ApiOperations\Retrieve;
 
 
 
 
 
 
26
 
27
  /**
28
+ * Possible string representations of the token type.
29
+ * @link https://stripe.com/docs/api/tokens/object#token_object-type
 
 
30
  */
31
+ const TYPE_ACCOUNT = 'account';
32
+ const TYPE_BANK_ACCOUNT = 'bank_account';
33
+ const TYPE_CARD = 'card';
34
+ const TYPE_PII = 'pii';
35
  }
lib/stripe-gateway/lib/Topup.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Topup
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property string $balance_transaction
12
+ * @property int $created
13
+ * @property string $currency
14
+ * @property string $description
15
+ * @property int $expected_availability_date
16
+ * @property string $failure_code
17
+ * @property string $failure_message
18
+ * @property bool $livemode
19
+ * @property StripeObject $metadata
20
+ * @property mixed $source
21
+ * @property string $statement_descriptor
22
+ * @property string $status
23
+ * @property string $transfer_group
24
+ *
25
+ * @package Stripe
26
+ */
27
+ class Topup extends ApiResource
28
+ {
29
+ const OBJECT_NAME = "topup";
30
+
31
+ use ApiOperations\All;
32
+ use ApiOperations\Create;
33
+ use ApiOperations\Retrieve;
34
+ use ApiOperations\Update;
35
+
36
+ /**
37
+ * Possible string representations of the status of the top-up.
38
+ * @link https://stripe.com/docs/api/topups/object#topup_object-status
39
+ */
40
+ const STATUS_CANCELED = 'canceled';
41
+ const STATUS_FAILED = 'failed';
42
+ const STATUS_PENDING = 'pending';
43
+ const STATUS_REVERSED = 'reversed';
44
+ const STATUS_SUCCEEDED = 'succeeded';
45
+
46
+ /**
47
+ * @param array|null $params
48
+ * @param array|string|null $options
49
+ *
50
+ * @return Topup The canceled topup.
51
+ */
52
+ public function cancel($params = null, $options = null)
53
+ {
54
+ $url = $this->instanceUrl() . '/cancel';
55
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
56
+ $this->refreshFrom($response, $opts);
57
+ return $this;
58
+ }
59
+ }
lib/stripe-gateway/lib/Transfer.php CHANGED
@@ -9,107 +9,112 @@ namespace Stripe;
9
  * @property string $object
10
  * @property int $amount
11
  * @property int $amount_reversed
12
- * @property mixed $application_fee
13
  * @property string $balance_transaction
14
  * @property int $created
15
  * @property string $currency
16
- * @property int $date
17
- * @property mixed $description
18
- * @property mixed $destination
19
- * @property mixed $destination_payment
20
- * @property mixed $failure_code
21
- * @property mixed $failure_message
22
- * @property mixed $fraud_details
23
- * @property mixed $invoice
24
  * @property bool $livemode
25
- * @property mixed $metadata
26
- * @property mixed $recipient
27
- * @property mixed $reversals
28
  * @property bool $reversed
29
- * @property mixed $source_transaction
30
  * @property string $source_type
31
- * @property mixed $statement_descriptor
32
- * @property string $status
33
- * @property string $type
34
  *
35
  * @package Stripe
36
  */
37
  class Transfer extends ApiResource
38
  {
 
 
 
 
 
 
 
 
 
 
39
  /**
40
- * @param string $id The ID of the transfer to retrieve.
41
- * @param array|string|null $opts
42
- *
43
- * @return Transfer
44
  */
45
- public static function retrieve($id, $opts = null)
46
- {
47
- return self::_retrieve($id, $opts);
48
- }
49
 
50
  /**
51
- * @param array|null $params
52
- * @param array|string|null $opts
53
- *
54
- * @return Collection of Transfers
55
  */
56
- public static function all($params = null, $opts = null)
57
  {
58
- return self::_all($params, $opts);
 
 
 
59
  }
60
 
61
  /**
62
- * @param array|null $params
63
- * @param array|string|null $opts
64
- *
65
- * @return Transfer The created transfer.
66
  */
67
- public static function create($params = null, $opts = null)
68
  {
69
- return self::_create($params, $opts);
 
 
 
70
  }
71
 
72
  /**
73
- * @param string $id The ID of the transfer to update.
74
  * @param array|null $params
75
- * @param array|string|null $options
76
  *
77
- * @return Transfer The updated transfer.
78
  */
79
- public static function update($id, $params = null, $options = null)
80
  {
81
- return self::_update($id, $params, $options);
82
  }
83
 
84
  /**
85
- * @return TransferReversal The created transfer reversal.
 
 
 
 
 
86
  */
87
- public function reverse($params = null, $opts = null)
88
  {
89
- $url = $this->instanceUrl() . '/reversals';
90
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
91
- $this->refreshFrom($response, $opts);
92
- return $this;
93
  }
94
 
95
  /**
96
- * @return Transfer The canceled transfer.
 
 
 
 
 
97
  */
98
- public function cancel()
99
  {
100
- $url = $this->instanceUrl() . '/cancel';
101
- list($response, $opts) = $this->_request('post', $url);
102
- $this->refreshFrom($response, $opts);
103
- return $this;
104
  }
105
 
106
  /**
 
 
107
  * @param array|string|null $opts
108
  *
109
- * @return Transfer The saved transfer.
110
  */
111
- public function save($opts = null)
112
  {
113
- return $this->_save($opts);
114
  }
115
  }
9
  * @property string $object
10
  * @property int $amount
11
  * @property int $amount_reversed
 
12
  * @property string $balance_transaction
13
  * @property int $created
14
  * @property string $currency
15
+ * @property string $description
16
+ * @property string $destination
17
+ * @property string $destination_payment
 
 
 
 
 
18
  * @property bool $livemode
19
+ * @property StripeObject $metadata
20
+ * @property Collection $reversals
 
21
  * @property bool $reversed
22
+ * @property string $source_transaction
23
  * @property string $source_type
24
+ * @property string $transfer_group
 
 
25
  *
26
  * @package Stripe
27
  */
28
  class Transfer extends ApiResource
29
  {
30
+ const OBJECT_NAME = "transfer";
31
+
32
+ use ApiOperations\All;
33
+ use ApiOperations\Create;
34
+ use ApiOperations\NestedResource;
35
+ use ApiOperations\Retrieve;
36
+ use ApiOperations\Update;
37
+
38
+ const PATH_REVERSALS = '/reversals';
39
+
40
  /**
41
+ * Possible string representations of the source type of the transfer.
42
+ * @link https://stripe.com/docs/api/transfers/object#transfer_object-source_type
 
 
43
  */
44
+ const SOURCE_TYPE_ALIPAY_ACCOUNT = 'alipay_account';
45
+ const SOURCE_TYPE_BANK_ACCOUNT = 'bank_account';
46
+ const SOURCE_TYPE_CARD = 'card';
47
+ const SOURCE_TYPE_FINANCING = 'financing';
48
 
49
  /**
50
+ * @return TransferReversal The created transfer reversal.
 
 
 
51
  */
52
+ public function reverse($params = null, $opts = null)
53
  {
54
+ $url = $this->instanceUrl() . '/reversals';
55
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
56
+ $this->refreshFrom($response, $opts);
57
+ return $this;
58
  }
59
 
60
  /**
61
+ * @return Transfer The canceled transfer.
 
 
 
62
  */
63
+ public function cancel()
64
  {
65
+ $url = $this->instanceUrl() . '/cancel';
66
+ list($response, $opts) = $this->_request('post', $url);
67
+ $this->refreshFrom($response, $opts);
68
+ return $this;
69
  }
70
 
71
  /**
72
+ * @param string|null $id The ID of the transfer on which to create the reversal.
73
  * @param array|null $params
74
+ * @param array|string|null $opts
75
  *
76
+ * @return TransferReversal
77
  */
78
+ public static function createReversal($id, $params = null, $opts = null)
79
  {
80
+ return self::_createNestedResource($id, static::PATH_REVERSALS, $params, $opts);
81
  }
82
 
83
  /**
84
+ * @param string|null $id The ID of the transfer to which the reversal belongs.
85
+ * @param array|null $reversalId The ID of the reversal to retrieve.
86
+ * @param array|null $params
87
+ * @param array|string|null $opts
88
+ *
89
+ * @return TransferReversal
90
  */
91
+ public static function retrieveReversal($id, $reversalId, $params = null, $opts = null)
92
  {
93
+ return self::_retrieveNestedResource($id, static::PATH_REVERSALS, $reversalId, $params, $opts);
 
 
 
94
  }
95
 
96
  /**
97
+ * @param string|null $id The ID of the transfer to which the reversal belongs.
98
+ * @param array|null $reversalId The ID of the reversal to update.
99
+ * @param array|null $params
100
+ * @param array|string|null $opts
101
+ *
102
+ * @return TransferReversal
103
  */
104
+ public static function updateReversal($id, $reversalId, $params = null, $opts = null)
105
  {
106
+ return self::_updateNestedResource($id, static::PATH_REVERSALS, $reversalId, $params, $opts);
 
 
 
107
  }
108
 
109
  /**
110
+ * @param string|null $id The ID of the transfer on which to retrieve the reversals.
111
+ * @param array|null $params
112
  * @param array|string|null $opts
113
  *
114
+ * @return Collection The list of reversals.
115
  */
116
+ public static function allReversals($id, $params = null, $opts = null)
117
  {
118
+ return self::_allNestedResources($id, static::PATH_REVERSALS, $params, $opts);
119
  }
120
  }
lib/stripe-gateway/lib/TransferReversal.php CHANGED
@@ -11,13 +11,21 @@ namespace Stripe;
11
  * @property string $balance_transaction
12
  * @property int $created
13
  * @property string $currency
14
- * @property mixed $metadata
 
 
15
  * @property string $transfer
16
  *
17
  * @package Stripe
18
  */
19
  class TransferReversal extends ApiResource
20
  {
 
 
 
 
 
 
21
  /**
22
  * @return string The API URL for this Stripe transfer reversal.
23
  */
11
  * @property string $balance_transaction
12
  * @property int $created
13
  * @property string $currency
14
+ * @property string $destination_payment_refund
15
+ * @property StripeObject $metadata
16
+ * @property string $source_refund
17
  * @property string $transfer
18
  *
19
  * @package Stripe
20
  */
21
  class TransferReversal extends ApiResource
22
  {
23
+ const OBJECT_NAME = "transfer_reversal";
24
+
25
+ use ApiOperations\Update {
26
+ save as protected _save;
27
+ }
28
+
29
  /**
30
  * @return string The API URL for this Stripe transfer reversal.
31
  */
lib/stripe-gateway/lib/UsageRecord.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class UsageRecord
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property bool $livemode
13
+ * @property int $quantity
14
+ * @property string $subscription_item
15
+ * @property int $timestamp
16
+ */
17
+ class UsageRecord extends ApiResource
18
+ {
19
+ const OBJECT_NAME = "usage_record";
20
+
21
+ /**
22
+ * @param array|null $params
23
+ * @param array|string|null $options
24
+ *
25
+ * @return \Stripe\ApiResource The created resource.
26
+ */
27
+ public static function create($params = null, $options = null)
28
+ {
29
+ self::_validateParams($params);
30
+ if (!array_key_exists('subscription_item', $params)) {
31
+ throw new Error\InvalidRequest("Missing subscription_item param in request", null);
32
+ }
33
+ $subscription_item = $params['subscription_item'];
34
+ $url = "/v1/subscription_items/$subscription_item/usage_records";
35
+ $request_params = $params;
36
+ unset($request_params['subscription_item']);
37
+
38
+ list($response, $opts) = static::_staticRequest('post', $url, $request_params, $options);
39
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
40
+ $obj->setLastResponse($response);
41
+ return $obj;
42
+ }
43
+ }
lib/stripe-gateway/lib/UsageRecordSummary.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class UsageRecord
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property string $invoice
13
+ * @property bool $livemode
14
+ * @property mixed $period
15
+ * @property string $subscription_item
16
+ * @property int $total_usage
17
+ */
18
+ class UsageRecordSummary extends ApiResource
19
+ {
20
+ const OBJECT_NAME = "usage_record_summary";
21
+ }
lib/stripe-gateway/lib/Util/AutoPagingIterator.php CHANGED
@@ -7,7 +7,7 @@ class AutoPagingIterator implements \Iterator
7
  private $lastId = null;
8
  private $page = null;
9
  private $pageOffset = 0;
10
- private $params = array();
11
 
12
  public function __construct($collection, $params)
13
  {
@@ -42,8 +42,8 @@ class AutoPagingIterator implements \Iterator
42
  $this->pageOffset += count($this->page->data);
43
  if ($this->page['has_more']) {
44
  $this->params = array_merge(
45
- $this->params ? $this->params : array(),
46
- array('starting_after' => $this->lastId)
47
  );
48
  $this->page = $this->page->all($this->params);
49
  } else {
7
  private $lastId = null;
8
  private $page = null;
9
  private $pageOffset = 0;
10
+ private $params = [];
11
 
12
  public function __construct($collection, $params)
13
  {
42
  $this->pageOffset += count($this->page->data);
43
  if ($this->page['has_more']) {
44
  $this->params = array_merge(
45
+ $this->params ?: [],
46
+ ['starting_after' => $this->lastId]
47
  );
48
  $this->page = $this->page->all($this->params);
49
  } else {
lib/stripe-gateway/lib/Util/CaseInsensitiveArray.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Util;
4
+
5
+ use ArrayAccess;
6
+
7
+ /**
8
+ * CaseInsensitiveArray is an array-like class that ignores case for keys.
9
+ *
10
+ * It is used to store HTTP headers. Per RFC 2616, section 4.2:
11
+ * Each header field consists of a name followed by a colon (":") and the field value. Field names
12
+ * are case-insensitive.
13
+ *
14
+ * In the context of stripe-php, this is useful because the API will return headers with different
15
+ * case depending on whether HTTP/2 is used or not (with HTTP/2, headers are always in lowercase).
16
+ */
17
+ class CaseInsensitiveArray implements ArrayAccess
18
+ {
19
+ private $container = array();
20
+
21
+ public function __construct($initial_array = array())
22
+ {
23
+ $this->container = array_map("strtolower", $initial_array);
24
+ }
25
+
26
+ public function offsetSet($offset, $value)
27
+ {
28
+ $offset = static::maybeLowercase($offset);
29
+ if (is_null($offset)) {
30
+ $this->container[] = $value;
31
+ } else {
32
+ $this->container[$offset] = $value;
33
+ }
34
+ }
35
+
36
+ public function offsetExists($offset)
37
+ {
38
+ $offset = static::maybeLowercase($offset);
39
+ return isset($this->container[$offset]);
40
+ }
41
+
42
+ public function offsetUnset($offset)
43
+ {
44
+ $offset = static::maybeLowercase($offset);
45
+ unset($this->container[$offset]);
46
+ }
47
+
48
+ public function offsetGet($offset)
49
+ {
50
+ $offset = static::maybeLowercase($offset);
51
+ return isset($this->container[$offset]) ? $this->container[$offset] : null;
52
+ }
53
+
54
+ private static function maybeLowercase($v)
55
+ {
56
+ if (is_string($v)) {
57
+ return strtolower($v);
58
+ } else {
59
+ return $v;
60
+ }
61
+ }
62
+ }
lib/stripe-gateway/lib/Util/DefaultLogger.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Util;
4
+
5
+ /**
6
+ * A very basic implementation of LoggerInterface that has just enough
7
+ * functionality that it can be the default for this library.
8
+ */
9
+ class DefaultLogger implements LoggerInterface
10
+ {
11
+ public function error($message, array $context = [])
12
+ {
13
+ if (count($context) > 0) {
14
+ throw new \Exception('DefaultLogger does not currently implement context. Please implement if you need it.');
15
+ }
16
+ error_log($message);
17
+ }
18
+ }
lib/stripe-gateway/lib/Util/LoggerInterface.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Util;
4
+
5
+ /**
6
+ * Describes a logger instance.
7
+ *
8
+ * This is a subset of the interface of the same name in the PSR-3 logger
9
+ * interface. We guarantee to keep it compatible, but we'd redefined it here so
10
+ * that we don't have to pull in the extra dependencies for users who don't want
11
+ * it.
12
+ *
13
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
14
+ * for the full interface specification.
15
+ *
16
+ * The message MUST be a string or object implementing __toString().
17
+ *
18
+ * The message MAY contain placeholders in the form: {foo} where foo
19
+ * will be replaced by the context data in key "foo".
20
+ *
21
+ * The context array can contain arbitrary data, the only assumption that
22
+ * can be made by implementors is that if an Exception instance is given
23
+ * to produce a stack trace, it MUST be in a key named "exception".
24
+ */
25
+ interface LoggerInterface
26
+ {
27
+ /**
28
+ * Runtime errors that do not require immediate action but should typically
29
+ * be logged and monitored.
30
+ *
31
+ * @param string $message
32
+ * @param array $context
33
+ * @return void
34
+ */
35
+ public function error($message, array $context = []);
36
+ }
lib/stripe-gateway/lib/Util/RandomGenerator.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Util;
4
+
5
+ /**
6
+ * A basic random generator. This is in a separate class so we the generator
7
+ * can be injected as a dependency and replaced with a mock in tests.
8
+ */
9
+ class RandomGenerator
10
+ {
11
+ /**
12
+ * Returns a random value between 0 and $max.
13
+ *
14
+ * @param float $max (optional)
15
+ * @return float
16
+ */
17
+ public function randFloat($max = 1.0)
18
+ {
19
+ return mt_rand() / mt_getrandmax() * $max;
20
+ }
21
+
22
+ /**
23
+ * Returns a v4 UUID.
24
+ *
25
+ * @return string
26
+ */
27
+ public function uuid()
28
+ {
29
+ $arr = array_values(unpack('N1a/n4b/N1c', openssl_random_pseudo_bytes(16)));
30
+ $arr[2] = ($arr[2] & 0x0fff) | 0x4000;
31
+ $arr[3] = ($arr[3] & 0x3fff) | 0x8000;
32
+ return vsprintf('%08x-%04x-%04x-%04x-%04x%08x', $arr);
33
+ }
34
+ }
lib/stripe-gateway/lib/Util/RequestOptions.php CHANGED
@@ -6,13 +6,23 @@ use Stripe\Error;
6
 
7
  class RequestOptions
8
  {
 
 
 
 
 
 
 
 
9
  public $headers;
10
  public $apiKey;
 
11
 
12
- public function __construct($key = null, $headers = array())
13
  {
14
  $this->apiKey = $key;
15
  $this->headers = $headers;
 
16
  }
17
 
18
  /**
@@ -28,10 +38,25 @@ class RequestOptions
28
  if ($other_options->apiKey === null) {
29
  $other_options->apiKey = $this->apiKey;
30
  }
 
 
 
31
  $other_options->headers = array_merge($this->headers, $other_options->headers);
32
  return $other_options;
33
  }
34
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  /**
36
  * Unpacks an options array into an RequestOptions object
37
  * @param array|string|null $options a key => value array
@@ -45,16 +70,17 @@ class RequestOptions
45
  }
46
 
47
  if (is_null($options)) {
48
- return new RequestOptions(null, array());
49
  }
50
 
51
  if (is_string($options)) {
52
- return new RequestOptions($options, array());
53
  }
54
 
55
  if (is_array($options)) {
56
- $headers = array();
57
  $key = null;
 
58
  if (array_key_exists('api_key', $options)) {
59
  $key = $options['api_key'];
60
  }
@@ -67,7 +93,10 @@ class RequestOptions
67
  if (array_key_exists('stripe_version', $options)) {
68
  $headers['Stripe-Version'] = $options['stripe_version'];
69
  }
70
- return new RequestOptions($key, $headers);
 
 
 
71
  }
72
 
73
  $message = 'The second argument to Stripe API method calls is an '
6
 
7
  class RequestOptions
8
  {
9
+ /**
10
+ * @var array A list of headers that should be persisted across requests.
11
+ */
12
+ public static $HEADERS_TO_PERSIST = [
13
+ 'Stripe-Account',
14
+ 'Stripe-Version',
15
+ ];
16
+
17
  public $headers;
18
  public $apiKey;
19
+ public $apiBase;
20
 
21
+ public function __construct($key = null, $headers = [], $base = null)
22
  {
23
  $this->apiKey = $key;
24
  $this->headers = $headers;
25
+ $this->apiBase = $base;
26
  }
27
 
28
  /**
38
  if ($other_options->apiKey === null) {
39
  $other_options->apiKey = $this->apiKey;
40
  }
41
+ if ($other_options->apiBase === null) {
42
+ $other_options->apiBase = $this->apiBase;
43
+ }
44
  $other_options->headers = array_merge($this->headers, $other_options->headers);
45
  return $other_options;
46
  }
47
 
48
+ /**
49
+ * Discards all headers that we don't want to persist across requests.
50
+ */
51
+ public function discardNonPersistentHeaders()
52
+ {
53
+ foreach ($this->headers as $k => $v) {
54
+ if (!in_array($k, self::$HEADERS_TO_PERSIST)) {
55
+ unset($this->headers[$k]);
56
+ }
57
+ }
58
+ }
59
+
60
  /**
61
  * Unpacks an options array into an RequestOptions object
62
  * @param array|string|null $options a key => value array
70
  }
71
 
72
  if (is_null($options)) {
73
+ return new RequestOptions(null, [], null);
74
  }
75
 
76
  if (is_string($options)) {
77
+ return new RequestOptions($options, [], null);
78
  }
79
 
80
  if (is_array($options)) {
81
+ $headers = [];
82
  $key = null;
83
+ $base = null;
84
  if (array_key_exists('api_key', $options)) {
85
  $key = $options['api_key'];
86
  }
93
  if (array_key_exists('stripe_version', $options)) {
94
  $headers['Stripe-Version'] = $options['stripe_version'];
95
  }
96
+ if (array_key_exists('api_base', $options)) {
97
+ $base = $options['api_base'];
98
+ }
99
+ return new RequestOptions($key, $headers, $base);
100
  }
101
 
102
  $message = 'The second argument to Stripe API method calls is an '
lib/stripe-gateway/lib/Util/Set.php CHANGED
@@ -9,9 +9,9 @@ class Set implements IteratorAggregate
9
  {
10
  private $_elts;
11
 
12
- public function __construct($members = array())
13
  {
14
- $this->_elts = array();
15
  foreach ($members as $item) {
16
  $this->_elts[$item] = true;
17
  }
9
  {
10
  private $_elts;
11
 
12
+ public function __construct($members = [])
13
  {
14
+ $this->_elts = [];
15
  foreach ($members as $item) {
16
  $this->_elts[$item] = true;
17
  }
lib/stripe-gateway/lib/Util/Util.php CHANGED
@@ -7,24 +7,26 @@ use Stripe\StripeObject;
7
  abstract class Util
8
  {
9
  private static $isMbstringAvailable = null;
 
10
 
11
  /**
12
  * Whether the provided array (or other) is a list rather than a dictionary.
 
 
13
  *
14
  * @param array|mixed $array
15
- * @return boolean True if the given object is a list.
16
  */
17
  public static function isList($array)
18
  {
19
  if (!is_array($array)) {
20
  return false;
21
  }
22
-
23
- // TODO: generally incorrect, but it's correct given Stripe's response
24
- foreach (array_keys($array) as $k) {
25
- if (!is_numeric($k)) {
26
- return false;
27
- }
28
  }
29
  return true;
30
  }
@@ -37,7 +39,7 @@ abstract class Util
37
  */
38
  public static function convertStripeObjectToArray($values)
39
  {
40
- $results = array();
41
  foreach ($values as $k => $v) {
42
  // FIXME: this is an encapsulation violation
43
  if ($k[0] == '_') {
@@ -63,40 +65,92 @@ abstract class Util
63
  */
64
  public static function convertToStripeObject($resp, $opts)
65
  {
66
- $types = array(
67
- 'account' => 'Stripe\\Account',
68
- 'alipay_account' => 'Stripe\\AlipayAccount',
69
- 'bank_account' => 'Stripe\\BankAccount',
70
- 'balance_transaction' => 'Stripe\\BalanceTransaction',
71
- 'card' => 'Stripe\\Card',
72
- 'charge' => 'Stripe\\Charge',
73
- 'country_spec' => 'Stripe\\CountrySpec',
74
- 'coupon' => 'Stripe\\Coupon',
75
- 'customer' => 'Stripe\\Customer',
76
- 'dispute' => 'Stripe\\Dispute',
77
- 'list' => 'Stripe\\Collection',
78
- 'invoice' => 'Stripe\\Invoice',
79
- 'invoiceitem' => 'Stripe\\InvoiceItem',
80
- 'event' => 'Stripe\\Event',
81
- 'file' => 'Stripe\\FileUpload',
82
- 'token' => 'Stripe\\Token',
83
- 'transfer' => 'Stripe\\Transfer',
84
- 'order' => 'Stripe\\Order',
85
- 'order_return' => 'Stripe\\OrderReturn',
86
- 'plan' => 'Stripe\\Plan',
87
- 'product' => 'Stripe\\Product',
88
- 'recipient' => 'Stripe\\Recipient',
89
- 'refund' => 'Stripe\\Refund',
90
- 'sku' => 'Stripe\\SKU',
91
- 'source' => 'Stripe\\Source',
92
- 'subscription' => 'Stripe\\Subscription',
93
- 'three_d_secure' => 'Stripe\\ThreeDSecure',
94
- 'fee_refund' => 'Stripe\\ApplicationFeeRefund',
95
- 'bitcoin_receiver' => 'Stripe\\BitcoinReceiver',
96
- 'bitcoin_transaction' => 'Stripe\\BitcoinTransaction',
97
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  if (self::isList($resp)) {
99
- $mapped = array();
100
  foreach ($resp as $i) {
101
  array_push($mapped, self::convertToStripeObject($i, $opts));
102
  }
@@ -138,4 +192,169 @@ abstract class Util
138
  return $value;
139
  }
140
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  }
7
  abstract class Util
8
  {
9
  private static $isMbstringAvailable = null;
10
+ private static $isHashEqualsAvailable = null;
11
 
12
  /**
13
  * Whether the provided array (or other) is a list rather than a dictionary.
14
+ * A list is defined as an array for which all the keys are consecutive
15
+ * integers starting at 0. Empty arrays are considered to be lists.
16
  *
17
  * @param array|mixed $array
18
+ * @return boolean true if the given object is a list.
19
  */
20
  public static function isList($array)
21
  {
22
  if (!is_array($array)) {
23
  return false;
24
  }
25
+ if ($array === []) {
26
+ return true;
27
+ }
28
+ if (array_keys($array) !== range(0, count($array) - 1)) {
29
+ return false;
 
30
  }
31
  return true;
32
  }
39
  */
40
  public static function convertStripeObjectToArray($values)
41
  {
42
+ $results = [];
43
  foreach ($values as $k => $v) {
44
  // FIXME: this is an encapsulation violation
45
  if ($k[0] == '_') {
65
  */
66
  public static function convertToStripeObject($resp, $opts)
67
  {
68
+ $types = [
69
+ // data structures
70
+ \Stripe\Collection::OBJECT_NAME => 'Stripe\\Collection',
71
+
72
+ // business objects
73
+ \Stripe\Account::OBJECT_NAME => 'Stripe\\Account',
74
+ \Stripe\AccountLink::OBJECT_NAME => 'Stripe\\AccountLink',
75
+ \Stripe\AlipayAccount::OBJECT_NAME => 'Stripe\\AlipayAccount',
76
+ \Stripe\ApplePayDomain::OBJECT_NAME => 'Stripe\\ApplePayDomain',
77
+ \Stripe\ApplicationFee::OBJECT_NAME => 'Stripe\\ApplicationFee',
78
+ \Stripe\Balance::OBJECT_NAME => 'Stripe\\Balance',
79
+ \Stripe\BalanceTransaction::OBJECT_NAME => 'Stripe\\BalanceTransaction',
80
+ \Stripe\BankAccount::OBJECT_NAME => 'Stripe\\BankAccount',
81
+ \Stripe\BitcoinReceiver::OBJECT_NAME => 'Stripe\\BitcoinReceiver',
82
+ \Stripe\BitcoinTransaction::OBJECT_NAME => 'Stripe\\BitcoinTransaction',
83
+ \Stripe\Capability::OBJECT_NAME => 'Stripe\\Capability',
84
+ \Stripe\Card::OBJECT_NAME => 'Stripe\\Card',
85
+ \Stripe\Charge::OBJECT_NAME => 'Stripe\\Charge',
86
+ \Stripe\Checkout\Session::OBJECT_NAME => 'Stripe\\Checkout\\Session',
87
+ \Stripe\CountrySpec::OBJECT_NAME => 'Stripe\\CountrySpec',
88
+ \Stripe\Coupon::OBJECT_NAME => 'Stripe\\Coupon',
89
+ \Stripe\CreditNote::OBJECT_NAME => 'Stripe\\CreditNote',
90
+ \Stripe\Customer::OBJECT_NAME => 'Stripe\\Customer',
91
+ \Stripe\CustomerBalanceTransaction::OBJECT_NAME => 'Stripe\\CustomerBalanceTransaction',
92
+ \Stripe\Discount::OBJECT_NAME => 'Stripe\\Discount',
93
+ \Stripe\Dispute::OBJECT_NAME => 'Stripe\\Dispute',
94
+ \Stripe\EphemeralKey::OBJECT_NAME => 'Stripe\\EphemeralKey',
95
+ \Stripe\Event::OBJECT_NAME => 'Stripe\\Event',
96
+ \Stripe\ExchangeRate::OBJECT_NAME => 'Stripe\\ExchangeRate',
97
+ \Stripe\ApplicationFeeRefund::OBJECT_NAME => 'Stripe\\ApplicationFeeRefund',
98
+ \Stripe\File::OBJECT_NAME => 'Stripe\\File',
99
+ \Stripe\File::OBJECT_NAME_ALT => 'Stripe\\File',
100
+ \Stripe\FileLink::OBJECT_NAME => 'Stripe\\FileLink',
101
+ \Stripe\Invoice::OBJECT_NAME => 'Stripe\\Invoice',
102
+ \Stripe\InvoiceItem::OBJECT_NAME => 'Stripe\\InvoiceItem',
103
+ \Stripe\InvoiceLineItem::OBJECT_NAME => 'Stripe\\InvoiceLineItem',
104
+ \Stripe\IssuerFraudRecord::OBJECT_NAME => 'Stripe\\IssuerFraudRecord',
105
+ \Stripe\Issuing\Authorization::OBJECT_NAME => 'Stripe\\Issuing\\Authorization',
106
+ \Stripe\Issuing\Card::OBJECT_NAME => 'Stripe\\Issuing\\Card',
107
+ \Stripe\Issuing\CardDetails::OBJECT_NAME => 'Stripe\\Issuing\\CardDetails',
108
+ \Stripe\Issuing\Cardholder::OBJECT_NAME => 'Stripe\\Issuing\\Cardholder',
109
+ \Stripe\Issuing\Dispute::OBJECT_NAME => 'Stripe\\Issuing\\Dispute',
110
+ \Stripe\Issuing\Transaction::OBJECT_NAME => 'Stripe\\Issuing\\Transaction',
111
+ \Stripe\LoginLink::OBJECT_NAME => 'Stripe\\LoginLink',
112
+ \Stripe\Order::OBJECT_NAME => 'Stripe\\Order',
113
+ \Stripe\OrderItem::OBJECT_NAME => 'Stripe\\OrderItem',
114
+ \Stripe\OrderReturn::OBJECT_NAME => 'Stripe\\OrderReturn',
115
+ \Stripe\PaymentIntent::OBJECT_NAME => 'Stripe\\PaymentIntent',
116
+ \Stripe\PaymentMethod::OBJECT_NAME => 'Stripe\\PaymentMethod',
117
+ \Stripe\Payout::OBJECT_NAME => 'Stripe\\Payout',
118
+ \Stripe\Person::OBJECT_NAME => 'Stripe\\Person',
119
+ \Stripe\Plan::OBJECT_NAME => 'Stripe\\Plan',
120
+ \Stripe\Product::OBJECT_NAME => 'Stripe\\Product',
121
+ \Stripe\Radar\EarlyFraudWarning::OBJECT_NAME => 'Stripe\\Radar\\EarlyFraudWarning',
122
+ \Stripe\Radar\ValueList::OBJECT_NAME => 'Stripe\\Radar\\ValueList',
123
+ \Stripe\Radar\ValueListItem::OBJECT_NAME => 'Stripe\\Radar\\ValueListItem',
124
+ \Stripe\Recipient::OBJECT_NAME => 'Stripe\\Recipient',
125
+ \Stripe\RecipientTransfer::OBJECT_NAME => 'Stripe\\RecipientTransfer',
126
+ \Stripe\Refund::OBJECT_NAME => 'Stripe\\Refund',
127
+ \Stripe\Reporting\ReportRun::OBJECT_NAME => 'Stripe\\Reporting\\ReportRun',
128
+ \Stripe\Reporting\ReportType::OBJECT_NAME => 'Stripe\\Reporting\\ReportType',
129
+ \Stripe\Review::OBJECT_NAME => 'Stripe\\Review',
130
+ \Stripe\SetupIntent::OBJECT_NAME => 'Stripe\\SetupIntent',
131
+ \Stripe\SKU::OBJECT_NAME => 'Stripe\\SKU',
132
+ \Stripe\Sigma\ScheduledQueryRun::OBJECT_NAME => 'Stripe\\Sigma\\ScheduledQueryRun',
133
+ \Stripe\Source::OBJECT_NAME => 'Stripe\\Source',
134
+ \Stripe\SourceTransaction::OBJECT_NAME => 'Stripe\\SourceTransaction',
135
+ \Stripe\Subscription::OBJECT_NAME => 'Stripe\\Subscription',
136
+ \Stripe\SubscriptionItem::OBJECT_NAME => 'Stripe\\SubscriptionItem',
137
+ \Stripe\SubscriptionSchedule::OBJECT_NAME => 'Stripe\\SubscriptionSchedule',
138
+ \Stripe\TaxId::OBJECT_NAME => 'Stripe\\TaxId',
139
+ \Stripe\TaxRate::OBJECT_NAME => 'Stripe\\TaxRate',
140
+ \Stripe\ThreeDSecure::OBJECT_NAME => 'Stripe\\ThreeDSecure',
141
+ \Stripe\Terminal\ConnectionToken::OBJECT_NAME => 'Stripe\\Terminal\\ConnectionToken',
142
+ \Stripe\Terminal\Location::OBJECT_NAME => 'Stripe\\Terminal\\Location',
143
+ \Stripe\Terminal\Reader::OBJECT_NAME => 'Stripe\\Terminal\\Reader',
144
+ \Stripe\Token::OBJECT_NAME => 'Stripe\\Token',
145
+ \Stripe\Topup::OBJECT_NAME => 'Stripe\\Topup',
146
+ \Stripe\Transfer::OBJECT_NAME => 'Stripe\\Transfer',
147
+ \Stripe\TransferReversal::OBJECT_NAME => 'Stripe\\TransferReversal',
148
+ \Stripe\UsageRecord::OBJECT_NAME => 'Stripe\\UsageRecord',
149
+ \Stripe\UsageRecordSummary::OBJECT_NAME => 'Stripe\\UsageRecordSummary',
150
+ \Stripe\WebhookEndpoint::OBJECT_NAME => 'Stripe\\WebhookEndpoint',
151
+ ];
152
  if (self::isList($resp)) {
153
+ $mapped = [];
154
  foreach ($resp as $i) {
155
  array_push($mapped, self::convertToStripeObject($i, $opts));
156
  }
192
  return $value;
193
  }
194
  }
195
+
196
+ /**
197
+ * Compares two strings for equality. The time taken is independent of the
198
+ * number of characters that match.
199
+ *
200
+ * @param string $a one of the strings to compare.
201
+ * @param string $b the other string to compare.
202
+ * @return bool true if the strings are equal, false otherwise.
203
+ */
204
+ public static function secureCompare($a, $b)
205
+ {
206
+ if (self::$isHashEqualsAvailable === null) {
207
+ self::$isHashEqualsAvailable = function_exists('hash_equals');
208
+ }
209
+
210
+ if (self::$isHashEqualsAvailable) {
211
+ return hash_equals($a, $b);
212
+ } else {
213
+ if (strlen($a) != strlen($b)) {
214
+ return false;
215
+ }
216
+
217
+ $result = 0;
218
+ for ($i = 0; $i < strlen($a); $i++) {
219
+ $result |= ord($a[$i]) ^ ord($b[$i]);
220
+ }
221
+ return ($result == 0);
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Recursively goes through an array of parameters. If a parameter is an instance of
227
+ * ApiResource, then it is replaced by the resource's ID.
228
+ * Also clears out null values.
229
+ *
230
+ * @param mixed $h
231
+ * @return mixed
232
+ */
233
+ public static function objectsToIds($h)
234
+ {
235
+ if ($h instanceof \Stripe\ApiResource) {
236
+ return $h->id;
237
+ } elseif (static::isList($h)) {
238
+ $results = [];
239
+ foreach ($h as $v) {
240
+ array_push($results, static::objectsToIds($v));
241
+ }
242
+ return $results;
243
+ } elseif (is_array($h)) {
244
+ $results = [];
245
+ foreach ($h as $k => $v) {
246
+ if (is_null($v)) {
247
+ continue;
248
+ }
249
+ $results[$k] = static::objectsToIds($v);
250
+ }
251
+ return $results;
252
+ } else {
253
+ return $h;
254
+ }
255
+ }
256
+
257
+ /**
258
+ * @param array $params
259
+ *
260
+ * @return string
261
+ */
262
+ public static function encodeParameters($params)
263
+ {
264
+ $flattenedParams = self::flattenParams($params);
265
+ $pieces = [];
266
+ foreach ($flattenedParams as $param) {
267
+ list($k, $v) = $param;
268
+ array_push($pieces, self::urlEncode($k) . '=' . self::urlEncode($v));
269
+ }
270
+ return implode('&', $pieces);
271
+ }
272
+
273
+ /**
274
+ * @param array $params
275
+ * @param string|null $parentKey
276
+ *
277
+ * @return array
278
+ */
279
+ public static function flattenParams($params, $parentKey = null)
280
+ {
281
+ $result = [];
282
+
283
+ foreach ($params as $key => $value) {
284
+ $calculatedKey = $parentKey ? "{$parentKey}[{$key}]" : $key;
285
+
286
+ if (self::isList($value)) {
287
+ $result = array_merge($result, self::flattenParamsList($value, $calculatedKey));
288
+ } elseif (is_array($value)) {
289
+ $result = array_merge($result, self::flattenParams($value, $calculatedKey));
290
+ } else {
291
+ array_push($result, [$calculatedKey, $value]);
292
+ }
293
+ }
294
+
295
+ return $result;
296
+ }
297
+
298
+ /**
299
+ * @param array $value
300
+ * @param string $calculatedKey
301
+ *
302
+ * @return array
303
+ */
304
+ public static function flattenParamsList($value, $calculatedKey)
305
+ {
306
+ $result = [];
307
+
308
+ foreach ($value as $i => $elem) {
309
+ if (self::isList($elem)) {
310
+ $result = array_merge($result, self::flattenParamsList($elem, $calculatedKey));
311
+ } elseif (is_array($elem)) {
312
+ $result = array_merge($result, self::flattenParams($elem, "{$calculatedKey}[{$i}]"));
313
+ } else {
314
+ array_push($result, ["{$calculatedKey}[{$i}]", $elem]);
315
+ }
316
+ }
317
+
318
+ return $result;
319
+ }
320
+
321
+ /**
322
+ * @param string $key A string to URL-encode.
323
+ *
324
+ * @return string The URL-encoded string.
325
+ */
326
+ public static function urlEncode($key)
327
+ {
328
+ $s = urlencode($key);
329
+
330
+ // Don't use strict form encoding by changing the square bracket control
331
+ // characters back to their literals. This is fine by the server, and
332
+ // makes these parameter strings easier to read.
333
+ $s = str_replace('%5B', '[', $s);
334
+ $s = str_replace('%5D', ']', $s);
335
+
336
+ return $s;
337
+ }
338
+
339
+ public static function normalizeId($id)
340
+ {
341
+ if (is_array($id)) {
342
+ $params = $id;
343
+ $id = $params['id'];
344
+ unset($params['id']);
345
+ } else {
346
+ $params = [];
347
+ }
348
+ return [$id, $params];
349
+ }
350
+
351
+ /**
352
+ * Returns UNIX timestamp in milliseconds
353
+ *
354
+ * @return integer current time in millis
355
+ */
356
+ public static function currentTimeMillis()
357
+ {
358
+ return (int) round(microtime(true) * 1000);
359
+ }
360
  }
lib/stripe-gateway/lib/Webhook.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ abstract class Webhook
6
+ {
7
+ const DEFAULT_TOLERANCE = 300;
8
+
9
+ /**
10
+ * Returns an Event instance using the provided JSON payload. Throws a
11
+ * \UnexpectedValueException if the payload is not valid JSON, and a
12
+ * \Stripe\SignatureVerificationException if the signature verification
13
+ * fails for any reason.
14
+ *
15
+ * @param string $payload the payload sent by Stripe.
16
+ * @param string $sigHeader the contents of the signature header sent by
17
+ * Stripe.
18
+ * @param string $secret secret used to generate the signature.
19
+ * @param int $tolerance maximum difference allowed between the header's
20
+ * timestamp and the current time
21
+ * @return \Stripe\Event the Event instance
22
+ * @throws \UnexpectedValueException if the payload is not valid JSON,
23
+ * @throws \Stripe\Error\SignatureVerification if the verification fails.
24
+ */
25
+ public static function constructEvent($payload, $sigHeader, $secret, $tolerance = self::DEFAULT_TOLERANCE)
26
+ {
27
+ WebhookSignature::verifyHeader($payload, $sigHeader, $secret, $tolerance);
28
+
29
+ $data = json_decode($payload, true);
30
+ $jsonError = json_last_error();
31
+ if ($data === null && $jsonError !== JSON_ERROR_NONE) {
32
+ $msg = "Invalid payload: $payload "
33
+ . "(json_last_error() was $jsonError)";
34
+ throw new \UnexpectedValueException($msg);
35
+ }
36
+ $event = Event::constructFrom($data);
37
+
38
+ return $event;
39
+ }
40
+ }
lib/stripe-gateway/lib/WebhookEndpoint.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class WebhookEndpoint
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $created
11
+ * @property string[] $enabled_events
12
+ * @property bool $livemode
13
+ * @property string $secret
14
+ * @property string $status
15
+ * @property string $url
16
+ *
17
+ * @package Stripe
18
+ */
19
+ class WebhookEndpoint extends ApiResource
20
+ {
21
+ const OBJECT_NAME = "webhook_endpoint";
22
+
23
+ use ApiOperations\All;
24
+ use ApiOperations\Create;
25
+ use ApiOperations\Delete;
26
+ use ApiOperations\Retrieve;
27
+ use ApiOperations\Update;
28
+ }
lib/stripe-gateway/lib/WebhookSignature.php ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ abstract class WebhookSignature
6
+ {
7
+ const EXPECTED_SCHEME = "v1";
8
+
9
+ /**
10
+ * Verifies the signature header sent by Stripe. Throws a
11
+ * SignatureVerification exception if the verification fails for any
12
+ * reason.
13
+ *
14
+ * @param string $payload the payload sent by Stripe.
15
+ * @param string $header the contents of the signature header sent by
16
+ * Stripe.
17
+ * @param string $secret secret used to generate the signature.
18
+ * @param int $tolerance maximum difference allowed between the header's
19
+ * timestamp and the current time
20
+ * @throws \Stripe\Error\SignatureVerification if the verification fails.
21
+ * @return bool
22
+ */
23
+ public static function verifyHeader($payload, $header, $secret, $tolerance = null)
24
+ {
25
+ // Extract timestamp and signatures from header
26
+ $timestamp = self::getTimestamp($header);
27
+ $signatures = self::getSignatures($header, self::EXPECTED_SCHEME);
28
+ if ($timestamp == -1) {
29
+ throw new Error\SignatureVerification(
30
+ "Unable to extract timestamp and signatures from header",
31
+ $header,
32
+ $payload
33
+ );
34
+ }
35
+ if (empty($signatures)) {
36
+ throw new Error\SignatureVerification(
37
+ "No signatures found with expected scheme",
38
+ $header,
39
+ $payload
40
+ );
41
+ }
42
+
43
+ // Check if expected signature is found in list of signatures from
44
+ // header
45
+ $signedPayload = "$timestamp.$payload";
46
+ $expectedSignature = self::computeSignature($signedPayload, $secret);
47
+ $signatureFound = false;
48
+ foreach ($signatures as $signature) {
49
+ if (Util\Util::secureCompare($expectedSignature, $signature)) {
50
+ $signatureFound = true;
51
+ break;
52
+ }
53
+ }
54
+ if (!$signatureFound) {
55
+ throw new Error\SignatureVerification(
56
+ "No signatures found matching the expected signature for payload",
57
+ $header,
58
+ $payload
59
+ );
60
+ }
61
+
62
+ // Check if timestamp is within tolerance
63
+ if (($tolerance > 0) && (abs(time() - $timestamp) > $tolerance)) {
64
+ throw new Error\SignatureVerification(
65
+ "Timestamp outside the tolerance zone",
66
+ $header,
67
+ $payload
68
+ );
69
+ }
70
+
71
+ return true;
72
+ }
73
+
74
+ /**
75
+ * Extracts the timestamp in a signature header.
76
+ *
77
+ * @param string $header the signature header
78
+ * @return int the timestamp contained in the header, or -1 if no valid
79
+ * timestamp is found
80
+ */
81
+ private static function getTimestamp($header)
82
+ {
83
+ $items = explode(",", $header);
84
+
85
+ foreach ($items as $item) {
86
+ $itemParts = explode("=", $item, 2);
87
+ if ($itemParts[0] == "t") {
88
+ if (!is_numeric($itemParts[1])) {
89
+ return -1;
90
+ }
91
+ return intval($itemParts[1]);
92
+ }
93
+ }
94
+
95
+ return -1;
96
+ }
97
+
98
+ /**
99
+ * Extracts the signatures matching a given scheme in a signature header.
100
+ *
101
+ * @param string $header the signature header
102
+ * @param string $scheme the signature scheme to look for.
103
+ * @return array the list of signatures matching the provided scheme.
104
+ */
105
+ private static function getSignatures($header, $scheme)
106
+ {
107
+ $signatures = [];
108
+ $items = explode(",", $header);
109
+
110
+ foreach ($items as $item) {
111
+ $itemParts = explode("=", $item, 2);
112
+ if ($itemParts[0] == $scheme) {
113
+ array_push($signatures, $itemParts[1]);
114
+ }
115
+ }
116
+
117
+ return $signatures;
118
+ }
119
+
120
+ /**
121
+ * Computes the signature for a given payload and secret.
122
+ *
123
+ * The current scheme used by Stripe ("v1") is HMAC/SHA-256.
124
+ *
125
+ * @param string $payload the payload to sign.
126
+ * @param string $secret the secret used to generate the signature.
127
+ * @return string the signature as a string.
128
+ */
129
+ private static function computeSignature($payload, $secret)
130
+ {
131
+ return hash_hmac("sha256", $payload, $secret);
132
+ }
133
+ }
lib/stripe-gateway/update_certs.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+ chdir(dirname(__FILE__));
4
+
5
+ set_time_limit(0); // unlimited max execution time
6
+
7
+ $fp = fopen(dirname(__FILE__) . '/data/ca-certificates.crt', 'w+');
8
+
9
+ $options = array(
10
+ CURLOPT_FILE => $fp,
11
+ CURLOPT_TIMEOUT => 3600,
12
+ CURLOPT_URL => 'https://curl.haxx.se/ca/cacert.pem',
13
+ );
14
+
15
+ $ch = curl_init();
16
+ curl_setopt_array($ch, $options);
17
+ curl_exec($ch);
18
+ curl_close($ch);
19
+ fclose($fp);
lib/stripe-util-functions.php CHANGED
@@ -5,10 +5,8 @@
5
  class StripeUtilFunctions {
6
 
7
  public static function get_stripe_plan_info($api_key, $plan_id) {
8
- if ( ! class_exists( '\Stripe\Stripe' ) ) {
9
- require_once(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
10
- }
11
-
12
  $stripe_err = '';
13
 
14
  try {
5
  class StripeUtilFunctions {
6
 
7
  public static function get_stripe_plan_info($api_key, $plan_id) {
8
+ SwpmMiscUtils::load_stripe_lib();
9
+
 
 
10
  $stripe_err = '';
11
 
12
  try {
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: smp7, wp.insider
3
  Donate link: https://simple-membership-plugin.com/
4
  Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page, bbpress, stripe, braintree
5
  Requires at least: 4.0
6
- Tested up to: 5.2
7
- Stable tag: 3.8.9
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -158,6 +158,19 @@ https://simple-membership-plugin.com/
158
 
159
  == Changelog ==
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  = 3.8.9 =
162
  - Added a new feature in the email settings menu to allow disabling of the "Account Upgraded" email notification.
163
 
3
  Donate link: https://simple-membership-plugin.com/
4
  Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page, bbpress, stripe, braintree
5
  Requires at least: 4.0
6
+ Tested up to: 5.3
7
+ Stable tag: 3.9.2
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
158
 
159
  == Changelog ==
160
 
161
+ = 3.9.2 =
162
+ - Spanish translation language files updated.
163
+ - Added more debug logging statement in the IPN handling script for easier troubleshooting.
164
+ - Fixed an issue with the new SCA stripe subscription cancellation webhook.
165
+
166
+ = 3.9.1 =
167
+ - Fixed excessive debug log output in the log file when the New SCA compatible Stripe subscription button is used.
168
+ - Stripe library is only loaded if another plugin hasn't loaded it already.
169
+
170
+ = 3.9.0 =
171
+ - Added new Stripe SCA button types. You can now go to the Payments -> Create New Button interface to create SCA compatible Stripe payment buttons.
172
+ - Please note that we have tested the new SCA compatible buttons. However, it may have some compatibility issues that we will be addressing over the next few days as we receive feedback from the users.
173
+
174
  = 3.8.9 =
175
  - Added a new feature in the email settings menu to allow disabling of the "Account Upgraded" email notification.
176
 
simple-wp-membership.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  Plugin Name: Simple WordPress Membership
4
- Version: 3.8.9
5
  Plugin URI: https://simple-membership-plugin.com/
6
  Author: smp7, wp.insider
7
  Author URI: https://simple-membership-plugin.com/
@@ -19,7 +19,7 @@ include_once('classes/class.simple-wp-membership.php');
19
  include_once('classes/class.swpm-cronjob.php');
20
  include_once('swpm-compat.php');
21
 
22
- define('SIMPLE_WP_MEMBERSHIP_VER', '3.8.9');
23
  define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.3');
24
  define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
25
  define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
1
  <?php
2
  /*
3
  Plugin Name: Simple WordPress Membership
4
+ Version: 3.9.2
5
  Plugin URI: https://simple-membership-plugin.com/
6
  Author: smp7, wp.insider
7
  Author URI: https://simple-membership-plugin.com/
19
  include_once('classes/class.swpm-cronjob.php');
20
  include_once('swpm-compat.php');
21
 
22
+ define('SIMPLE_WP_MEMBERSHIP_VER', '3.9.2');
23
  define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.3');
24
  define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
25
  define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
views/payments/admin_create_payment_buttons.php CHANGED
@@ -1,59 +1,65 @@
1
- <?php
2
- //Render the create new payment button tab
3
-
4
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_buy_now_button.php');
5
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_subscription_button.php');
6
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_smart_checkout_button.php');
7
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_buy_now_button.php');
8
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_subscription_button.php');
9
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_braintree_buy_now_button.php');
10
-
11
- do_action('swpm_create_new_button_process_submission'); //Addons can use this hook to save the data after the form submit then redirect to the "edit" interface of that newly created button.
12
- ?>
13
-
14
- <div class="swpm-grey-box">
15
- <?php echo SwpmUtils::_('You can create new payment button for your memberships using this interface.'); ?>
16
- </div>
17
-
18
- <?php
19
- if (!isset($_REQUEST['swpm_button_type_selected'])) {
20
- //Button type hasn't been selected. Show the selection option.
21
- ?>
22
- <div class="postbox">
23
- <h3 class="hndle"><label for="title"><?php echo SwpmUtils::_('Select Payment Button Type'); ?></label></h3>
24
- <div class="inside">
25
- <form action="" method="post">
26
- <input type="radio" name="button_type" value="pp_buy_now" checked><?php SwpmUtils::e('PayPal Buy Now'); ?>
27
- <br />
28
- <input type="radio" name="button_type" value="pp_subscription"><?php SwpmUtils::e('PayPal Subscription'); ?>
29
- <br />
30
- <input type="radio" name="button_type" value="pp_smart_checkout"><?php SwpmUtils::e('PayPal Smart Checkout'); ?>
31
- <br />
32
- <input type="radio" name="button_type" value="stripe_buy_now"><?php SwpmUtils::e('Stripe Buy Now'); ?>
33
- <br />
34
- <input type="radio" name="button_type" value="stripe_subscription"><?php SwpmUtils::e('Stripe Subscription'); ?>
35
- <br />
36
- <input type="radio" name="button_type" value="braintree_buy_now"><?php SwpmUtils::e('Braintree Buy Now'); ?>
37
- <br />
38
- <?php
39
- apply_filters('swpm_new_button_select_button_type', '');
40
- wp_nonce_field( 'swpm_admin_create_btns', 'swpm_admin_create_btns' );
41
- ?>
42
-
43
- <br />
44
- <input type="submit" name="swpm_button_type_selected" class="button-primary" value="<?php echo SwpmUtils::_('Next'); ?>" />
45
- </form>
46
-
47
- </div>
48
- </div><!-- end of .postbox -->
49
- <?php
50
- } else {
51
- //Button type has been selected. Show the payment button configuration option.
52
- //check the nonce first
53
- check_admin_referer('swpm_admin_create_btns','swpm_admin_create_btns');
54
- //Fire the action hook. The addons can render the payment button configuration option as appropriate.
55
- $button_type = sanitize_text_field($_REQUEST['button_type']);
56
- do_action('swpm_create_new_button_for_' . $button_type);
57
- //The payment addons will create the button from then redirect to the "edit" interface of that button after save.
58
- }
59
- ?>
 
 
 
 
 
 
1
+ <?php
2
+ //Render the create new payment button tab
3
+
4
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_buy_now_button.php';
5
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_subscription_button.php';
6
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_smart_checkout_button.php';
7
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_buy_now_button.php';
8
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_sca_buy_now_button.php';
9
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_subscription_button.php';
10
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_sca_subscription_button.php';
11
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_braintree_buy_now_button.php';
12
+
13
+ do_action( 'swpm_create_new_button_process_submission' ); //Addons can use this hook to save the data after the form submit then redirect to the "edit" interface of that newly created button.
14
+ ?>
15
+
16
+ <div class="swpm-grey-box">
17
+ <?php echo SwpmUtils::_( 'You can create new payment button for your memberships using this interface.' ); ?>
18
+ </div>
19
+
20
+ <?php
21
+ if ( ! isset( $_REQUEST['swpm_button_type_selected'] ) ) {
22
+ //Button type hasn't been selected. Show the selection option.
23
+ ?>
24
+ <div class="postbox">
25
+ <h3 class="hndle"><label for="title"><?php echo SwpmUtils::_( 'Select Payment Button Type' ); ?></label></h3>
26
+ <div class="inside">
27
+ <form action="" method="post">
28
+ <label><input type="radio" name="button_type" value="pp_buy_now" checked> <?php SwpmUtils::e( 'PayPal Buy Now' ); ?></label>
29
+ <br />
30
+ <label><input type="radio" name="button_type" value="pp_subscription"> <?php SwpmUtils::e( 'PayPal Subscription' ); ?></label>
31
+ <br />
32
+ <label><input type="radio" name="button_type" value="pp_smart_checkout"> <?php SwpmUtils::e( 'PayPal Smart Checkout' ); ?></label>
33
+ <br />
34
+ <label><input type="radio" name="button_type" value="stripe_buy_now"> <?php SwpmUtils::e( 'Stripe Buy Now' ); ?></label>
35
+ <br />
36
+ <label><input type="radio" name="button_type" value="stripe_subscription"> <?php SwpmUtils::e( 'Stripe Subscription' ); ?></label>
37
+ <br />
38
+ <label><input type="radio" name="button_type" value="stripe_sca_buy_now"> <?php SwpmUtils::e( 'Stripe SCA Buy Now' ); ?></label>
39
+ <br />
40
+ <label><input type="radio" name="button_type" value="stripe_sca_subscription"> <?php SwpmUtils::e( 'Stripe SCA Subscription' ); ?></label>
41
+ <br />
42
+ <label><input type="radio" name="button_type" value="braintree_buy_now"> <?php SwpmUtils::e( 'Braintree Buy Now' ); ?></label>
43
+ <br />
44
+ <?php
45
+ apply_filters( 'swpm_new_button_select_button_type', '' );
46
+ wp_nonce_field( 'swpm_admin_create_btns', 'swpm_admin_create_btns' );
47
+ ?>
48
+
49
+ <br />
50
+ <input type="submit" name="swpm_button_type_selected" class="button-primary" value="<?php echo SwpmUtils::_( 'Next' ); ?>" />
51
+ </form>
52
+
53
+ </div>
54
+ </div><!-- end of .postbox -->
55
+ <?php
56
+ } else {
57
+ //Button type has been selected. Show the payment button configuration option.
58
+ //check the nonce first
59
+ check_admin_referer( 'swpm_admin_create_btns', 'swpm_admin_create_btns' );
60
+ //Fire the action hook. The addons can render the payment button configuration option as appropriate.
61
+ $button_type = sanitize_text_field( $_REQUEST['button_type'] );
62
+ do_action( 'swpm_create_new_button_for_' . $button_type );
63
+ //The payment addons will create the button from then redirect to the "edit" interface of that button after save.
64
+ }
65
+ ?>
views/payments/admin_edit_payment_buttons.php CHANGED
@@ -1,25 +1,27 @@
1
- <?php
2
- //Render the edit payment button tab
3
-
4
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_buy_now_button.php');
5
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_subscription_button.php');
6
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_smart_checkout_button.php');
7
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_buy_now_button.php');
8
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_subscription_button.php');
9
- include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_braintree_buy_now_button.php');
10
-
11
- do_action('swpm_edit_payment_button_process_submission'); //Addons can use this hook to save the data after the form submit.
12
- ?>
13
-
14
- <div class="swpm-grey-box">
15
- <?php echo SwpmUtils::_('You can edit a payment button using this interface.'); ?>
16
- </div>
17
-
18
- <?php
19
- //Trigger the action hook. The addons can render the payment button edit interface using this hook
20
- //Button type (button_type) and Button id (button_id) must be present in the REQUEST
21
- $button_type = sanitize_text_field($_REQUEST['button_type']);
22
- $button_id = sanitize_text_field($_REQUEST['button_id']);
23
- $button_id = absint($button_id);
24
- do_action('swpm_edit_payment_button_for_' . $button_type, $button_id);
25
-
 
 
1
+ <?php
2
+ //Render the edit payment button tab
3
+
4
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_buy_now_button.php';
5
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_subscription_button.php';
6
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_paypal_smart_checkout_button.php';
7
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_buy_now_button.php';
8
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_subscription_button.php';
9
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_sca_buy_now_button.php';
10
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_stripe_sca_subscription_button.php';
11
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'views/payments/payment-gateway/admin_braintree_buy_now_button.php';
12
+
13
+ do_action( 'swpm_edit_payment_button_process_submission' ); //Addons can use this hook to save the data after the form submit.
14
+ ?>
15
+
16
+ <div class="swpm-grey-box">
17
+ <?php echo SwpmUtils::_( 'You can edit a payment button using this interface.' ); ?>
18
+ </div>
19
+
20
+ <?php
21
+ //Trigger the action hook. The addons can render the payment button edit interface using this hook
22
+ //Button type (button_type) and Button id (button_id) must be present in the REQUEST
23
+ $button_type = sanitize_text_field( $_REQUEST['button_type'] );
24
+ $button_id = sanitize_text_field( $_REQUEST['button_id'] );
25
+ $button_id = absint( $button_id );
26
+ do_action( 'swpm_edit_payment_button_for_' . $button_type, $button_id );
27
+
views/payments/payment-gateway/admin_stripe_sca_buy_now_button.php ADDED
@@ -0,0 +1,440 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* * ***************************************************************
3
+ * Render the new Stripe Buy Now payment button creation interface
4
+ * ************************************************************** */
5
+ add_action( 'swpm_create_new_button_for_stripe_sca_buy_now', 'swpm_create_new_stripe_sca_buy_now_button' );
6
+
7
+ function swpm_create_new_stripe_sca_buy_now_button() {
8
+
9
+ //Test for PHP v5.3.3 or show error and don't show the remaining interface.
10
+ if ( version_compare( PHP_VERSION, '5.4.0' ) >= 0 ) {
11
+ //The server is using at least PHP version 5.4.0
12
+ //Can use Stripe gateway library
13
+ } else {
14
+ //This server can't handle Stripe library
15
+ echo '<div class="swpm-red-box">';
16
+ echo '<p>The Stripe payment gateway libary requires at least PHP 5.4.0. Your server is using a very old version of PHP that Stripe does not support.</p>';
17
+ echo '<p>Request your hosting provider to upgrade your PHP to a more recent version then you will be able to use the Stripe gateway.<p>';
18
+ echo '</div>';
19
+ return;
20
+ }
21
+ ?>
22
+
23
+ <div class="swpm-orange-box">
24
+ View the <a target="_blank" href="https://simple-membership-plugin.com/create-stripe-buy-now-button-for-membership-payment/">documentation</a>&nbsp;
25
+ to learn how to create a Stripe Buy Now payment button and use it.
26
+ </div>
27
+
28
+ <div class="postbox">
29
+ <h3 class="hndle"><label for="title"><?php echo SwpmUtils::_( 'Stripe SCA Buy Now Button Configuration' ); ?></label></h3>
30
+ <div class="inside">
31
+
32
+ <form id="stripe_button_config_form" method="post">
33
+ <input type="hidden" name="button_type" value="<?php echo sanitize_text_field( $_REQUEST['button_type'] ); ?>">
34
+ <input type="hidden" name="swpm_button_type_selected" value="1">
35
+
36
+ <table class="form-table" width="100%" border="0" cellspacing="0" cellpadding="6">
37
+
38
+ <tr valign="top">
39
+ <th scope="row"><?php echo SwpmUtils::_( 'Button Title' ); ?></th>
40
+ <td>
41
+ <input type="text" size="50" name="button_name" value="" required />
42
+ <p class="description">Give this membership payment button a name. Example: Gold membership payment</p>
43
+ </td>
44
+ </tr>
45
+
46
+ <tr valign="top">
47
+ <th scope="row"><?php echo SwpmUtils::_( 'Membership Level' ); ?></th>
48
+ <td>
49
+ <select id="membership_level_id" name="membership_level_id">
50
+ <?php echo SwpmUtils::membership_level_dropdown(); ?>
51
+ </select>
52
+ <p class="description">Select the membership level this payment button is for.</p>
53
+ </td>
54
+ </tr>
55
+
56
+ <tr valign="top">
57
+ <th scope="row"><?php echo SwpmUtils::_( 'Payment Amount' ); ?></th>
58
+ <td>
59
+ <input type="text" size="6" name="payment_amount" value="" required />
60
+ <p class="description">Enter payment amount. Example values: 10.00 or 19.50 or 299.95 etc (do not put currency symbol).</p>
61
+ </td>
62
+ </tr>
63
+
64
+ <tr valign="top">
65
+ <th scope="row"><?php echo SwpmUtils::_( 'Payment Currency' ); ?></th>
66
+ <td>
67
+ <select id="payment_currency" name="payment_currency">
68
+ <option selected="selected" value="USD">US Dollars ($)</option>
69
+ <option value="EUR">Euros (€)</option>
70
+ <option value="GBP">Pounds Sterling (£)</option>
71
+ <option value="AUD">Australian Dollars ($)</option>
72
+ <option value="BRL">Brazilian Real (R$)</option>
73
+ <option value="CAD">Canadian Dollars ($)</option>
74
+ <option value="CNY">Chinese Yuan</option>
75
+ <option value="CZK">Czech Koruna</option>
76
+ <option value="DKK">Danish Krone</option>
77
+ <option value="HKD">Hong Kong Dollar ($)</option>
78
+ <option value="HUF">Hungarian Forint</option>
79
+ <option value="INR">Indian Rupee</option>
80
+ <option value="IDR">Indonesia Rupiah</option>
81
+ <option value="ILS">Israeli Shekel</option>
82
+ <option value="JPY">Japanese Yen (Â¥)</option>
83
+ <option value="MYR">Malaysian Ringgits</option>
84
+ <option value="MXN">Mexican Peso ($)</option>
85
+ <option value="NZD">New Zealand Dollar ($)</option>
86
+ <option value="NOK">Norwegian Krone</option>
87
+ <option value="PHP">Philippine Pesos</option>
88
+ <option value="PLN">Polish Zloty</option>
89
+ <option value="SGD">Singapore Dollar ($)</option>
90
+ <option value="ZAR">South African Rand (R)</option>
91
+ <option value="KRW">South Korean Won</option>
92
+ <option value="SEK">Swedish Krona</option>
93
+ <option value="CHF">Swiss Franc</option>
94
+ <option value="TWD">Taiwan New Dollars</option>
95
+ <option value="THB">Thai Baht</option>
96
+ <option value="TRY">Turkish Lira</option>
97
+ <option value="VND">Vietnamese Dong</option>
98
+ </select>
99
+ <p class="description">Select the currency for this payment button.</p>
100
+ </td>
101
+ </tr>
102
+
103
+ <tr valign="top">
104
+ <th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_( 'Stripe API keys. You can get this from your Stripe account.' ); ?></div></th>
105
+ </tr>
106
+
107
+ <tr valign="top">
108
+ <th scope="row"><?php echo SwpmUtils::_( 'Test Publishable Key' ); ?></th>
109
+ <td>
110
+ <input type="text" size="50" name="stripe_test_publishable_key" value="" required />
111
+ <p class="description">Enter your Stripe test publishable key.</p>
112
+ </td>
113
+ </tr>
114
+ <tr valign="top">
115
+ <th scope="row"><?php echo SwpmUtils::_( 'Test Secret Key' ); ?></th>
116
+ <td>
117
+ <input type="text" size="50" name="stripe_test_secret_key" value="" required />
118
+ <p class="description">Enter your Stripe test secret key.</p>
119
+ </td>
120
+ </tr>
121
+ <tr valign="top">
122
+ <th scope="row"><?php echo SwpmUtils::_( 'Live Publishable Key' ); ?></th>
123
+ <td>
124
+ <input type="text" size="50" name="stripe_live_publishable_key" value="" required />
125
+ <p class="description">Enter your Stripe live publishable key.</p>
126
+ </td>
127
+ </tr>
128
+ <tr valign="top">
129
+ <th scope="row"><?php echo SwpmUtils::_( 'Live Secret Key' ); ?></th>
130
+ <td>
131
+ <input type="text" size="50" name="stripe_live_secret_key" value="" required />
132
+ <p class="description">Enter your Stripe live secret key.</p>
133
+ </td>
134
+ </tr>
135
+
136
+ <tr valign="top">
137
+ <th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_( 'The following details are optional.' ); ?></div></th>
138
+ </tr>
139
+
140
+ <tr valign="top">
141
+ <th scope="row"><?php echo SwpmUtils::_( 'Collect Customer Address' ); ?></th>
142
+ <td>
143
+ <input type="checkbox" name="collect_address" value="1"/>
144
+ <p class="description">Enable this option if you want to collect customer address during Stripe checkout.</p>
145
+ </td>
146
+ </tr>
147
+
148
+ <tr valign="top">
149
+ <th scope="row"><?php echo SwpmUtils::_( 'Return URL' ); ?></th>
150
+ <td>
151
+ <input type="text" size="100" name="return_url" value="" />
152
+ <p class="description">This is the URL the user will be redirected to after a successful payment. Enter the URL of your Thank You page here.</p>
153
+ </td>
154
+ </tr>
155
+
156
+ </table>
157
+
158
+ <p class="submit">
159
+ <?php wp_nonce_field( 'swpm_admin_add_edit_stripe_sca_buy_now_btn', 'swpm_admin_create_stripe_sca_buy_now_btn' ); ?>
160
+ <input type="submit" name="swpm_stripe_sca_buy_now_save_submit" class="button-primary" value="<?php echo SwpmUtils::_( 'Save Payment Data' ); ?>" >
161
+ </p>
162
+
163
+ </form>
164
+
165
+ </div>
166
+ </div>
167
+ <?php
168
+ }
169
+
170
+ /*
171
+ * Process submission and save the new Stripe Buy now payment button data
172
+ */
173
+ add_action( 'swpm_create_new_button_process_submission', 'swpm_save_new_stripe_sca_buy_now_button_data' );
174
+
175
+ function swpm_save_new_stripe_sca_buy_now_button_data() {
176
+ if ( isset( $_REQUEST['swpm_stripe_sca_buy_now_save_submit'] ) ) {
177
+ //This is a Stripe buy now button save event. Process the submission.
178
+ check_admin_referer( 'swpm_admin_add_edit_stripe_sca_buy_now_btn', 'swpm_admin_create_stripe_sca_buy_now_btn' );
179
+
180
+ //Save the button data
181
+ $button_id = wp_insert_post(
182
+ array(
183
+ 'post_title' => sanitize_text_field( $_REQUEST['button_name'] ),
184
+ 'post_type' => 'swpm_payment_button',
185
+ 'post_content' => '',
186
+ 'post_status' => 'publish',
187
+ )
188
+ );
189
+
190
+ $button_type = sanitize_text_field( $_REQUEST['button_type'] );
191
+ add_post_meta( $button_id, 'button_type', $button_type );
192
+ add_post_meta( $button_id, 'membership_level_id', sanitize_text_field( $_REQUEST['membership_level_id'] ) );
193
+ add_post_meta( $button_id, 'payment_amount', trim( sanitize_text_field( $_REQUEST['payment_amount'] ) ) );
194
+ add_post_meta( $button_id, 'payment_currency', sanitize_text_field( $_REQUEST['payment_currency'] ) );
195
+
196
+ add_post_meta( $button_id, 'stripe_test_secret_key', trim( sanitize_text_field( $_REQUEST['stripe_test_secret_key'] ) ) );
197
+ add_post_meta( $button_id, 'stripe_test_publishable_key', trim( sanitize_text_field( $_REQUEST['stripe_test_publishable_key'] ) ) );
198
+ add_post_meta( $button_id, 'stripe_live_secret_key', trim( sanitize_text_field( $_REQUEST['stripe_live_secret_key'] ) ) );
199
+ add_post_meta( $button_id, 'stripe_live_publishable_key', trim( sanitize_text_field( $_REQUEST['stripe_live_publishable_key'] ) ) );
200
+
201
+ add_post_meta( $button_id, 'stripe_collect_address', isset( $_POST['collect_address'] ) ? '1' : '' );
202
+
203
+ add_post_meta( $button_id, 'return_url', trim( sanitize_text_field( $_REQUEST['return_url'] ) ) );
204
+ //add_post_meta($button_id, 'button_image_url', trim(sanitize_text_field($_REQUEST['button_image_url'])));
205
+ //Redirect to the edit interface of this button with $button_id
206
+ //$url = admin_url() . 'admin.php?page=simple_wp_membership_payments&tab=edit_button&button_id=' . $button_id . '&button_type=' . $button_type;
207
+ //Redirect to the manage payment buttons interface
208
+ $url = admin_url() . 'admin.php?page=simple_wp_membership_payments&tab=payment_buttons';
209
+ SwpmMiscUtils::redirect_to_url( $url );
210
+ }
211
+ }
212
+
213
+ /* * **********************************************************************
214
+ * End of new Stripe Buy now payment button stuff
215
+ * ********************************************************************** */
216
+
217
+
218
+ /* * ***************************************************************
219
+ * Render edit Stripe Buy now payment button interface
220
+ * ************************************************************** */
221
+ add_action( 'swpm_edit_payment_button_for_stripe_sca_buy_now', 'swpm_edit_stripe_sca_buy_now_button' );
222
+
223
+ function swpm_edit_stripe_sca_buy_now_button() {
224
+
225
+ //Retrieve the payment button data and present it for editing.
226
+
227
+ $button_id = sanitize_text_field( $_REQUEST['button_id'] );
228
+ $button_id = absint( $button_id );
229
+ $button_type = sanitize_text_field( $_REQUEST['button_type'] );
230
+
231
+ $button = get_post( $button_id ); //Retrieve the CPT for this button
232
+
233
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
234
+ $payment_amount = get_post_meta( $button_id, 'payment_amount', true );
235
+ $payment_currency = get_post_meta( $button_id, 'payment_currency', true );
236
+
237
+ $stripe_test_secret_key = get_post_meta( $button_id, 'stripe_test_secret_key', true );
238
+ $stripe_test_publishable_key = get_post_meta( $button_id, 'stripe_test_publishable_key', true );
239
+ $stripe_live_secret_key = get_post_meta( $button_id, 'stripe_live_secret_key', true );
240
+ $stripe_live_publishable_key = get_post_meta( $button_id, 'stripe_live_publishable_key', true );
241
+
242
+ $collect_address = get_post_meta( $button_id, 'stripe_collect_address', true );
243
+ if ( $collect_address == '1' ) {
244
+ $collect_address = ' checked';
245
+ } else {
246
+ $collect_address = '';
247
+ }
248
+
249
+ $return_url = get_post_meta( $button_id, 'return_url', true );
250
+ //$button_image_url = get_post_meta($button_id, 'button_image_url', true);
251
+ ?>
252
+ <div class="postbox">
253
+ <h3 class="hndle"><label for="title"><?php echo SwpmUtils::_( 'Stripe Buy Now Button Configuration' ); ?></label></h3>
254
+ <div class="inside">
255
+
256
+ <form id="stripe_button_config_form" method="post">
257
+ <input type="hidden" name="button_type" value="<?php echo $button_type; ?>">
258
+
259
+ <table class="form-table" width="100%" border="0" cellspacing="0" cellpadding="6">
260
+
261
+ <tr valign="top">
262
+ <th scope="row"><?php echo SwpmUtils::_( 'Button ID' ); ?></th>
263
+ <td>
264
+ <input type="text" size="10" name="button_id" value="<?php echo $button_id; ?>" readonly required />
265
+ <p class="description">This is the ID of this payment button. It is automatically generated for you and it cannot be changed.</p>
266
+ </td>
267
+ </tr>
268
+ <tr valign="top">
269
+ <th scope="row"><?php echo SwpmUtils::_( 'Button Title' ); ?></th>
270
+ <td>
271
+ <input type="text" size="50" name="button_name" value="<?php echo $button->post_title; ?>" required />
272
+ <p class="description">Give this membership payment button a name. Example: Gold membership payment</p>
273
+ </td>
274
+ </tr>
275
+ <tr valign="top">
276
+ <th scope="row"><?php echo SwpmUtils::_( 'Membership Level' ); ?></th>
277
+ <td>
278
+ <select id="membership_level_id" name="membership_level_id">
279
+ <?php echo SwpmUtils::membership_level_dropdown( $membership_level_id ); ?>
280
+ </select>
281
+ <p class="description">Select the membership level this payment button is for.</p>
282
+ </td>
283
+ </tr>
284
+ <tr valign="top">
285
+ <th scope="row"><?php echo SwpmUtils::_( 'Payment Amount' ); ?></th>
286
+ <td>
287
+ <input type="text" size="6" name="payment_amount" value="<?php echo $payment_amount; ?>" required />
288
+ <p class="description">Enter payment amount. Example values: 10.00 or 19.50 or 299.95 etc (do not put currency symbol).</p>
289
+ </td>
290
+ </tr>
291
+ <tr valign="top">
292
+ <th scope="row"><?php echo SwpmUtils::_( 'Payment Currency' ); ?></th>
293
+ <td>
294
+ <select id="payment_currency" name="payment_currency">
295
+ <option value="USD" <?php echo ( $payment_currency == 'USD' ) ? 'selected="selected"' : ''; ?>>US Dollars ($)</option>
296
+ <option value="EUR" <?php echo ( $payment_currency == 'EUR' ) ? 'selected="selected"' : ''; ?>>Euros (€)</option>
297
+ <option value="GBP" <?php echo ( $payment_currency == 'GBP' ) ? 'selected="selected"' : ''; ?>>Pounds Sterling (£)</option>
298
+ <option value="AUD" <?php echo ( $payment_currency == 'AUD' ) ? 'selected="selected"' : ''; ?>>Australian Dollars ($)</option>
299
+ <option value="BRL" <?php echo ( $payment_currency == 'BRL' ) ? 'selected="selected"' : ''; ?>>Brazilian Real (R$)</option>
300
+ <option value="CAD" <?php echo ( $payment_currency == 'CAD' ) ? 'selected="selected"' : ''; ?>>Canadian Dollars ($)</option>
301
+ <option value="CNY" <?php echo ( $payment_currency == 'CNY' ) ? 'selected="selected"' : ''; ?>>Chinese Yuan</option>
302
+ <option value="CZK" <?php echo ( $payment_currency == 'CZK' ) ? 'selected="selected"' : ''; ?>>Czech Koruna</option>
303
+ <option value="DKK" <?php echo ( $payment_currency == 'DKK' ) ? 'selected="selected"' : ''; ?>>Danish Krone</option>
304
+ <option value="HKD" <?php echo ( $payment_currency == 'HKD' ) ? 'selected="selected"' : ''; ?>>Hong Kong Dollar ($)</option>
305
+ <option value="HUF" <?php echo ( $payment_currency == 'HUF' ) ? 'selected="selected"' : ''; ?>>Hungarian Forint</option>
306
+ <option value="INR" <?php echo ( $payment_currency == 'INR' ) ? 'selected="selected"' : ''; ?>>Indian Rupee</option>
307
+ <option value="IDR" <?php echo ( $payment_currency == 'IDR' ) ? 'selected="selected"' : ''; ?>>Indonesia Rupiah</option>
308
+ <option value="ILS" <?php echo ( $payment_currency == 'ILS' ) ? 'selected="selected"' : ''; ?>>Israeli Shekel</option>
309
+ <option value="JPY" <?php echo ( $payment_currency == 'JPY' ) ? 'selected="selected"' : ''; ?>>Japanese Yen (Â¥)</option>
310
+ <option value="MYR" <?php echo ( $payment_currency == 'MYR' ) ? 'selected="selected"' : ''; ?>>Malaysian Ringgits</option>
311
+ <option value="MXN" <?php echo ( $payment_currency == 'MXN' ) ? 'selected="selected"' : ''; ?>>Mexican Peso ($)</option>
312
+ <option value="NZD" <?php echo ( $payment_currency == 'NZD' ) ? 'selected="selected"' : ''; ?>>New Zealand Dollar ($)</option>
313
+ <option value="NOK" <?php echo ( $payment_currency == 'NOK' ) ? 'selected="selected"' : ''; ?>>Norwegian Krone</option>
314
+ <option value="PHP" <?php echo ( $payment_currency == 'PHP' ) ? 'selected="selected"' : ''; ?>>Philippine Pesos</option>
315
+ <option value="PLN" <?php echo ( $payment_currency == 'PLN' ) ? 'selected="selected"' : ''; ?>>Polish Zloty</option>
316
+ <option value="SGD" <?php echo ( $payment_currency == 'SGD' ) ? 'selected="selected"' : ''; ?>>Singapore Dollar ($)</option>
317
+ <option value="ZAR" <?php echo ( $payment_currency == 'ZAR' ) ? 'selected="selected"' : ''; ?>>South African Rand (R)</option>
318
+ <option value="KRW" <?php echo ( $payment_currency == 'KRW' ) ? 'selected="selected"' : ''; ?>>South Korean Won</option>
319
+ <option value="SEK" <?php echo ( $payment_currency == 'SEK' ) ? 'selected="selected"' : ''; ?>>Swedish Krona</option>
320
+ <option value="CHF" <?php echo ( $payment_currency == 'CHF' ) ? 'selected="selected"' : ''; ?>>Swiss Franc</option>
321
+ <option value="TWD" <?php echo ( $payment_currency == 'TWD' ) ? 'selected="selected"' : ''; ?>>Taiwan New Dollars</option>
322
+ <option value="THB" <?php echo ( $payment_currency == 'THB' ) ? 'selected="selected"' : ''; ?>>Thai Baht</option>
323
+ <option value="TRY" <?php echo ( $payment_currency == 'TRY' ) ? 'selected="selected"' : ''; ?>>Turkish Lira</option>
324
+ <option value="VND" <?php echo ( $payment_currency == 'VND' ) ? 'selected="selected"' : ''; ?>>Vietnamese Dong</option>
325
+ </select>
326
+ <p class="description">Select the currency for this payment button.</p>
327
+ </td>
328
+ </tr>
329
+
330
+ <tr valign="top">
331
+ <th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_( 'Stripe API keys. You can get this from your Stripe account.' ); ?></div></th>
332
+ </tr>
333
+
334
+ <tr valign="top">
335
+ <th scope="row"><?php echo SwpmUtils::_( 'Test Publishable Key' ); ?></th>
336
+ <td>
337
+ <input type="text" size="50" name="stripe_test_publishable_key" value="<?php echo $stripe_test_publishable_key; ?>" required />
338
+ <p class="description">Enter your Stripe test publishable key.</p>
339
+ </td>
340
+ </tr>
341
+ <tr valign="top">
342
+ <th scope="row"><?php echo SwpmUtils::_( 'Test Secret Key' ); ?></th>
343
+ <td>
344
+ <input type="text" size="50" name="stripe_test_secret_key" value="<?php echo $stripe_test_secret_key; ?>" required />
345
+ <p class="description">Enter your Stripe test secret key.</p>
346
+ </td>
347
+ </tr>
348
+ <tr valign="top">
349
+ <th scope="row"><?php echo SwpmUtils::_( 'Live Publishable Key' ); ?></th>
350
+ <td>
351
+ <input type="text" size="50" name="stripe_live_publishable_key" value="<?php echo $stripe_live_publishable_key; ?>" required />
352
+ <p class="description">Enter your Stripe live publishable key.</p>
353
+ </td>
354
+ </tr>
355
+ <tr valign="top">
356
+ <th scope="row"><?php echo SwpmUtils::_( 'Live Secret Key' ); ?></th>
357
+ <td>
358
+ <input type="text" size="50" name="stripe_live_secret_key" value="<?php echo $stripe_live_secret_key; ?>" required />
359
+ <p class="description">Enter your Stripe live secret key.</p>
360
+ </td>
361
+ </tr>
362
+
363
+ <tr valign="top">
364
+ <th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_( 'The following details are optional.' ); ?></div></th>
365
+ </tr>
366
+
367
+ <tr valign="top">
368
+ <th scope="row"><?php echo SwpmUtils::_( 'Collect Customer Address' ); ?></th>
369
+ <td>
370
+ <input type="checkbox" name="collect_address" value="1"<?php echo $collect_address; ?>/>
371
+ <p class="description">Enable this option if you want to collect customer address during Stripe checkout.</p>
372
+ </td>
373
+ </tr>
374
+
375
+ <tr valign="top">
376
+ <th scope="row"><?php echo SwpmUtils::_( 'Return URL' ); ?></th>
377
+ <td>
378
+ <input type="text" size="100" name="return_url" value="<?php echo $return_url; ?>" />
379
+ <p class="description">This is the URL the user will be redirected to after a successful payment. Enter the URL of your Thank You page here.</p>
380
+ </td>
381
+ </tr>
382
+
383
+ </table>
384
+
385
+ <p class="submit">
386
+ <?php wp_nonce_field( 'swpm_admin_add_edit_stripe_sca_buy_now_btn', 'swpm_admin_edit_stripe_sca_buy_now_btn' ); ?>
387
+ <input type="submit" name="swpm_stripe_sca_buy_now_edit_submit" class="button-primary" value="<?php echo SwpmUtils::_( 'Save Payment Data' ); ?>" >
388
+ </p>
389
+
390
+ </form>
391
+
392
+ </div>
393
+ </div>
394
+ <?php
395
+ }
396
+
397
+ /*
398
+ * Process submission and save the edited Stripe Buy now payment button data
399
+ */
400
+ add_action( 'swpm_edit_payment_button_process_submission', 'swpm_edit_stripe_sca_buy_now_button_data' );
401
+
402
+ function swpm_edit_stripe_sca_buy_now_button_data() {
403
+ if ( isset( $_REQUEST['swpm_stripe_sca_buy_now_edit_submit'] ) ) {
404
+ //This is a Stripe buy now button edit event. Process the submission.
405
+ check_admin_referer( 'swpm_admin_add_edit_stripe_sca_buy_now_btn', 'swpm_admin_edit_stripe_sca_buy_now_btn' );
406
+ //Update and Save the edited payment button data
407
+ $button_id = sanitize_text_field( $_REQUEST['button_id'] );
408
+ $button_id = absint( $button_id );
409
+ $button_type = sanitize_text_field( $_REQUEST['button_type'] );
410
+ $button_name = sanitize_text_field( $_REQUEST['button_name'] );
411
+
412
+ $button_post = array(
413
+ 'ID' => $button_id,
414
+ 'post_title' => $button_name,
415
+ 'post_type' => 'swpm_payment_button',
416
+ );
417
+ wp_update_post( $button_post );
418
+
419
+ update_post_meta( $button_id, 'button_type', $button_type );
420
+ update_post_meta( $button_id, 'membership_level_id', sanitize_text_field( $_REQUEST['membership_level_id'] ) );
421
+ update_post_meta( $button_id, 'payment_amount', trim( sanitize_text_field( $_REQUEST['payment_amount'] ) ) );
422
+ update_post_meta( $button_id, 'payment_currency', sanitize_text_field( $_REQUEST['payment_currency'] ) );
423
+
424
+ update_post_meta( $button_id, 'stripe_test_secret_key', trim( sanitize_text_field( $_REQUEST['stripe_test_secret_key'] ) ) );
425
+ update_post_meta( $button_id, 'stripe_test_publishable_key', trim( sanitize_text_field( $_REQUEST['stripe_test_publishable_key'] ) ) );
426
+ update_post_meta( $button_id, 'stripe_live_secret_key', trim( sanitize_text_field( $_REQUEST['stripe_live_secret_key'] ) ) );
427
+ update_post_meta( $button_id, 'stripe_live_publishable_key', trim( sanitize_text_field( $_REQUEST['stripe_live_publishable_key'] ) ) );
428
+
429
+ update_post_meta( $button_id, 'stripe_collect_address', isset( $_POST['collect_address'] ) ? '1' : '' );
430
+
431
+ update_post_meta( $button_id, 'return_url', trim( sanitize_text_field( $_REQUEST['return_url'] ) ) );
432
+ //update_post_meta($button_id, 'button_image_url', trim(sanitize_text_field($_REQUEST['button_image_url'])));
433
+
434
+ echo '<div id="message" class="updated fade"><p>Payment button data successfully updated!</p></div>';
435
+ }
436
+ }
437
+
438
+ /************************************************************************
439
+ * End of edit Stripe Buy now payment button stuff
440
+ ************************************************************************/
views/payments/payment-gateway/admin_stripe_sca_subscription_button.php ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* * ***************************************************************
3
+ * Render the new Stripe Subscription payment button creation interface
4
+ * ************************************************************** */
5
+
6
+ function swpm_render_new_edit_stripe_sca_subscription_button_interface( $opts, $edit = false ) {
7
+
8
+ //Test for PHP v5.4.0 or show error and don't show the remaining interface.
9
+ if ( version_compare( PHP_VERSION, '5.4.0' ) >= 0 ) {
10
+ //The server is using at least PHP version 5.4.0
11
+ //Can use Braintree gateway library
12
+ } else {
13
+ //This server can't handle Braintree library
14
+ echo '<div class="swpm-red-box">';
15
+ echo '<p>The Stripe subscription gateway library requires at least PHP 5.4.0. Your server is using a very old version of PHP.</p>';
16
+ echo '<p>Request your hosting provider to upgrade your PHP to a more recent version then you will be able to use the Stripe subscription buttons.<p>';
17
+ echo '</div>';
18
+ return;
19
+ }
20
+
21
+ function swpm_stripe_sca_subscr_gen_curr_opts( $selected = false ) {
22
+ $curr_arr = array(
23
+ 'USD' => 'US Dollars ($)',
24
+ 'EUR' => 'Euros (€)',
25
+ 'GBP' => 'Pounds Sterling (£)',
26
+ 'AUD' => 'Australian Dollars ($)',
27
+ 'BRL' => 'Brazilian Real (R$)',
28
+ 'CAD' => 'Canadian Dollars ($)',
29
+ 'CNY' => 'Chinese Yuan',
30
+ 'CZK' => 'Czech Koruna',
31
+ 'DKK' => 'Danish Krone',
32
+ 'HKD' => 'Hong Kong Dollar ($)',
33
+ 'HUF' => 'Hungarian Forint',
34
+ 'INR' => 'Indian Rupee',
35
+ 'IDR' => 'Indonesia Rupiah',
36
+ 'ILS' => 'Israeli Shekel',
37
+ 'JPY' => 'Japanese Yen (Â¥)',
38
+ 'MYR' => 'Malaysian Ringgits',
39
+ 'MXN' => 'Mexican Peso ($)',
40
+ 'NZD' => 'New Zealand Dollar ($)',
41
+ 'NOK' => 'Norwegian Krone',
42
+ 'PHP' => 'Philippine Pesos',
43
+ 'PLN' => 'Polish Zloty',
44
+ 'SGD' => 'Singapore Dollar ($)',
45
+ 'ZAR' => 'South African Rand (R)',
46
+ 'KRW' => 'South Korean Won',
47
+ 'SEK' => 'Swedish Krona',
48
+ 'CHF' => 'Swiss Franc',
49
+ 'TWD' => 'Taiwan New Dollars',
50
+ 'THB' => 'Thai Baht',
51
+ 'TRY' => 'Turkish Lira',
52
+ 'VND' => 'Vietnamese Dong',
53
+ );
54
+ $out = '';
55
+ foreach ( $curr_arr as $key => $value ) {
56
+ if ( $selected !== false && $selected == $key ) {
57
+ $sel = ' selected';
58
+ } else {
59
+ $sel = '';
60
+ }
61
+ $out .= '<option value="' . $key . '"' . $sel . '>' . $value . '</option>';
62
+ }
63
+ return $out;
64
+ }
65
+ ?>
66
+
67
+ <div class="swpm-orange-box">
68
+ View the <a target="_blank" href="https://simple-membership-plugin.com/create-stripe-subscription-button-membership-payment/">documentation</a>&nbsp;
69
+ to learn how to create a Stripe Subscription payment button and use it.
70
+ </div>
71
+
72
+ <form id="stripe_sca_subsciption_button_config_form" method="post">
73
+
74
+ <div class="postbox">
75
+ <h3 class="hndle"><label for="title"><?php echo SwpmUtils::_( 'Stripe Subscription Button Configuration' ); ?></label></h3>
76
+ <div class="inside">
77
+ <table class="form-table" width="100%" border="0" cellspacing="0" cellpadding="6">
78
+ <?php if ( ! $edit ) { ?>
79
+ <input type="hidden" name="button_type" value="<?php echo sanitize_text_field( $_REQUEST['button_type'] ); ?>">
80
+ <input type="hidden" name="swpm_button_type_selected" value="1">
81
+ <?php } else { ?>
82
+ <tr valign="top">
83
+ <th scope="row"><?php echo SwpmUtils::_( 'Button ID' ); ?></th>
84
+ <td>
85
+ <input type="text" size="10" name="button_id" value="<?php echo $opts['button_id']; ?>" readonly required />
86
+ <p class="description">This is the ID of this payment button. It is automatically generated for you and it cannot be changed.</p>
87
+ </td>
88
+ </tr>
89
+ <?php } ?>
90
+ <tr valign="top">
91
+ <th scope="row"><?php echo SwpmUtils::_( 'Button Title' ); ?></th>
92
+ <td>
93
+ <input type="text" size="50" name="button_name" value="<?php echo ( $edit ? $opts['button_title'] : '' ); ?>" required />
94
+ <p class="description">Give this membership payment button a name. Example: Gold membership payment</p>
95
+ </td>
96
+ </tr>
97
+
98
+ <tr valign="top">
99
+ <th scope="row"><?php echo SwpmUtils::_( 'Membership Level' ); ?></th>
100
+ <td>
101
+ <select id="membership_level_id" name="membership_level_id">
102
+ <?php echo ( $edit ? SwpmUtils::membership_level_dropdown( $opts['membership_level_id'][0] ) : SwpmUtils::membership_level_dropdown() ); ?>
103
+ </select>
104
+ <p class="description">Select the membership level this payment button is for.</p>
105
+ </td>
106
+ </tr>
107
+
108
+ <tr valign="top">
109
+ <th scope="row"><?php echo SwpmUtils::_( 'Stripe Plan ID' ); ?></th>
110
+ <td>
111
+ <input type="text" name="stripe_plan_id" value="<?php echo ( $edit ? $opts['stripe_plan_id'][0] : '' ); ?>" required />
112
+ <p class="description">
113
+ ID of the plan that you want subscribers to be assigned to. You can get more details in the
114
+ <a href="https://simple-membership-plugin.com/create-stripe-subscription-button-membership-payment/" target="_blank">documentation</a>.
115
+ </p>
116
+ </td>
117
+ </tr>
118
+
119
+ <tr valign="top">
120
+ <th scope="row"><?php echo SwpmUtils::_( 'Trial Period' ); ?></th>
121
+ <td>
122
+ <input type="number" min="0" name="stripe_trial_period" value="<?php echo $edit ? esc_attr( $opts['stripe_trial_period'][0] ) : ''; ?>" /> days
123
+ <p class="description">If you want to use a trial period then enter the number of days in this field. Subscriptions to this plan will automatically start after that. If left blank or 0, trial period is disabled.</p>
124
+ </td>
125
+ </tr>
126
+
127
+ </table>
128
+
129
+ </div>
130
+ </div><!-- end of main button configuration box -->
131
+
132
+ <div class="postbox">
133
+ <h3 class="hndle"><label for="title"><?php echo SwpmUtils::_( 'Stripe API Settings' ); ?></label></h3>
134
+ <div class="inside">
135
+
136
+ <table class="form-table" width="100%" border="0" cellspacing="0" cellpadding="6">
137
+
138
+ <tr valign="top">
139
+ <th scope="row"><?php echo SwpmUtils::_( 'Test Publishable Key' ); ?></th>
140
+ <td>
141
+ <input type="text" size="100" name="stripe_test_publishable_key" value="<?php echo ( $edit ? $opts['stripe_test_publishable_key'][0] : '' ); ?>" />
142
+ <p class="description">Enter your Stripe test publishable key.</p>
143
+ </td>
144
+ </tr>
145
+
146
+ <tr valign="top">
147
+ <th scope="row"><?php echo SwpmUtils::_( 'Test Secret Key' ); ?></th>
148
+ <td>
149
+ <input type="text" size="100" name="stripe_test_secret_key" value="<?php echo ( $edit ? $opts['stripe_test_secret_key'][0] : '' ); ?>" />
150
+ <p class="description">Enter your Stripe test secret key.</p>
151
+ </td>
152
+ </tr>
153
+
154
+ <tr valign="top">
155
+ <th scope="row"><?php echo SwpmUtils::_( 'Live Publishable Key' ); ?></th>
156
+ <td>
157
+ <input type="text" size="100" name="stripe_live_publishable_key" value="<?php echo ( $edit ? $opts['stripe_live_publishable_key'][0] : '' ); ?>" />
158
+ <p class="description">Enter your Stripe live publishable key.</p>
159
+ </td>
160
+ </tr>
161
+
162
+ <tr valign="top">
163
+ <th scope="row"><?php echo SwpmUtils::_( 'Live Secret Key' ); ?></th>
164
+ <td>
165
+ <input type="text" size="100" name="stripe_live_secret_key" value="<?php echo ( $edit ? $opts['stripe_live_secret_key'][0] : '' ); ?>" />
166
+ <p class="description">Enter your Stripe live secret key.</p>
167
+ </td>
168
+ </tr>
169
+
170
+ <tr valign="top">
171
+ <th scope="row"><?php echo SwpmUtils::_( 'Webook Endpoint URL' ); ?></th>
172
+ <td>
173
+ <kbd><?php echo SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL . '/?swpm_process_stripe_subscription=1&hook=1'; ?></kbd>
174
+ <p class="description">You should create a new Webhook in your Stripe account and put this URL there if you want the plugin to handle subscription expiration automatically.<br />
175
+ You can get more info in the <a href="https://simple-membership-plugin.com/create-stripe-subscription-button-membership-payment/" target="_blank">documentation</a>.
176
+ </p>
177
+ </td>
178
+ </tr>
179
+
180
+ </table>
181
+ </div>
182
+ </div><!-- end of Stripe API Keys box -->
183
+
184
+ <div class="postbox">
185
+ <h3 class="hndle"><label for="title"><?php echo SwpmUtils::_( 'Optional Details' ); ?></label></h3>
186
+ <div class="inside">
187
+
188
+ <table class="form-table" width="100%" border="0" cellspacing="0" cellpadding="6">
189
+
190
+ <tr valign="top">
191
+ <th scope="row"><?php echo SwpmUtils::_( 'Collect Customer Address' ); ?></th>
192
+ <td>
193
+ <input type="checkbox" name="collect_address" value="1"<?php echo ( $edit ? ( ( isset( $opts['stripe_collect_address'][0] ) && $opts['stripe_collect_address'][0] === '1' ) ? ' checked' : '' ) : '' ); ?>/>
194
+ <p class="description">Enable this option if you want to collect customer address during Stripe checkout.</p>
195
+ </td>
196
+ </tr>
197
+
198
+ <tr valign="top">
199
+ <th scope="row"><?php echo SwpmUtils::_( 'Return URL' ); ?></th>
200
+ <td>
201
+ <input type="text" size="100" name="return_url" value="<?php echo ( $edit ? $opts['return_url'][0] : '' ); ?>" />
202
+ <p class="description">This is the URL the user will be redirected to after a successful payment. Enter the URL of your Thank You page here.</p>
203
+ </td>
204
+ </tr>
205
+
206
+ <tr valign="top">
207
+ <th scope="row"><?php echo SwpmUtils::_( 'Button Image URL' ); ?></th>
208
+ <td>
209
+ <input type="text" size="100" name="button_image_url" value="<?php echo ( $edit ? $opts['button_image_url'][0] : '' ); ?>" />
210
+ <p class="description">If you want to customize the look of the button using an image then enter the URL of the image.</p>
211
+ </td>
212
+ </tr>
213
+
214
+ </table>
215
+ </div>
216
+ </div><!-- end of optional details box -->
217
+
218
+ <p class="submit">
219
+ <?php wp_nonce_field( 'swpm_admin_add_edit_stripe_sca_subs_btn', 'swpm_admin_add_edit_stripe_sca_subs_btn' ); ?>
220
+ <input type="submit" name="swpm_stripe_sca_subscription_<?php echo ( $edit ? 'edit' : 'save' ); ?>_submit" class="button-primary" value="<?php echo SwpmUtils::_( 'Save Payment Data' ); ?>" >
221
+ </p>
222
+
223
+ </form>
224
+
225
+ <?php
226
+ }
227
+
228
+ add_action( 'swpm_create_new_button_for_stripe_sca_subscription', 'swpm_create_new_stripe_sca_subscription_button' );
229
+
230
+ function swpm_create_new_stripe_sca_subscription_button() {
231
+ swpm_render_new_edit_stripe_sca_subscription_button_interface( '' );
232
+ }
233
+
234
+ add_action( 'swpm_edit_payment_button_for_stripe_sca_subscription', 'swpm_edit_stripe_sca_subscription_button' );
235
+
236
+ function swpm_edit_stripe_sca_subscription_button() {
237
+ //Retrieve the payment button data and present it for editing.
238
+
239
+ $button_id = sanitize_text_field( $_REQUEST['button_id'] );
240
+ $button_id = absint( $button_id );
241
+
242
+ $button = get_post( $button_id ); //Retrieve the CPT for this button
243
+
244
+ $post_meta = get_post_meta( $button_id );
245
+ $post_meta['button_title'] = $button->post_title;
246
+ $post_meta['button_id'] = $button_id;
247
+
248
+ swpm_render_new_edit_stripe_sca_subscription_button_interface( $post_meta, true );
249
+ }
250
+
251
+ /*
252
+ * Process submission and save the new PayPal Subscription payment button data
253
+ */
254
+ add_action( 'swpm_create_new_button_process_submission', 'swpm_save_edit_stripe_sca_subscription_button_data' );
255
+ add_action( 'swpm_edit_payment_button_process_submission', 'swpm_save_edit_stripe_sca_subscription_button_data' );
256
+
257
+ function swpm_save_edit_stripe_sca_subscription_button_data() {
258
+ if ( isset( $_REQUEST['swpm_stripe_sca_subscription_save_submit'] ) ) {
259
+ $edit = false;
260
+ }
261
+ if ( isset( $_REQUEST['swpm_stripe_sca_subscription_edit_submit'] ) ) {
262
+ $edit = true;
263
+ }
264
+ if ( isset( $edit ) ) {
265
+ //This is a Stripe subscription button save or edit event. Process the submission.
266
+ check_admin_referer( 'swpm_admin_add_edit_stripe_sca_subs_btn', 'swpm_admin_add_edit_stripe_sca_subs_btn' );
267
+ if ( $edit ) {
268
+ $button_id = sanitize_text_field( $_REQUEST['button_id'] );
269
+ $button_id = absint( $button_id );
270
+ $button_type = sanitize_text_field( $_REQUEST['button_type'] );
271
+ $button_name = sanitize_text_field( $_REQUEST['button_name'] );
272
+
273
+ $button_post = array(
274
+ 'ID' => $button_id,
275
+ 'post_title' => $button_name,
276
+ 'post_type' => 'swpm_payment_button',
277
+ );
278
+ wp_update_post( $button_post );
279
+ } else {
280
+ $button_id = wp_insert_post(
281
+ array(
282
+ 'post_title' => sanitize_text_field( $_REQUEST['button_name'] ),
283
+ 'post_type' => 'swpm_payment_button',
284
+ 'post_content' => '',
285
+ 'post_status' => 'publish',
286
+ )
287
+ );
288
+ $button_type = sanitize_text_field( $_REQUEST['button_type'] );
289
+ }
290
+
291
+ update_post_meta( $button_id, 'button_type', $button_type );
292
+ update_post_meta( $button_id, 'membership_level_id', sanitize_text_field( $_REQUEST['membership_level_id'] ) );
293
+ update_post_meta( $button_id, 'return_url', trim( sanitize_text_field( $_REQUEST['return_url'] ) ) );
294
+ update_post_meta( $button_id, 'button_image_url', trim( sanitize_text_field( $_REQUEST['button_image_url'] ) ) );
295
+ update_post_meta( $button_id, 'stripe_collect_address', isset( $_POST['collect_address'] ) ? '1' : '' );
296
+
297
+ if ( $edit ) {
298
+ // let's see if Stripe details (plan ID and Secret Key) are valid
299
+ $stripe_error_msg = '';
300
+ $settings = SwpmSettings::get_instance();
301
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
302
+ if ( $sandbox_enabled ) {
303
+ $secret_key = sanitize_text_field( $_REQUEST['stripe_test_secret_key'] );
304
+ } else {
305
+ $secret_key = sanitize_text_field( $_REQUEST['stripe_live_secret_key'] );
306
+ }
307
+
308
+ require_once SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-util-functions.php';
309
+ $result = StripeUtilFunctions::get_stripe_plan_info( $secret_key, sanitize_text_field( $_REQUEST['stripe_plan_id'] ) );
310
+ if ( $result['success'] ) {
311
+ $plan_data = $result['plan_data'];
312
+ } else {
313
+ $stripe_error_msg = $result['error_msg'];
314
+ }
315
+ }
316
+ //API details
317
+ update_post_meta( $button_id, 'stripe_test_secret_key', sanitize_text_field( $_REQUEST['stripe_test_secret_key'] ) );
318
+ update_post_meta( $button_id, 'stripe_test_publishable_key', sanitize_text_field( $_REQUEST['stripe_test_publishable_key'] ) );
319
+ update_post_meta( $button_id, 'stripe_live_secret_key', sanitize_text_field( $_REQUEST['stripe_live_secret_key'] ) );
320
+ update_post_meta( $button_id, 'stripe_live_publishable_key', sanitize_text_field( $_REQUEST['stripe_live_publishable_key'] ) );
321
+
322
+ //Subscription billing details
323
+ update_post_meta( $button_id, 'stripe_plan_id', sanitize_text_field( $_REQUEST['stripe_plan_id'] ) );
324
+ update_post_meta( $button_id, 'stripe_trial_period', sanitize_text_field( $_REQUEST['stripe_trial_period'] ) );
325
+ update_post_meta( $button_id, 'stripe_plan_data', ( isset( $plan_data ) ? $plan_data : false ) );
326
+
327
+ if ( $edit ) {
328
+ if ( empty( $stripe_error_msg ) ) {
329
+ echo '<div id="message" class="updated fade"><p>Payment button data successfully updated!</p></div>';
330
+ } else {
331
+ echo '<div id="message" class="error"><p>' . $stripe_error_msg . '</p></div>';
332
+ }
333
+ } else {
334
+ //Redirect to the edit interface of this button with $button_id
335
+ $url = admin_url() . 'admin.php?page=simple_wp_membership_payments&tab=edit_button&button_id=' . $button_id . '&button_type=' . $button_type;
336
+ SwpmMiscUtils::redirect_to_url( $url );
337
+ }
338
+ }
339
+ }
views/payments/payment-gateway/stripe_sca_button_shortcode_view.php ADDED
@@ -0,0 +1,327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* * ************************************************
4
+ * Stripe Buy Now button shortcode handler
5
+ * *********************************************** */
6
+ add_filter( 'swpm_payment_button_shortcode_for_stripe_sca_buy_now', 'swpm_render_stripe_sca_buy_now_button_sc_output', 10, 2 );
7
+
8
+ function swpm_render_stripe_sca_buy_now_button_sc_output( $button_code, $args ) {
9
+
10
+ $button_id = isset( $args['id'] ) ? $args['id'] : '';
11
+ if ( empty( $button_id ) ) {
12
+ return '<p class="swpm-red-box">Error! swpm_render_stripe_sca_buy_now_button_sc_output() function requires the button ID value to be passed to it.</p>';
13
+ }
14
+
15
+ //Get class option for button styling, set Stripe's default if none specified
16
+ $class = isset( $args['class'] ) ? $args['class'] : 'stripe-button-el';
17
+
18
+ //Check new_window parameter
19
+ $window_target = isset( $args['new_window'] ) ? 'target="_blank"' : '';
20
+ $button_text = ( isset( $args['button_text'] ) ) ? esc_attr( $args['button_text'] ) : SwpmUtils::_( 'Buy Now' );
21
+
22
+ $item_logo = ''; //Can be used to show an item logo or thumbnail in the checkout form.
23
+
24
+ $settings = SwpmSettings::get_instance();
25
+ $button_cpt = get_post( $button_id ); //Retrieve the CPT for this button
26
+ $item_name = htmlspecialchars( $button_cpt->post_title );
27
+
28
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
29
+ //Verify that this membership level exists (to prevent user paying for a level that has been deleted)
30
+ if ( ! \SwpmUtils::membership_level_id_exists( $membership_level_id ) ) {
31
+ return '<p class="swpm-red-box">Error! The membership level specified in this button does not exist. You may have deleted this membership level. Edit the button and use the correct membership level.</p>';
32
+ }
33
+
34
+ //Payment amount and currency
35
+ $payment_amount = get_post_meta( $button_id, 'payment_amount', true );
36
+ if ( ! is_numeric( $payment_amount ) ) {
37
+ return '<p class="swpm-red-box">Error! The payment amount value of the button must be a numeric number. Example: 49.50 </p>';
38
+ }
39
+ $payment_currency = get_post_meta( $button_id, 'payment_currency', true );
40
+ $payment_amount = round( $payment_amount, 2 ); //round the amount to 2 decimal place.
41
+ $zero_cents = unserialize( SIMPLE_WP_MEMBERSHIP_STRIPE_ZERO_CENTS );
42
+ if ( in_array( $payment_currency, $zero_cents ) ) {
43
+ //this is zero-cents currency, amount shouldn't be multiplied by 100
44
+ $price_in_cents = $payment_amount;
45
+ } else {
46
+ $price_in_cents = $payment_amount * 100; //The amount (in cents). This value is passed to Stripe API.
47
+ }
48
+ $payment_amount_formatted = SwpmMiscUtils::format_money( $payment_amount, $payment_currency );
49
+
50
+ //$button_image_url = get_post_meta($button_id, 'button_image_url', true);//Stripe doesn't currenty support button image for their standard checkout.
51
+ //User's IP address
52
+ $user_ip = SwpmUtils::get_user_ip_address();
53
+ $_SESSION['swpm_payment_button_interaction'] = $user_ip;
54
+
55
+ //Custom field data
56
+ $custom_field_value = 'subsc_ref=' . $membership_level_id;
57
+ $custom_field_value .= '&user_ip=' . $user_ip;
58
+ if ( SwpmMemberUtils::is_member_logged_in() ) {
59
+ $custom_field_value .= '&swpm_id=' . SwpmMemberUtils::get_logged_in_members_id();
60
+ }
61
+ $custom_field_value = apply_filters( 'swpm_custom_field_value_filter', $custom_field_value );
62
+
63
+ //Sandbox settings
64
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
65
+
66
+ //API keys
67
+ $stripe_test_secret_key = get_post_meta( $button_id, 'stripe_test_secret_key', true );
68
+ $stripe_test_publishable_key = get_post_meta( $button_id, 'stripe_test_publishable_key', true );
69
+ $stripe_live_secret_key = get_post_meta( $button_id, 'stripe_live_secret_key', true );
70
+ $stripe_live_publishable_key = get_post_meta( $button_id, 'stripe_live_publishable_key', true );
71
+ if ( $sandbox_enabled ) {
72
+ $publishable_key = $stripe_test_publishable_key; //Use sandbox API key
73
+ $secret_key = $stripe_test_secret_key;
74
+ } else {
75
+ $publishable_key = $stripe_live_publishable_key; //Use live API key
76
+ $secret_key = $stripe_live_secret_key;
77
+ }
78
+
79
+ //Billing address
80
+ $billing_address = isset( $args['billing_address'] ) ? '1' : '';
81
+ //By default don't show the billing address in the checkout form.
82
+ //if billing_address parameter is not present in the shortcode, let's check button option
83
+ if ( $billing_address === '' ) {
84
+ $collect_address = get_post_meta( $button_id, 'stripe_collect_address', true );
85
+ if ( $collect_address === '1' ) {
86
+ //Collect Address enabled in button settings
87
+ $billing_address = 1;
88
+ }
89
+ }
90
+
91
+ $uniqid = md5( uniqid() );
92
+ $ref_id = 'swpm_' . $uniqid . '|' . $button_id;
93
+
94
+ //Return, cancel, notifiy URLs
95
+ $notify_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL . '/?swpm_process_stripe_sca_buy_now=1&ref_id=' . $ref_id; //We are going to use it to do post payment processing.
96
+
97
+ $current_url = ( isset( $_SERVER['HTTPS'] ) ? 'https' : 'http' ) . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
98
+
99
+ SwpmMiscUtils::load_stripe_lib();
100
+
101
+ try {
102
+ \Stripe\Stripe::setApiKey( $secret_key );
103
+
104
+ $opts = array(
105
+ 'payment_method_types' => array( 'card' ),
106
+ 'client_reference_id' => $ref_id,
107
+ 'billing_address_collection' => $billing_address ? 'required' : 'auto',
108
+ 'line_items' => array(
109
+ array(
110
+ 'name' => $item_name,
111
+ 'description' => $payment_amount_formatted,
112
+ 'amount' => $price_in_cents,
113
+ 'currency' => $payment_currency,
114
+ 'quantity' => 1,
115
+ ),
116
+ ),
117
+ 'success_url' => $notify_url,
118
+ 'cancel_url' => $current_url,
119
+ );
120
+
121
+ if ( ! empty( $item_logo ) ) {
122
+ $opts['line_items'][0]['images'] = array( $item_logo );
123
+ }
124
+
125
+ $session = \Stripe\Checkout\Session::create( $opts );
126
+ } catch ( Exception $e ) {
127
+ $err = $e->getMessage();
128
+ return '<p class="swpm-red-box">' . $err . '</p>';
129
+ }
130
+
131
+ /* === Stripe Buy Now Button Form === */
132
+ $output = '';
133
+ $output .= '<div class="swpm-button-wrapper swpm-stripe-buy-now-wrapper">';
134
+ $output .= "<form id='swpm-stripe-payment-form-" . $uniqid . "' action='" . $notify_url . "' METHOD='POST'> ";
135
+ $output .= "<div style='display: none !important'>";
136
+ $output .= '<script src="https://js.stripe.com/v3/"></script>';
137
+ $output .= "<link rel='stylesheet' href='https://checkout.stripe.com/v3/checkout/button.css' type='text/css' media='all' />";
138
+ ob_start();
139
+ ?>
140
+ <script>
141
+ var stripe = Stripe('<?php echo esc_js( $publishable_key ); ?>');
142
+ jQuery('#swpm-stripe-payment-form-<?php echo esc_js( $uniqid ); ?>').on('submit',function(e) {
143
+ e.preventDefault();
144
+ stripe.redirectToCheckout({
145
+ sessionId: '<?php echo esc_js( $session->id ); ?>'
146
+ }).then(function (result) {
147
+ });
148
+ });
149
+ </script>
150
+ <?php
151
+ $output .= ob_get_clean();
152
+ $output .= '</div>';
153
+
154
+ //apply filter to output additional form fields
155
+ $coupon_input = '';
156
+ $coupon_input = apply_filters( 'swpm_payment_form_additional_fields', $coupon_input, $button_id, $uniqid );
157
+ if ( ! empty( $coupon_input ) ) {
158
+ $output .= $coupon_input;
159
+ }
160
+
161
+ $button_image_url = get_post_meta( $button_id, 'button_image_url', true );
162
+ if ( ! empty( $button_image_url ) ) {
163
+ $output .= '<input type="image" src="' . $button_image_url . '" class="' . $class . '" alt="' . $button_text . '" title="' . $button_text . '" />';
164
+ } else {
165
+ $output .= "<button id='{$button_id}' type='submit' class='{$class}'><span>{$button_text}</span></button>";
166
+ }
167
+
168
+ //Filter to add additional payment input fields to the form.
169
+ $output .= apply_filters( 'swpm_stripe_payment_form_additional_fields', '' );
170
+
171
+ $output .= '</form>';
172
+ $output .= '</div>'; //End .swpm_button_wrapper
173
+
174
+ return $output;
175
+ }
176
+
177
+ add_filter( 'swpm_payment_button_shortcode_for_stripe_sca_subscription', 'swpm_render_stripe_sca_subscription_button_sc_output', 10, 2 );
178
+
179
+ function swpm_render_stripe_sca_subscription_button_sc_output( $button_code, $args ) {
180
+
181
+ $button_id = isset( $args['id'] ) ? $args['id'] : '';
182
+ if ( empty( $button_id ) ) {
183
+ return '<p class="swpm-red-box">Error! swpm_render_stripe_sca_buy_now_button_sc_output() function requires the button ID value to be passed to it.</p>';
184
+ }
185
+
186
+ //Get class option for button styling, set Stripe's default if none specified
187
+ $class = isset( $args['class'] ) ? $args['class'] : 'stripe-button-el';
188
+
189
+ //Check new_window parameter
190
+ $window_target = isset( $args['new_window'] ) ? 'target="_blank"' : '';
191
+ $button_text = ( isset( $args['button_text'] ) ) ? esc_attr( $args['button_text'] ) : SwpmUtils::_( 'Buy Now' );
192
+
193
+ $item_logo = ''; //Can be used to show an item logo or thumbnail in the checkout form.
194
+
195
+ $settings = SwpmSettings::get_instance();
196
+ $button_cpt = get_post( $button_id ); //Retrieve the CPT for this button
197
+ $item_name = htmlspecialchars( $button_cpt->post_title );
198
+
199
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
200
+ //Verify that this membership level exists (to prevent user paying for a level that has been deleted)
201
+ if ( ! \SwpmUtils::membership_level_id_exists( $membership_level_id ) ) {
202
+ return '<p class="swpm-red-box">Error! The membership level specified in this button does not exist. You may have deleted this membership level. Edit the button and use the correct membership level.</p>';
203
+ }
204
+
205
+ //$button_image_url = get_post_meta($button_id, 'button_image_url', true);//Stripe doesn't currenty support button image for their standard checkout.
206
+ //User's IP address
207
+ $user_ip = SwpmUtils::get_user_ip_address();
208
+ $_SESSION['swpm_payment_button_interaction'] = $user_ip;
209
+
210
+ //Custom field data
211
+ $custom_field_value = 'subsc_ref=' . $membership_level_id;
212
+ $custom_field_value .= '&user_ip=' . $user_ip;
213
+ if ( SwpmMemberUtils::is_member_logged_in() ) {
214
+ $custom_field_value .= '&swpm_id=' . SwpmMemberUtils::get_logged_in_members_id();
215
+ }
216
+ $custom_field_value = apply_filters( 'swpm_custom_field_value_filter', $custom_field_value );
217
+
218
+ //Sandbox settings
219
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
220
+
221
+ //API keys
222
+ $stripe_test_secret_key = get_post_meta( $button_id, 'stripe_test_secret_key', true );
223
+ $stripe_test_publishable_key = get_post_meta( $button_id, 'stripe_test_publishable_key', true );
224
+ $stripe_live_secret_key = get_post_meta( $button_id, 'stripe_live_secret_key', true );
225
+ $stripe_live_publishable_key = get_post_meta( $button_id, 'stripe_live_publishable_key', true );
226
+ if ( $sandbox_enabled ) {
227
+ $publishable_key = $stripe_test_publishable_key; //Use sandbox API key
228
+ $secret_key = $stripe_test_secret_key;
229
+ } else {
230
+ $publishable_key = $stripe_live_publishable_key; //Use live API key
231
+ $secret_key = $stripe_live_secret_key;
232
+ }
233
+
234
+ //Billing address
235
+ $billing_address = isset( $args['billing_address'] ) ? '1' : '';
236
+ //By default don't show the billing address in the checkout form.
237
+ //if billing_address parameter is not present in the shortcode, let's check button option
238
+ if ( $billing_address === '' ) {
239
+ $collect_address = get_post_meta( $button_id, 'stripe_collect_address', true );
240
+ if ( $collect_address === '1' ) {
241
+ //Collect Address enabled in button settings
242
+ $billing_address = 1;
243
+ }
244
+ }
245
+
246
+ $uniqid = md5( uniqid() );
247
+ $ref_id = 'swpm_' . $uniqid . '|' . $button_id;
248
+
249
+ //Return, cancel, notifiy URLs
250
+ $notify_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL . '/?swpm_process_stripe_sca_subscription=1&ref_id=' . $ref_id; //We are going to use it to do post payment processing.
251
+
252
+ $current_url = ( isset( $_SERVER['HTTPS'] ) ? 'https' : 'http' ) . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
253
+
254
+ $plan_id = get_post_meta( $button_id, 'stripe_plan_id', true );
255
+
256
+ SwpmMiscUtils::load_stripe_lib();
257
+
258
+ try {
259
+ \Stripe\Stripe::setApiKey( $secret_key );
260
+
261
+ $opts = array(
262
+ 'payment_method_types' => array( 'card' ),
263
+ 'client_reference_id' => $ref_id,
264
+ 'billing_address_collection' => $billing_address ? 'required' : 'auto',
265
+ 'subscription_data' => array(
266
+ 'items' => array( array( 'plan' => $plan_id ) ),
267
+ ),
268
+ 'success_url' => $notify_url,
269
+ 'cancel_url' => $current_url,
270
+ );
271
+
272
+ $trial_period = get_post_meta( $button_id, 'stripe_trial_period', true );
273
+ $trial_period = absint( $trial_period );
274
+ if ( $trial_period ) {
275
+ $opts['subscription_data']['trial_period_days'] = $trial_period;
276
+ }
277
+
278
+ $session = \Stripe\Checkout\Session::create( $opts );
279
+ } catch ( Exception $e ) {
280
+ $err = $e->getMessage();
281
+ return '<p class="swpm-red-box">' . $err . '</p>';
282
+ }
283
+
284
+ /* === Stripe SCA Subscription Button Form === */
285
+ $output = '';
286
+ $output .= '<div class="swpm-button-wrapper swpm-stripe-buy-now-wrapper">';
287
+ $output .= "<form id='swpm-stripe-payment-form-" . $uniqid . "' action='" . $notify_url . "' METHOD='POST'> ";
288
+ $output .= "<div style='display: none !important'>";
289
+ $output .= '<script src="https://js.stripe.com/v3/"></script>';
290
+ $output .= "<link rel='stylesheet' href='https://checkout.stripe.com/v3/checkout/button.css' type='text/css' media='all' />";
291
+ ob_start();
292
+ ?>
293
+ <script>
294
+ var stripe = Stripe('<?php echo esc_js( $publishable_key ); ?>');
295
+ jQuery('#swpm-stripe-payment-form-<?php echo esc_js( $uniqid ); ?>').on('submit',function(e) {
296
+ e.preventDefault();
297
+ stripe.redirectToCheckout({
298
+ sessionId: '<?php echo esc_js( $session->id ); ?>'
299
+ }).then(function (result) {
300
+ });
301
+ });
302
+ </script>
303
+ <?php
304
+ $output .= ob_get_clean();
305
+ $output .= '</div>';
306
+
307
+ //apply filter to output additional form fields
308
+ $coupon_input = '';
309
+ $coupon_input = apply_filters( 'swpm_payment_form_additional_fields', $coupon_input, $button_id, $uniqid );
310
+ if ( ! empty( $coupon_input ) ) {
311
+ $output .= $coupon_input;
312
+ }
313
+
314
+ $button_image_url = get_post_meta( $button_id, 'button_image_url', true );
315
+ if ( ! empty( $button_image_url ) ) {
316
+ $output .= '<input type="image" src="' . $button_image_url . '" class="' . $class . '" alt="' . $button_text . '" title="' . $button_text . '" />';
317
+ } else {
318
+ $output .= "<button id='{$button_id}' type='submit' class='{$class}'><span>{$button_text}</span></button>";
319
+ }
320
+
321
+ //Filter to add additional payment input fields to the form.
322
+ $output .= apply_filters( 'swpm_stripe_payment_form_additional_fields', '' );
323
+
324
+ $output .= '</form>';
325
+ $output .= '</div>'; //End .swpm_button_wrapper
326
+
327
+ return $output;}