query_vars, get_the_permalink() . '?betterpayment_paypal_status=success&betterpayment_widget_id=' . $widget_id ); $cancel_url = add_query_arg( $wp->query_vars, get_the_permalink() . '?betterpayment_error_status=error&betterpayment_widget_id=' . $widget_id ); ob_start(); $error_info = [ 'business_email' => !empty($settings['betterpayment_paypal_business_email']) ]; ?> prefix}betterpayment"; $wpdb->insert( $table, $data ); if ( $wpdb->insert_id ) { return $wpdb->insert_id; } else { return false; } } public static function manage_response( $settings = [] ) { $status = false; if ( !empty( $_REQUEST[ 'betterpayment_error_status' ] ) ) { self::failed_message_template( $settings ); return $status; } if ( !empty( $_REQUEST[ 'betterpayment_paypal_status' ] ) && $_REQUEST[ 'betterpayment_paypal_status' ] == 'success' ) { $status = self::paypal_payment_success( $settings ); } elseif ( !empty( $_REQUEST[ 'betterpayment_stripe_status' ] ) && $_REQUEST[ 'betterpayment_stripe_status' ] == 'success' ) { $status = self::stripe_payment_success( $settings ); } if ( $status ) { self::success_message_template( $settings, $status ); } self::remove_arg(); return $status; } public static function paypal_payment_success( $settings = [] ) { $data = $_REQUEST; if ( !empty( $data[ 'payment_status' ] ) && !empty( $data[ 'payer_id' ] ) && !empty( $data[ 'payer_status' ] ) ) { global $wpdb; $table = "{$wpdb->prefix}betterpayment"; $results = $wpdb->get_row( $wpdb->prepare( "SELECT id,form_fields_info,referer FROM $table WHERE order_id=%s and status is NULL limit 1", sanitize_text_field( $_REQUEST[ 'item_number' ] ) ) ); if ( !empty( $results->id ) ) { $updated = $wpdb->update( $table, array( 'transaction_id' => sanitize_text_field( $data[ 'txn_id' ] ), 'status' => sanitize_text_field( $data[ 'payment_status' ] ), 'email' => sanitize_email( $data[ 'payer_email' ] ), 'customer_info' => maybe_serialize( $data ), ), array( 'ID' => $results->id ) ); if ( false !== $updated ) { //Send email notification if ( ( isset($settings[ 'betterpayment_form_email_enable' ]) && $settings[ 'betterpayment_form_email_enable' ] == 'yes' ) || ( $results->referer === 'elementor-form' ) ) { self::better_email_notification(sanitize_text_field( $data[ 'txn_id' ] ), sanitize_email( $data[ 'payer_email' ] ), $settings, 'PayPal', $results->form_fields_info); } return sanitize_text_field( $data[ 'txn_id' ] ); } } }else if($data['betterpayment_paypal_status'] === 'success'){ return ( isset($data[ 'txn_id' ]) && !empty( sanitize_text_field( $data[ 'txn_id' ] ) ) ) ? sanitize_text_field( $data[ 'txn_id' ] ) : __('Payment under processing!', 'better-payment'); } return false; } public static function stripe_payment_success( $settings = [] ) { $data = $_REQUEST; if ( !empty( $data[ 'betterpayment_stripe_id' ] ) ) { global $wpdb; $table = "{$wpdb->prefix}betterpayment"; $results = $wpdb->get_row( $wpdb->prepare( "SELECT id,obj_id,transaction_id,form_fields_info,referer FROM $table WHERE order_id=%s and status = 'unpaid' limit 1", sanitize_text_field( $data[ 'betterpayment_stripe_id' ] ) ) ); if ( !empty( $results->obj_id ) ) { $header = array( 'Authorization' => 'Basic ' . base64_encode( 'sk_test_w3EkC2jHywBiypu6a3jYutgZ:' ), 'Stripe-Version' => '2019-05-16', ); $request = [ 'expand' => [ 'subscription.latest_invoice.payment_intent', 'payment_intent' ] ]; $response = wp_safe_remote_post( 'https://api.stripe.com/v1/checkout/sessions/' . $results->obj_id, array( 'method' => 'GET', 'headers' => $header, 'timeout' => 70, 'body' => $request ) ); if ( is_wp_error( $response ) || empty( $response[ 'body' ] ) ) { return new WP_Error( 'stripe_error', __( 'There was a problem connecting to the Stripe API endpoint.', 'better-payment' ) ); } $response = json_decode( $response[ 'body' ] ); $updated = $wpdb->update( $table, array( 'status' => sanitize_text_field( $response->payment_status ), 'email' => sanitize_email( current( $response->payment_intent->charges->data )->billing_details->email ), 'customer_info' => maybe_serialize( $response ), ), array( 'ID' => $results->id ) ); if ( false !== $updated ) { //Send email notification $better_customer_email = sanitize_email( current( $response->payment_intent->charges->data )->billing_details->email ); if ( (isset($settings[ 'betterpayment_form_email_enable' ]) && $settings[ 'betterpayment_form_email_enable' ] == 'yes' ) || ( $results->referer === 'elementor-form' ) ) { self::better_email_notification($results->transaction_id, $better_customer_email, $settings, 'Stripe', $results->form_fields_info); } return $results->transaction_id; } } } return false; } public static function get_currency_symbols( $currency = 'USD' ) { $list = [ 'AUD' => "$", 'CAD' => "$", 'CZK' => "Kč", 'DKK' => "kr", 'EUR' => "€", 'HKD' => "$", 'HUF' => "ft", 'ILS' => "₪", 'JPY' => "¥", 'MXN' => "$", 'NOK' => "kr", 'NZD' => "$", 'PHP' => "₱", 'PLN' => "zł", 'GBP' => "£", 'RUB' => "₽", 'SGD' => "$", 'SEK' => "kr", 'CHF' => "CHF", 'TWD' => "$", 'THB' => "฿", 'TRY' => "₺", 'USD' => "$", ]; return !empty( $list[ $currency ] ) ? $list[ $currency ] : '$'; } public static function success_message_template( $settings = [], $tr_id = '' ) { if ( empty( $tr_id ) ) { return false; } $image_url = WPBP_PLUGIN_URL . 'asset/img/success.svg'; $show_icon = 0; if ( !empty( $settings[ 'betterpayment_form_success_message_icon' ][ 'library' ] ) ) { if ( $settings[ 'betterpayment_form_success_message_icon' ][ 'library' ] == 'svg' ) { $image_url = $settings[ 'betterpayment_form_success_message_icon' ][ 'value' ][ 'url' ]; } else { $show_icon = 1; $image_url = $settings[ 'betterpayment_form_success_message_icon' ][ 'value' ]; } } ?>

