PluginProbe
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More / 1.0.4
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More v1.0.4
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 / Paystack_Integration.php

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

254 lines 11.0 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 * Paystack integration class
14 *
15 * @since 0.0.1
16 */
17 class Paystack_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 'paystack';
26 }
27
28 public function get_label() {
29 return __( 'Paystack', '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
41 $this->better_payment_global_settings = DB::get_settings();
42
43 $widget->start_controls_section(
44 'section_paystack_payment',
45 [
46 'label' => __( 'Paystack', 'better-payment' ),
47 'condition' => [
48 'submit_actions' => $this->get_name(),
49 'better_payment_payment_amount_enable' => 'yes'
50 ],
51 ]
52 );
53
54 $better_payment_helper = new \Better_Payment\Lite\Classes\Helper();
55
56 $widget->add_control(
57 'better_payment_form_paystack_currency',
58 [
59 'label' => esc_html__( 'Currency Symbols', 'better-payment' ),
60 'type' => Controls_Manager::SELECT,
61 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_general_general_currency']),
62 'options' => $better_payment_helper->get_currency_list(),
63 ]
64 );
65
66 $better_payment_is_paystack_live = ! empty( $this->better_payment_global_settings['better_payment_settings_payment_paystack_live_mode'] ) && 'yes' === $this->better_payment_global_settings['better_payment_settings_payment_paystack_live_mode'] ? 1 : 0;
67 $paystack_live_key = ! empty( $this->better_payment_global_settings['better_payment_settings_payment_paystack_live_public'] ) ? $this->better_payment_global_settings['better_payment_settings_payment_paystack_live_public'] : '';
68 $paystack_test_key = ! empty( $this->better_payment_global_settings['better_payment_settings_payment_paystack_test_public'] ) ? $this->better_payment_global_settings['better_payment_settings_payment_paystack_test_public'] : '';
69 $paystack_live_secret = ! empty( $this->better_payment_global_settings['better_payment_settings_payment_paystack_live_secret'] ) ? $this->better_payment_global_settings['better_payment_settings_payment_paystack_live_secret'] : '';
70 $paystack_test_secret = ! empty( $this->better_payment_global_settings['better_payment_settings_payment_paystack_test_secret'] ) ? $this->better_payment_global_settings['better_payment_settings_payment_paystack_test_secret'] : '';
71
72 $widget->add_control(
73 'better_payment_paystack_public_key',
74 [
75 'label' => __( 'Public Key', 'better-payment' ),
76 'type' => Controls_Manager::TEXT,
77 'dynamic' => [
78 'active' => true,
79 ],
80 'label_block' => true,
81 'default' => $better_payment_is_paystack_live ? esc_html( $paystack_live_key ) : esc_html( $paystack_test_key ),
82 'ai' => [
83 'active' => false,
84 ],
85 ]
86 );
87
88 $widget->add_control(
89 'better_payment_paystack_secret_key',
90 [
91 'label' => __( 'Secret Key', 'better-payment' ),
92 'type' => Controls_Manager::TEXT,
93 'input_type' => 'password',
94 'dynamic' => [
95 'active' => true,
96 ],
97 'label_block' => true,
98 'default' => $better_payment_is_paystack_live ? esc_html( $paystack_live_secret ) : esc_html( $paystack_test_secret ),
99 'ai' => [
100 'active' => false,
101 ],
102 ]
103 );
104
105 $widget->add_control(
106 'better_payment_paystack_live_mode',
107 [
108 'label' => __( 'Live Mode', 'better-payment' ),
109 'type' => Controls_Manager::SWITCHER,
110 'label_on' => __( 'Yes', 'better-payment' ),
111 'label_off' => __( 'No', 'better-payment' ),
112 'return_value' => 'yes',
113 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_payment_paypal_live_mode']), //yes or no
114 ]
115 );
116 $widget->end_controls_section();
117 }
118
119 /**
120 * @param array $element
121 * @return array
122 */
123 public function on_export( $element ) {
124 unset(
125 $element[ 'settings' ][ 'better_payment_form_paystack_currency' ],
126 $element[ 'settings' ][ 'better_payment_paystack_public_key' ],
127 $element[ 'settings' ][ 'better_payment_paystack_secret_key' ],
128 $element[ 'settings' ][ 'better_payment_paystack_live_mode' ]
129 );
130 return $element;
131 }
132
133 /**
134 * @param Form_Record $record
135 * @param Ajax_Handler $ajax_handler
136 */
137 public function run( $record, $ajax_handler ) {
138
139 $secret_key = $record->get_form_settings( 'better_payment_paystack_secret_key' );
140 $post_data = [];
141 $header_info = array(
142 'Authorization' => 'Bearer ' . sanitize_text_field( $secret_key ),
143 "Cache-Control: no-cache",
144 );
145
146 $sent_data = $record->get( 'sent_data' );
147
148 $el_form_form_settings = $record->get('form_settings');
149 $page_id = $el_form_form_settings['form_post_id'] ? intval($el_form_form_settings['form_post_id']) : 0;
150 $widget_id = $el_form_form_settings['id'] ? sanitize_text_field($el_form_form_settings['id']) : '';
151
152 if ( empty( $sent_data['payment_amount'] ) && empty( $sent_data['primary_payment_amount_radio'] ) ) {
153 $ajax_handler->add_error_message( 'Amount field is required!' );
154 return false;
155 }
156
157 $amount = floatval( $sent_data['payment_amount'] );
158 if ( empty( $amount ) && ! empty( $sent_data['primary_payment_amount_radio'] ) ) {
159 $amount = floatval( $sent_data['primary_payment_amount_radio'] );
160 }
161
162 $quantity = 1;
163 if ( !empty( $sent_data[ 'pay_quantity' ] ) ) {
164 $quantity = intval( $sent_data[ 'pay_quantity' ][ 'value' ] );
165 $amount *= $quantity;
166 }
167
168 $order_id = 'paystack_' . uniqid();
169
170 $redirection_url_success = ! empty( $el_settings['better_payment_form_success_page_url']['url'] ) ? esc_url( $el_settings['better_payment_form_success_page_url']['url'] ) : get_permalink( $page_id );
171 $redirection_url_error = ! empty( $el_settings['better_payment_form_error_page_url']['url'] ) ? esc_url( $el_settings['better_payment_form_error_page_url']['url'] ) : get_permalink( $page_id );
172
173 $request = [
174 'amount' => ( $amount * 100 ),
175 'cart_id' => $order_id,
176 'callback_url' => add_query_arg( [
177 'better_payment_paystack_status' => 'success',
178 'better_payment_paystack_id' => $order_id,
179 'better_payment_widget_id' => $widget_id
180 ], $redirection_url_success ),
181 ];
182
183 if ( ! empty( $sent_data[ 'email' ] ) ) {
184 $request['payment_intent_data']['metadata']['customer_email'] = $request['metadata']['customer_email'] = $request['email'] = sanitize_email( $sent_data['email'] );
185 }
186
187 if ( ! empty( $sent_data['name'] ) ) {
188 $request['customer_name'] = ! empty( $request['customer_name'] ) ? $request['customer_name'] . ' ' . sanitize_text_field( $sent_data['name'] ) : sanitize_text_field( $sent_data['name'] );
189 }
190
191 if ( !empty( $sent_data['first_name'] ) ) {
192 $request['customer_name'] = ! empty( $request['customer_name'] ) ? $request['customer_name'] . ' ' . sanitize_text_field( $sent_data['first_name'] ) : sanitize_text_field( $sent_data['first_name'] );
193 }
194
195 if ( !empty( $sent_data['last_name'] ) ) {
196 $request['customer_name'] = !empty( $request['customer_name'] ) ? $request['customer_name'] . ' ' . sanitize_text_field( $sent_data['last_name'] ) : sanitize_text_field( $sent_data['last_name'] );
197 }
198
199 if ( !empty( $request['customer_name'] ) ) {
200 $request['payment_intent_data']['metadata']['customer_name'] = $request['metadata']['customer_name'] = $request['customer_name'];
201 unset( $request['customer_name'] );
202 }
203
204 $response = wp_safe_remote_post(
205 'https://api.paystack.co/transaction/initialize',
206 array(
207 'method' => 'POST',
208 'headers' => $header_info,
209 'body' => $request,
210 'timeout' => 70,
211 )
212 );
213
214 $response_ar = json_decode( $response['body'] );
215
216 if ( ! ( empty( $response_ar->status ) || empty( $response_ar->data ) ) ) {
217
218 //Form fields data to send via email
219 $better_form_fields = [
220 'email' => ! empty( $sent_data['email'] ) ? sanitize_email( $sent_data['email'] ) : '',
221 'amount' => sanitize_text_field($record->get_form_settings( 'better_payment_form_paystack_currency' )) . floatval( $amount ),
222 'el_form_fields' => maybe_serialize($sent_data),
223 'referer_page_id' => $page_id,
224 'referer_widget_id' => $widget_id,
225 'source' => 'paystack'
226 ];
227
228 Handler::payment_create(
229 [
230 'amount' => $amount,
231 'order_id' => $order_id,
232 'payment_date' => date( 'Y-m-d H:i:s' ),
233 'source' => 'paystack',
234 'transaction_id' => '',
235 'customer_info' => maybe_serialize( $response_ar ),
236 'form_fields_info' => maybe_serialize( $better_form_fields ),
237 'obj_id' => sanitize_text_field($response_ar->id),
238 'status' => 'unpaid',
239 'currency' => sanitize_text_field($record->get_form_settings( 'better_payment_form_paystack_currency' )),
240 'referer' => "elementor-form",
241 ]
242 );
243
244 $authorization_url = ! empty( $response_ar->data->authorization_url ) ? esc_url_raw( $response_ar->data->authorization_url ) : '';
245
246 $ajax_handler->add_response_data( 'better_paystack_data', [
247 'authorization_url' => esc_url_raw( $authorization_url ),
248 ] );
249 }
250 }
251 }
252
253
254