通过 API 在 WordPress 订单状态更新/更改中添加异常

时间:2021-01-08 16:44:12

标签: wordpress woocommerce woocommerce-rest-api

我正在使用带有 IVR API(用于订单确认的自动电话呼叫)的自定义函数,它会根据用户通过电话的响应自动将订单状态更改为已确认、待确认或通过 Rest API 发布方法取消。

如何添加一个例外,即如果订单状态已标记为“已完成”,则通过 API 传入的数据不应根据 IVR 响应更改订单状态。

add_action('woocommerce_thankyou', 'phone_api_call', 10, 1);
function phone_api_call( $order_id ) {

    if ( ! $order_id )
        return;

    // Getting an instance of the order object
    $order = wc_get_order( $order_id );
    $order_data = $order->get_data();
    $phone=$order_data["billing"]["phone"];
    $total=$order_data["total"];
    $orderId=$order_data["id"];
    add_filter('https_ssl_verify', '__return_false');
    $url='https://ivrcamp.eocean.us:8082/cgi-bin/XXXX/outbound.cgi?caller_id='.$phone.'&order_id='.$orderId.'&Amount='.$total.'&username=XXXX&password=XXXX';
     $response = wp_remote_get($url,array());
remove_filter('https_ssl_verify', '__return_false');
}

add_action('rest_api_init', function() {
    register_rest_route('api/v1', 'update-order-status', [
        'methods' => 'POST',
        'callback' => 'update_order_status',
    ]);
});
function update_order_status($request) {
    $response=[];
     $status = $request->get_param( 'status' );
    $orderId= $request->get_param( 'order_id' );
    if(!empty($status) && !empty($orderId))
    {
        $order = wc_get_order($orderId);
        if($order)
        {
            $order->set_status($status);
            $order->save();
            $messageStatus=ucfirst(str_replace('wc-','',$status));
            $response["code"]="200";
            $response["status"]="Ok";
            $response["message"]="Order Status Updated to ".$messageStatus;
            
        }
        else{
            $response["code"]="200";
            $response["status"]="Failed";
            $response["message"]="Invalid Order ID!!!";
        }
    }
    else{
        $response["code"]="200";
        $response["status"]="Failed";
        $response["message"]="Invalid Parameters!!!";
    }
        echo json_encode($response);
}

我还应该使用 add_filter( 'https_ssl_verify', '__return_false' ); 有必要吗?

非常感谢

0 个答案:

没有答案