2013-10-03 32 views
-1

我正在爲opencart創建一個自定義網關模塊,但我在代碼中存在一些問題。 你能告訴我我做錯了什麼嗎?網關中的未定義方法

Opencart的調試器顯示錯誤:

[03-Oct-2013 06:50:02 America/Chicago] PHP Fatal error: Call to undefined method ControllerPaymentMyBank::check_order() in /home/***/public_html/catalog/controller/payment/mybank.php on line 207 
[03-Oct-2013 06:50:34 America/Chicago] PHP Fatal error: Call to undefined method ControllerPaymentMyBank::ResponseToBank() in /home/***/public_html/catalog/controller/payment/mybank.php on line 225 

我使用的功能:

public function callback() { 

     //SOME CODE HERE WORKS.... 


     $xml = xml_parser_create('UTF-8'); 
        xml_parse_into_struct($xml, html_entity_decode($_POST['ConfirmRequest']), $vals); 
        xml_parser_free($xml); 

        foreach ($vals as $data) 
          { 
          if ($data['tag']=='STATUS') 
          $Status=$data['value']; 
          if ($data['tag']=='PAYMENTID') 
          $PaymentId=$data['value']; 
          if ($data['tag']=='PAYMENTDATE') 
          $PaymentDate=$data['value']; 
          if ($data['tag']=='TRANSACTIONID') 
          $TransactionId=$data['value']; 
          if ($data['tag']=='AMOUNT') 
          $Amount=$data['value']; 
          if ($data['tag']=='REASON') 
          $Reason=$data['value']; 
         if ($data['tag']=='CARDTYPE') 
          $CardType=$data['value']; 

          } 


        if($Status=='C') 
        { 
        if($this->check_order($TransactionId,$Amount)) 
        $this->ResponseToBank($TransactionId,$PaymentId,'ACCEPTED');    
        else 
        $this->ResponseToBank($TransactionId,$PaymentId,'DECLINED'); 
        } 


        if($Status=='Y')        
         { 

          if($this->success_order($TransactionId)) 
              $this->ResponseToBank($TransactionId,$PaymentId,'ACCEPTED'); 
                 else 
            $this->ResponseToBank($TransactionId,$PaymentId,'DECLINED'); 

        } 


        $this->ResponseToBank($TransactionId,$PaymentId,'ACCEPTED');  


        function ResponseToBank($TransactionId,$PaymentId,$Status) 
          { 

             $xmlstr = "<ConfirmResponse>"; 
             $xmlstr .= "<TransactionId>".$TransactionId."</TransactionId>"; 
             $xmlstr .= "<PaymentId>".$PaymentId."</PaymentId>"; 
             $xmlstr .= "<Status>".$Status."</Status>"; 
             $xmlstr .= "</ConfirmResponse>"; 

             header('Content-type: text/xml'); 
             die($xmlstr); 
           }    





        function check_order($orderid,$amount) 
           { 
            return true; 

           } 



        function success_order($orderid) 
           { 


           return true; 

           } 




    } 

我怎麼可以定義這些方法對不對?

+0

耶穌在天堂,請確保你的PHP技能會做得更好,然後你會爲OpenCart寫任何東西......特別是如果這是一個支付網關! – shadyyx

+0

是你的超級puper風格添加負面點?如果你不喜歡某些東西,只需關閉線程先生。大腦 – vkatsitadze

+0

我給消極和積極的一點。我對這兩個答案給予了積極的評價,因爲它們都很好,但是由於這些原因,我對你的問題給出了一個否定的觀點:你沒有*展示出對解決問題的最低限度的理解*,恕我直言,這個問題對於社區,代碼看起來很糟糕,所以我不希望其他*開發人員*來舉例說明。我希望我解釋清楚。如果你看到我的帳戶你會發現從1051票我只給** ** 124積分,而708 upvotes ...所以不,這不是我的風格,除非我覺得需要downvote。 – shadyyx

回答

2

您已經定義了callback函數中的方法。將這些移到這個函數的外面,使它們成爲封閉類的一部分。

3

除非我遺漏了一些東西,否則這是一個普通的PHP語法問題。如果你這樣做:

$this->check_order($TransactionId,$Amount) 

...這假設你在當前類中的類方法:

class ControllerPaymentMyBank{ 
    private function check_order($orderid, $amount){ 
     return true; 
    } 
} 

但是,你有這種情況發生在另一個內部類的方法來定義一個普通函數:

class ControllerPaymentMyBank{ 
    public function callback() 
     function check_order($orderid,$amount){ 
      return true; 
     } 
    } 
} 

這不是純面向對象的程序設計,它是這相當於OOP和程序代碼的混合物:

class ControllerPaymentMyBank{ 
    public function callback() 
    } 
} 

function check_order($orderid,$amount){ 
    return true; 
} 

定義check_order()作爲適當的類方法,你應該完成。

+0

感謝您的回答! – vkatsitadze