' : "\n"; $line_break_customer = $betterpayment_email_content_type_customer == 'html' ? '
' : "\n"; if(isset($settings['betterpayment_email_content'])){ $betterpayment_email_content = sanitize_text_field($settings['betterpayment_email_content']); $betterpayment_email_content = self::better_render_email_body( $betterpayment_email_content, $form_fields_info, $line_break ); } else if ( !empty($betterpayment_email_content) ){ $betterpayment_email_content = self::better_render_email_body( $betterpayment_email_content, $form_fields_info, $line_break ); } if(isset($settings['betterpayment_email_content_customer'])){ $betterpayment_email_content_customer = sanitize_text_field($settings['betterpayment_email_content_customer']); $betterpayment_email_content_customer = self::better_render_email_body( $betterpayment_email_content_customer, $form_fields_info, $line_break_customer, 'customer' ); } else if ( !empty($betterpayment_email_content_customer) ){ $betterpayment_email_content_customer = self::better_render_email_body( $betterpayment_email_content_customer, $form_fields_info, $line_break, 'customer' ); //$line_break_customer not used : need to check type on parent method and add headers accordingly. } if(isset($settings['betterpayment_email_from'])){ $betterpayment_email_from = sanitize_email($settings['betterpayment_email_from']); } if(isset($settings['betterpayment_email_from_name'])){ $betterpayment_email_from_name = sanitize_text_field($settings['betterpayment_email_from_name']); } if(isset($settings['betterpayment_email_reply_to'])){ $betterpayment_email_reply_to = sanitize_email($settings['betterpayment_email_reply_to']); } if(isset($settings['betterpayment_email_cc'])){ $betterpayment_email_cc = sanitize_email($settings['betterpayment_email_cc']); } if(isset($settings['betterpayment_email_bcc'])){ $betterpayment_email_bcc = sanitize_email($settings['betterpayment_email_bcc']); } //Customer Email if(isset($settings['betterpayment_email_from_customer'])){ $betterpayment_email_from_customer = sanitize_email($settings['betterpayment_email_from_customer']); } if(isset($settings['betterpayment_email_from_name_customer'])){ $betterpayment_email_from_name_customer = sanitize_text_field($settings['betterpayment_email_from_name_customer']); } if(isset($settings['betterpayment_email_reply_to_customer'])){ $betterpayment_email_reply_to_customer = sanitize_email($settings['betterpayment_email_reply_to_customer']); } if(isset($settings['betterpayment_email_cc_customer'])){ $betterpayment_email_cc_customer = sanitize_email($settings['betterpayment_email_cc_customer']); } if(isset($settings['betterpayment_email_bcc_customer'])){ $betterpayment_email_bcc_customer = sanitize_email($settings['betterpayment_email_bcc_customer']); } if($betterpayment_email_content == ''){ $betterpayment_email_content = __('New betterpayment transaction! ', 'better-payment'); } if($betterpayment_email_content_customer == ''){ $betterpayment_email_content_customer = __('New betterpayment transaction! ', 'better-payment'); } $betterpayment_email_headers = []; $betterpayment_email_headers_customer = []; if($betterpayment_email_content_type == 'html'){ $betterpayment_email_headers[] = 'Content-Type: text/html; charset=UTF-8'; $betterpayment_email_headers_customer[] = 'Content-Type: text/html; charset=UTF-8'; } if($betterpayment_email_from != ''){ $betterpayment_email_headers[] = "From: $betterpayment_email_from_name <$betterpayment_email_from>"; } if($betterpayment_email_cc != ''){ $betterpayment_email_headers[] = "Cc: <$betterpayment_email_cc>"; } if($betterpayment_email_bcc != ''){ $betterpayment_email_headers[] = "BCc: $betterpayment_email_bcc"; } if($betterpayment_email_reply_to != ''){ $betterpayment_email_headers[] = "Reply-To: $betterpayment_email_reply_to"; } //Customer Email if($betterpayment_email_from_customer != ''){ $betterpayment_email_headers_customer[] = "From: $betterpayment_email_from_name_customer <$betterpayment_email_from_customer>"; } if($betterpayment_email_cc_customer != ''){ $betterpayment_email_headers_customer[] = "Cc: <$betterpayment_email_cc_customer>"; } if($betterpayment_email_bcc_customer != ''){ $betterpayment_email_headers_customer[] = "BCc: $betterpayment_email_bcc_customer"; } if($betterpayment_email_reply_to_customer != ''){ $betterpayment_email_headers_customer[] = "Reply-To: $betterpayment_email_reply_to_customer"; } self::send_better_email($better_cus_email, $betterpayment_email_subject_customer, $betterpayment_email_content_customer, $betterpayment_email_headers_customer); //customer mail self::send_better_email($betterpayment_email_to, $betterpayment_email_subject, $betterpayment_email_content, $betterpayment_email_headers); //admin mail } /** * Sends an HTML email. * * @since 1.0.0 * * @param string $to * @param string $subject * @param array $message * * @return bool false indicates mail sending failed while true doesn't gurantee that mail sent. * true just indicate script processed successfully without any errors. * Ref: https://developer.wordpress.org/reference/functions/wp_mail/ */ public static function send_better_email( $to, $subject, $message, $headers=[]) { $response = false; $mailValidated = filter_var($to, FILTER_VALIDATE_EMAIL); if ($mailValidated) { $response = wp_mail( $to, $subject, $message, $headers ); } return $response; } public static function better_render_email_body( $email_body, $form_fields_info, $line_break, $type = 'admin' ) { $is_empty_email_body = empty($email_body); $email_body = do_shortcode( $email_body ); $bp_form_fields_html_content = $email_body; $bp_all_fields_shortcode = 'bp-all-fields'; $referer_content_page_link = '#'; $field_text = __('Field', 'better-payment'); $value_text = __('Field', 'better-payment'); $bp_form_fields_html_header = ''; $bp_form_fields_html_footer = "
'.$field_text.' '.$value_text.'
"; if ( false !== strpos( $email_body, $bp_all_fields_shortcode ) ) { $content = ''. $line_break; $form_fields_info_arr = maybe_unserialize($form_fields_info); foreach ( $form_fields_info_arr as $key => $field ) { //Hide few fields if($key === 'referer_page_id' || $key === 'referer_widget_id' || $key === 'source' || $key === 'el_form_fields') { if($key === 'referer_page_id'){ $referer_content_page_link = !empty($field) ? get_permalink( $field ) : $referer_content_page_link; } continue; } $key_formatted = self::better_title_case($key); $content .= " $key_formatted $field "; } $bp_form_fields_html_body = $content; $bp_form_fields_html_content = $bp_form_fields_html_header . $bp_form_fields_html_body . $bp_form_fields_html_footer ; //Replace shortcode with form fields info $email_body = str_replace( "[$bp_all_fields_shortcode]", $bp_form_fields_html_content, $email_body ); } ob_start(); include WPBP_ADMIN_VIEW_PATH . "template-email-notification.php"; $email_body = ob_get_contents(); ob_end_clean(); return $email_body; } public static function better_title_case($string){ $string = str_replace('_',' ', $string); $string = ucwords($string); return $string; } }