在使用Oracle過各中經常會遇到密碼丟失的時候,本文用兩種試來解決這個問題。
一種方法:
|
如果sqlplus "/ as sysdba"不能進入,讓輸入密碼,我輸入原始密碼和修改的密碼后都不行的話,修改unix環境下:
1. $ORACLE_HOME\network\admin\SQLNET.ORA中為:
SQLNET.AUTHENTICATION_SERVICES=(NTS)
重起數據庫/監聽服務,就可以用操作系統認證sqlplus "/ as sysdba"了,來進入你的數據庫,從而輕而易舉的搞定你的數據庫了。
2.
|
第二種方法:
詳細步驟如下:
一:查詢視圖V$PWFILE_USERS:select * from V$PWFILE_USERS;記錄下擁有 SYSOPER/SYSDBA系統權限的用戶信息。
二:關閉數據庫 shutdown immediate。
三:刪除密碼文件,文件路徑一般為:ORACLE_HOME\DATABASE,文件名為PWD.ORA。
四:創建密碼文件:
ORAPWD FILE=< FILENAME > PASSWORD =< PASSWORD >
五:向密碼文件中增加用戶:
CONNECT SYS/internal_user_passsword AS SYSDBA;
啟動數據庫實例并打開數據庫; 創建相應用戶帳號,對其授權授予 權限:GRANT SYSDBA TO user_name(如果先前數據庫只有sys具有sysdba權限,可不做這步)。
六:修改密碼文件狀態,默認密碼文件的狀態shared,要將初始化參數里的REMOTE_LOGIN_PASSWORDFILE 設置成EXCLUSIVE。(T006)
window.open()方法中,窗口控制參數的詳細定義:
alwaysLowered innerWidth screenY
alwaysRaised left scrollbars
channelmode location status
dependent menubar titlebar
directories outerWidth toolbar
fullscreen outerHeight top
height menubar width
hotkeys resizable z-lock
innerHeight screenX
alwaysLowered
Internet Explorer:不支持
Navigator:版本 4+
指定窗口總是保留在堆棧的最下面。換言之,不管新窗口是否激活,總是其他窗口下。
window.open("alwayslowered.html", "_blank", "alwaysLowered");
alwaysRaised
Internet Explorer:不支持
Navigator:版本 4+
指定窗口總是保留在堆棧的最上面。換言之,不管新窗口是否激活,總是其他窗口上。
window.open("alwaysraised.html", "_blank", "alwaysRaised");
channelmode
Internet Explorer:版本 4+
Navigator:不支持
指定是否按照劇場模式顯示窗口,以及是否顯示頻道區。
window.open("channelmode.html", "_blank", "channelmode");
dependent
Internet Explorer:不支持
Navigator:版本 4+
定義是否窗口成為當前打開窗口的依賴子窗口。依賴窗口就是當它的父窗口關閉時,它也隨即關閉。在windows平臺上,一個依賴窗口不會在任務欄上顯示。
window.open("dependent.html", "_blank", "dependent");
directories
Internet Explorer:所有版本
Navigator:所有版本
指定是否顯示目錄按鈕(比如眾所周知的"What's Cool" and "What's New" 按鈕)。Internet Explorer將這些目錄按鈕引用為鏈接工具欄,Navigator(版本4和以上)稱之為個人工具欄。
window.open("directories.html", "_blank", "directories");
fullscreen
Internet Explorer:版本 4+
Navigator:不支持
定義是否按照全屏方式打開瀏覽器。請小心使用全屏模式,因為在這種模式下,瀏覽器的標題欄和菜單都被隱藏,所有你應該提供一個按鈕或者其他可視的線索來幫助用戶關閉這個窗口。當然,使用熱鍵ALT+F4也能關閉窗口。
window.open("fullscreen.html", "_blank", "fullscreen");
height
Internet Explorer:所有版本
Navigator:所有版本
以象素pixel為單位定義窗口文檔顯示區域的高度,最小數值是100。如果僅僅定義高度,Internet Explorer使用給定的高度和默認的寬度。對于Navigator,如果不同時指定width或者innerWidth,那么就將忽略這個屬性。
window.open("height.html", "_blank", "height=200,width=300");
hotkeys
Internet Explorer:不支持
Navigator:版本 4+
如果沒有定義(或者為0),那么就屏蔽了沒有菜單條的新窗口的大部分熱鍵。但是安全以及退出熱鍵仍然保留。
window.open("hotkeys.html", "_blank", "hotkeys=0,menubar=0");
innerHeight
Internet Explorer:不支持
Navigator:版本 4+
以象素pixel為單位定義窗口文檔顯示區域的高度,最小數值是100。在Navigator版本4中,這個特征替換height,為得是保持向后兼容。對于Navigator,如果不同時指定width或者innerWidth,那么就將忽略這個屬性。
window.open("innerheight.html", "_blank", "innerHeight=200,innerWidth=300");
innerWidth
Internet Explorer:不支持
Navigator:版本 4+
以象素pixel為單位定義窗口文檔顯示區域的寬度,最小數值是100。在Navigator版本4中,這個特征替換width,為得是保持向后兼容。對于Navigator,如果不同時指定height或者innerHeight,那么就將忽略這個屬性。
window.open("innerwidth.html", "_blank", "innerHeight=200,innerWidth=300");
left
Internet Explorer:版本 4+
Navigator:不支持
以象素為單位定義窗口的X左標。
window.open("left.html", "_blank", "left=20");
location
Internet Explorer:所有版本
Navigator:所有版本
定義是否顯示瀏覽器中供地址URL輸入的文本域。
window.open("location.html", "_blank", "location");
menubar
Internet Explorer:所有版本
Navigator:所有版本
定義是否顯示菜單條(菜單條位于窗口頂部,包括“文件”和“編輯”等)。
window.open("menubar.html", "_blank", "menubar");
outerHeight
Internet Explorer:不支持
Navigator:版本 4+
以象素為單位定義窗口(它的外部邊界)的總高度,最小數值比100多一些,因為窗口內容區域的高度必須至少是100。如果沒有同時定義outerWidth,Navigator將忽視這個特征。
window.open("outerheight.html", "_blank", "outerHeight=200,outerWidth=300");
outerWidth
Internet Explorer:不支持
Navigator:版本 4+
以象素為單位定義窗口(它的外部邊界)的總寬度,最小數值比100多一些,因為窗口內容區域的寬度必須至少是100。如果沒有同時定義outerHeight,Navigator將忽視這個特征。
window.open("outerwidth.html", "_blank", "outerHeight=200,outerWidth=300");
resizable
Internet Explorer:所有版本
Navigator:所有版本
定義是否窗口可以通過它的邊界進行大小縮放控制。依賴于平臺不同,用戶也許還有其他改變窗口大小的方法。
window.open("resizable.html", "_blank", "resizable");
screenX
Internet Explorer:不支持
Navigator:版本 4+
以象素為單位定義窗口的X坐標。
window.open("screenx.html", "_blank", "screenX=20");
screenY
Internet Explorer:不支持
Navigator:版本 4+
以象素為單位定義窗口的Y坐標。
window.open("screeny.html", "_blank", "screenY=20");
scrollbars
Internet Explorer:所有版本
Navigator:所有版本
定義是否激活水平和垂直滾動條。
window.open("scrollbars.html", "_blank", "scrollbars");
status
Internet Explorer:所有版本
Navigator:所有版本
定義是否在窗口的下部添加狀態欄。
window.open("status.html", "_blank", "status");
titlebar
Internet Explorer:Version 5+
Navigator:版本 4+
定義是否顯示窗口的標題欄。在Internet Explorer中,除非調用者是一個HTML應用程序或者一個可信任的對話框,那么這個特征是被屏蔽的。
window.open("titlebar.html", "_blank", "titlebar=0");
toolbar
Internet Explorer:所有版本
Navigator:所有版本
定義是否顯示瀏覽器的工具欄(位于窗口的上部,包括“后退”和“向前”)。
window.open("toolbar.html", "_blank", "toolbar");
top
Internet Explorer:版本 4+
Navigator:不支持
以象素為單位定義窗口的縱坐標。
window.open("top.html", "_blank", "top=20");
width
Internet Explorer:所有版本
Navigator:所有版本
以象素pixel為單位定義窗口文檔顯示區域的寬度,最小數值是100。如果僅僅定義寬度,Internet Explorer使用給定的寬度和默認的高度。對于Navigator,如果不同時指定height或者innerHeight,那么就將忽略這個屬性。
window.open("width.html", "_blank", "height=200,width=300");
z-lock
Internet Explorer:不支持
Navigator:版本 4+
定義窗口激活時不在堆棧中浮起,就是說,新窗口當被激活時并不能位于其他窗口之上。
window.open("zlock.html", "_blank", "z-lock");
WordPress 中文文檔
遠程桌面將本地資源復制到遠程
From WordPress Chinese
服務器之遠程桌面的應用專題 | 遠程桌面入門 | 遠程控制的實現 | 遠程管理 | 遠程桌面的一些操作 |
Telnet遠程連接方式 | 用MMC實現遠程管理 | 遠程桌面實用技巧 | 遠程桌面的安全 | ★→遠程桌面的所有文章 |
在遠程桌面連接成功后就可以進行一些遠程桌面連接可以進行的計算機管理了。具體可以進行的遠程桌面連接操作如下:
目錄[隱藏] |
使用終端服務快捷鍵
如果沒在如圖所示對話框“鍵盤”下拉列表中選擇將Windows 鍵組合應用到遠程桌面計算機上,則還可使用終端服務快捷鍵執行許多相同的功能。
重定向打印
打印機重定向將打印作業從終端服務器或“遠程桌面”計算機路由到本地計算機(也稱為“客戶端計算機”)連接的打印機。有兩種方法可提供對本地打印機的訪問:自動和手動打印機重定向。當在遠程計算機上運行的Windows 版本中沒有本地打印機所需要的驅動程序時,使用手動重定向。在初次進行手動重定向之后,打印機將在以后的登錄過程中自動重定向。
→更多相關內容請參見打印機共享
將本地計算機中的文件復制并粘貼到遠程計算機
如果在如圖所示對話框中選擇了“本地設備”欄下的“磁盤驅動器”復選項,則可以直接在遠程桌面窗口中將本地文件粘貼到遠程計算機上。方法如下:
- 第1步,單擊遠程計算機任務欄上的“開始”按鈕,然后單擊“我的電腦”,或者雙擊遠程計算機桌面上的“我的電腦”圖標。打開如圖11所示遠程桌面我的電腦窗口。
- 在以上“我的電腦”(或資源管理器)窗口會顯示本地磁盤,顯示的方式就是<computername> 上的 <driveletter>。computername是指“遠程桌面連接”分配給本地計算機的計算機名。
- 第2步,在本地計算機找到希望傳送到遠程計算機的文件,然后單擊右鍵,然后選擇“復制”選項。
- 第3步,在同一“我的電腦”或資源管理器窗口中,找到要粘帖本地文件的文件夾位置。單擊右鍵,選擇“粘貼”即可把從本地計算機上復制的文件復制到遠程計算機上了。
- 如果要將遠程計算機的文件復制到本地計算機上,方法一樣,只是復制和粘貼的對象不同而已。其實方法與本地計算機上的復制和粘貼一樣,不再贅述。
- 至于其它操作,如在遠程計算機上運行計算機程序,方法與在本地計算機上操作完全樣,也不再贅述。
→更多相關內容請參見遠程桌面連接
結束會話和斷開連接
如果要結束當前會話,斷開遠程桌面連接,可以直接單擊遠程桌面窗口右外角的“X”按鈕,也可在遠程桌面中執行〖開始〗→〖斷開〗菜單操作,如圖12所示。此時會彈出一個確認對話框,確認斷開即可。如果僅是想注意當前遠程登錄用戶,則單擊“注銷”按鈕,重新輸入新的登錄賬戶。不過要注意,新賬戶也一定要有遠程桌面連接權限。
這個問題的根源是jvm虛擬機的默認Heap大小是64M,可以通過設置其最大和最小值來實現.設置的方法主要是幾個.
1.可以在windows 更改系統環境變量
加上JAVA_OPTS=-Xms64m -Xmx512m
2,如果用的tomcat,在windows下,可以在
C:\tomcat5.5.9\bin\catalina.bat 中加上:
set JAVA_OPTS=-Xms64m -Xmx256m
位置在: rem Guess CATALINA_HOME if not defined 這行的下面加合適.
3.如果是linux系統
Linux 在{tomcat_home}/bin/catalina.sh的前面,加
set JAVA_OPTS='-Xms64 -Xmx512'
使用Java程序從數據庫中查詢大量的數據時出現異常:java.lang.OutOfMemoryError: Java heap space 在JVM中如果98%的時間是用于GC且可用的 Heap size 不足2%的時候將拋出此異常信息。 JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置.JVM在啟動的時候會自動設置Heap size的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4??梢岳肑VM提供的-Xmn -Xms -Xmx等選項可進行設置。例如:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar如果Heap Size設置偏小,除了這些異常信息外,還會發現程序的響應速度變慢了。GC占用了更多的時間,而應用分配到的執行時間較少。Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。Heap size的 -Xms -Xmn 設置不要超出物理內存的大小。否則會提示“Error occurred during
在某些時候需要通過日期中的年,月,日等來統計數據,通常我們會將日期取出,再在程序中獲取當前日期。進行比較,這樣會加大開銷。
現在可以通過to_date來截取日期中的年,月,日的來獲取數據。
如: to_char(to_date(b_time,'yyyy-mm-dd'),'yyyy')=to_char(to_date(?,'yyyy-mm-dd hh24:mi:ss'),'yyyy')
這樣獲取的就是年的字符串,就可得到指定年的數據。
月:to_char(to_date(b_time,'yyyy-mm-dd'),'mm')=to_char(to_date(?,'yyyy-mm-dd hh24:mi:ss'),'mm')
日:to_char(to_date(b_time,'yyyy-mm-dd'),'dd')=to_char(to_date(?,'yyyy-mm-dd hh24:mi:ss'),'dd')
1.驗證用戶名和密碼:("^[a-zA-Z]\w{5,15}$")正確格式:"[A-Z][a-z]_[0-9]"組成,并且第一個字必須為字母6~16位;
2.驗證電話號碼:("^(\d{3.4}-)\d{7,8}$")正確格式:xxx/xxxx-xxxxxxx/xxxxxxxx;
3.驗證身份證號(15位或18位數字):("^\d{15}|\d{18}$");
4.驗證Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
5.只能輸入由數字和26個英文字母組成的字符串:("^[A-Za-z0-9]+$") ;
6.整數或者小數:^[0-9]+\.{0,1}[0-9]{0,2}$
7.只能輸入數字:"^[0-9]*$"。
8.只能輸入n位的數字:"^\d{n}$"。
9.只能輸入至少n位的數字:"^\d{n,}$"。
10.只能輸入m~n位的數字:。"^\d{m,n}$"
11.只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。
12.只能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。
13.只能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。
14.只能輸入非零的正整數:"^\+?[1-9][0-9]*$"。
15.只能輸入非零的負整數:"^\-[1-9][]0-9"*$。
16.只能輸入長度為3的字符:"^.{3}$"。
17.只能輸入由26個英文字母組成的字符串:"^[A-Za-z]+$"。
18.只能輸入由26個大寫英文字母組成的字符串:"^[A-Z]+$"。
19.只能輸入由26個小寫英文字母組成的字符串:"^[a-z]+$"。
20.驗證是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
21.只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"
22.驗證URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
23.驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。
24.驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。
從上面我們可以看到:"^"表示后面緊跟著的字符為開頭;與之相對應的式"$"以緊跟前面的字符為結尾.但是要注意的式當"^"位于"[]"里時,表示"非"的意思,例如:[^AZ]表示不能為"AZ"中的任一個字符."[]"表示當中的一個字符."{}"可以取得一個范圍,例如"{9}"表示9個,而"{1,9}"表示1到9個字符.
下面我們看看正則表達式在Asp.Net數據驗證中的應用,第一個當然式在服務器驗證控件中的應用了,很簡單看下面的代碼:
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="UserName" ValidationExpression="^[a-zA-Z]\w{3,15}$" runat="server" ErrorMessage="用戶名格式不正確" ToolTip="用戶名格式不正確!">*</asp:RegularExpressionValidator>
轉自 http://hi.baidu.com/liuliangzhou/blog/item/1a856e243f31f9308644f958.html
js 驗證表單 js提交驗證類
<script language="javascript">
function checkform(obj)
{
for(i=0;i<obj.oo.length;i++)
if(obj.oo[i].checked==true) return true;
alert("請選擇")
return false;
}
</script>
<form id="form1" name="form1" method="post" action="" onsubmit="return checkform(this)">
<input type="radio" name="oo" value="radiobutton" />
<input type="radio" name="oo" value="radiobutton" />
<input type="submit" name="Submit" value="提交" />
</form>
1. 長度限制
<script>
function test()
{
if(document.a.b.value.length>50)
{
alert("不能超過50個字符!");
document.a.b.focus();
return false;
}
}
</script>
<form name=a onsubmit="return test()">
<textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
<input type="submit" name="Submit" value="check">
</form>
2. 只能是漢字
<input onkeyup="value="/oblog/value.replace(/[^\u4E00-\u9FA5]/g,'')">
3." 只能是英文
<script language=javascript>
function onlyEng()
{
if(!(event.keyCode>=65&&event.keyCode<=90))
event.returnvalue=false;
}
</script>
<input onkeydown="onlyEng();">
4. 只能是數字
<script language=javascript>
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
//考慮小鍵盤上的數字鍵
event.returnvalue=false;
}
</script>
<input onkeydown="onlyNum();">
5. 只能是英文字符和數字
<input onkeyup="value="/oblog/value.replace(/[\W]/g,"'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">
6. 驗證油箱格式
<SCRIPT LANGUAGE=javascript RUNAT=Server>
function isEmail(strEmail) {
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("oh");
}
</SCRIPT>
<input type=text onblur=isEmail(this.value)>
7. 屏蔽關鍵字(這里屏蔽***和****)
<script language="javascript1.2">
function test() {
if((a.b.value.indexOf ("***") == 0)||(a.b.value.indexOf ("****") == 0)){
alert("");
a.b.focus();
return false;}
}
</script>
<form name=a onsubmit="return test()">
<input type=text name=b>
<input type="submit" name="Submit" value="check">
</form>
8. 兩次輸入密碼是否相同
<FORM METHOD=POST ACTION="">
<input type="password" id="input1">
<input type="password" id="input2">
<input type="button" value="test" onclick="check()">
</FORM>
<script>
function check()
{
with(document.all){
if(input1.value!=input2.value)
{
alert("false")
input1.value = "";
input2.value = "";
}
else document.forms[0].submit();
}
}
</script>
夠了吧
屏蔽右鍵 很酷
oncontextmenu="return false" ondragstart="return false" onselectstart="return false"
加在body中
二
2.1 表單項不能為空
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.name.value.length == 0) {
alert("請輸入您姓名!");
document.form.name.focus();
return false;
}
return true;
}
-->
</script>
2.2 比較兩個表單項的值是否相同
<script language="javascript">
<!--
function CheckForm()
if (document.form.PWD.value != document.form.PWD_Again.value) {
alert("您兩次輸入的密碼不一樣!請重新輸入.");
document.ADDUser.PWD.focus();
return false;
}
return true;
}
-->
</script>
2.3 表單項只能為數字和"_",用于電話/銀行帳號驗證上,可擴展到域名注冊等
<script language="javascript">
<!--
function isNumber(String)
{
var Letters = "1234567890-"; //可以自己增加可輸入值
var i;
var c;
if(String.charAt( 0 )=='-')
return false;
if( String.charAt( String.length - 1 ) == '-' )
return false;
for( i = 0; i < String.length; i ++ )
{
c = String.charAt( i );
if (Letters.indexOf( c ) < 0)
return false;
}
return true;
}
function CheckForm()
{
if(! isNumber(document.form.TEL.value)) {
alert("您的電話號碼不合法!");
document.form.TEL.focus();
return false;
}
return true;
}
-->
</script>
2.4 表單項輸入數值/長度限定
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.count.value > 100 || document.form.count.value < 1)
{
alert("輸入數值不能小于零大于100!");
document.form.count.focus();
return false;
}
if (document.form.MESSAGE.value.length<10)
{
alert("輸入文字小于10!");
document.form.MESSAGE.focus();
return false;
}
return true;
}
//-->
</script>
2.5 中文/英文/數字/郵件地址合法性判斷
<SCRIPT LANGUAGE="javascript">
<!--
function isEnglish(name) //英文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return false;
}
return true;
}
function isChinese(name) //中文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return true;
}
return false;
}
function isMail(name) // E-mail值檢測
{
if(! isEnglish(name))
return false;
i = name.indexOf(" at ");
j = name dot lastIndexOf(" at ");
if(i == -1)
return false;
if(i != j)
return false;
if(i == name dot length)
return false;
return true;
}
function isNumber(name) //數值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charAt(i) < "0" || name.charAt(i) > "9")
return false;
}
return true;
}
function CheckForm()
{
if(! isMail(form.Email.value)) {
alert("您的電子郵件不合法!");
form.Email.focus();
return false;
}
if(! isEnglish(form.name.value)) {
alert("英文名不合法!");
form.name.focus();
return false;
}
if(! isChinese(form.cnname.value)) {
alert("中文名不合法!");
form.cnname.focus();
return false;
}
if(! isNumber(form.PublicZipCode.value)) {
alert("郵政編碼不合法!");
form.PublicZipCode.focus();
return false;
}
return true;
}
//-->
</SCRIPT>
2.6 限定表單項不能輸入的字符
<script language="javascript">
<!--
function contain(str,charset)// 字符串包含測試函數
{
var i;
for(i=0;i<charset.length;i++)
if(str.indexOf(charset.charAt(i))>=0)
return true;
return false;
}
function CheckForm()
{
if ((contain(document.form.NAME.value, "%\(\)><")) || (contain(document.form.MESSAGE.value, "%\(\)><")))
{
alert("輸入了非法字符");
document.form.NAME.focus();
return false;
}
return true;
}
//-->
</script>
轉自 http://www.cnblogs.com/zwl12549/archive/2008/01/07/1028701.html
這里只說一下對sp提供的移動通道的接口調用的方法。希望能給一些沒有涉及這些內容的朋友提供一些幫助。
首先說一下用戶上行,上行就是指手機用戶編輯短信到指定的號碼的過程,我們在web開發中針對用戶上行內容的處理流程是這樣:
手機用戶編輯短信到指定的號碼--------------》(傳輸到移動網關)------->移動網關在收到這條信息,并處理完后把處理結果返回到合作方(一般這里是sp)的網關------->sp的網關收到這條上行處理后再把結果傳輸到我們最下層的合作方-------》到這里我們就可以寫出我們的處理接口實現對應的數據處理或者短信下發。
其次是實現下行,下行就是我們通過移動網關向指定的移動用戶發送用戶選擇的內容,比如圖片鈴聲等。其流程是這樣:
web開發員------》調用sp的移動下發接口,(一般是進行事前的數據處理,然后再配置下發的參數)-----》調用sp的接口后,sp的接口會進行響應的數據記錄,然后把內容提交到移動的網關------》移動網關再把內容下發給用戶----》下發操作執行后,移動網關將相應的狀態報告再回發給sp的接口------》sp的接口再通知我們的響應處理接口。
流程基本上是以上的內容。在實際操作的過程中還會出現掉包的情況,畢竟數據通過幾個中轉,大數據量并發的狀態下肯定會掉包,所以也有個掉包率的概念。另外web開發者需要與sp的技術中心進行一些協調,比如我們需要從sp那邊獲取sp為我們分配的業務編號,以及指令和地址碼這類信息,以及我們還需要提供給sp一些我們的響應接口(響應接口的開發需按照的sp的開發手冊來進行開發,每家的sp在這里會有一些不同),比如用戶上行后,sp的網關收到這個報告后,就需要綁定一個我們的響應接口,來對上行內容進行一些操作。
注意:
移動增值類的業務主要分為三個,點播,按條定制,包月定制。
點播:就是用戶上行一條信息,扣一次錢。另外針對點播業務,用戶上行后會產生一個隨機的linkid,當我們給用戶下發的時候必須以這個linkid來為這個手機號下發內容,負責用戶上性的這條信息就不會扣錢,也就是說只有我們通過這個產生的linkid,并為用戶下發了內容以后,移動才能夠收取手機用戶的錢。
按條定制:當用戶訂制了這個業務時,系統將會每天自動會用戶下發幾條內容,每下發成功就會扣一條信息的錢。現在有很多手機交費的網站就會采用這個業務,當用戶發送了訂制指令后,sp的通道就會為用戶下發指定條數的信息,以此來收取費用,下發30條,就收你30塊。
包月定制:這個大家都比較熟悉了,這里就不介紹了。
下面為大家簡單介紹一個類似的通道調用(具體的sp接口每家都有些不同,但基本是大同小異)
下發接口(以短信下發接口為例):
http://www.xxxx.com/sms/sendsms.asp?serviceid==xxx&to==xxx&from=xxx&linkid=xxx&msg=xxx
參數注釋:
serviceid為業務id 由sp提供
to :接受方手機
from:發送方號碼,由sp提供 比如 1861
linkid: 用戶上行后產生的linkid,可以從用戶上行的短信中,或者從sso接口獲得。(linkid是有有效期的,超過有效期將會失效)
msg:為我們下發的手機內容。
如果我們要下發的圖片鈴聲等資源,一般這類接口還會提供一個pushurl
pushurl: 用來告訴移動網關我們要給手機用戶下載的資源地址。
其它的接口就不一一舉例了。關鍵是掌握這些流程,和原理。
轉自 http://blog.csdn.net/rehearts/archive/2006/09/01/1155362.aspx