/** * Check the IP address during file download and display an error if it doesn't match the purchase records * * @access public * @since 1.0 * @return void */ public function check_ip($download_id = 0, $email = 0) { $payment_key = isset($_GET['download_key']) ? urldecode($_GET['download_key']) : false; if (empty($payment_key)) { return; } $payment_id = edd_get_purchase_id_by_key($payment_key); if (empty($payment_id)) { return; } $payment_ip = get_post_meta($payment_id, '_edd_payment_user_ip', true); if ($payment_ip !== edd_get_ip()) { wp_die(__('You do not have permission to download this file because your IP address doesn\'t match our records.', 'edd-iplock'), __('Error', 'edd-iplock')); } }
/** * Receipt Shortcode * * Shows an order receipt. * * @since 1.4 * @param array $atts Shortcode attributes * @param string $content * @return string */ function edd_receipt_shortcode($atts, $content = null) { global $edd_receipt_args; $edd_receipt_args = shortcode_atts(array('error' => __('Sorry, trouble retrieving payment receipt.', 'edd'), 'price' => true, 'discount' => true, 'products' => true, 'date' => true, 'notes' => true, 'payment_key' => true, 'payment_method' => true, 'payment_id' => true), $atts); $session = edd_get_purchase_session(); if (isset($_GET['purchase_key'])) { $purchase_key = urldecode($_GET['purchase_key']); } else { if ($session) { $purchase_key = $session['purchase_key']; } } // No key found if (!isset($purchase_key)) { return $edd_receipt_args['error']; } $edd_receipt_args['id'] = edd_get_purchase_id_by_key($purchase_key); $user = edd_get_payment_meta_user_info($edd_receipt_args['id']); // Not the proper user if (is_user_logged_in() && $user['id'] != get_current_user_id()) { return $edd_receipt_args['error']; } ob_start(); edd_get_template_part('shortcode', 'receipt'); $display = ob_get_clean(); return $display; }
/** * Prevent file downloads on expired license keys * * @access public * @since 2.3 */ public function prevent_expired_downloads($download_id = 0, $email = '') { $payment_id = edd_get_purchase_id_by_key($_GET['download_key']); $license = self::get_license_by_purchase($payment_id, $download_id); if (!$license) { return; } if ('expired' == self::get_license_status($license->ID)) { wp_die(__('Your license key for this purchase is expired. Renew your license key and you will be allowed to download your files again.', 'edd_sl'), __('Expired License', 'edd_sl'), array('response' => 401)); } elseif ('publish' != $license->post_status) { wp_die(__('Your license key for this purchase has been revoked.', 'edd_sl'), __('Expired License', 'edd_sl'), array('response' => 401)); } }
/** * Shows "Purchase Processing" message for PayPal payments are still pending on site return * * This helps address the Race Condition, as detailed in issue #1839 * * @since 1.9 * @return string */ function edd_paypal_success_page_content($content) { if (!isset($_GET['payment-id']) && !edd_get_purchase_session()) { return $content; } $payment_id = isset($_GET['payment-id']) ? absint($_GET['payment-id']) : false; if (!$payment_id) { $session = edd_get_purchase_session(); $payment_id = edd_get_purchase_id_by_key($session['purchase_key']); } $payment = get_post($payment_id); if ($payment && 'pending' == $payment->post_status) { // Payment is still pending so show processing indicator to fix the Race Condition, issue # ob_start(); edd_get_template_part('payment', 'processing'); $content = ob_get_clean(); } return $content; }
/** * Receipt Shortcode * * Shows an order receipt. * * @since 1.4 * @param array $atts Shortcode attributes * @param string $content * @return string */ function edd_receipt_shortcode($atts, $content = null) { global $edd_receipt_args; $edd_receipt_args = shortcode_atts(array('error' => __('Sorry, trouble retrieving payment receipt.', 'easy-digital-downloads'), 'price' => true, 'discount' => true, 'products' => true, 'date' => true, 'notes' => true, 'payment_key' => false, 'payment_method' => true, 'payment_id' => true), $atts, 'edd_receipt'); $session = edd_get_purchase_session(); if (isset($_GET['payment_key'])) { $payment_key = urldecode($_GET['payment_key']); } elseif ($edd_receipt_args['payment_key']) { $payment_key = $edd_receipt_args['payment_key']; } else { if ($session) { $payment_key = $session['purchase_key']; } } // No key found if (!isset($payment_key)) { return '<p class="edd-alert edd-alert-error">' . $edd_receipt_args['error'] . '</p>'; } $payment_id = edd_get_purchase_id_by_key($payment_key); $user_can_view = edd_can_view_receipt($payment_key); // Key was provided, but user is logged out. Offer them the ability to login and view the receipt if (!$user_can_view && !empty($payment_key) && !is_user_logged_in() && !edd_is_guest_payment($payment_id)) { global $edd_login_redirect; $edd_login_redirect = edd_get_current_page_url(); ob_start(); echo '<p class="edd-alert edd-alert-warn">' . __('You must be logged in to view this payment receipt.', 'easy-digital-downloads') . '</p>'; edd_get_template_part('shortcode', 'login'); $login_form = ob_get_clean(); return $login_form; } /* * Check if the user has permission to view the receipt * * If user is logged in, user ID is compared to user ID of ID stored in payment meta * * Or if user is logged out and purchase was made as a guest, the purchase session is checked for * * Or if user is logged in and the user can view sensitive shop data * */ if (!apply_filters('edd_user_can_view_receipt', $user_can_view, $edd_receipt_args)) { return '<p class="edd-alert edd-alert-error">' . $edd_receipt_args['error'] . '</p>'; } ob_start(); edd_get_template_part('shortcode', 'receipt'); $display = ob_get_clean(); return $display; }
/** * Process IPN messages from Amazon * * @access public * @since 2.4 * @return void */ public function process_ipn() { if (!isset($_GET['edd-listener']) || $_GET['edd-listener'] !== 'amazon') { return; } if (isset($_GET['state'])) { return; } // Get the IPN headers and Message body $headers = getallheaders(); $body = file_get_contents('php://input'); $this->doing_ipn = true; try { $ipn = new IpnHandler($headers, $body); $data = $ipn->toArray(); $seller_id = $data['SellerId']; if ($seller_id != edd_get_option('amazon_seller_id', '')) { wp_die(__('Invalid Amazon seller ID', 'edd'), __('IPN Error', 'edd'), array('response' => 401)); } switch ($data['NotificationType']) { case 'OrderReferenceNotification': break; case 'PaymentAuthorize': break; case 'PaymentCapture': $key = $data['CaptureDetails']['CaptureReferenceId']; $status = $data['CaptureDetails']['CaptureStatus']['State']; if ('Declined' === $status) { $payment_id = edd_get_purchase_id_by_key($key); edd_update_payment_status($payment_id, 'failed'); edd_insert_payment_note($payment_id, __('Capture declined in Amazon', 'edd')); } break; case 'PaymentRefund': $trans_id = substr($data['RefundDetails']['AmazonRefundId'], 0, 19); $status = $data['RefundDetails']['RefundStatus']['State']; if ('Completed' === $status) { $payment_id = edd_get_purchase_id_by_transaction_id($trans_id); edd_update_payment_status($payment_id, 'refunded'); edd_insert_payment_note($payment_id, sprintf(__('Refund completed in Amazon. Refund ID: %s', 'edd'), $data['RefundDetails']['AmazonRefundId'])); } break; } } catch (Exception $e) { wp_die($e->getErrorMessage(), __('IPN Error', 'edd'), array('response' => 401)); } }
/** * Determines the receipt visibility status * * @return bool Whether the receipt is visible or not. */ function edd_can_view_receipt($payment_key = '') { $return = false; if (empty($payment_key)) { return $return; } global $edd_receipt_args; $edd_receipt_args['id'] = edd_get_purchase_id_by_key($payment_key); $user_id = (int) edd_get_payment_user_id($edd_receipt_args['id']); $payment_meta = edd_get_payment_meta($edd_receipt_args['id']); if (is_user_logged_in()) { if ($user_id === (int) get_current_user_id()) { $return = true; } elseif (wp_get_current_user()->user_email === edd_get_payment_user_email($edd_receipt_args['id'])) { $return = true; } elseif (current_user_can('view_shop_sensitive_data')) { $return = true; } } $session = edd_get_purchase_session(); if (!empty($session) && !is_user_logged_in()) { if ($session['purchase_key'] === $payment_meta['key']) { $return = true; } } return (bool) apply_filters('edd_can_view_receipt', $return, $payment_key); }
/** * Receipt Shortcode * * Shows an order receipt. * * @since 1.4 * @param array $atts Shortcode attributes * @param string $content * @return string */ function edd_receipt_shortcode($atts, $content = null) { global $edd_receipt_args; $edd_receipt_args = shortcode_atts(array('error' => __('Sorry, trouble retrieving payment receipt.', 'edd'), 'price' => true, 'discount' => true, 'products' => true, 'date' => true, 'notes' => true, 'payment_key' => false, 'payment_method' => true, 'payment_id' => true), $atts, 'edd_receipt'); $session = edd_get_purchase_session(); if (isset($_GET['payment_key'])) { $payment_key = urldecode($_GET['payment_key']); } elseif ($edd_receipt_args['payment_key']) { $payment_key = $edd_receipt_args['payment_key']; } else { if ($session) { $payment_key = $session['purchase_key']; } } // No key found if (!isset($payment_key)) { return $edd_receipt_args['error']; } $edd_receipt_args['id'] = edd_get_purchase_id_by_key($payment_key); $customer_id = edd_get_payment_user_id($edd_receipt_args['id']); /* * Check if the user has permission to view the receipt * * If user is logged in, user ID is compared to user ID of ID stored in payment meta * * Or if user is logged out and purchase was made as a guest, the purchase session is checked for * * Or if user is logged in and the user can view sensitive shop data * */ $user_can_view = is_user_logged_in() && $customer_id == get_current_user_id() || ($customer_id == 0 || $customer_id == '-1') && !is_user_logged_in() && edd_get_purchase_session() || current_user_can('view_shop_sensitive_data'); if (!apply_filters('edd_user_can_view_receipt', $user_can_view, $edd_receipt_args)) { return $edd_receipt_args['error']; } ob_start(); edd_get_template_part('shortcode', 'receipt'); $display = ob_get_clean(); return $display; }
function affwp_edd_optimizely_revenue_tracking() { $session = edd_get_purchase_session(); if (!$session || !edd_is_success_page()) { return; } $payment_id = edd_get_purchase_id_by_key($session['purchase_key']); ?> <script> var price = <?php echo edd_get_payment_amount($payment_id); ?> ; window.optimizely = window.optimizely || []; window.optimizely.push(['trackEvent', 'purchase_complete', {'revenue': price * 100}]); </script> <?php }
/** * Get's the customer's first name from purchase session * @return [type] [description] */ function affwp_edd_purchase_get_first_name() { // get purchase session $purchase_session = edd_get_purchase_session(); // get the key $purchase_key = $purchase_session['purchase_key']; // get the payment ID from the purchase key $payment_id = edd_get_purchase_id_by_key($purchase_key); $user_info = edd_get_payment_meta_user_info($payment_id); $first_name = $user_info['first_name']; if ($first_name) { return $first_name; } return null; }
function edd_downloads_receipt_shortcode($atts, $content = null) { global $edd_receipt_args; $edd_receipt_args = shortcode_atts(array('error' => __('Sorry, trouble retrieving payment receipt.', 'edd_downloads'), 'price' => true, 'discount' => true, 'products' => true, 'date' => true, 'notes' => true, 'payment_key' => false, 'payment_method' => true, 'payment_id' => true), $atts, 'edd_receipt'); $session = edd_get_purchase_session(); if (isset($session['downloads']) && is_array($session['downloads'])) { foreach ($session['downloads'] as $download) { if (isset($download['upgrade']) && $download['upgrade']['upgrade_license'] > 0) { $payment_id_lic = get_post_meta(absint($download['upgrade']['upgrade_license']), '_edd_sl_payment_id', true); $payment_key = edd_get_payment_key($payment_id_lic); break; } } } if (!isset($payment_key)) { if (isset($_GET['payment_key'])) { $payment_key = urldecode($_GET['payment_key']); } elseif ($edd_receipt_args['payment_key']) { $payment_key = $edd_receipt_args['payment_key']; } else { if ($session) { $payment_key = $session['purchase_key']; } } } // No key found if (!isset($payment_key)) { return $edd_receipt_args['error']; } $edd_receipt_args['id'] = edd_get_purchase_id_by_key($payment_key); $customer_id = edd_get_payment_user_id($edd_receipt_args['id']); /* * Check if the user has permission to view the receipt * * If user is logged in, user ID is compared to user ID of ID stored in payment meta * * Or if user is logged out and purchase was made as a guest, the purchase session is checked for * * Or if user is logged in and the user can view sensitive shop data * */ $user_can_view = is_user_logged_in() && $customer_id == get_current_user_id() || ($customer_id == 0 || $customer_id == '-1') && !is_user_logged_in() && edd_get_purchase_session() || current_user_can('view_shop_sensitive_data'); if (!apply_filters('edd_user_can_view_receipt', $user_can_view, $edd_receipt_args)) { return $edd_receipt_args['error']; } require plugin_dir_path(__FILE__) . "template/shortcode-receipt.php"; }
function pp_edd_optimizely_revenue_tracking() { if (!function_exists('edd_get_purchase_session')) { return; } $session = edd_get_purchase_session(); if (!$session) { return; } $payment_id = edd_get_purchase_id_by_key($session['purchase_key']); ?> <script> var price = <?php echo edd_get_payment_amount($payment_id); ?> window.optimizely = window.optimizely || []; window.optimizely.push(['trackEvent', 'purchase_complete', {'revenue': price * 100}]); </script> <?php }