1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Html获取微信id ASP获取微信小程序的用户ID(OpenID)——服务器端

Html获取微信id ASP获取微信小程序的用户ID(OpenID)——服务器端

时间:2021-05-30 09:15:27

相关推荐

Html获取微信id ASP获取微信小程序的用户ID(OpenID)——服务器端

背景

尝试一下新鲜事物“微信小程序”,其中有一个业务场景,通过微信登陆小程序,这样需要获取小程序的用户ID(也就是openid)。微信小程序从安全角度考虑,不提供直接在微信服务器获取openid的方法,那么需要借助自己的业务服务器去进行获取。于是需要写一个服务端的程序,接受用户从微信小程序提交过来的请求,然后再向微信服务器发起请求,得到这个用户的openid信息。

同样,处于安全考虑,微信不建议把这个openid返回给微信小程序。当然这是后话,在此只探讨获取到oepnid这个环节。

服务端用比较比较古朴的技术ASP(或者叫经典ASP吧。)

官方文档

微信小程序的官方文档在这里:(https://mp./debug/wxadoc/dev/api/api-login.html#wxloginobject)

截取其中关键的时序图吧。

微信小程序登陆时序图

我的学习

我学习理解下,应该有这么几个环节:

1、在小程序中用wx.login()获取到登陆凭证code。

2、通过小程序的wx.request()将这个code发送至咱们自己的服务程序(本文的ASP程序)。

3、服务器ASP程序将code连同appid和appsecret一起发送至微信的服务器。

4、接收微信返回的信息,包括openid和session_key,这两个都不传送到小程序客户端。

5、既然不传回去,就用一个我们自己定义的session来记录登陆情况,然后返回去。

6、返回到小程序的我们自己的定义session用storage存储在客户端(手机)上。

7、再次登陆时候,只读取storage和我们自己的服务器发起通讯即可。

本文我们只探讨1-4步。

开始动手

1、微信小程序获取登陆凭证code。

这个比较简单,在app.js里增加下面代码;

wx.login({

success: res => {

// 发送 res.code 到后台换取 openId, sessionKey, unionId

var code = res.code;

if (code) {

console.log('获取用户登录凭证:' + code);

} else {

console.log('获取用户登录态失败:' + res.errMsg);

};

}

})

通过 console.log 把code打印出来了。

2、微信小程序wx.request()将code提交到服务器

这一步暂时没写,也比较简单,略过。下次我更新的时候再补齐。

3、服务器ASP程序将code连同appid和appsecret一起发送至微信的服务器

微信服务器接口地址如下:

https://api./sns/jscode2session?appid=APPID&secret=SECRET&jscode=JSCODE&granttype=authorization_code

ASP代码如下:

'''''''''''''''''''''''''''''''''''''''''

' api_login.asp

' 与微信服务器发生通讯

'''''''''''''''''''''''''''''''''''''''''

'常量配置

'微信API地址

WX_LOGIN_API = "https://api./sns/jscode2session"

'AppID(小程序ID)

WX_APIID = "___你的APPID___"

'AppSecret(小程序密钥)

WX_APPSECRET = "___你的AppSecret___"

'grant_type

WX_GRANT_TYPE = "authorization_code"

'JSCODE,接收小程序通过wx.request()传过来的code

JSCODE = Request("code")

If JSCODE = "" Then

Response.Write "非法请求。"

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远程调用接口的函数

'''''''''''

' 远程获取接口的函数群

'

'''''''''''

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

运行,在URL中加上code信息,将获取的json格式的openid和session_key打印出来,至此获取了这部分信息。

但这些信息是字符串格式的,需要继续将其转换成json对象读取才能够结构化。

4、读取json格式的openid和session_key

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

'''''''''''''''''

'

' ASP读取Json的函数群

'

'''''''''''''''''

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:

openid:

至此,已经将获取openid并且结构化完毕。

上述ASP操作Json的函数的用法,有位师兄写了例子供开拓思路,我就不做修改,直接贴上来了。

Dim strTest

strTest = "{name:""alonely"", age:24, email:[""ycplxl1314@"",""ycplxl1314@""], family:{parents:[""父亲"",""母亲""],toString:function(){return ""家庭成员"";}}}"

Dim objTest

Call InitScriptControl

Set objTest = getJSONObject(strTest)

%>

的邮件地址是

共有邮件地址个

Dim father

getJSArrayItem father, objTest.family.parents, 0

Response.Write father

%>

至此,实验完毕。

小结

本文解决了两个问题,值得我自己Mark:

1、ASP怎么去调用接口文件。

2、ASP接收到Json格式的接口文件后,如何结构化。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。