网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網(wǎng)

ASP獲取微信小程序的用戶(hù)ID(OpenID)——服務(wù)器端

發(fā)布時(shí)間:2018-01-24 10:45 所屬欄目:小程序開(kāi)發(fā)教程

背景 嘗試一下新鮮事物“微信小程序”,其中有一個(gè)業(yè)務(wù)場(chǎng)景,通過(guò)微信登陸小程序,這樣需要獲取小程序的用戶(hù)ID(也就是openid)。微信小程序從安全角度考慮,不提供直接在微信服務(wù)器獲取openid的方法,那么需要借助 ...

 
 
 

背景

嘗試一下新鮮事物“微信小程序”,其中有一個(gè)業(yè)務(wù)場(chǎng)景,通過(guò)微信登陸小程序,這樣需要獲取小程序的用戶(hù)ID(也就是openid)。微信小程序從安全角度考慮,不提供直接在微信服務(wù)器獲取openid的方法,那么需要借助自己的業(yè)務(wù)服務(wù)器去進(jìn)行獲取。于是需要寫(xiě)一個(gè)服務(wù)端的程序,接受用戶(hù)從微信小程序提交過(guò)來(lái)的請(qǐng)求,然后再向微信服務(wù)器發(fā)起請(qǐng)求,得到這個(gè)用戶(hù)的openid信息。
同樣,處于安全考慮,微信不建議把這個(gè)openid返回給微信小程序。當(dāng)然這是后話,在此只探討獲取到oepnid這個(gè)環(huán)節(jié)。
服務(wù)端用比較比較古樸的技術(shù)ASP(或者叫經(jīng)典ASP吧。)

官方文檔

微信小程序的官方文檔在這里:(https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject)

截取其中關(guān)鍵的時(shí)序圖吧。

微信小程序登陸時(shí)序圖

我的學(xué)習(xí)

我學(xué)習(xí)理解下,應(yīng)該有這么幾個(gè)環(huán)節(jié):
1、在小程序中用wx.login()獲取到登陸憑證code。
2、通過(guò)小程序的wx.request()將這個(gè)code發(fā)送至咱們自己的服務(wù)程序(本文的ASP程序)。
3、服務(wù)器ASP程序?qū)ode連同appid和appsecret一起發(fā)送至微信的服務(wù)器。
4、接收微信返回的信息,包括openid和session_key,這兩個(gè)都不傳送到小程序客戶(hù)端。
5、既然不傳回去,就用一個(gè)我們自己定義的session來(lái)記錄登陸情況,然后返回去。
6、返回到小程序的我們自己的定義session用storage存儲(chǔ)在客戶(hù)端(手機(jī))上。
7、再次登陸時(shí)候,只讀取storage和我們自己的服務(wù)器發(fā)起通訊即可。
本文我們只探討1-4步。

開(kāi)始動(dòng)手

1、微信小程序獲取登陸憑證code。

這個(gè)比較簡(jiǎn)單,在app.js里增加下面代碼;

    wx.login({
      success: res => {
        // 發(fā)送 res.code 到后臺(tái)換取 openId, sessionKey, unionId
        var code = res.code;
        if (code) {
          console.log('獲取用戶(hù)登錄憑證:' + code);
        } else {
          console.log('獲取用戶(hù)登錄態(tài)失敗:' + res.errMsg);
        };
      }
    })

通過(guò) console.log 把code打印出來(lái)了。

2、微信小程序wx.request()將code提交到服務(wù)器

這一步暫時(shí)沒(méi)寫(xiě),也比較簡(jiǎn)單,略過(guò)。下次我更新的時(shí)候再補(bǔ)齊。

3、服務(wù)器ASP程序?qū)ode連同appid和appsecret一起發(fā)送至微信的服務(wù)器

微信服務(wù)器接口地址如下:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&jscode=JSCODE&granttype=authorization_code

ASP代碼如下:

<%
'''''''''''''''''''''''''''''''''''''''''
'     api_login.asp
'     與微信服務(wù)器發(fā)生通訊
'''''''''''''''''''''''''''''''''''''''''
'常量配置
'微信API地址
WX_LOGIN_API = "https://api.weixin.qq.com/sns/jscode2session"
'AppID(小程序ID)
WX_APIID = "___你的APPID___"
'AppSecret(小程序密鑰)
WX_APPSECRET = "___你的AppSecret___"
'grant_type
WX_GRANT_TYPE = "authorization_code"
'JSCODE,接收小程序通過(guò)wx.request()傳過(guò)來(lái)的code
JSCODE = Request("code")
If JSCODE = "" Then 
    Response.Write "非法請(qǐng)求。"
    Response.End 
