class-wc-rest-stripe-account-controller.php
4.25 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?php
/**
* Class WC_REST_Stripe_Account_Controller
*/
defined( 'ABSPATH' ) || exit;
/**
* REST controller for retrieving Stripe's account data.
*
* @since 5.6.0
*/
class WC_REST_Stripe_Account_Controller extends WC_Stripe_REST_Base_Controller {
/**
* Endpoint path.
*
* @var string
*/
protected $rest_base = 'wc_stripe/account';
/**
* The account data utility.
*
* @var WC_Stripe_Account
*/
private $account;
/**
* Stripe payment gateway.
*
* @var WC_Gateway_Stripe
*/
private $gateway;
public function __construct( WC_Gateway_Stripe $gateway, WC_Stripe_Account $account ) {
$this->gateway = $gateway;
$this->account = $account;
}
/**
* Configure REST API routes.
*/
public function register_routes() {
register_rest_route(
$this->namespace,
'/' . $this->rest_base,
[
'methods' => WP_REST_Server::READABLE,
'callback' => [ $this, 'get_account' ],
'permission_callback' => [ $this, 'check_permission' ],
]
);
register_rest_route(
$this->namespace,
'/' . $this->rest_base . '/summary',
[
'methods' => WP_REST_Server::READABLE,
'callback' => [ $this, 'get_account_summary' ],
'permission_callback' => [ $this, 'check_permission' ],
]
);
register_rest_route(
$this->namespace,
'/' . $this->rest_base . '/webhook-status-message',
[
'methods' => WP_REST_Server::READABLE,
'callback' => [ $this, 'get_webhook_status_message' ],
'permission_callback' => [ $this, 'check_permission' ],
]
);
register_rest_route(
$this->namespace,
'/' . $this->rest_base . '/refresh',
[
'methods' => WP_REST_Server::EDITABLE,
'callback' => [ $this, 'refresh_account' ],
'permission_callback' => [ $this, 'check_permission' ],
]
);
}
/**
* Retrieve the Stripe account information.
*
* @return WP_REST_Response
*/
public function get_account() {
return new WP_REST_Response(
[
'account' => $this->account->get_cached_account_data(),
'testmode' => WC_Stripe_Webhook_State::get_testmode(),
'webhook_status_message' => WC_Stripe_Webhook_State::get_webhook_status_message(),
'webhook_url' => WC_Stripe_Helper::get_webhook_url(),
]
);
}
/**
* Return a summary of Stripe account details.
*
* @return WP_REST_Response
*/
public function get_account_summary() {
$account = $this->account->get_cached_account_data();
// Use statement descriptor from settings, falling back to Stripe account statement descriptor if needed.
$statement_descriptor = WC_Stripe_Helper::clean_statement_descriptor( $this->gateway->get_option( 'statement_descriptor' ) );
if ( empty( $statement_descriptor ) ) {
$statement_descriptor = $account['settings']['payments']['statement_descriptor'];
}
if ( empty( $statement_descriptor ) ) {
$statement_descriptor = null;
}
return new WP_REST_Response(
[
'has_pending_requirements' => $this->account->has_pending_requirements(),
'has_overdue_requirements' => $this->account->has_overdue_requirements(),
'current_deadline' => $account['requirements']['current_deadline'] ?? null,
'status' => $this->account->get_account_status(),
'statement_descriptor' => $statement_descriptor,
'store_currencies' => [
'default' => $account['default_currency'] ?? get_woocommerce_currency(),
'supported' => $this->account->get_supported_store_currencies(),
],
'country' => $account['country'] ?? WC()->countries->get_base_country(),
'is_live' => $account['charges_enabled'] ?? false,
'test_mode' => WC_Stripe_Webhook_State::get_testmode(),
]
);
}
/**
* Retrieve the webhook status information.
*
* @return WP_REST_Response
*/
public function get_webhook_status_message() {
return new WP_REST_Response( WC_Stripe_Webhook_State::get_webhook_status_message() );
}
/**
* Clears the cached account data and returns the updated one.
*
* @return WP_REST_Response
*/
public function refresh_account() {
$this->account->clear_cache();
// calling the same "get" method, so that the data format is the same.
return $this->get_account();
}
}