none
sms RRS feed

  • 問題

  • 各位大大您们好,我在撰寫sms,之前我也有問過同樣問題,雖然有人已幫我,但我還是有些問題,希望大大再繼續幫我,我已經可以寫http的某一家公司api函式也可以呼叫他,但後來我又找到這一間http://tw.every8d.com/,它是不是要企業的才能使用壓,我是利用webClient撰寫的,可是他回傳給我的跟他說(文件下載)的不太一樣,所以接下來也無法繼續了,各位大大可以提點我ㄧ些方法嗎,謝謝
    2009年3月11日 上午 07:52

解答

  • 用WebClient類別可以寫,就是要把發送的Message Encode
    HttpUtility.UrlEncode(訊息內容字串, System.Text.Encoding.GetEncoding(950))
    你可以參考以下的範例
                string strMessage;  
                strMessage = "測試";  
                string URIstring;  
                URIstring = "http://eumps.tytech.com.tw:5566/EUMPS/SendMsg?UID=" + UID + "&PW=" + PW + "&DA=" + PhoneNo ;  
                URIstring += "&SM= " + HttpUtility.UrlEncode(strMessage, System.Text.Encoding.GetEncoding(950));  
                WebClient client = new WebClient();  
                Uri SMSUri = new Uri(URIstring);  
                Stream data = client.OpenRead(SMSUri);  
                StreamReader reader = new StreamReader(data);  
                string strResponse = reader.ReadToEnd();  
                textBox1.Text = strResponse
    以下是回傳值的說明
    0 傳送完成
    -1 參數錯誤
    -2 帳號或密碼錯誤
    -3 DA 接收者行動電話號碼錯誤
    -4 DT(預計發送時間)已過去24 小時以上
    -5 Short Message 內容長度超過限制
    -6 DT(預計發送時間)格式錯誤
    -7 Client IP 遭拒絕存取或是帳號已遭暫停使用
    -8 EUMPS 後端發送平台發生不明的內部錯誤
    -100 EUMPS 後端發送平台維護中,暫時停止營運
    -101 EUMPS 後端發送平台資料庫存取錯誤,暫時停止營運
    -201 帳戶餘額不足
    -202 網路錯誤,連接EUMPS 後端發送平台錯誤
    -203 EUMPS 資料庫存取發生錯誤
    • 已標示為解答 冰糖旋風 2009年3月13日 上午 07:33
    2009年3月13日 上午 12:44
    版主
  •  
    小綠兒大大~
    我有寫 Mail 去給 every8d 客服~~
    你可能再等一下
    下周他們可能就會放上 Winform 版本的範例檔了~~~
    一心只想學好程設~~~朝著目標前進
    • 已標示為解答 冰糖旋風 2009年3月13日 上午 07:33
    2009年3月13日 上午 06:46