End If
'組裝完整的LOGIN_API
WX_LOGIN_API = WX_LOGIN_API & "?appid=" & WX_APIID 
WX_LOGIN_API = WX_LOGIN_API & "&secret=" & WX_APPSECRET 
WX_LOGIN_API = WX_LOGIN_API & "&js_code=" & JSCODE
WX_LOGIN_API = WX_LOGIN_API & "&grant_type=" & WX_GRANT_TYPE
'獲取返回的信息
strGetBackInfo=getHTTPPage(WX_LOGIN_API) 
Response.Write strGetBackInfo
''''下面是ASP遠(yuǎn)程調(diào)用接口的函數(shù)
'''''''''''
' 遠(yuǎn)程獲取接口的函數(shù)群
'
'''''''''''
Server.ScriptTimeOut=9999999 
Function getHTTPPage(Path) 
    'on error resume next
    t = GetBody(Path) 
    getHTTPPage=BytesToBstr(t,"GB2312") 
End function 
Function Newstring(wstr,strng) 
    Newstring=Instr(lcase(wstr),lcase(strng)) 
    if Newstring<=0 then Newstring=Len(wstr) 
End Function 
Function BytesToBstr(body,Cset) 
    dim objstream 
    set objstream = Server.CreateObject("adodb.stream") 
    objstream.Type = 1 
    objstream.Mode =3 
    objstream.Open 
    objstream.Write body 
    objstream.Position = 0 
    objstream.Type = 2 
    objstream.Charset = Cset 
    BytesToBstr = objstream.ReadText 
    objstream.Close 
    set objstream = nothing 
End Function 
Function GetBody(url) 
    on error resume next 
    Set Retrieval = CreateObject("Microsoft.XMLHTTP") 
    With Retrieval 
    .Open "Get", url, False, "", "" 
    .Send 
    GetBody = .ResponseBody 
    End With 
    Set Retrieval = Nothing 
End Function 

運(yùn)行,在URL中加上code信息,將獲取的json格式的openid和session_key打印出來(lái),至此獲取了這部分信息。
但這些信息是字符串格式的,需要繼續(xù)將其轉(zhuǎn)換成json對(duì)象讀取才能夠結(jié)構(gòu)化。

4、讀取json格式的openid和session_key

于是下述代碼就很重要了,主要包括讀取json格式的。

'''''''''''''''''
'
' ASP讀取Json的函數(shù)群
'
'''''''''''''''''
Dim sc4Json 
Sub InitScriptControl
Set sc4Json = Server.CreateObject("MSScriptControl.ScriptControl")
    sc4Json.Language = "JavaScript"
    sc4Json.AddCode "var itemTemp=null;function getJSArray(arr, index){itemTemp=arr[index];}"
End Sub 
Function getJSONObject(strJSON)
    sc4Json.AddCode "var jsonObject = " & strJSON
    Set getJSONObject = sc4Json.CodeObject.jsonObject
End Function 
Sub getJSArrayItem(objDest,objJSArray,index)
    On Error Resume Next
    sc4Json.Run "getJSArray",objJSArray, index
    Set objDest = sc4Json.CodeObject.itemTemp
    If Err.number=0 Then Exit Sub
    objDest = sc4Json.CodeObject.itemTemp
End Sub
Dim objTest
Call InitScriptControl
Set objTest = getJSONObject(strGetBackInfo)
%>
session_key:<%=objTest.session_key%><br />
openid:<%=objTest.openid%><br />

至此,已經(jīng)將獲取openid并且結(jié)構(gòu)化完畢。

上述ASP操作Json的函數(shù)的用法,有位師兄寫(xiě)了例子供開(kāi)拓思路,我就不做修改,直接貼上來(lái)了。

Dim strTest
strTest = "{name:""alonely"", age:24, email:[""ycplxl1314@163.com"",""ycplxl1314@gmail.com""], family:{parents:[""父親"",""母親""],toString:function(){return ""家庭成員"";}}}"
Dim objTest
Call InitScriptControl
Set objTest = getJSONObject(strTest)
%>
<%=objTest.name%>的郵件地址是<%=sc4Json.Eval("jsonObject.email[0]")%><br />共有郵件地址<%=objTest.email.length%>個(gè)<br />
<%
Dim father
getJSArrayItem father, objTest.family.parents, 0
Response.Write father
%>

至此,實(shí)驗(yàn)完畢。

小結(jié)

本文解決了兩個(gè)問(wèn)題,值得我自己Mark:
1、ASP怎么去調(diào)用接口文件。
2、ASP接收到Json格式的接口文件后,如何結(jié)構(gòu)化。



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開(kāi)源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/19605.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢(xún):800182392 點(diǎn)擊咨詢(xún)
QQ在線咨詢(xún)
AI智能客服 ×