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