所有回覆

  • every8d可以申請"API介接服務"
    這個服務有文件可以參考
    大概程式會長這樣吧
     Function GetWebPage(ByVal URL As String) As String  
            Dim MyRequest As HttpWebRequest = WebRequest.Create(URL)  
            Dim MywebResponse As WebResponse = MyRequest.GetResponse()  
            Dim MyStream As Stream  
            MyStream = MywebResponse.GetResponseStream  
            Dim StreamReader As New StreamReader(MyStream, System.Text.Encoding.Default)  
            GetWebPage = StreamReader.ReadToEnd()  
        End Function  
        Function SendSMS(ByVal UID As String, ByVal PW As String, ByVal PhoneNo As String, ByVal Message As String) As String  
            Dim ret As String  
            Dim URL As String  
            URL = "http://eumps.tytech.com.tw:5566/EUMPS/SendMsg?UID=" & UID & "&PW=" & PW & "&DA=" & PhoneNo & "&SM= " & VBURLEncode(Message)  
           
            ret = GetWebPage(URL)  
            SendSMS = ret 
        End Function 
    Public Function VBURLEncode(ByRef strEnc As String) As String
            Dim strTmp2, strChar, strTmp, strRet As String
            Dim lngLoop As Integer
            strRet = ""
            For lngLoop = 0 To strEnc.Length - 1
                strChar = strEnc.Substring(lngLoop, 1)
                Select Case Asc(strChar)
                    Case 48 To 57, 65 To 90, 97 To 122
                        strRet &= strChar
                    Case 32
                        strRet &= "+"
                    Case Else
                        strTmp = Hex(Asc(strChar))
                        If strTmp.Length > 4 Then strTmp = strTmp.Substring(4)
                        strRet &= "%" & strTmp.Substring(0, 2)
                        If strTmp.Length > 2 Then
                            strTmp2 = strTmp.Substring(2)
                            strRet &= IIf(IsNumeric(strTmp.Substring(2, 1)), Chr(Val("&H" & strTmp2)), "%" & strTmp2)
                        End If
                End Select
            Next
            VBURLEncode = strRet
        End Function
    然後我只要呼叫SendSMS(帳號,密碼,對方手機號碼,訊息內容)就OK....
    ret是every8d的回傳值
    2009年3月11日 上午 08:47
    版主
  • 這位大大您好,請問一下,由於我將你的程式改成c#,發現還是不行,所以請教您VBURLEncode(message)的作用,謝謝您的幫助

    我是將程式碼改成,可是回傳是負數,是不是差再我沒寫和你一樣的方法,謝謝
    address = "http://eumps.tytech.com.tw:5566/EUMPS/SendMsg?         
                      UID
    ="
     + "UID" + "&PW="+" PW" + "&DA=" +" PhoneNo "+ "&SM= " +"test";
                        WebRequest MyWeb = WebRequest.Create(address);
                        WebResponse MyWebR = MyWeb.GetResponse();
                        Stream MyStream = MyWebR.GetResponseStream();
                        byte[] mybyte = new byte[1024];                    
                        int readl = 0;
                        do
                        {
                            readl = MyStream.Read(mybyte, 0, 1024);
                            aa += Encoding.UTF8.GetString(mybyte, 0, 1024);
                        } while (readl > 0);
    2009年3月12日 上午 01:45
  •    是喔..這個我用很久了ㄟ 
       它的SM不是直接傳字串,而是用URL Encode後的值來傳
      所以才會有Public Function VBURLEncode <==這個function來做Encode動作
      至於這個Encode的規則,說真的我已經忘記了... 
      不過我剛上Every8D看了一下,以前解釋這個URL Encode的文件好像找不到了
      現在新的API2.0是用Web Service Soap,你可試一下這個API
      文件下載: http://tw.every8d.com/template/every8d/document/download.html
      C# Sample Code http://tw.every8d.com/API20/SampleCode/VS_Sample.rar
      不過這一個Sample看起來像是用 2008開發的
    2009年3月12日 上午 02:45
    版主
  • 1. 你貼的程式怪怪的。
    2. 我不知你要 encode 什麼,不過 System.Web.HttpUtility 命名空間中有 HtmlEncode() 和 UrlEncode() 方法。
    MVP 2009 (ASP.NET), MCPD: ASP.NET Developer 3.5, MCPD: Windows Developer 3.5, MCITP: Database Developer 2008, MCITP: Enterprise Administrator 不想被人認為是小白,就不要總是在做一堆會讓人認為是小白的事。
    2009年3月12日 上午 03:06
    版主
  •  EVERY8D的API在註冊帳號後就可以直接利用註冊的帳號使用,不需要特別申請。
    目前最新的API是採用Web Services方式呼叫,如果你會使用SOAP Web Services的話,應該可以很容易串接的
    可以上EVERY8D的網站下載文件(文件裡有SampleCode的連結,其中有C#的sample)
    如果有串接上的問題也可以直接寫信去問,他們會派人協助你的

    2009年3月12日 上午 08:57
  • 小朱大大:
          因為以前Every8D的介面會需要訊息內容的部份Encode再發出去,
          說實話我還真的沒很注意這玩意有沒有別的寫法,
          不過,感謝您的提示,小弟剛剛測試了一下
          這個Encoding其實就是HttpUtility.UrlEncode("測試簡訊", System.Text.Encoding.GetEncoding(950))
          可能因為這個是很久以前Every8D用 VB6做的範例,所以沒想到在 .NET可以這樣代替
          感謝您讓我上了一課!!
         
    另外給小綠兒:
          現在既然可以直接用呼叫Web Service的方法,你就用新方法做吧, 我之前的文章有貼文件下載和C#範例的路徑,
          希望能幫上你的忙
    2009年3月12日 上午 09:57
    版主
  • 大大您们好,我有試著去做,但請問一下,我是載windows form上去做,那可以使用webClient嗎,那請問他的編碼也是有提供嗎,謝謝你的幫助
    2009年3月12日 上午 11:51
  • 用WebClient類別可以寫,就是要把發送的Message Encode
    HttpUtility.UrlEncode(訊息內容字串, System.Text.Encoding.GetEncoding(950))
    你可以參考以下的範例
                string strMessage;  
                strMessage = "測試";  
                string URIstring;  
                URIstring = "http://eumps.tytech.com.tw:5566/EUMPS/SendMsg?UID=" + UID + "&PW=" + PW + "&DA=" + PhoneNo ;  
                URIstring += "&SM= " + HttpUtility.UrlEncode(strMessage, System.Text.Encoding.GetEncoding(950));  
                WebClient client = new WebClient();  
                Uri SMSUri = new Uri(URIstring);  
                Stream data = client.OpenRead(SMSUri);  
                StreamReader reader = new StreamReader(data);  
                string strResponse = reader.ReadToEnd();  
                textBox1.Text = strResponse
    以下是回傳值的說明
    0 傳送完成
    -1 參數錯誤
    -2 帳號或密碼錯誤
    -3 DA 接收者行動電話號碼錯誤
    -4 DT(預計發送時間)已過去24 小時以上
    -5 Short Message 內容長度超過限制
    -6 DT(預計發送時間)格式錯誤
    -7 Client IP 遭拒絕存取或是帳號已遭暫停使用
    -8 EUMPS 後端發送平台發生不明的內部錯誤
    -100 EUMPS 後端發送平台維護中,暫時停止營運
    -101 EUMPS 後端發送平台資料庫存取錯誤,暫時停止營運
    -201 帳戶餘額不足
    -202 網路錯誤,連接EUMPS 後端發送平台錯誤
    -203 EUMPS 資料庫存取發生錯誤
    • 已標示為解答 冰糖旋風 2009年3月13日 上午 07:33
    2009年3月13日 上午 12:44
    版主
  • 大大謝謝您花時間幫我,我在自己試試看,真ㄉ很謝謝你
    2009年3月13日 上午 06:11
  •  
    小綠兒大大~
    我有寫 Mail 去給 every8d 客服~~
    你可能再等一下
    下周他們可能就會放上 Winform 版本的範例檔了~~~
    一心只想學好程設~~~朝著目標前進
    • 已標示為解答 冰糖旋風 2009年3月13日 上午 07:33
    2009年3月13日 上午 06:46
  • 真ㄉ很感謝你捏~~謝謝囉
    2009年3月13日 上午 07:33
  • EVERY8D針對 Windows Form C# Sample  發送SMS的範例已經提供出來了喔!
    可以到http://tw.every8d.com/API20/SampleCode/VS_Sample.rar 下載。

    裡面有二個專案,一個是Web Application(SMS_Web_Sample)的範例;另一個是Windows Form (SMS_WinForm_Sample) 的範例
    2009年3月16日 上午 10:04
  • 謝謝大大囉
    2009年3月18日 上午 06:48
  • 大大您好,您還記得我嗎,我之前跟你問過sms的,您也有貼了程式碼給我,而我有試過你的和將vb改成c#版,發現都會出現-2,可是我利用相同的帳號到他們提供的程式,是可行的,我想要利用你的方法做,因為他們還有再載入MessageService之類的網路,而我不想透過這種方式,請問是否除了這些還有其他方法可寫嗎,謝謝
    2009年3月18日 上午 07:43
  • 小綠兒:
    我在2009/03/13 08:44的回覆那篇文章中的程式就是用C#寫的
    那支程式我用我的帳號測試過,確定沒有問題
    回應 -2代表有帳密的問題
    剛剛我幫你向Every8D詢問後確認了2.0版沒有分帳號的類別,所以你用API 2.0 C#的Sample可以用
    所以現在應該這樣解釋
    以前Every8D的帳號分前台帳號與後台帳號(也就是我說的API介接帳號)
    可是現在2.0版的API帳號基本上是等同於以前的前台帳號
    也就是說,你的帳號申請錯了,所以才不能用這種方法寫
    所以你可能要向Every8D申請異動為API介接帳號<就是後台帳號> (最好強調你要用API1.X版的)
    OK..你可以打電話給一位廖小姐聯絡
    02-89131559#268




    2009年3月18日 上午 10:03
    版主
  • 大大真ㄉ很感謝您,我會試試低,謝謝
    2009年3月18日 上午 10:08