blob: bac1ba1b0002c018405bf54087fac169418444d7 [file] [log] [blame]
swissChilif0cbdc32023-01-05 17:21:38 -05001<?php
2if ( ! defined( 'ABSPATH' ) ) {
3 exit;
4}
5
6/**
7 * Class that handles Boleto payment method.
8 *
9 * @extends WC_Gateway_Stripe
10 *
11 * @since 5.8.0
12 */
13class WC_Gateway_Stripe_Boleto extends WC_Stripe_Payment_Gateway_Voucher {
14
15 /**
16 * ID used by UPE
17 *
18 * @var string
19 */
20 const ID = 'stripe_boleto';
21
22 /**
23 * ID used by WooCommerce to identify the payment method
24 *
25 * @var string
26 */
27 public $id = 'stripe_boleto';
28
29 /**
30 * ID used by stripe
31 */
32 protected $stripe_id = 'boleto';
33
34 /**
35 * List of accepted currencies
36 *
37 * @var array
38 */
39 protected $supported_currencies = [ 'BRL' ];
40
41 /**
42 * List of accepted countries
43 */
44 protected $supported_countries = [ 'BR' ];
45
46 /**
47 * Constructor
48 *
49 * @since 5.8.0
50 */
51 public function __construct() {
52 $this->method_title = __( 'Stripe Boleto', 'woocommerce-gateway-stripe' );
53 parent::__construct();
54
55 add_filter( 'wc_stripe_allowed_payment_processing_statuses', [ $this, 'add_allowed_payment_processing_statuses' ], 10, 2 );
56 }
57
58 /**
59 * Add payment gateway voucher expiration to API request body.
60 *
61 * @param array $body API request body.
62 * @return array
63 */
64 protected function update_request_body_on_create_or_update_payment_intent( $body ) {
65 $body['payment_method_options'] = [
66 'boleto' => [
67 'expires_after_days' => $this->get_option( 'expiration' ),
68 ],
69 ];
70 return $body;
71 }
72
73 /**
74 * Add payment gateway voucher expiration.
75 *
76 * @param array $settings Settings array.
77 * @return array
78 */
79 public function get_unique_settings( $settings ) {
80 $settings[ $this->id . '_expiration' ] = $this->get_option( 'expiration' );
81 return $settings;
82 }
83
84 /**
85 * Updates payment gateway voucher expiration.
86 *
87 * @param WP_REST_Request $request Request object.
88 * @return void
89 */
90 public function update_unique_settings( WP_REST_Request $request ) {
91 $field_name = $this->id . '_expiration';
92 $expiration = $request->get_param( $field_name );
93
94 if ( null === $expiration ) {
95 return;
96 }
97
98 $value = absint( $expiration );
99 $value = min( 60, $value );
100 $value = max( 0, $value );
101 $this->update_option( 'expiration', $value );
102 }
103
104 /**
105 * Adds on-hold as accepted status during webhook handling on orders paid with voucher
106 *
107 * @param $allowed_statuses
108 * @param $order
109 *
110 * @return mixed
111 */
112 public function add_allowed_payment_processing_statuses( $allowed_statuses, $order ) {
113 if ( $this->stripe_id === $order->get_meta( '_stripe_upe_payment_type' ) && ! in_array( 'on-hold', $allowed_statuses ) ) {
114 $allowed_statuses[] = 'on-hold';
115 }
116
117 return $allowed_statuses;
118 }
119
120 /**
121 * Payment_scripts function.
122 *
123 * @since 5.8.0
124 */
125 public function payment_scripts() {
126 if ( ! is_cart() && ! is_checkout() && ! isset( $_GET['pay_for_order'] ) && ! is_add_payment_method_page() ) {
127 return;
128 }
129
130 parent::payment_scripts();
131 wp_enqueue_script( 'jquery-mask', plugins_url( 'assets/js/jquery.mask.min.js', WC_STRIPE_MAIN_FILE ), [], WC_STRIPE_VERSION );
132 }
133
134 /**
135 * Payment form on checkout page
136 *
137 * @since 5.8.0
138 */
139 public function payment_fields() {
140 $description = $this->get_description();
141 apply_filters( 'wc_stripe_description', wpautop( wp_kses_post( $description ) ), $this->id )
142
143 ?>
144 <label>CPF/CNPJ: <abbr class="required" title="required">*</abbr></label><br>
145 <input id="stripe_boleto_tax_id" name="stripe_boleto_tax_id" type="text"><br><br>
146 <div class="stripe-source-errors" role="alert"></div>
147
148 <div id="stripe-boleto-payment-data"><?php echo $description; ?></div>
149 <?php
150 }
151
152 /**
153 * Validates the minimum and maximum amount. Throws exception when out of range value is added
154 *
155 * @since 5.8.0
156 *
157 * @param $amount
158 *
159 * @throws WC_Stripe_Exception
160 */
161 protected function validate_amount_limits( $amount ) {
162
163 if ( $amount < 5.00 ) {
164 /* translators: 1) amount (including currency symbol) */
165 throw new WC_Stripe_Exception( sprintf( __( 'Sorry, the minimum allowed order total is %1$s to use this payment method.', 'woocommerce-gateway-stripe' ), wc_price( 5.00 ) ) );
166 } elseif ( $amount > 49999.99 ) {
167 /* translators: 1) amount (including currency symbol) */
168 throw new WC_Stripe_Exception( sprintf( __( 'Sorry, the maximum allowed order total is %1$s to use this payment method.', 'woocommerce-gateway-stripe' ), wc_price( 49999.99 ) ) );
169 }
170 }
171
172 /**
173 * Gather the data necessary to confirm the payment via javascript
174 * Override this when extending the class
175 *
176 * @param WC_Order $order
177 *
178 * @return array
179 */
180 protected function get_confirm_payment_data( $order ) {
181 return [
182 'payment_method' => [
183 'boleto' => [
184 'tax_id' => isset( $_POST['stripe_boleto_tax_id'] ) ? wc_clean( wp_unslash( $_POST['stripe_boleto_tax_id'] ) ) : null,
185 ],
186 'billing_details' => [
187 'name' => $order->get_formatted_billing_full_name(),
188 'email' => $order->get_billing_email(),
189 'address' => [
190 'line1' => $order->get_billing_address_1(),
191 'city' => $order->get_billing_city(),
192 'state' => $order->get_billing_state(),
193 'postal_code' => $order->get_billing_postcode(),
194 'country' => $order->get_billing_country(),
195 ],
196 ],
197 ],
198 ];
199 }
200}