2017-03-06 76 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."; } 
       } 

      } 





} 
相关问题