首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

SSH 電商專案實戰(二十六):訂單支付後自動發送簡訊通知

     編輯:Java 相關知識

在 SSH 框架構建的網路商城專案中,完成郵件通知後,我們還需要整合第三方簡訊服務,在用戶支付成功後自動發送簡訊提醒。本文詳細記錄從申請服務、測試 API 到封裝工具類、整合至支付回調的完整流程。

一、申請第三方簡訊服務

個人無法直接對接三大運營商,需透過簡訊服務商(如「中國網建 sms 短信通」)獲取 API。註冊後可獲得免費測試額度(首日 5 條,次日再送 5 條),並需配置簡訊簽名(後綴)與獲取 API 金鑰。

  • 官網註冊帳號,驗證手機號
  • 設定簡訊後綴(如【您的商城】)
  • 在「短信 API 接口」頁面查看請求參數與回傳代碼含義
  • 複製 Uid(用戶名)與 Key(接口密鑰)備用

二、測試服務器連通性

在專案中建立 test.jsp 快速驗證:

<a href="https://utf8.sms.webchinese.cn/?Uid=用戶名&Key=密鑰&smsMob=手機號&smsText=驗證碼:8888">測試服務器</a>

點擊連結若回傳正數(如 1 代表成功),說明服務正常。注意:測試時勿頻繁請求,且含帳密的連結不可用於生產環境。

三、開發簡訊發送功能

3.1 獨立測試類

需引入三個 JAR:commons-httpclient-3.1.jar、commons-codec-1.4.jar、commons-logging-1.1.1.jar。使用 HttpClient 模擬 POST 請求:

public class SendMessageDemo {
    public static void main(String[] args) throws Exception {
        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod("https://utf8.sms.webchinese.cn/");
        post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        post.setParameter("Uid", "你的用戶名");
        post.setParameter("Key", "你的密鑰");
        post.setParameter("smsMob", "接收手機號");
        post.setParameter("smsText", "測試一下!");
        
        int code = client.executeMethod(post);
        String result = post.getResponseBodyAsString();
        System.out.println("HTTP 狀態碼:" + code + ",發送結果:" + result); // 1 為成功
        post.releaseConnection();
    }
}

3.2 封裝為 Spring Bean

定義介面與實現類,註冊為 Spring 元件:

public interface MessageUtil {
    void sendMessage(String phoneNum, String orderId);
}

@Component("messageUtil")
public class MessageUtilImpl implements MessageUtil {
    @Override
    public void sendMessage(String phoneNum, String orderId) {
        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod("https://utf8.sms.webchinese.cn/");
        post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        post.setParameter("Uid", "eson_15");
        post.setParameter("Key", "0537729d0b59a7e7358b");
        post.setParameter("smsMob", phoneNum);
        post.setParameter("smsText", "您的訂單 " + orderId + " 已支付成功,感謝購買!");
        
        try {
            int code = client.executeMethod(post);
            String result = post.getResponseBodyAsString();
            System.out.println("簡訊發送狀態碼:" + code + ",結果:" + result);
        } catch (Exception e) {
            throw new RuntimeException("簡訊發送失敗", e);
        } finally {
            post.releaseConnection();
        }
    }
}

四、整合至支付回調流程

在 PayAction 的 backBank() 方法中注入 messageUtil,支付驗證通過後發送簡訊:

@Controller("payAction")
@Scope("prototype")
public class PayAction extends BaseAction<Object> implements ParameterAware {
    @Resource
    private MessageUtil messageUtil;
    
    public void backBank() {
        BackData backData = (BackData) model;
        boolean isOK = payService.checkBackData(backData);
        if (isOK) {
            // 1. 更新訂單狀態
            forderService.updateStatusById(Integer.parseInt(backData.getR6_Order()), 2);
            // 2. 發送郵件
            String email = backData.getR8_MP().split(",")[0];
            emailUtil.sendEmail(email, backData.getR6_Order());
            // 3. 發送簡訊
            String phone = backData.getR8_MP().split(",")[1];
            messageUtil.sendMessage(phone, backData.getR6_Order());
            System.out.println("----success!!----");
        } else {
            System.out.println("----false!!!----");
        }
    }
}

易寶回調參數中 R6_Order 為訂單號,R8_MP 為「郵箱,手機」格式,以逗號分隔。

五、總結

透過第三方簡訊 API 實現支付後通知,關鍵在於:正確申請並配置服務商參數、封裝可復用的工具類、在業務流程關鍵節點調用。此模式同樣適用於註冊驗證碼、物流通知等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved