public function callback_itemAction() { $request = $this->getRequest(); $order_id = $request->getPost('custom'); $order_info = Model_Orders::get($order_id); if ($order_info) { $request1 = 'cmd=_notify-validate'; foreach ($_POST as $key => $value) { $request1 .= '&' . $key . '=' . urlencode($value); } if (JO_Registry::forceGet('paypal_sandbox_mode')) { $ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); } else { $ch = curl_init('https://www.paypal.com/cgi-bin/webscr'); } curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $request1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($request1))); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); $paid = 'false'; if ((strcmp($response, 'VERIFIED') == 0 || strcmp($response, 'UNVERIFIED') == 0) && $request->issetPost('payment_status')) { $order_status_id = JO_Registry::get('pp_standard_pending_status_id'); switch ($request->getPost('payment_status')) { case 'Canceled_Reversal': $order_status_id = JO_Registry::get('pp_standard_canceled_reversal_status_id'); break; case 'Completed': if (strtolower($request->getPost('receiver_email')) == strtolower(JO_Registry::get('paypal_email')) && (double) $request->getPost('mc_gross') == (double) $order_info['price']) { $order_status_id = JO_Registry::get('pp_standard_completed_status_id'); $paid = 'true'; } else { JO_Log::write('PP_STANDARD :: RECEIVER EMAIL MISMATCH! ' . strtolower($request->getPost('receiver_email'))); } break; case 'Denied': $order_status_id = JO_Registry::get('pp_standard_denied_status_id'); break; case 'Expired': $order_status_id = JO_Registry::get('pp_standard_expired_status_id'); break; case 'Failed': $order_status_id = JO_Registry::get('pp_standard_failed_status_id'); break; case 'Pending': $order_status_id = JO_Registry::get('pp_standard_pending_status_id'); break; case 'Processed': $order_status_id = JO_Registry::get('pp_standard_processed_status_id'); break; case 'Refunded': $order_status_id = JO_Registry::get('pp_standard_refunded_status_id'); break; case 'Reversed': $order_status_id = JO_Registry::get('pp_standard_reversed_status_id'); break; case 'Voided': $order_status_id = JO_Registry::get('pp_standard_voided_status_id'); break; } Model_Orders::update($order_id, array('order_status_id' => $order_status_id, 'paid' => $paid, 'paid_from' => 'PayPal')); } else { if ($request->getPost('payment_status') == 'Completed') { $paid = 'true'; $order_status_id = JO_Registry::get('pp_standard_completed_status_id'); } else { $order_status_id = JO_Registry::get('pp_standard_pending_status_id'); } Model_Orders::update($order_id, array('order_status_id' => $order_status_id, 'paid' => $paid, 'paid_from' => 'PayPal')); } curl_close($ch); } $this->noViewRenderer(true); $this->redirect(WM_Router::create($this->getRequest()->getBaseUrl() . '?controller=items&action=success_payment')); }