網(wǎng)站點(diǎn)播流程
一、對(duì)SSO基本的理解
用戶在CP網(wǎng)站點(diǎn)播某項(xiàng)信息,不管是什么信息,都是按條計(jì)費(fèi)的。只有用戶成功
登陸中央SSO平臺(tái),才能夠看到或者收到這條信息。
對(duì)于網(wǎng)站來講,這種信息主要有兩種:
一種是短信、鈴聲、彩信類,這類信息通常都是需要CP最終發(fā)送到用戶的手機(jī)上;
另外一種,是網(wǎng)站本身的收費(fèi)內(nèi)容。如果不考慮手機(jī)收費(fèi)的話,網(wǎng)站通常的做法就是
建立一個(gè)會(huì)員系統(tǒng),用戶只有成為會(huì)員并且成功登陸之后才能夠看到這部分信息。 而一個(gè)
會(huì)員是否登陸,這種狀態(tài)一般都是記錄在客戶端的Cookie當(dāng)中。
所以,針對(duì)以上兩種信息,在升級(jí)到SSO平臺(tái)的時(shí)候可以采用不同的做法。
聯(lián)豐提供的CP向SP通信的Web地址格式為:
&backurl=&DeliverURL=
相應(yīng)的參數(shù)的意思為:
mobile 用戶的手機(jī)號(hào)碼,也就是要從這個(gè)號(hào)碼中扣錢
svid 是業(yè)務(wù)代碼,這個(gè)業(yè)務(wù)代碼是移動(dòng)規(guī)定的。一個(gè)業(yè)務(wù)代碼最基本的屬性就是價(jià)格,如果是包月的可能還有限制的
條數(shù)等等。
不過在聯(lián)豐主頁上有個(gè)自寫短信,那里面的svid=yy, 感覺這個(gè)yy不應(yīng)該是移動(dòng)那邊規(guī)定的,而是聯(lián)豐在向移動(dòng)
請(qǐng)求的
時(shí)候,把這個(gè)yy在內(nèi)部又轉(zhuǎn)換成了移動(dòng)規(guī)定的那個(gè)業(yè)務(wù)代碼,這樣理解不知道對(duì)不對(duì)?
cpuid 剛開始的時(shí)候,我總是念 cpu----id,后來慢慢的改過來了,應(yīng)該是cp---uid吧。
item 這個(gè)參數(shù)很重要,也很有用。當(dāng)用戶通過SSO驗(yàn)證以后,sp會(huì)給cp一個(gè)上行信息MO,而這個(gè)信息的內(nèi)容就是item的
值。
action action=10的時(shí)候,就說明是網(wǎng)站點(diǎn)播
backurl 這個(gè)參數(shù)也比較有用,就是通過SSO驗(yàn)證以后,自動(dòng)返回backurl指定的頁面。
二、下面就是我的做法了:
1、如果用戶只要求發(fā)送某條信息到他們的手機(jī)上,通常這種信息都不會(huì)很長(zhǎng),畢竟是要發(fā)送到手機(jī)上的。那么在網(wǎng)站上可
以這樣寫:
send.jsp
<%
String
verURL=&item=web";
strUrl = strUrl + "你好我好大家好"; //這個(gè)內(nèi)容就是變化的
%>
<a href="<%=strUrl%>" target="_blank">你好我好大家好</a>
這樣當(dāng)用戶提交的時(shí)候,自動(dòng)彈出一個(gè)窗口進(jìn)行SSO登陸,如果成功以后SP就會(huì)發(fā)送一個(gè)上行信息給我們,信息的內(nèi)容就是“
web你好我好大家好”。
那么,我們就可以接收此信息,相關(guān)代碼如下:
receive.jsp
<%
String strPhone=request.getParameter("phone");
String strMessage = request.getParameter("message");
%>
這樣,我們就可以判斷message,左邊三位是否是web,如果是的話,就把后邊的信息發(fā)給那個(gè)手機(jī),同時(shí)在這個(gè)過程中也就
扣錢了。
2、如果用戶要看的是網(wǎng)站的收費(fèi)信息的話,因?yàn)樽罱K是要用戶能夠下載這個(gè)資料,大致的步驟是
用戶--->CP網(wǎng)站看到內(nèi)容,點(diǎn)擊連接----->SSO平臺(tái)驗(yàn)證------>通過之后,自動(dòng)提示用戶保存該文件
所以,與上面的步驟相比,在經(jīng)過sso之后,又返回來了,這里就需要backurl參數(shù)了。
我做了個(gè)測(cè)試,假設(shè)我們?cè)赽ackurl中指定的地址為 http://www.cqq.com/down.asp?id=200
在經(jīng)過SSO之后,SP返回來的地址是這樣的
也就是說在我們的backurl地址后面還跟了一些返回參數(shù),這里有個(gè)result,這個(gè)參數(shù)的意思是登陸狀態(tài)吧,
0表示登陸成功了,如果為其他數(shù)值則表示發(fā)生了錯(cuò)誤,比如result=1 或者 2 ,具體發(fā)生了什么錯(cuò)誤
我們并不知道,不過也沒有必要關(guān)心。
所以,在我們的down.asp程序中,就可以通過result的值作為是否成功登陸的標(biāo)志,程序大致如下:
<%
If request("result")="0" Then
‘表示通過,找到相應(yīng)的文件,提示用戶下載
Response.Redirect request("id") & ".zip"
Else
Response.write "對(duì)不起,您沒有通過驗(yàn)證"
End If
%>
但是不要忘記了,這時(shí)候SP仍然會(huì)給我們發(fā)過來一個(gè)MO信息,我們接到這個(gè)上行信息之后,必須還要給用戶
發(fā)送一個(gè)下行信息,這樣才能夠真正的從用戶手機(jī)當(dāng)中扣錢了。
三、 存在的問題
1、SSO登陸是依賴于客戶端Cookie的,所以如果客戶端禁止了Cookie的話,就無法正常工作;
2、如果客戶端瀏覽器安裝了一些瀏覽器插件,比如google toolbar,3721上網(wǎng)助手之類的,就導(dǎo)致
在SSO上成功登陸以后,瀏覽器沒有自動(dòng)關(guān)閉,那就更別提返回到backurl那個(gè)頁面了。
3、在SSO驗(yàn)證通過,彈出的窗口中,夢(mèng)網(wǎng)會(huì)嵌套一個(gè)廣告,可能導(dǎo)致這個(gè)頁面下載的時(shí)間比較長(zhǎng),
IE下邊狀態(tài)欄里還在提示正在下載。 此時(shí)頁面上已經(jīng)出現(xiàn)了,關(guān)閉按鈕,可是如果沒有等這個(gè)
頁面完全下載完的話,你就點(diǎn)擊這個(gè)關(guān)閉按鈕的話,父窗口并沒有返回backurl地址,而是什么
都沒有變化。 我試過好多次都是這樣,不知道是不是bug。
4、一個(gè)安全問題,我還不是很清楚該怎么做。
就是,我在上面說過,如果我網(wǎng)站中的資料是收費(fèi)的,用戶只有通過SSO登陸以后,才能夠
下載我的資料。上面的例子就是這么做的,可是在理論上存在一個(gè)很大的漏洞,那就是
我的網(wǎng)站根本沒有辦法共享用戶在夢(mèng)網(wǎng)的登陸狀態(tài)。我只能通過SSO返回的值進(jìn)行判斷,
不管是backurl的值還是Item的值,都是可以被用戶捕獲的。
我們?cè)倏纯瓷厦娴睦?,我的down.asp頁面大致如下:
down.asp
<%
If request("result")="0" Then
‘表示通過,找到相應(yīng)的文件,提示用戶下載
Response.Redirect request("id") & ".zip"
Else
Response.write "對(duì)不起,您沒有通過驗(yàn)證"
End If
%>
在這種情況下,用戶完全可以通過直接在down.asp后面加參數(shù)來訪問,也就是down.asp?result=0
所以,還是要依賴于sp發(fā)回來的上行信息,也就是我們定義的Item,
可是我們的接收程序如何與down.asp程序通信,也是很麻煩的一件事情
我想到的辦法,就是加一個(gè)中間數(shù)據(jù),不管是保存在文本文件中,還是保存在數(shù)據(jù)庫中都是一樣的
當(dāng)我們接收到SP上行之后,就給這個(gè)用戶復(fù)制一個(gè)標(biāo)志數(shù)據(jù)過去,然后在
down.asp中,判斷是否存在這個(gè)標(biāo)志數(shù)據(jù),如果存在的話就下載,不存在的話就說明
沒有通過,下載完之后,down.asp程序再將那個(gè)標(biāo)志數(shù)據(jù)刪掉。
不過這里又出現(xiàn)一個(gè)問題,就是瀏覽器返回backurl地址和我們接收到SP的上行信息,哪個(gè)快?
如果,我們接收程序還沒有來得及寫標(biāo)志數(shù)據(jù),前邊瀏覽器已經(jīng)返回backurl了,那怎么辦?
這種辦法可能也會(huì)出現(xiàn)其他的同步問題,沒有細(xì)想。
聯(lián)系客服