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

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

236 lines 8.5 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_form_currency_alignment_paypal',
66 [
67 'label' => esc_html__( 'Currency Alignment', 'better-payment' ),
68 'type' => Controls_Manager::CHOOSE,
69 'options' => [
70 'left' => [
71 'title' => esc_html__( 'Left', 'better-payment' ),
72 'icon' => 'eicon-text-align-left',
73 ],
74 'right' => [
75 'title' => esc_html__( 'Right', 'better-payment' ),
76 'icon' => 'eicon-text-align-right',
77 ],
78 ],
79 ]
80 );
81
82 $widget->add_control(
83 'better_payment_paypal_business_email',
84 [
85 'label' => __( 'Business Email', 'better-payment' ),
86 'type' => Controls_Manager::TEXT,
87 'dynamic' => [
88 'active' => true,
89 ],
90 'label_block' => true,
91 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_payment_paypal_email']),
92 'ai' => [
93 'active' => false,
94 ],
95 ]
96 );
97
98 $widget->add_control(
99 'better_payment_paypal_button_type',
100 [
101 'label' => esc_html__( 'Button Type', 'better-payment' ),
102 'type' => Controls_Manager::HIDDEN,
103 'default' => '_xclick',
104 'options' => [
105 '_xclick' => 'XCLICK',
106 '_cart' => 'CART',
107 '_donations' => 'DONATIONS'
108 ]
109 ]
110 );
111
112 $widget->add_control(
113 'better_payment_paypal_live_mode',
114 [
115 'label' => __( 'Live Mode', 'better-payment' ),
116 'type' => Controls_Manager::SWITCHER,
117 'label_on' => __( 'Yes', 'better-payment' ),
118 'label_off' => __( 'No', 'better-payment' ),
119 'return_value' => 'yes',
120 'default' => esc_html($this->better_payment_global_settings['better_payment_settings_payment_paypal_live_mode']), //yes or no
121 ]
122 );
123 $widget->end_controls_section();
124 }
125
126 /**
127 * @param array $element
128 * @return array
129 */
130 public function on_export( $element ) {
131 unset(
132 $element[ 'settings' ][ 'better_payment_paypal_business_email' ],
133 $element[ 'settings' ][ 'better_payment_paypal_button_type' ],
134 $element[ 'settings' ][ 'better_payment_paypal_live_mode' ],
135 $element[ 'settings' ][ 'better_payment_form_paypal_currency' ]
136 );
137
138 return $element;
139 }
140
141 /**
142 * @param Form_Record $record
143 * @param Ajax_Handler $ajax_handler
144 */
145 public function run( $record, $ajax_handler ) {
146
147 $email = $record->get_form_settings( 'better_payment_paypal_business_email' );
148 $button_type = $record->get_form_settings( 'better_payment_paypal_button_type' );
149 $live_mode = $record->get_form_settings( 'better_payment_paypal_live_mode' );
150
151 if ( $live_mode == 'yes' ) {
152 $path = "paypal";
153 } else {
154 $path = "sandbox.paypal";
155 }
156
157 if ( empty( $email ) ) {
158 $ajax_handler->add_error_message( 'Business Email is required!' );
159 return false;
160 }
161
162 // Get submitted Form data
163 $sent_data = $record->get( 'sent_data' );
164
165 $el_form_form_settings = $record->get('form_settings');
166 $page_id = $el_form_form_settings['form_post_id'] ? $el_form_form_settings['form_post_id'] : '';
167 $widget_id = $el_form_form_settings['id'] ? $el_form_form_settings['id'] : '';
168
169 if ( empty( $sent_data['payment_amount'] ) && empty( $sent_data['primary_payment_amount_radio'] ) ) {
170 $ajax_handler->add_error_message( 'Amount field is required!' );
171 return false;
172 }
173
174 $amount = floatval( $sent_data['payment_amount'] );
175 if ( empty( $amount ) && ! empty( $sent_data['primary_payment_amount_radio'] ) ) {
176 $amount = floatval( $sent_data['primary_payment_amount_radio'] );
177 }
178
179 $quantity = 1;
180 if ( !empty( $sent_data[ 'pay_quantity' ] ) ) {
181 $quantity = intval( $sent_data[ 'pay_quantity' ] );
182 }
183
184 $return_url = get_the_permalink() . '?better_payment_paypal_status=success&better_payment_widget_id=' . sanitize_text_field( $record->get( 'form_settings' )[ 'id' ] );
185 $cancel_url = get_the_permalink() . '?better_payment_error_status=error&better_payment_widget_id=' . sanitize_text_field( $record->get( 'form_settings' )[ 'id' ] );
186 $order_id = 'paypal_' . uniqid();
187
188 $request_data = [
189 'business' => $email,
190 'currency_code' => $record->get_form_settings( 'better_payment_form_paypal_currency' ),
191 'rm' => '2',
192 'return' => esc_url_raw( $return_url ),
193 'cancel_return' => esc_url_raw( $cancel_url ),
194 'item_number' => $order_id,
195 'quantity' => $quantity,
196 'item_name' => 'Test Product',
197 'amount' => $amount ,
198 'cmd' => $button_type,
199 ];
200
201 $customer_name = ! empty( $sent_data['name'] ) ? $sent_data['name'] : '';
202 $customer_name = ! empty( $sent_data['first_name'] ) ? $customer_name . ' ' .$sent_data['first_name'] : $customer_name;
203 $customer_name = ! empty( $sent_data['last_name'] ) ? $customer_name . ' ' .$sent_data['last_name'] : $customer_name;
204
205 $better_form_fields = [
206 'primary_first_name' => $customer_name,
207 'email' => $email,
208 'el_form_fields' => maybe_serialize( $sent_data ),
209 'amount' => $record->get_form_settings('better_payment_form_paypal_currency') . $amount,
210 'referer_page_id' => $page_id,
211 'referer_widget_id' => $widget_id,
212 'source' => 'paypal'
213 ];
214
215 Handler::payment_create(
216 [
217 'amount' => $amount,
218 'order_id' => $order_id,
219 'payment_date' => date( 'Y-m-d H:i:s' ),
220 'source' => 'paypal',
221 'form_fields_info' => maybe_serialize( $better_form_fields ),
222 'currency' => $record->get_form_settings( 'better_payment_form_paypal_currency' ),
223 'referer' => "elementor-form",
224 ]
225 );
226 $paypal_url = "https://www.$path.com/cgi-bin/webscr?";
227 $paypal_url .= http_build_query( $request_data );
228
229 if ( !empty( $paypal_url ) && filter_var( $paypal_url, FILTER_VALIDATE_URL ) ) {
230 $ajax_handler->add_response_data( 'redirect_url', esc_url_raw($paypal_url) );
231 }
232 }
233 }
234
235
236