简体   繁体   中英

Wordpress - Woocommerce, Sending SMS through Smsbroadcast API after order has been placed

I need to send sms to the customer after successfully placing an order. I have already registered with Smsbroadcast where they are providing API with curl. Can anyone help me to integrate this with wordpress?

<?php
function sendSMS($content) {
    $ch = curl_init('https://api.smsbroadcast.com.au/api-adv.php');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec ($ch);
    curl_close ($ch);
    return $output;    
}

$username = 'USERNAME';
$password = 'PASSWORD';
$destination = '0400000000'; //Multiple numbers can be entered, separated by a comma
$source    = 'MyCompany';
$text = 'This is our test message.';
$ref = 'abc123';
    
$content =  'username='.rawurlencode($username).
            '&password='.rawurlencode($password).
            '&to='.rawurlencode($destination).
            '&from='.rawurlencode($source).
            '&message='.rawurlencode($text).
            '&ref='.rawurlencode($ref);

$smsbroadcast_response = sendSMS($content);
$response_lines = explode("\n", $smsbroadcast_response);

 foreach( $response_lines as $data_line){
    $message_data = "";
    $message_data = explode(':',$data_line);
    if($message_data[0] == "OK"){
        echo "The message to ".$message_data[1]." was successful, with reference ".$message_data[2]."\n";
    }elseif( $message_data[0] == "BAD" ){
        echo "The message to ".$message_data[1]." was NOT successful. Reason: ".$message_data[2]."\n";
    }elseif( $message_data[0] == "ERROR" ){
        echo "There was an error with this request. Reason: ".$message_data[1]."\n";
    }
}

?>

The hook you are looking for is woocommerce_thankyou .

add_action( 'woocommerce_thankyou', 'post_transaction_after_order_completion',  10, 1 );

function post_transaction_after_order_completion( $order_id ) {
    $order = wc_get_order( $order_id ); // phpcs:ignore.

    $status = $order->get_status();

    // If this is executed once, no need to run it again.
    if ( ! ( '' === $order->get_meta( '_thank_you' ) ) ) {
        return;
    } else {
        $order->update_meta_data( '_thank_you', 'true' );
        $order->save();
    }

    // Use this to allow code to run when order status is completed or processing.
    if ( ! ( 'completed' === $status || 'processing' === $status ) ) {
        return;
    }

    $user = $order->get_user(); // Fetch all the other user data from here.

    $content = ""; // Create content that you want using $order & $user.

    sendSMS($content); // Use your send function to send API request.
}

NOTE


  1. Learn more about getting order data from here. https://www.businessbloomer.com/woocommerce-easily-get-order-info-total-items-etc-from-order-object/
  2. You can use GuzzlePHP to make your API calls. https://docs.guzzlephp.org/en/stable/index.html (Not required, Curl works just fine).
  3. Your API call would be blocking code. Make sure you add a timeout in your request so that the checkout thank you page doesn't take forever to load because of SLOW API response.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM