[C#.NET][SMS] 調用 三竹簡訊 Web Service 發送單向簡訊

  • 15238
  • 0
  • SMS
  • 2015-12-29

[C#.NET][SMS] 調用 三竹簡訊 Web Service 發送單向簡訊

註冊完畢後就立即送你 100 點,果真的是財力背景最雄厚的一家簡訊服務

http://msg.mitake.com.tw/SMS/Home.jsp?t=1393945034555

 

網頁找不到有關 API 的說明文件,於是發了訊息給客服詢問是否有提供 API,可以讓程式人員開發軟體。

客服回覆說需要公司的相關訊息,我給予相關資料後,便由業務頒發手冊給我,我收到後便快速的閱讀一遍手冊,這時業務來電告知已經發送手冊,電話中,順便聊了一下申請步驟為什麼會那麼麻煩,也順便詢依手冊問了幾個技術問題也得知『無法免費提供雙向簡訊測試』,他留下了研發人員的聯絡資訊給我,看能否解決我的問題,當下我沒有立即撥打電話,我打算熟讀並實作後再撥電話,不過 API 還是無法使用,於是我立馬拿起電話找研發人員尋求協助,順便詢問技術上的問題,一問之下才知道原來還需要後端開放權限,API 才能順利動作,整個申請 API 過程應該是目前我碰過最麻煩的,不過還好問題有解決,過程也相當順利。

 

以下是申請 API 服務流程

  1. 提供公司相關資料及統編給客服。
  2. 申請向後台手動開放調用 API 權限,否則就算你抄了程式碼,也無法調用。

單筆簡訊使用 HttpGet,在這裡我引用了 System.Net.Http 4.0

private string SendMessage3()
{
    HttpClient client = new HttpClient();
    StringBuilder url = new StringBuilder("http://smexpress.mitake.com.tw/SmSendGet.asp?");
    url.Append("username=").Append("密碼");
    url.Append("&password=").Append("帳號");
    url.Append("&encoding=utf-16be");
    url.Append("&dstaddr=").Append("手機");
    url.Append("&smbody=").Append(HttpUtility.UrlEncode("R&B王子-陶喆,你能显示说简体字吗?蓋高尚唉哀皚癌藹矮艾礙愛隘熬翺襖傲奧懊澳芭捌",
        Encoding.GetEncoding("Big5")));
    var id = client.GetStringAsync(url.ToString()).Result;
    return id;
}


 

這很特別,支援多語系,不過簡訊收到的字仍有部份亂碼,smdoby 則是需要比較關注

response 欄位需要自己建立一台 Server 接收系統訊息,當然你也可以事後透過 msgid 來取得詳細資訊

image

 

當發送簡訊後,會收到下圖的資料

image

 

若有設定response,將會收到下圖訊息

image

 

若被動查詢可得到下圖訊息,欄位會比主動回報的欄位來的少,不過主動回報的欄位大都是自己可以記錄的,所以這可以接受

image

 

 

 


多筆發送,基本上就是把檔案 HttpPost 到 Server,

private string SendMessage4()
{
    HttpClient client = new HttpClient();
    StringBuilder url = new StringBuilder("http://smexpress.mitake.com.tw/SmSendGet.asp?");
    url.Append("username=").Append("帳號");
    url.Append("&password=").Append("密碼");
    //url.Append("&encoding=Big5");
    var stream = new FileStream("list.txt", FileMode.Open, FileAccess.Read);
    byte[] buffer = new byte[stream.Length];
    stream.Read(buffer, 0, buffer.Length);
    var response = client.PostAsync(url.ToString(), new ByteArrayContent(buffer)).Result;
    string responseBody = response.Content.ReadAsStringAsync().Result;
    return responseBody;
}

 


 

"list.txt" 內容跟手冊一樣,因為我沒有那麼多手機號碼可以測,我這裡主要是要處理編碼問題,所以就丟假的電話號碼,只要網站上能呈現正確的編碼我想手機呈現的資料應該也是八九不離十了。

[101]
DestName=大寶
dstaddr=0999123456
smbody=我是測試1
response=http://192.168.1.200/smreply.asp
[102]
DestName=二寶
dstaddr=0999654321
smbody=我是測試2
[103]
DestName=小明
dstaddr=0999000000
smbody=我是測試3

當程式發送完畢後可至三竹簡訊網站查看

image

 

在處理這個檔案時,我碰到了系統編碼的問題,當 Unicode 是 Chinese 時,可順利發送文字檔簡訊

但在English時,連發都發不出去…

image

 


文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/03/06/144259.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo