Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Fatal error przy przetwarzaniu zamówień w sklepie internetowym
Forum PHP.pl > Forum > Przedszkole
jessica99
Tworzę system przetwarzania zamówień dla sklepu internetowego i przy finalizacji zamówień przez użytkownika zamiast wysyłać maila użytkownikowi z powiadomieniem wyskakuje mi następujący błąd:
Call to a member function Process() on a non-object na linii 44

  1. <?php
  2. // odwołaj się do biblioteki PEAR o nazwie Mail (obsługa poczty)
  3. require_once 'Mail.php';
  4. // Główna klasa, wykorzystywana do uzyskiwania informacji o zamówieniach,
  5. // wykonywania poszczególnych etapów tunelu, kontrolowania stanu realizacji zamówi
  6. ń, itd.
  7. class OrderProcessor
  8. {
  9. public $mOrderId;
  10. public $mOrderStatus;
  11. public $mConnection;
  12. public $mConfiguration;
  13. public $mContinueNow;
  14. private $mCurrentCustomer;
  15. private $mCurrentOrderDetails;
  16. private $mOrderManager;
  17. private $mReference;
  18. private $mAuthCode;
  19. // konstruktor tworzy egzemplarz klasy DoOrderManager
  20. function __construct()
  21. {
  22. $this->mOrderManager = new DoOrderManager();
  23. }
  24. // Funkcja Process wywoływana jest ze stron checkout.php i orders_admin.php
  25. // w celu przetworzenia zamówienia. Jej pierwszym parametrem jest ID zamówienia,
  26. // a drugim egzemplarz klasy OrderProcessorConfiguration.
  27. public function Process($newOrderId, $newConfiguration)
  28. {
  29. // ustaw ID zamówienia
  30. $this->mOrderId = $newOrderId;
  31. // skonfiguruj klasę koordynującą
  32. $this->mConfiguration = $newConfiguration;
  33. $this->mContinueNow = true;
  34. // zapamiętaj rozpoczęcie przetwarzania
  35. $this->AddAudit("Uruchomiono klasę koordynującą.", 10000);
  36. // sprawdĽ stan zamówienia
  37. $this->mOrderStatus = $this->mOrderManager->GetOrderStatus($this->mOrderId);
  38. // przetwórz odcinek tunelu
  39. try
  40. {
  41. while ($this->mContinueNow)
  42. {
  43. $this->mContinueNow = false;
  44. $cps = $this->GetCurrentPipelineSection();
  45. $cps->Process($this);
  46. }
  47. }
  48. catch(Exception $e)
  49. {
  50. trigger_error('Wyjątek "' . $e->getMessage() . '" w pliku ' .
  51. $e->getFile() . " w wierszu " . $e->getLine());
  52. $this->MailAdmin("Przy przetwarzaniu zamówienia wystąpił błąd.", $e->getMessage());
  53. $this->AddAudit("Przy przetwarzaniu zamówienia wystąpił błąd.", 10002);
  54. throw new Exception("błąd klasy koordynującej");
  55. }
  56. $this->AddAudit("Klasa koordynująca zakończyła działanie.", 10001);
  57. }
  58. // pobiera aktualny odcinek tunelu
  59. private function GetCurrentPipelineSection()
  60. {
  61. switch ($this->mOrderStatus) 
  62. {  
  63.  case 0:
  64.  $this->mCurrentPipelineSection = new PsInitialNotification(); break;
  65.  case 1:
  66.  $this->mCurrentPipelineSection = new PsCheckFunds(); break;
  67.  case 2:
  68.  $this->mCurrentPipelineSection = new PsCheckStock(); break;
  69.  case 3:
  70.  $this->mCurrentPipelineSection = new PsStockOk(); break;
  71.  case 4:
  72.  $this->mCurrentPipelineSection = new PsTakePayment(); break;
  73.  case 5:
  74.  $this->mCurrentPipelineSection = new PsShipGoods(); break;
  75.  case 6:
  76.  $this->mCurrentPipelineSection = new PsShipOK(); break;
  77.  case 7:
  78.  $this->mCurrentPipelineSection = new PsFinalNotification(); break;
  79.  case 8:
  80.  throw new Exception("Zamówienie zostało już zrealizowane."); break;
  81.  default:  
  82.  throw new Exception("Nieznany etap przetwarzania zamówienia.");
  83. }  
  84.  
  85. }
  86. // wysyła wiadomośści e-mail
  87. public function Mail($params, $to, $headers, $message)
  88. {
  89. // Utwórz obiekt obsługi poczty za pomocą metody Mail::factory
  90. $mail_object = Mail::factory('smtp', $params);
  91. // SprawdĽź, czy obiekt obsługi poczty jest poprawny
  92. if (PEAR::isError($mail_object))
  93. throw new Exception($mail_object->getMessage());
  94. // wysyła e-mail
  95. $result = $mail_object->send($to, $headers, $message);
  96. // SprawdĽ, czy wysłanie wiadomości się powiodło
  97. if (PEAR::isError($result))
  98. throw new Exception("Nie można wysłać wiadomośści do $to. " .
  99.  $result->getMessage());
  100. }
  101. // tworzy wiadomość
  102. public function MailAdmin($subject, $message)
  103. {
  104. // zazwyczaj nie można ustawić własnego nagłówka 'From'
  105. $headers['From'] = $this->mConfiguration->mOrderProcessorEmail;
  106. $headers['Subject'] = $subject;
  107. $headers['To'] = $this->mConfiguration->mAdminEmail;
  108. $this->Mail($this->mConfiguration->mOrderProcessorEmailParams,
  109. $this->mConfiguration->mAdminEmail,
  110. $headers,
  111. $message);
  112. }
  113. // pobiera klienta, który złożył zamówienie
  114. public function GetCurrentCustomer()
  115. {
  116. if (empty($this->mCurrentCustomer))
  117. {
  118. $this->mCurrentCustomer = new
  119.  Customer($this->mOrderManager->GetCustomerByOrderId($this->mOrderId));
  120. if (empty($this->mCurrentCustomer))
  121. throw new Exception($this->mOrderId . " zamówienie nie jest skojarzone z żadnym klientem");
  122. }
  123. return $this->mCurrentCustomer;
  124. }
  125. // pobiera szczegółowe informacje na temat bieżącego zamówienia
  126. public function GetCurrentOrderDetails()
  127. {
  128. if (empty($this->mCurrentOrderDetails))
  129. {
  130. $this->mCurrentOrderDetails = new
  131. OrderDetails($this->mOrderManager->GetOrderDetails($this->mOrderId));
  132. if (empty($this->mCurrentOrderDetails))
  133. throw new Exception($this->mOrderId .
  134. " nie ma wpisu ze szczegółowymi danymi zamówienia");
  135. }
  136. return $this->mCurrentOrderDetails;
  137. }
  138. // dodaje komunikat kontrolny
  139. public function AddAudit($message, $messageNumber)
  140. {
  141. $this->mOrderManager->AddAudit($this->mOrderId, $message, $messageNumber);
  142. }
  143. // uaktualnia stan zamówienia
  144. public function UpdateOrderStatus($newStatus)
  145. {
  146. $this->mOrderManager->UpdateOrderStatus($this->mOrderId, $newStatus);
  147. $this->mOrderStatus = $newStatus;
  148. }
  149.  
  150. // ustaw kod autoryzacyjny i referencyjny zamówienia
  151. public function SetOrderAuthCodeAndReference($newAuthCode, $newReference)
  152. {
  153. $this->mOrderManager->SetOrderAuthCodeAndReference($this->mOrderId,
  154.  $newAuthCode,
  155.  $newReference);
  156. $this->mAuthCode = $newAuthCode;
  157. $this->mReference = $newReference;
  158. }
  159.  
  160. // pobiera kod autoryzacyjny i referencyjny zamówienia
  161. private function GetOrderAuthCodeAndReference()
  162. {
  163. $result = $this->mOrderManager->GetOrderAuthCodeAndReference(
  164.  $this->mOrderId);
  165. if (empty($result)) throw Exception($this->mOrderId." nie istnieje");
  166. $this->mAuthCode = $result['auth_code'];
  167. $this->mReference = $result['reference'];
  168. }
  169. // pobiera kod autoryzacyjny zamówienia
  170. public function GetAuthCode()
  171. {
  172. if (empty($this->mAuthCode)) $this->GetOrderAuthCodeAndReference();
  173. return $this->mAuthCode;
  174. }
  175. // pobiera kod referencyjny zamówienia
  176. public function GetReference()
  177. {
  178. if (empty($this->mReference)) $this->GetOrderAuthCodeAndReference();
  179. return $this->mReference;
  180. }
  181.  
  182. // ustaw datę wysyłki
  183. public function SetDateShipped()
  184. {
  185. $this->mOrderManager->SetDateShipped($this->mOrderId);
  186. }
  187. }
  188. ?>

Jak można zmienić ten kod by nie generował tego błędu
Kicok
Chyba zapomniałeś o return w metodzie GetCurrentPipelineSection()
-kosa-
moze sie myle ale po co masz w 44 lini $cps->Process($this); ?

to tak jak bys chciała takie coś wykonać:

funcion test ()
{

test();
$string = "test";
return $string;

}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.