我正在使用带有 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' );
有必要吗?
非常感谢