/**
  * 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;
}
Exemplo n.º 3
0
 /**
  * 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;
}
Exemplo n.º 5
0
/**
 * 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;
}
Exemplo n.º 9
0
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 
}
Exemplo n.º 10
0
/**
 * 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;
}
Exemplo n.º 11
0
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";
}
Exemplo n.º 12
0
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 
}