/** * Process PayPal Purchase * * @since 1.0 * * @param array $purchase_data Purchase Data * * @return void */ function give_process_paypal_purchase($purchase_data) { if (!wp_verify_nonce($purchase_data['gateway_nonce'], 'give-gateway')) { wp_die(__('Nonce verification has failed', 'give'), __('Error', 'give'), array('response' => 403)); } // Collect payment data $payment_data = array('price' => $purchase_data['price'], 'give_form_title' => $purchase_data['post_data']['give-form-title'], 'give_form_id' => intval($purchase_data['post_data']['give-form-id']), 'date' => $purchase_data['date'], 'user_email' => $purchase_data['user_email'], 'purchase_key' => $purchase_data['purchase_key'], 'currency' => give_get_currency(), 'user_info' => $purchase_data['user_info'], 'status' => 'pending', 'gateway' => 'paypal'); // Record the pending payment $payment = give_insert_payment($payment_data); // Check payment if (!$payment) { // Record the error give_record_gateway_error(__('Payment Error', 'give'), sprintf(__('Payment creation failed before sending buyer to PayPal. Payment data: %s', 'give'), json_encode($payment_data)), $payment); // Problems? send back give_send_back_to_checkout('?payment-mode=' . $purchase_data['post_data']['give-gateway']); } else { // Only send to PayPal if the pending payment is created successfully $listener_url = add_query_arg('give-listener', 'IPN', home_url('index.php')); // Get the success url $return_url = add_query_arg(array('payment-confirmation' => 'paypal', 'payment-id' => $payment), get_permalink(give_get_option('success_page'))); // Get the PayPal redirect uri $paypal_redirect = trailingslashit(give_get_paypal_redirect()) . '?'; //Item name - pass level name if variable priced $item_name = $purchase_data['post_data']['give-form-title']; if (give_has_variable_prices($purchase_data['post_data']['give-form-id']) && isset($purchase_data['post_data']['give-price-id'])) { $item_price_level_text = give_get_price_option_name($purchase_data['post_data']['give-form-id'], $purchase_data['post_data']['give-price-id']); //Is there any donation level text? if (!empty($item_price_level_text)) { $item_name .= ' - ' . $item_price_level_text; } } // Setup PayPal arguments $paypal_args = array('business' => give_get_option('paypal_email', false), 'email' => $purchase_data['user_email'], 'invoice' => $purchase_data['purchase_key'], 'amount' => $purchase_data['price'], 'item_name' => $item_name, 'no_shipping' => '1', 'shipping' => '0', 'no_note' => '1', 'currency_code' => give_get_currency(), 'charset' => get_bloginfo('charset'), 'custom' => $payment, 'rm' => '2', 'return' => $return_url, 'cancel_return' => give_get_failed_transaction_uri('?payment-id=' . $payment), 'notify_url' => $listener_url, 'page_style' => give_get_paypal_page_style(), 'cbt' => get_bloginfo('name'), 'bn' => 'WordImpress_Donate_Give_US'); if (!empty($purchase_data['user_info']['address'])) { $paypal_args['address1'] = $purchase_data['user_info']['address']['line1']; $paypal_args['address2'] = $purchase_data['user_info']['address']['line2']; $paypal_args['city'] = $purchase_data['user_info']['address']['city']; $paypal_args['country'] = $purchase_data['user_info']['address']['country']; } if (give_get_option('paypal_button_type') === 'standard') { $paypal_extra_args = array('cmd' => '_xclick'); } else { $paypal_extra_args = array('cmd' => '_donations'); } $paypal_args = array_merge($paypal_extra_args, $paypal_args); $paypal_args = apply_filters('give_paypal_redirect_args', $paypal_args, $purchase_data); // Build query $paypal_redirect .= http_build_query($paypal_args); // Fix for some sites that encode the entities $paypal_redirect = str_replace('&', '&', $paypal_redirect); // Redirect to PayPal wp_redirect($paypal_redirect); exit; } }
/** * Retrieves Recent Sales * * @access public * @since 1.1 * @return array */ public function get_recent_donations() { global $wp_query; $sales = array(); if (!user_can($this->user_id, 'view_give_reports') && !$this->override) { return $sales; } if (isset($wp_query->query_vars['id'])) { $query = array(); $query[] = give_get_payment_by('id', $wp_query->query_vars['id']); } elseif (isset($wp_query->query_vars['purchasekey'])) { $query = array(); $query[] = give_get_payment_by('key', $wp_query->query_vars['purchasekey']); } elseif (isset($wp_query->query_vars['email'])) { $query = give_get_payments(array('meta_key' => '_give_payment_user_email', 'meta_value' => $wp_query->query_vars['email'], 'number' => $this->per_page(), 'page' => $this->get_paged(), 'status' => 'publish')); } else { $query = give_get_payments(array('number' => $this->per_page(), 'page' => $this->get_paged(), 'status' => 'publish')); } if ($query) { $i = 0; foreach ($query as $payment) { $payment_meta = give_get_payment_meta($payment->ID); $user_info = give_get_payment_meta_user_info($payment->ID); $first_name = isset($user_info['first_name']) ? $user_info['first_name'] : ''; $last_name = isset($user_info['last_name']) ? $user_info['last_name'] : ''; $sales['donations'][$i]['ID'] = give_get_payment_number($payment->ID); $sales['donations'][$i]['transaction_id'] = give_get_payment_transaction_id($payment->ID); $sales['donations'][$i]['key'] = give_get_payment_key($payment->ID); $sales['donations'][$i]['total'] = give_get_payment_amount($payment->ID); $sales['donations'][$i]['gateway'] = give_get_payment_gateway($payment->ID); $sales['donations'][$i]['name'] = $first_name . ' ' . $last_name; $sales['donations'][$i]['fname'] = $first_name; $sales['donations'][$i]['lname'] = $last_name; $sales['donations'][$i]['email'] = give_get_payment_user_email($payment->ID); $sales['donations'][$i]['date'] = $payment->post_date; $form_id = isset($payment_meta['form_id']) ? $payment_meta['form_id'] : $payment_meta; $price = isset($payment_meta['form_id']) ? give_get_form_price($payment_meta['form_id']) : false; $price_id = isset($payment_meta['price_id']) ? $payment_meta['price_id'] : null; $sales['donations'][$i]['form']['id'] = $form_id; $sales['donations'][$i]['form']['name'] = get_the_title($payment_meta['form_id']); $sales['donations'][$i]['form']['price'] = $price; if (give_has_variable_prices($form_id)) { if (isset($payment_meta['price_id'])) { $price_name = give_get_price_option_name($form_id, $payment_meta['price_id'], $payment->ID); $sales['donations'][$i]['form']['price_name'] = $price_name; $sales['donations'][$i]['form']['price_id'] = $price_id; $sales['donations'][$i]['form']['price'] = give_get_price_option_amount($form_id, $price_id); } } //Add custom meta to API foreach ($payment_meta as $meta_key => $meta_value) { $exceptions = array('form_title', 'form_id', 'price_id', 'user_info', 'key', 'email', 'date'); //Don't clutter up results with dupes if (in_array($meta_key, $exceptions)) { continue; } $sales['donations'][$i]['payment_meta'][$meta_key] = $meta_value; } $i++; } } return apply_filters('give_api_donations_endpoint', $sales); }
/** * Process PayPal Purchase. * * @since 1.0 * * @param array $purchase_data Purchase Data * * @return void */ function give_process_paypal_purchase($purchase_data) { if (!wp_verify_nonce($purchase_data['gateway_nonce'], 'give-gateway')) { wp_die(esc_html__('Nonce verification has failed.', 'give'), esc_html__('Error', 'give'), array('response' => 403)); } $form_id = intval($purchase_data['post_data']['give-form-id']); $price_id = isset($purchase_data['post_data']['give-price-id']) ? $purchase_data['post_data']['give-price-id'] : ''; // Collect payment data. $payment_data = array('price' => $purchase_data['price'], 'give_form_title' => $purchase_data['post_data']['give-form-title'], 'give_form_id' => $form_id, 'give_price_id' => $price_id, 'date' => $purchase_data['date'], 'user_email' => $purchase_data['user_email'], 'purchase_key' => $purchase_data['purchase_key'], 'currency' => give_get_currency(), 'user_info' => $purchase_data['user_info'], 'status' => 'pending', 'gateway' => 'paypal'); // Record the pending payment. $payment_id = give_insert_payment($payment_data); // Check payment. if (!$payment_id) { // Record the error. give_record_gateway_error(esc_html__('Payment Error', 'give'), sprintf(esc_html__('Payment creation failed before sending donor to PayPal. Payment data: %s', 'give'), json_encode($payment_data)), $payment_id); // Problems? Send back. give_send_back_to_checkout('?payment-mode=' . $purchase_data['post_data']['give-gateway']); } else { // Only send to PayPal if the pending payment is created successfully. $listener_url = add_query_arg('give-listener', 'IPN', home_url('index.php')); // Get the success url. $return_url = add_query_arg(array('payment-confirmation' => 'paypal', 'payment-id' => $payment_id), get_permalink(give_get_option('success_page'))); // Get the PayPal redirect uri. $paypal_redirect = trailingslashit(give_get_paypal_redirect()) . '?'; //Item name - pass level name if variable priced. $item_name = $purchase_data['post_data']['give-form-title']; //Verify has variable prices. if (give_has_variable_prices($form_id) && isset($purchase_data['post_data']['give-price-id'])) { $item_price_level_text = give_get_price_option_name($form_id, $purchase_data['post_data']['give-price-id']); $price_level_amount = give_get_price_option_amount($form_id, $purchase_data['post_data']['give-price-id']); //Donation given doesn't match selected level (must be a custom amount). if ($price_level_amount != give_sanitize_amount($purchase_data['price'])) { $custom_amount_text = get_post_meta($form_id, '_give_custom_amount_text', true); //user custom amount text if any, fallback to default if not. $item_name .= ' - ' . (!empty($custom_amount_text) ? $custom_amount_text : esc_html__('Custom Amount', 'give')); } elseif (!empty($item_price_level_text)) { $item_name .= ' - ' . $item_price_level_text; } } elseif (give_get_form_price($form_id) !== give_sanitize_amount($purchase_data['price'])) { $custom_amount_text = get_post_meta($form_id, '_give_custom_amount_text', true); //user custom amount text if any, fallback to default if not. $item_name .= ' - ' . (!empty($custom_amount_text) ? $custom_amount_text : esc_html__('Custom Amount', 'give')); } // Setup PayPal API params. $paypal_args = array('business' => give_get_option('paypal_email', false), 'first_name' => $purchase_data['user_info']['first_name'], 'last_name' => $purchase_data['user_info']['last_name'], 'email' => $purchase_data['user_email'], 'invoice' => $purchase_data['purchase_key'], 'amount' => $purchase_data['price'], 'item_name' => stripslashes($item_name), 'no_shipping' => '1', 'shipping' => '0', 'no_note' => '1', 'currency_code' => give_get_currency(), 'charset' => get_bloginfo('charset'), 'custom' => $payment_id, 'rm' => '2', 'return' => $return_url, 'cancel_return' => give_get_failed_transaction_uri('?payment-id=' . $payment_id), 'notify_url' => $listener_url, 'page_style' => give_get_paypal_page_style(), 'cbt' => get_bloginfo('name'), 'bn' => 'givewp_SP'); //Add user address if present. if (!empty($purchase_data['user_info']['address'])) { $paypal_args['address1'] = isset($purchase_data['user_info']['address']['line1']) ? $purchase_data['user_info']['address']['line1'] : ''; $paypal_args['address2'] = isset($purchase_data['user_info']['address']['line2']) ? $purchase_data['user_info']['address']['line2'] : ''; $paypal_args['city'] = isset($purchase_data['user_info']['address']['city']) ? $purchase_data['user_info']['address']['city'] : ''; $paypal_args['state'] = isset($purchase_data['user_info']['address']['state']) ? $purchase_data['user_info']['address']['state'] : ''; $paypal_args['country'] = isset($purchase_data['user_info']['address']['country']) ? $purchase_data['user_info']['address']['country'] : ''; } //Donations or regular transactions? if (give_get_option('paypal_button_type') === 'standard') { $paypal_extra_args = array('cmd' => '_xclick'); } else { $paypal_extra_args = array('cmd' => '_donations'); } $paypal_args = array_merge($paypal_extra_args, $paypal_args); $paypal_args = apply_filters('give_paypal_redirect_args', $paypal_args, $purchase_data); // Build query. $paypal_redirect .= http_build_query($paypal_args); // Fix for some sites that encode the entities. $paypal_redirect = str_replace('&', '&', $paypal_redirect); // Redirect to PayPal. wp_redirect($paypal_redirect); exit; } }
/** * Get Payment Form ID * * Retrieves the form title and appends the price ID title if applicable. * * @since 1.5 * * @param array $payment_meta * @param bool $level_title Whether you want the entire title or just the level title. * @param string $separator This is typically a hyphen to separate the donation form title and level (if applicable). * * @return string $form_title Returns the full title if $level_title false, otherwise returns the levels title */ function give_get_payment_form_title($payment_meta, $level_title = false, $separator = '') { $form_id = isset($payment_meta['form_id']) ? $payment_meta['form_id'] : 0; $form_title = isset($payment_meta['form_title']) ? $payment_meta['form_title'] : ''; $price_id = isset($payment_meta['price_id']) ? $payment_meta['price_id'] : null; if ($level_title == true) { $form_title = ''; } if (give_has_variable_prices($form_id)) { if (!empty($separator)) { $form_title .= ' ' . $separator; } $form_title .= ' <span class="donation-level-text-wrap">'; if ($price_id == 'custom') { $custom_amount_text = get_post_meta($form_id, '_give_custom_amount_text', true); $form_title .= !empty($custom_amount_text) ? $custom_amount_text : esc_html__('Custom Amount', 'give'); } else { $form_title .= give_get_price_option_name($form_id, $price_id); } $form_title .= '</span>'; } return apply_filters('give_get_payment_form_title', $form_title, $payment_meta); }
/** * Retrieves Recent Sales * * @access public * @since 1.1 * @return array */ public function get_recent_donations() { global $wp_query; $sales = array(); if (!user_can($this->user_id, 'view_give_reports') && !$this->override) { return $sales; } if (isset($wp_query->query_vars['id'])) { $query = array(); $query[] = give_get_payment_by('id', $wp_query->query_vars['id']); } elseif (isset($wp_query->query_vars['purchasekey'])) { $query = array(); $query[] = give_get_payment_by('key', $wp_query->query_vars['purchasekey']); } elseif (isset($wp_query->query_vars['email'])) { $query = give_get_payments(array('meta_key' => '_give_payment_user_email', 'meta_value' => $wp_query->query_vars['email'], 'number' => $this->per_page(), 'page' => $this->get_paged(), 'status' => 'publish')); } else { $query = give_get_payments(array('number' => $this->per_page(), 'page' => $this->get_paged(), 'status' => 'publish')); } if ($query) { $i = 0; foreach ($query as $payment) { $payment_meta = give_get_payment_meta($payment->ID); $user_info = give_get_payment_meta_user_info($payment->ID); $sales['donations'][$i]['ID'] = give_get_payment_number($payment->ID); $sales['donations'][$i]['transaction_id'] = give_get_payment_transaction_id($payment->ID); $sales['donations'][$i]['key'] = give_get_payment_key($payment->ID); $sales['donations'][$i]['total'] = give_get_payment_amount($payment->ID); $sales['donations'][$i]['gateway'] = give_get_payment_gateway($payment->ID); $sales['donations'][$i]['email'] = give_get_payment_user_email($payment->ID); $sales['donations'][$i]['date'] = $payment->post_date; $form_id = isset($payment_meta['form_id']) ? $payment_meta['form_id'] : $payment_meta; $price = isset($payment_meta['form_id']) ? give_get_form_price($payment_meta['form_id']) : false; $price_id = isset($payment_meta['price_id']) ? $payment_meta['price_id'] : null; $sales['donations'][$i]['form']['id'] = $form_id; $sales['donations'][$i]['form']['name'] = get_the_title($payment_meta['form_id']); $sales['donations'][$i]['form']['price'] = $price; if (give_has_variable_prices($form_id)) { if (isset($payment_meta['price_id'])) { $price_name = give_get_price_option_name($form_id, $payment_meta['price_id'], $payment->ID); $sales['donations'][$i]['form']['price_name'] = $price_name; $sales['donations'][$i]['form']['price'] = give_get_price_option_amount($form_id, $price_id); } } $i++; } } return $sales; }