PluginProbe
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More / 2.1.1
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More v2.1.1
2.4.1 2.4.0 2.3.4 2.3.3 2.3.2 2.3.1 2.3.0 2.2.2 2.2.1 2.2.0 2.1.2 2.1.1 trunk 0.0.1 0.0.2 0.0.3 0.0.4 0.0.5 0.0.6 0.0.7 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 All 68 releases
better-payment / includes / Admin / Elementor / Form_Actions / Stripe_Integration.php

Stripe_Integration.php in Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More 2.1.1, at includes/Admin/Elementor/Form_Actions/Stripe_Integration.php

296 lines 12.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Better_Payment\Lite\Admin\Elementor\Form_Actions;
4
5 use Better_Payment\Lite\Admin\DB;
6 use Better_Payment\Lite\Classes\Handler;
7 use Elementor\Controls_Manager;
8 use ElementorPro\Modules\Forms\Classes\Action_Base;
9 use ElementorPro\Modules\Forms\Classes\Ajax_Handler;
10 use ElementorPro\Modules\Forms\Classes\Form_Record;
11
12 /**
13 * Stripe integration class
14 *
15 * @since 0.0.1
16 */
17 class Stripe_Integration extends Action_Base {
18 private $better_payment_global_settings = [];
19
20 public function __construct() {
21 wp_enqueue_script( 'better-payment' );
22 }
23
24 public function get_name() {
25 return 'stripe';
26 }
27
28 public function get_label() {
29 return __( 'Stripe', 'better-payment' );
30 }
31
32 public function get_script_depends() {
33 return [ 'better-payment' ];
34 }
35
36 /**
37 * @param \Elementor\Widget_Base $widget
38 */
39 public function register_settings_section( $widget ) {
40 $this->better_payment_global_settings = DB::get_settings();
41
42 $widget->start_controls_section(
43 'section_stripe_payment',
44 [
45 'label' => __( 'Stripe', 'better-payment' ),
46 'condition' => [
47 'submit_actions' => $this->get_name(),
48 'better_payment_payment_amount_enable' => 'yes'
49 ],
50 ]
51 );
52
53 $better_payment_helper = new \Better_Payment\Lite\Classes\Helper();
54
55 $widget->add_control(
56 'better_payment_form_stripe_currency',
57 [
58 'label' => esc_html__( 'Currency', 'better-payment' ),
59 'type' => Controls_Manager::SELECT,
60 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_general_general_currency']),
61 'options' => $better_payment_helper->get_currency_list(),
62 ]
63 );
64
65 $widget->add_control(
66 'better_payment_form_currency_alignment_stripe',
67 [
68 'label' => esc_html__( 'Currency Alignment', 'better-payment' ),
69 'type' => Controls_Manager::CHOOSE,
70 'options' => [
71 'left' => [
72 'title' => esc_html__( 'Left', 'better-payment' ),
73 'icon' => 'eicon-text-align-left',
74 ],
75 'right' => [
76 'title' => esc_html__( 'Right', 'better-payment' ),
77 'icon' => 'eicon-text-align-right',
78 ],
79 ],
80 ]
81 );
82
83 $better_payment_is_stripe_live = $this->better_payment_global_settings['better_payment_settings_payment_stripe_live_mode'] == 'yes' ? 1 : 0;
84
85 $widget->add_control(
86 'better_payment_stripe_public_key',
87 [
88 'label' => __( 'Public Key', 'better-payment' ),
89 'type' => current_user_can('manage_options') ? Controls_Manager::TEXT : Controls_Manager::HIDDEN,
90 'dynamic' => [
91 'active' => true,
92 ],
93 'label_block' => true,
94 'default' => $better_payment_is_stripe_live ? esc_html($this->better_payment_global_settings['better_payment_settings_payment_stripe_live_public']) : esc_html($this->better_payment_global_settings['better_payment_settings_payment_stripe_test_public']),
95 'ai' => [
96 'active' => false,
97 ],
98 ]
99 );
100
101 $widget->add_control(
102 'better_payment_stripe_secret_key',
103 [
104 'label' => __( 'Secret Key', 'better-payment' ),
105 'type' => current_user_can('manage_options') ? Controls_Manager::TEXT : Controls_Manager::HIDDEN,
106 'input_type' => 'password',
107 'dynamic' => [
108 'active' => true,
109 ],
110 'label_block' => true,
111 'default' => $better_payment_is_stripe_live ? esc_html($this->better_payment_global_settings['better_payment_settings_payment_stripe_live_secret']) : esc_html($this->better_payment_global_settings['better_payment_settings_payment_stripe_test_secret']),
112 'ai' => [
113 'active' => false,
114 ],
115 ]
116 );
117
118 $widget->add_control(
119 'better_payment_stripe_live_mode',
120 [
121 'label' => __( 'Live Mode', 'better-payment' ),
122 'type' => Controls_Manager::SWITCHER,
123 'label_on' => __( 'Yes', 'better-payment' ),
124 'label_off' => __( 'No', 'better-payment' ),
125 'return_value' => 'yes',
126 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_payment_paypal_live_mode']), //yes or no
127 ]
128 );
129 $widget->end_controls_section();
130 }
131
132 /**
133 * @param array $element
134 * @return array
135 */
136 public function on_export( $element ) {
137 unset(
138 $element[ 'settings' ][ 'better_payment_form_stripe_currency' ],
139 $element[ 'settings' ][ 'better_payment_stripe_public_key' ],
140 $element[ 'settings' ][ 'better_payment_stripe_secret_key' ],
141 $element[ 'settings' ][ 'better_payment_stripe_live_mode' ]
142 );
143 return $element;
144 }
145
146 /**
147 * @param Form_Record $record
148 * @param Ajax_Handler $ajax_handler
149 */
150 public function run( $record, $ajax_handler ) {
151 // $settings = $record->get( 'form_settings' );
152 $secret_key = $record->get_form_settings( 'better_payment_stripe_secret_key' );
153 $post_data = [];
154 $header_info = array(
155 'Authorization' => 'Basic ' . base64_encode( $secret_key . ':' ),
156 'Stripe-Version' => '2019-05-16'
157 );
158
159 $sent_data = $record->get( 'sent_data' );
160 $el_form_form_settings = $record->get('form_settings');
161 $page_id = $el_form_form_settings['form_post_id'] ? intval($el_form_form_settings['form_post_id']) : 0;
162 $widget_id = $el_form_form_settings['id'] ? sanitize_text_field($el_form_form_settings['id']) : '';
163
164 if ( empty( $sent_data['payment_amount'] ) && empty( $sent_data['primary_payment_amount_radio'] ) ) {
165 $ajax_handler->add_error_message( 'Amount field is required!' );
166 return false;
167 }
168
169 $amount = isset( $sent_data['payment_amount'] ) ? floatval($sent_data['payment_amount']) : 0;
170 if ( empty( $amount ) && ! empty( $sent_data['primary_payment_amount_radio'] ) ) {
171 $amount = floatval( $sent_data['primary_payment_amount_radio'] );
172 }
173 $quantity = 1;
174 if ( !empty( $sent_data[ 'pay_quantity' ] ) ) {
175 $quantity = intval( $sent_data[ 'pay_quantity' ][ 'value' ] );
176 $amount *= $quantity;
177 }
178
179 $order_id = 'stripe_' . uniqid();
180 $request = [
181 'success_url' => add_query_arg( [
182 'better_payment_stripe_status' => 'success',
183 'better_payment_stripe_id' => $order_id,
184 'better_payment_widget_id' => sanitize_text_field( $record->get( 'form_settings' )[ 'id' ] )
185 ], get_permalink() ),
186 'cancel_url' => add_query_arg( [
187 'better_payment_error_status' => 'error',
188 'better_payment_stripe_id' => $order_id,
189 'better_payment_widget_id' => sanitize_text_field( $record->get( 'form_settings' )[ 'id' ] )
190 ], get_permalink() ),
191 'locale' => 'auto',
192 'payment_method_types' => [ 'card' ],
193 'client_reference_id' => time(),
194 'billing_address_collection' => 'required',
195 'metadata' => [
196 'order_id' => $order_id
197 ],
198 'line_items' => [
199 [
200 'amount' => ( $amount * 100 ),
201 'currency' => sanitize_text_field($record->get_form_settings( 'better_payment_form_stripe_currency' )),
202 'name' => sanitize_text_field( $record->get_form_settings( 'form_name' ) ),
203 'quantity' => $quantity
204 ]
205 ],
206 'payment_intent_data' => [
207 'capture_method' => 'automatic',
208 'description' => sanitize_text_field( $record->get_form_settings( 'form_name' ) ),
209 'metadata' => [
210 'order_id' => $order_id
211 ]
212 ]
213 ];
214
215 if ( !empty( $sent_data[ 'email' ] ) ) {
216 $request[ 'payment_intent_data' ][ 'metadata' ][ 'customer_email' ] = $request[ 'metadata' ][ 'customer_email' ] = $request[ 'customer_email' ] = sanitize_email( $sent_data[ 'email' ] );
217 }
218
219 if ( ! empty( $sent_data[ 'name' ] ) ) {
220 $request['customer_name'] = ! empty( $request['customer_name'] ) ? $request['customer_name'] . ' ' . sanitize_text_field( $sent_data['name'] ) : sanitize_text_field( $sent_data['name'] );
221 }
222
223 if ( ! empty( $sent_data['first_name'] ) ) {
224 $request['customer_name'] = ! empty( $request['customer_name'] ) ? $request[ 'customer_name' ] . ' ' . sanitize_text_field( $sent_data['first_name'] ) : sanitize_text_field( $sent_data['first_name'] );
225 }
226
227 if ( !empty( $sent_data[ 'last_name' ] ) ) {
228 $request['customer_name'] = ! empty( $request['customer_name'] ) ? $request['customer_name'] . ' ' . sanitize_text_field( $sent_data['last_name'] ) : sanitize_text_field( $sent_data['last_name'] );
229 }
230
231 if ( ! empty( $request['customer_name'] ) ) {
232 $request['payment_intent_data']['metadata']['customer_name'] = $request['metadata']['customer_name'] = $request['customer_name'];
233 unset( $request['customer_name'] );
234 }
235
236 $response = wp_safe_remote_post(
237 'https://api.stripe.com/v1/checkout/sessions',
238 array(
239 'method' => 'POST',
240 'headers' => $header_info,
241 'body' => $request,
242 'timeout' => 70,
243 )
244 );
245
246 $response_ar = json_decode( $response[ 'body' ] );
247
248 if ( ! empty( $response_ar->error ) ) {
249 $ajax_handler->add_error_message( sanitize_text_field( $response_ar->error->message ) );
250 return false;
251 }
252
253 if ( !empty( $response_ar->payment_intent ) ) {
254
255 //Form fields data to send via email
256 $better_form_fields = [
257 'primary_first_name' => ! empty( $request['payment_intent_data']['metadata']['customer_name'] ) ? sanitize_text_field( $request['payment_intent_data']['metadata']['customer_name'] ) : '',
258 'email' => !empty( $sent_data[ 'email' ]) ? sanitize_email($sent_data[ 'email' ]) : '',
259 'amount' => sanitize_text_field($record->get_form_settings( 'better_payment_form_stripe_currency' )) . floatval( $amount ),
260 'el_form_fields' => maybe_serialize($sent_data),
261 'referer_page_id' => $page_id,
262 'referer_widget_id' => $widget_id,
263 'source' => 'stripe'
264 ];
265
266 // Get campaign_id from form data if available
267 $campaign_id = ! empty( $sent_data['campaign_id'] ) ? sanitize_text_field( $sent_data['campaign_id'] ) : '';
268
269 Handler::payment_create(
270 [
271 'amount' => $amount,
272 'order_id' => $order_id,
273 'payment_date' => date( 'Y-m-d H:i:s' ),
274 'source' => 'stripe',
275 'transaction_id' => sanitize_text_field($response_ar->payment_intent),
276 'customer_info' => maybe_serialize( $response_ar ),
277 'form_fields_info' => maybe_serialize( $better_form_fields ),
278 'obj_id' => sanitize_text_field($response_ar->id),
279 'status' => sanitize_text_field($response_ar->payment_status),
280 'currency' => sanitize_text_field($record->get_form_settings( 'better_payment_form_stripe_currency' )),
281 'referer' => "elementor-form",
282 'campaign_id' => $campaign_id,
283 ]
284 );
285 $stripe_response = [
286 'stripe_data' => sanitize_text_field($response_ar->id),
287 'stripe_public_key' => sanitize_text_field( $record->get_form_settings( 'better_payment_stripe_public_key' ) )
288 ];
289
290 $ajax_handler->add_response_data( 'better_stripe_data', $stripe_response );
291 }
292 }
293 }
294
295
296