欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > ASP获取微信小程序的用户ID(OpenID)——服务器端

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:740

高端HTML5响应式企业通用网

2020-05-06   浏览:521

html5响应式外贸网站英文版

2020-05-08   浏览:510

HTML5自适应律师工作室类网

2020-04-04   浏览:504

HTML5影视传媒文化公司类网

2020-05-12   浏览:502

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

发布时间:2020-12-22  

背景 尝试一下新鲜事物“微信小程序”,其中有一个业务场景,通过微信登陆小程序,这样需要获取小程序的用户ID(也就是openid)。微信小程序从安全角度考虑,不提供直接在微信服务器获取openid的方法,那么需要借助 ...

 

 

 

背景

尝试一下新鲜事物“微信小程序”,其中有一个业务场景,通过微信登陆小程序,这样需要获取小程序的用户ID(也就是openid)。微信小程序从安全角度考虑,不提供直接在微信服务器获取openid的方法,那么需要借助自己的业务服务器去进行获取。于是需要写一个服务端的程序,接受用户从微信小程序提交过来的请求,然后再向微信服务器发起请求,得到这个用户的openid信息。
同样,处于安全考虑,微信不建议把这个openid返回给微信小程序。当然这是后话,在此只探讨获取到oepnid这个环节。
服务端用比较比较古朴的技术ASP(或者叫经典ASP吧。)

官方文档

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

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

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

微信小程序登陆时序图

我的学习

我学习理解下,应该有这么几个环节:
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.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&jscode=JSCODE&granttype=authorization_code

ASP代码如下:

<% ''''''''''''''''''''''''''''''''''''''''' ' api_login.asp ' 与微信服务器发生通讯 ''''''''''''''''''''''''''''''''''''''''' '常量配置 '微信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,接收小程序通过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