问题描述
我需要在成功下单后向客户发送短信。我已经在 Smsbroadcast 注册,他们在那里提供带有 curl 的 API。谁能帮我将它与 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";
}
}
?>
解决方法
您要查找的钩子是 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.
}
注意
- 从此处详细了解如何获取订单数据。 https://www.businessbloomer.com/woocommerce-easily-get-order-info-total-items-etc-from-order-object/
- 您可以使用 GuzzlePHP 进行 API 调用。 https://docs.guzzlephp.org/en/stable/index.html(不需要,Curl 工作正常)。
- 您的 API 调用会阻塞代码。确保在您的请求中添加超时,以便结帐感谢页面不会因为 API 响应缓慢而永远加载。