1. 程式人生 > >玄武簡訊介面和移動MAS簡訊介面的API封裝

玄武簡訊介面和移動MAS簡訊介面的API封裝

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using System.Web.UI;
  6 using System.Web.UI.WebControls;
  7 using CVTE.Utils;
  8 using ImApiDotNet;
  9 using CVTE.ServiceModel;
 10 using System.Configuration;
 11 using System.Threading;
 12 using
System.Text; 13 14 namespace CVTE.Portal 15 { 16 public partial class SmsSend : System.Web.UI.Page 17 { 18 private String[] retunvalues = new String[] { "成功", "連線資料庫失敗", "資料庫關閉失敗", "資料庫插入錯誤", "資料庫刪除錯誤", "資料庫查詢錯誤", "引數錯誤", "API標識非法", "訊息內容太長", "沒有初始化或初始化失敗", "API介面處於暫停(失效)狀態", "
簡訊閘道器未連線" }; 19 private String[] initvalues = new String[] { "成功", "連線失敗", "使用者名稱或密碼錯誤", "密碼錯誤", "介面編碼不存在" }; 20 private ImApiDotNet.APIClient apiclient; 21 22 //是否聯通號碼,用於MAS過濾。在玄武簡訊中已不用考慮這個問題。 23 bool isLianTong(string mobile) 24 { 25 bool result = false
; 26 if (mobile.StartsWith("186") || mobile.StartsWith("185") || mobile.StartsWith("156") || mobile.StartsWith("155") 27 || mobile.StartsWith("131") || mobile.StartsWith("132") || mobile.StartsWith("130") || mobile.StartsWith("145")) 28 result = true; 29 30 return result; 31 } 32 33 protected void Page_Load(object sender, EventArgs e) 34 { 35 if (!IsPostBack) 36 { 37 try 38 { 39 if (Request["mobile"] == null) 40 return; 41 if (Request["context"] == null) 42 return; 43 if (Request["context"].Length < 1) 44 return; 45 if (Request["AppName"] == null) 46 return; 47 48 String context = Request["context"].Replace("&", "").Replace("+", "").Replace("#", ""); 49 50 String mobileStr = Request["mobile"]; 51 if (mobileStr == "") 52 { 53 return; 54 } 55 string smsProvider = ConfigurationManager.AppSettings["SmsProvider"]; 56 57 if (Request["SmsProvider"] == null) 58 { 59 if (smsProvider.Equals("MAS")) 60 { 61 SendByMas(context, mobileStr); 62 } 63 64 if (smsProvider.Equals("MOS")) 65 { 66 //MOS的傳送號碼是以空格分隔的,和mas的半形逗號不同 67 mobileStr = mobileStr.Replace(";", " ").Replace(",", " "); 68 SendByMos(context, mobileStr); 69 } 70 } 71 else if (Request["SmsProvider"] == "MOS") 72 { 73 mobileStr = mobileStr.Replace(";", " ").Replace(",", " "); 74 SendByMos(context, mobileStr); 75 } 76 77 } 78 catch (Exception ex) 79 { 80 //MessageBox.Show(this.Page, ex.Message); 81 } 82 } 83 84 } 85 86 /// <summary> 87 /// 玄武簡訊傳送 88 /// </summary> 89 /// <param name="context">簡訊內容</param> 90 /// <param name="mobileStr">以,分隔的手機號碼</param> 91 private void SendByMos(String context, String mobileStr) 92 { 93 string AppName = ""; 94 95 if (Request["AppName"] == null) 96 { 97 AppName = "CVTalk"; 98 } 99 else 100 { 101 AppName = Request["AppName"]; 102 } 103 104 string Phone6ID = "0"; 105 //傳送內容 106 string Context = ""; 107 108 PhoneDal phoneDal = new PhoneDal(); 109 try 110 { 111 string fromPhone = ""; 112 if (Request["from"] != null) 113 { 114 if (Request["from"].ToLower() != "sysmessage") 115 { 116 fromPhone = phoneDal.GetPhone(Request["from"]); 117 } 118 } 119 120 //MOS只能識別GB2312,所以要對utf-8進行UrlDecode轉碼 121 string IMMoshost = ConfigurationManager.AppSettings["MosURL"] + @"username=XXXXXX&password=XXXXXX&"; 122 string contextUrlDecode = System.Web.HttpUtility.UrlDecode(context, System.Text.Encoding.UTF8); 123 124 //關鍵詞庫為空,則從資料庫把詞庫匯入記憶體 125 if (SensitiveWords.GetWords().Count == 0) 126 { 127 SensitiveWords.SetWords(SensitiveWordsDal.GetAllWords()); 128 } 129 130 int keyMatchCount = 0; 131 string keys = ""; 132 133 //開始關鍵詞過濾,通過記憶體查詢 134 foreach (string word in SensitiveWords.GetWords()) 135 { 136 if (contextUrlDecode != null) 137 { 138 if (contextUrlDecode.Contains(word)) 139 { 140 StringBuilder sb = new StringBuilder(); 141 foreach (char ch in word) 142 { 143 sb.Append(ch + "~"); 144 } 145 keyMatchCount++; 146 keys += word + " "; 147 context = context.Replace(word, sb.ToString()); 148 } 149 } 150 } 151 152 if (keyMatchCount > 0) 153 { 154 string alertMSG = "親,您先前傳送的簡訊包含運營商敏感字:“ " + keys + " ” 我們修改了您的簡訊內容後重新發送。修改後簡訊內容:" + context; 155 string IMhost = "http://xxxxxxxx.cn:8989/IMMessageAPI/im/toim.do?tousername=" + Request["from"] + "&message=" + alertMSG + "&subject=CVTalk簡訊異常"; 156 WebHelper.GetWebData(IMhost); 157 contextUrlDecode = System.Web.HttpUtility.UrlDecode(context, System.Text.Encoding.UTF8); 158 159 } 160 string contextSuccess = System.Web.HttpUtility.UrlEncode(contextUrlDecode, System.Text.Encoding.GetEncoding("GB2312")); 161 162 if (Request["to"] != null) 163 { 164 if (Request["cnName"] != null && fromPhone != null) 165 { 166 Context = "CVTalk" + HttpUtility.UrlEncode(Request["cnName"], System.Text.Encoding.GetEncoding("GB2312")) + fromPhone + " :" + contextSuccess + ConfigurationSettings.AppSettings["smsAD"]; 167 } 168 else 169 Context = contextSuccess; 170 } 171 else 172 { 173 Context = contextSuccess; 174 } 175 176 if (string.IsNullOrEmpty(fromPhone)) 177 { 178 //fromPhone為空,則一定是系統傳送的簡訊,不予處理回覆,統一設定擴充套件碼為0 179 Phone6ID = "0"; 180 } 181 else//查詢到使用者的手機號 182 { 183 //獲取使用者的手機號後6位,這裡是為了定位使用者,有100萬分之一的重複風險 184 Phone6ID = fromPhone.Substring(5); 185 } 186 187 string result = WebHelper.GetWebData(IMMoshost + "to=" + mobileStr + "&text=" + Context + "&subid=" + Phone6ID + "&msgtype=1"); 188 //對第一次傳送失敗,進行第二次補發 189 if (result != "0") 190 { 191 Thread.Sleep(20); 192 //第二次傳送 193 string result2 = WebHelper.GetWebData(IMMoshost + "to=" + mobileStr + "&text=" + Context + "&subid=" + Phone6ID + "&msgtype=1"); 194 Response.Write(result2); 195 Response.End(); 196 } 197 Response.Write(result); 198 Response.End(); 199 } 200 catch (Exception ex) 201 { 202 //Response.Write(ex.Message); 203 } 204 } 205 206 /// <summary> 207 /// 移動MAS簡訊傳送 208 /// </summary> 209 /// <param name="context">簡訊內容</param> 210 /// <param name="mobileStr">以,或;分隔的手機號碼</param> 211 /// <returns></returns> 212 private string SendByMas(String context, String mobileStr) 213 { 214 string AppName = ""; 215 216 if (Request["AppName"] == null) 217 { 218 AppName = "CVTalk"; 219 } 220 else 221 { 222 AppName = Request["AppName"]; 223 } 224 225 apiclient = new APIClient(); 226 227 int con = apiclient.init("172.xx.xx.xx", "bpm", "bpm", "BPM", "mas"); 228 con = System.Math.Abs(con); 229 230 mobileStr = mobileStr.Replace("", ","); 231 232 int sm = 1; 233 //if (Request["cnName"] != null) 234 Random r = new Random(); 235 int smsID = r.Next(0, 999999);//產生0-999999之間的整數,用於無後六位號碼的情況 236 int Phone6ID = 0; 237 //只支援傳送一個手機號碼 238 string Context = ""; 239 240 PhoneDal phoneDal = new PhoneDal(); 241 string fromPhone = phoneDal.GetPhone(Request["from"]); 242 243 if (Request["to"] != null) 244 { 245 if (Request["cnName"] != null) 246 Context = "CVTalk" + Request["cnName"] + fromPhone + " :" + context + ConfigurationSettings.AppSettings["smsAD"]; 247 else 248 Context = context; 249 250 } 251 else 252 { 253 Context = context; 254 } 255 256 string[] mobiles = mobileStr.Split(','); 257 if (string.IsNullOrEmpty(fromPhone) || mobiles.Length > 1) 258 { 259 //sm = apiclient.sendSM(mobiles, Context, smsID); 260 for (int i = 0; i < mobiles.Length; i++) 261 { 262 //如果是聯通號碼 263 if (isLianTong(mobiles[i])) 264 { 265 sm = apiclient.sendSM(mobiles[i], Context + "回覆TD退訂", smsID); 266 } 267 else 268 { 269 sm = apiclient.sendSM(mobiles[i], Context, smsID); 270 } 271 272 } 273 } 274 else 275 { 276 277 //sm = apiclient.sendSM(mobileStr.Split(','), Context, smsID); 278 //傳送者號碼的後6位 279 //smsID和srcID 沒有辦法分離,如果分置,將無法回覆,因為將溯源至srcID,而不是smsID。 280 //smsID和srcID就必須設定為一樣的!這樣可以讓傳送者固定傳送號碼,但這樣傳送者給所有人的smsID都將將相同, 281 //造成的結果是,第一次傳送可以成功,第一次回覆是可以成功,但第三次互動(傳送者再次回覆),資訊會回覆錯亂 282 //(這是因為在傳送者給多人傳送資訊後,smsID是一樣的,第三次回覆將無法準確定位) 283 //目前採用後6位為ID的方法,因為最多隻能拿6位,如果重複將異常。 284 285 Phone6ID = Convert.ToInt32(fromPhone.Substring(5)); 286 sm = apiclient.sendSM(mobiles, Context, Phone6ID); 287 smsID = Phone6ID; 288 } 289 290 apiclient.release(); 291 292 CVTE.Model.IMSms model = new CVTE.Model.IMSms(); 293 model.AppName = AppName; 294 model.FromUserName = Request["from"]; 295 model.ToUserName = Request["to"]; 296 model.ID = Guid.NewGuid().ToString(); 297 298 System.Text.Encoding utf8 = System.Text.Encoding.UTF8; 299 byte[] key = Convert.FromBase64String("YzJjZGxmZ2hcamtsvW5vcHbycXXXXXXXXXX"); 300 byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; //當模式為ECB時,IV無用 301 byte[] data = utf8.GetBytes(context); 302 303 byte[] byteEncode = DES3.Des3EncodeECB(key, iv, data); 304 string strEncode = Convert.ToBase64String(byteEncode); 305 //加密 306 model.Msg = sm.ToString() + "-" + strEncode; 307 308 model.SendTime = System.DateTime.Now; 309 model.SmsID = smsID;// Convert.ToInt32(mobileStr.Split(',')[0].Substring(3)); srcID;// 310 model.ToMoblie = Request["mobile"]; 311 model.FromUserCNName = Request["cnName"]; 312 313 CVTE.BLL.IMSms bll = new CVTE.BLL.IMSms(); 314 bll.Add(model); 315 316 Response.Write(retunvalues[sm]); 317 Response.End(); 318 return mobileStr; 319 } 320 } 321 }

相關推薦

玄武簡訊介面移動MAS簡訊介面的API封裝

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebC

EasyUI 搭建後臺登入介面管理系統主介面

/*網頁js功能*/ $(function() { //退出功能 $("#n_title_out").click(function() { //提示

centOS6.5如何從啟動介面直接進入命令列介面如何從圖形介面進入命令列介面

centOS6.5如何從啟動介面直接進入命令列介面 編輯 /etc/inittab 將 id:5:initdefault: 修改為 id:3:initdefault: 下次重啟就不啟動X

關於Spring的Aware介面後置處理器介面(BeanPostProcessorBeanFactoryPostProcessor)的一些想法

看了關於Aware介面和後置處理器介面(BeanPostProcessor和BeanFactoryPostProcessor),感覺他們之間的功能有點亂,說一下他們之間的區別: (1)從呼叫時間點上看,Aware介面的方法(都是setXXX方法)是在Bean的屬性被設定之後

Java Comparable排序介面Comparator比較器介面

       實現Comparable介面的類支援排序,假設現在存在“實現Comparable介面的類的物件的List列表(或陣列)”,則該List列表(或陣列)可以通過 Collections.so

C#中的列舉使用泛型介面非泛型介面實現

        列舉相信大家都不陌生,今天又再看了下感覺有了新的收穫。下面記錄自己的程式碼: using System; using System.Collections; using System.Collections.Generic; using System.Li

go 學習筆記之無心插柳柳成蔭的介面無為而治的空介面

如果你還了解程式設計概念中的介面概念,那麼我建議你最好還是先閱讀上一篇文章.詳情請點選 go 學習筆記之萬萬沒想到寵物店竟然催生出面向介面程式設計? ,否則的話,請自動忽略上文,繼續探索 Go 語言的介面有什麼不同之處. 如無法自動跳轉到公眾號「雪之夢技術驛站」文章,可以點選我的頭像,動動你的小手翻翻歷史文

基於redis 阿里大魚簡訊介面實現網站狀態監控

rpoplpush source destination  redis的 RPOPLPUSH 命令可以很直觀的在多個佇列中傳遞資料。當source和destination 相同時,RPOPLPUSH命令會不斷的將隊尾的元素移到隊首,藉助這個特性我們可以實現一個網站監控系統:

如何在前端進行簡訊介面語音驗證介面的使用

今天我們來說一說如何在前端使用簡訊和語音驗證碼介面,為何要搞這個呢,因為我閒的,我膨脹了,我頭鐵 老規矩,先來說一下大體的思路,我使用的簡訊和語音驗證介面是用的阿里雲提供的,感覺還是比較好用的,我就拿語音驗證碼介面來做個示範,簡訊驗證碼介面和語音驗證碼介面使用起來是一樣的,照著語音介面的示例改一下就完了。來,

java後臺呼叫簡訊介面,實現傳送簡訊驗證碼的控制層實現

1.設計:使用者填寫手機號,點選獲取驗證碼按鈕,controller層獲得所要傳送驗證碼的手機號,隨機生成六位數的驗證碼。呼叫傳送簡訊介面url向此手機號傳送驗證碼。注意:下面的程式碼採用的是雲信使的簡訊驗證碼介面,不同的驗證碼更換不同的url格式,即可。 `

Springboot 整合 中國移動MAS HTTP1.0 實現簡訊傳送服務(二)

原因:身份驗證傳入的引數包含中文企業名,因為本地編碼格式是支援中文的;而客戶的伺服器中文卻亂碼,導致傳給中國移動MAS伺服器的是亂碼的資訊。 解決:非常簡單,將中文資訊轉為UTF-8。例如(%E5%8D%9A%E5%AE%A2%E5%9B%AD) // 身份驗證方法 public s

java調介面實現傳送手機簡訊驗證碼功能,手機驗證碼,介面呼叫

近來由於專案需要,需要用到手機簡訊驗證碼的功能,其中最主要的是用到了第三方提供的簡訊平臺介面WebService客戶端介面,下面我把我在專案中用到的記錄一下,以便給大家提供個思路,由於本人的文采有限,還請大家見諒! 一:首先上幾張案例截圖,以便大家可以瞭

Vue.js搭建移動端購物車介面-基本結構資料渲染

本文介紹瞭如何使用Vue搭建一個移動端購物車介面,最終實現的功能包括:1.        選擇要最終購買的物品2.        選擇每件物品購買的數量3.        實時更新所選擇物品的總價格HTML部分首先給出HTML部分程式碼和註釋,顯示了整個介面的結構。<b

介面測試中獲取簡訊驗證碼出錯或者失效

    在介面測試中,會有一部分需要獲取簡訊驗證碼,如:登入,充值,綁卡等等的一些操作    對於這類的介面,在做介面測試時,需要按照系統正常的操作流程,將介面按照順序呼叫執行,通過介面的呼叫,形成一個具體的業務過程,拿登入來說:    如果按照產品操作,只是資料使用者名稱,

移動開發大作業————隨手記(主介面編輯介面

功能需求 隨手記的功能 1編輯增加筆記 2.自由檢視修改儲存的筆記 3.自由填寫文字和圖片 主介面編寫 MainActivity.java package com.cong.notepad; import java.io.File; impor

Intent傳送簡訊(跳轉到傳送介面

    在main.xml中: <LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"

Android 手機獲取簡訊驗證碼—自帶UI介面

           第三方框架:簡訊驗證,我比較喜歡直來直去,多餘的話不講,直接上程式碼,這裡主要講的是在android studio中的詳細步驟。          選擇Studio下載 建立應用,包名必須與建立的專案包名一致。 建立好應用以後會給你App Ke

Jmeter+jenkins如何快速搭建介面效能測試持續整合解決方案-[基於windows篇]

  Jenkins + Jmeter 構建介面、效能測試持續整合解決方案   Jenkins + Jmeter 可以很輕鬆的進行打包釋出程式後自動進行介面冒煙測試,或者定時效能測試。以下是詳盡的Jenkins + Jmeter

Jmeter+Maven+jenkins介面效能可持續整合測試

話說無時無刻都覺得有很多東西需要學習,但是我所奉行的理念的就是每天都進步一點,不斷完善不斷提高!!!!話不多說,進入正題:其實在本文最重要的應該就是jmeter的指令碼和pom.xml檔案 一、首先當然是在Jmeter的工具裡面編寫好自己的指令碼,除錯執行成功。本文就以專案測試中的兩個

spring的一些配置重要的介面

spring的配置檔案 通常是applicationContext.xml(具體的bean配置會在後面內容中詳解) setter方法注入: <property name=“” value=“jake”>或者<property name=“”>  <value>xxx&