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 = '
|
'.$field_text.'
|
'.$value_text.'
|
';
$bp_form_fields_html_footer = "
";
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;
}
}