/**
  * 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));
     }
 }
Esempio n. 2
0
 public function executeIpn()
 {
     $ipn_handler = new IpnHandler();
     $ipn_handler->processIpn($_POST);
     return sfView::NONE;
 }