2017-03-06 37 views
0

我正在爲WooCommerce開發支付網關插件(用於Cyber​​source支付)。我發展到幾乎最後,但有一件事是攔截我完成,這是從支付網關網站成功付款後重新導向到我的wordpress頁面後的部分(購買確認頁 - 使用模板在wp-內容/主題/我的主題/訂單確認-的template.php)。但我不知道如何處理來自付款網站的回覆。我尋找一些woocommerce鉤子,但沒有任何工作。我發現有一個鉤woocommerce_thankyou,但這也不適合我。處理回覆並在從支付網站重定向回來後在woocommerce中下訂單

有人可以幫我在這裏在這兩點下面

1)如何處理響應,並下訂單正確,並從門戶網站支付成功後回來時,從購物車中刪除的項目。

2)我應該從網關網站重定向哪個頁面?回到同樣的結帳頁面或一些自定義頁面,就像我一樣。

任何與代碼的幫助將不勝感激。謝謝。

回答

0

我用下面的代碼在我的插件,我希望這對你的作品太:)

首先添加此代碼,

function receipt_page($order){ 
    echo $this -> ResponceHandler($order); 
} 

現在對於ResponceHandler($順序)函數的代碼,

public function ResponceHandler($order_id){ 




      if(!isset($_POST['ResponseCode'])){ 

      global $woocommerce; 
     echo '<p>'.__('Thank you for your order, please click the button below to pay with XYZ', 'woocommerce').'</p>'; 
      $order = new WC_Order($order_id); 

      $order_id = $order_id.'_'.date("ymds"); 



      $post_data = get_post_meta($order_id,'_post_data',true); 

      update_post_meta($order_id,'_post_data',array()); 
###Your Form Code HERE### 
    echo '<form><input value="Proceed To Payment" type="submit" /> </form>'; 
} 
###Haandle the response### 
if(isset($_POST['ResponseCode'])) 
      { 
      if($_POST['ResponseCode']==0){ 
            global $woocommerce; 
            session_start(); 
            $_SESSION['post']=$_POST; 

            $order = new WC_Order($order_id); 

            $order_id = $order_id.'_'.date("ymds"); 



            $post_data = get_post_meta($order_id,'_post_data',true); 

            update_post_meta($order_id,'_post_data',array()); 
               if($order->status != 'processing'){ 

               $order ->status ='Processing'; 
               $order->payment_complete(); 

               $order -> add_order_note('XYZ Payment Gateway <br>Response message :'.$_POST['ResponseMessage'].'<br>Payment ID :'.$_POST['PaymentID'].'<br>Merchant Reference Number :'.$_POST['MerchantRefNo'].'<br>Transaction ID :'.$_POST['TransactionID'].''); 

               add_post_meta($order->id, '_paymentid', sanitize_text_field($_POST['PaymentID'])); 
               add_post_meta($order->id, '_trno', sanitize_text_field($_POST['TransactionID'])); 
               $woocommerce -> cart -> empty_cart(); 
               wp_redirect($order->get_checkout_order_received_url()); 

              } 
           } 
      else { 

               if($order->status != 'failed'){ 
               $order ->status ='failed'; 
           echo "Payment failed!<br><br><br>Possible Error : ".$_POST['ResponseMessage']."<br>PaymentID: ".$_POST['PaymentID']."<br><br><br>We request you to save these details for further reference. <br>You can always pay for this order by clicking on your name in the top right corner and visiting your orders section."; } 
       } 

      } 





} 
相關問題