通过API将订单详细信息从WooCommerce发送到外部系统

时间:2019-03-22 03:50:12

标签: woocommerce netsuite

我正在尝试通过我编写的外部api将woocommerce订单发送给netsuite。我不喜欢woocommerce,还没有完全了解如何添加此功能。

我已将以下代码添加到 public_html / wp-content / themes / reverie-master /

中的functions.php文件中
add_action( 'woocommerce_payment_complete'', 'wdm_send_order_to_ext'); 
function wdm_send_order_to_ext( $order_id ){
// get order object and order details
$order = new WC_Order( $order_id ); 
$email = $order->billing_email;
$phone = $order->billing_phone;

//Create the data object
$orderData = array(
    'customer_email' => $email,
    'customer_phone' => $phone
);

$apiData = array(
    'caller' => 'woocommerce',
    'json' => $orderData,
    'key' => 'MY_SECRET_KEY'
);

$jsonData =json_encode($orderData);

$url = "";
$api_mode = 'sandbox';
if($api_mode == 'sandbox'){
    // sandbox URL example
    $url = "https://forms.netsuite.com/app/site/hosting/scriptlet.nl?script=XXX&deploy=X&compid=XXXXXXX_SB1&h=XXXXXXXXXXXXXXXX"; 
}
else{
    // production URL example
    $url = ""; 
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($jsonData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec ($ch);

curl_close ($ch);

// the handle response    
if (strpos($response,'ERROR') !== false) {
        print_r($response);
} else {
        // success
}
}

我已经测试了此代码的首当其冲,只是测试了与其他站点中的woocommerce不相关的部分,并且我可以看到NetSuite中显示的数据。但是,当我通过商店下订单并付款时,我看不到数据进入NetSuite。我的代码是否在正确的位置?有什么我想念的吗?

更新 我安装了插件代码片段,并在其中添加了代码。将其设置为到处运行代码段。还是没有运气。

2 个答案:

答案 0 :(得分:2)

结果我的代码中出现了JS错误。 json_encode的数据错误。

答案 1 :(得分:0)

看起来你在第一个链接上有双引号

改变

add_action( 'woocommerce_payment_complete'', 'wdm_send_order_to_ext');

add_action( 'woocommerce_payment_complete', 'wdm_send_order_to_ext');

而不是使用 curl - 您始终可以使用 WordPress wp_remote_post() 函数中的构建

还要确保在测试时在 WP_DEBUG 中将 true 设置为 wp-config.php