WordPress WooCommerce对接Smsbroadcast API实现下单后自动发送SMS
WooCommerce 集成 Smsbroadcast 下单后自动发短信实现方案
我们通过WooCommerce提供的订单状态钩子触发短信发送逻辑,把你提供的Smsbroadcast API调用代码封装后绑定到对应钩子即可,代码可以放到当前主题的functions.php文件末尾,也可以封装为独立的自定义插件使用,不要修改WooCommerce核心文件。
- 提前把代码中的
USERNAME、PASSWORD替换为你在Smsbroadcast平台的实际账号密码 $source变量替换为你的品牌名,长度需要符合Smsbroadcast平台的发送方名称规则- 可根据自身业务需求调整触发短信的时机,以下示例默认在订单付款完成后触发
<?php // 封装Smsbroadcast短信发送函数 function send_sms_via_smsbroadcast($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; } // 绑定WooCommerce付款完成钩子 add_action('woocommerce_payment_complete', 'send_sms_after_order_paid', 10, 1); function send_sms_after_order_paid($order_id) { // 获取订单对象 $order = wc_get_order($order_id); if (!$order) return; // 配置参数 $username = 'USERNAME'; $password = 'PASSWORD'; $destination = $order->get_billing_phone(); // 动态获取订单收货人的手机号 $source = '你的品牌名称'; // 自定义短信内容,可按需拼接订单号、金额等信息 $text = '您好,您的订单'.$order->get_order_number().'已支付成功,我们将尽快为您发货,感谢您的购买!'; $ref = 'order_'.$order_id; // 用订单号作为参考标识方便后续排查 // 组装请求参数 $content = 'username='.rawurlencode($username). '&password='.rawurlencode($password). '&to='.rawurlencode($destination). '&from='.rawurlencode($source). '&message='.rawurlencode($text). '&ref='.rawurlencode($ref); // 调用发送接口 $smsbroadcast_response = send_sms_via_smsbroadcast($content); $response_lines = explode("\n", $smsbroadcast_response); foreach($response_lines as $data_line){ $message_data = explode(':',$data_line); if(empty($message_data)) continue; // 生产环境建议把返回结果写入日志,不要直接输出,示例用error_log记录 if($message_data[0] == "OK"){ error_log("短信发送成功,收件人:".$message_data[1].",参考标识:".$message_data[2]); }elseif($message_data[0] == "BAD"){ error_log("短信发送失败,收件人:".$message_data[1].",失败原因:".$message_data[2]); }elseif($message_data[0] == "ERROR"){ error_log("短信请求出错,错误原因:".$message_data[1]); } } } ?>
补充说明
- 如果你需要在用户提交订单(未付款)时就发送短信,可以把钩子换成
woocommerce_new_order - 如果你需要在订单标记为已完成(发货后)发送短信,可以把钩子换成
woocommerce_order_status_completed - 测试阶段可以把
$destination变量临时写死为自己的手机号,确认发送功能正常后再换回动态获取的订单手机号 - 如果你的站点服务器限制了curl请求,需要联系服务器运营商放开对
smsbroadcast.com.au接口的访问限制
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

