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 / Paypal_Integration.php

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

263 lines 10.1 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 Better_Payment\Lite\Traits\Helper;
8 use Elementor\Controls_Manager;
9 use ElementorPro\Modules\Forms\Classes\Action_Base;
10 use ElementorPro\Modules\Forms\Classes\Ajax_Handler;
11 use ElementorPro\Modules\Forms\Classes\Form_Record;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit; // Exit if accessed directly
15 }
16
17 /**
18 * PayPal integration class
19 *
20 * @since 0.0.1
21 */
22 class Paypal_Integration extends Action_Base {
23 use Helper;
24
25 private $better_payment_global_settings = [];
26
27 public function get_name() {
28 return 'paypal';
29 }
30
31 public function get_label() {
32 return __( 'PayPal', 'better-payment' );
33 }
34
35 /**
36 * @param \Elementor\Widget_Base $widget
37 */
38 public function register_settings_section( $widget ) {
39 $this->better_payment_global_settings = DB::get_settings();
40
41 $widget->start_controls_section(
42 'section_paypal_payment',
43 [
44 'label' => __( 'PayPal', 'better-payment' ),
45 'condition' => [
46 'submit_actions' => $this->get_name(),
47 'better_payment_payment_amount_enable' => 'yes'
48 ],
49 ]
50 );
51
52 $better_payment_helper = new \Better_Payment\Lite\Classes\Helper();
53
54 $widget->add_control(
55 'better_payment_form_paypal_currency',
56 [
57 'label' => esc_html__( 'Currency', 'better-payment' ),
58 'type' => Controls_Manager::SELECT,
59 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_general_general_currency']),
60 'options' => $better_payment_helper->get_currency_list(),
61 ]
62 );
63
64 $widget->add_control(
65 'better_payment_paypal_currecny_support_notice',
66 [
67 'type' => Controls_Manager::RAW_HTML,
68 'raw' => __( 'Currency is not supported by PayPal!', 'better-payment' ),
69 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
70 'condition' => [
71 'better_payment_form_paypal_currency' => $this->bp_unsupported_currencies( 'paypal' ),
72 ],
73 ]
74 );
75
76 $widget->add_control(
77 'better_payment_form_currency_alignment_paypal',
78 [
79 'label' => esc_html__( 'Currency Alignment', 'better-payment' ),
80 'type' => Controls_Manager::CHOOSE,
81 'options' => [
82 'left' => [
83 'title' => esc_html__( 'Left', 'better-payment' ),
84 'icon' => 'eicon-text-align-left',
85 ],
86 'right' => [
87 'title' => esc_html__( 'Right', 'better-payment' ),
88 'icon' => 'eicon-text-align-right',
89 ],
90 ],
91 ]
92 );
93
94 $widget->add_control(
95 'better_payment_paypal_business_email',
96 [
97 'label' => __( 'Business Email', 'better-payment' ),
98 'type' => current_user_can('manage_options') ? Controls_Manager::TEXT : Controls_Manager::HIDDEN,
99 'dynamic' => [
100 'active' => true,
101 ],
102 'label_block' => true,
103 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_payment_paypal_email']),
104 'ai' => [
105 'active' => false,
106 ],
107 ]
108 );
109
110 $widget->add_control(
111 'better_payment_paypal_button_type',
112 [
113 'label' => esc_html__( 'Button Type', 'better-payment' ),
114 'type' => Controls_Manager::HIDDEN,
115 'default' => '_xclick',
116 'options' => [
117 '_xclick' => 'XCLICK',
118 '_cart' => 'CART',
119 '_donations' => 'DONATIONS'
120 ]
121 ]
122 );
123
124 $widget->add_control(
125 'better_payment_paypal_live_mode',
126 [
127 'label' => __( 'Live Mode', 'better-payment' ),
128 'type' => Controls_Manager::SWITCHER,
129 'label_on' => __( 'Yes', 'better-payment' ),
130 'label_off' => __( 'No', 'better-payment' ),
131 'return_value' => 'yes',
132 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_payment_paypal_live_mode']), //yes or no
133 ]
134 );
135 $widget->end_controls_section();
136 }
137
138 /**
139 * @param array $element
140 * @return array
141 */
142 public function on_export( $element ) {
143 unset(
144 $element[ 'settings' ][ 'better_payment_paypal_business_email' ],
145 $element[ 'settings' ][ 'better_payment_paypal_button_type' ],
146 $element[ 'settings' ][ 'better_payment_paypal_live_mode' ],
147 $element[ 'settings' ][ 'better_payment_form_paypal_currency' ]
148 );
149
150 return $element;
151 }
152
153 /**
154 * @param Form_Record $record
155 * @param Ajax_Handler $ajax_handler
156 */
157 public function run( $record, $ajax_handler ) {
158
159 $email = $record->get_form_settings( 'better_payment_paypal_business_email' );
160 $button_type = $record->get_form_settings( 'better_payment_paypal_button_type' );
161 $live_mode = $record->get_form_settings( 'better_payment_paypal_live_mode' );
162
163 if ( $live_mode == 'yes' ) {
164 $path = "paypal";
165 } else {
166 $path = "sandbox.paypal";
167 }
168
169 if ( empty( $email ) ) {
170 $ajax_handler->add_error_message( 'Business Email is required!' );
171 return false;
172 }
173
174 // Get submitted Form data
175 $sent_data = $record->get( 'sent_data' );
176
177 $el_form_form_settings = $record->get('form_settings');
178 $page_id = $el_form_form_settings['form_post_id'] ? $el_form_form_settings['form_post_id'] : '';
179 $widget_id = $el_form_form_settings['id'] ? $el_form_form_settings['id'] : '';
180
181 if ( empty( $sent_data['payment_amount'] ) && empty( $sent_data['primary_payment_amount_radio'] ) ) {
182 $ajax_handler->add_error_message( 'Amount field is required!' );
183 return false;
184 }
185
186 $amount = isset( $sent_data['payment_amount'] ) ? floatval($sent_data['payment_amount']) : 0;
187
188 if ( empty( $amount ) && ! empty( $sent_data['primary_payment_amount_radio'] ) ) {
189 $amount = floatval( $sent_data['primary_payment_amount_radio'] );
190 }
191
192 $quantity = 1;
193 if ( !empty( $sent_data[ 'pay_quantity' ] ) ) {
194 $quantity = intval( $sent_data[ 'pay_quantity' ] );
195 }
196
197 $return_url = get_the_permalink() . '?better_payment_paypal_status=success&better_payment_widget_id=' . sanitize_text_field( $record->get( 'form_settings' )[ 'id' ] );
198 $cancel_url = get_the_permalink() . '?better_payment_error_status=error&better_payment_widget_id=' . sanitize_text_field( $record->get( 'form_settings' )[ 'id' ] );
199 $order_id = 'paypal_' . uniqid();
200
201 $paypal_unsupported_currencies = $this->bp_unsupported_currencies( 'paypal' );
202 $currency_code = sanitize_text_field( $record->get_form_settings( 'better_payment_form_paypal_currency' ) );
203 if ( is_array( $paypal_unsupported_currencies ) && in_array( $currency_code, $paypal_unsupported_currencies ) ) {
204 $ajax_handler->add_error_message( 'Currency is not supported by PayPal!' );
205 return false;
206 }
207
208 $request_data = [
209 'business' => $email,
210 'currency_code' => $currency_code,
211 'rm' => '2',
212 'return' => esc_url_raw( $return_url ),
213 'cancel_return' => esc_url_raw( $cancel_url ),
214 'item_number' => $order_id,
215 'quantity' => $quantity,
216 'item_name' => 'Test Product',
217 'amount' => $amount ,
218 'cmd' => $button_type,
219 ];
220
221 $customer_name = ! empty( $sent_data['name'] ) ? $sent_data['name'] : '';
222 $customer_name = ! empty( $sent_data['first_name'] ) ? $customer_name . ' ' .$sent_data['first_name'] : $customer_name;
223 $customer_name = ! empty( $sent_data['last_name'] ) ? $customer_name . ' ' .$sent_data['last_name'] : $customer_name;
224
225 $customer_email = ! empty( $sent_data['email'] ) ? sanitize_text_field( $sent_data['email'] ) : '';
226 $customer_email = ! empty( $sent_data['email_address'] ) ? sanitize_text_field( $sent_data['email_address'] ) : $customer_email;
227
228 $better_form_fields = [
229 'primary_first_name' => $customer_name,
230 'email' => $customer_email,
231 'el_form_fields' => maybe_serialize( $sent_data ),
232 'amount' => $currency_code . $amount,
233 'referer_page_id' => $page_id,
234 'referer_widget_id' => $widget_id,
235 'source' => 'paypal'
236 ];
237
238 // Get campaign_id from form data if available
239 $campaign_id = ! empty( $sent_data['campaign_id'] ) ? sanitize_text_field( $sent_data['campaign_id'] ) : '';
240
241 Handler::payment_create(
242 [
243 'amount' => $amount,
244 'order_id' => $order_id,
245 'payment_date' => date( 'Y-m-d H:i:s' ),
246 'source' => 'paypal',
247 'form_fields_info' => maybe_serialize( $better_form_fields ),
248 'currency' => $currency_code,
249 'referer' => "elementor-form",
250 'campaign_id' => $campaign_id,
251 ]
252 );
253 $paypal_url = "https://www.$path.com/cgi-bin/webscr?";
254 $paypal_url .= http_build_query( $request_data );
255
256 if ( !empty( $paypal_url ) && filter_var( $paypal_url, FILTER_VALIDATE_URL ) ) {
257 $ajax_handler->add_response_data( 'redirect_url', esc_url_raw($paypal_url) );
258 }
259 }
260 }
261
262
263