2017-08-03 74 views
1

当管理员在收到货到付款时将订单状态从挂起更改为完成时,我想发送API请求。在这种情况下,我无法使用谢谢你的页面钩子。实际上,当用户使用WordPress网站购买课程时,我想使用他们的API将他加入到第三方LMS“Canvas”课程中。 这是代码:订单付款状态变更时的woocommerce挂接

// enroll student on buying course 
add_action('woocommerce_order_status_completed', 'enroll_student', 10,1); 


function enroll_student($order_id ) { 


$order = new WC_Order($order_id); 
$user = get_current_user_id(); 
global $wpdb; 
$canvas_user = $wpdb->get_var('SELECT canvas_id FROM wp_user_map where wp_id ='.$user); 
foreach ($order->get_items() as $item) { 

    if($item['variation_id'] > 0){ 
     $product_id = $item['variation_id']; // variable product 
    } else { 
     $product_id = $item['product_id']; // simple product 
    } 

    // Get the product object 
    $product = wc_get_product($product_id); 
} 
$prod_id = $product->id; 
global $wpdb; 
$canvas_prod_id = $wpdb->get_var('SELECT canvas_id FROM wp_course_map where wp_id ='.$prod_id); 
$url = "https://myurl/api/v1/courses/".$canvas_prod_id."/enrollments"; 
$token = 'mytoken'; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' .$token)); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 

curl_setopt($curl, CURLOPT_POSTFIELDS, array(
    'enrollment[user_id]'=>$canvas_user, 
    'enrollment[type]'=>'StudentEnrollment', 

)); 
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($curl, CURLOPT_ENCODING, ""); 
$curlData = curl_exec($curl); 
//echo $curlData; 
//echo $name; 
//echo $email; 
//echo 'cur user:'.$user; 
//echo 'cavas user id:'.$canvas_user; 
//echo 'Prod id:'.$prod_id; 
//echo 'canvas Prod id:'.$canvas_prod_id; 

curl_close($curl); 
} 

此代码的工作完美,如果我使用三江源页面挂钩,而不是与此挂钩:woocommerce_payment_complete_order_status或任何其他付款 可以将某些PLZ点我这钩子可以帮助我做到这一点?

+0

你试过'add_action('woocommerce_order_status_changed','your_function',99,3); 功能your_function($ ORDER_ID,$ OLD_STATUS,$ NEW_STATUS){ 如果($ NEW_STATUS == “完成”){// 您的代码在这里 } }'? – vel

+0

@vel试过这个,不起作用 –

+0

请检查这个'https:// stackoverflow.com/questions/36315825/woocommerce-order-status-completed-not-triggered' – vel

回答

1

我的逻辑有一个错误,我得到当前登录用户的用户标识,但我需要订购产品的用户的用户标识。解决了使用订单ID对象

相关问题