简体   繁体   English

Wordpress - Woocommerce,下单后通过Smsbroadcast发送短信API

[英]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.我已经在 Smsbroadcast 注册,他们提供 API 和 curl。 Can anyone help me to integrate this with wordpress?谁能帮我将它与 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 .您正在寻找的钩子是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/ 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.您可以使用 GuzzlePHP 进行 API 调用。 https://docs.guzzlephp.org/en/stable/index.html (Not required, Curl works just fine). https://docs.guzzlephp.org/en/stable/index.html (不需要,Curl 工作正常)。
  3. Your API call would be blocking code.您的 API 调用将是阻塞代码。 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.确保在请求中添加超时,以便结帐感谢页面不会因为缓慢的 API 响应而永远加载。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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