class-wc-payments-subscription-minimum-amount-handler.php
2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
/**
* Class WC_Payments_Subscription_Minimum_Amount_Handler
*
* @package WooCommerce\Payments
*/
/**
* The WC_Payments_Subscription_Minimum_Amount_Handler class
*/
class WC_Payments_Subscription_Minimum_Amount_Handler {
/**
* The API client object.
*
* @var WC_Payments_API_Client
*/
private $api_client;
/**
* The transient key used to store the minimum amounts for a given currency.
*
* @const string
*/
const MINIMUM_RECURRING_AMOUNT_TRANSIENT_KEY = 'wcpay_subscription_minimum_recurring_amounts';
/**
* The length of time in seconds the minimum amount is stored in a transient.
*
* @const int
*/
const MINIMUM_RECURRING_AMOUNTS_TRANSIENT_EXPIRATION = DAY_IN_SECONDS;
/**
* Initialize the class.
*
* @param WC_Payments_API_Client $api_client The API client object.
*/
public function __construct( WC_Payments_API_Client $api_client ) {
$this->api_client = $api_client;
add_filter( 'woocommerce_subscriptions_minimum_processable_recurring_amount', [ $this, 'get_minimum_recurring_amount' ], 10, 2 );
}
/**
* Gets the minimum WC Pay Subscription recurring amount that can be transacted in a given currency.
*
* @param int|bool $minimum_amount The minimum amount that can be processed in recurring transactions. Can be an int (the minimum amount) or false if no minimum exists.
* @param string $currency_code The currency to fetch the minimum amount in.
*
* @return float The minimum recurring amount.
*/
public function get_minimum_recurring_amount( $minimum_amount, $currency_code ) {
$transient_key = self::MINIMUM_RECURRING_AMOUNT_TRANSIENT_KEY . "_$currency_code";
// Enforce uppercase.
$transient_key = strtoupper( $transient_key );
// Minimum amount is purposefully immediately overwritten. The calling function passes a default value which we must receive.
$minimum_amount = get_transient( $transient_key );
if ( false === $minimum_amount ) {
try {
$minimum_amount = $this->api_client->get_currency_minimum_recurring_amount( $currency_code );
} catch ( \WCPay\Exceptions\API_Exception $exception ) {
// Currency not supported or other API error.
$minimum_amount = 0;
}
set_transient( $transient_key, $minimum_amount, self::MINIMUM_RECURRING_AMOUNTS_TRANSIENT_EXPIRATION );
}
return WC_Payments_Utils::interpret_stripe_amount( (int) $minimum_amount, strtolower( $currency_code ) );
}
}