首页/默认分类/正文
借助业务服务器获取微信小程序用户ID(openid)的方法探讨

 2025年08月30日  阅读 3

摘要:1.微信小程序登录流程概述微信小程序的登录机制涉及小程序端、业务服务器和微信服务器的三方交互。为了安全获取用户唯一标识,小程序需要通过业务服务器中转获取用户信息,而不是直接从微信服务器获取。这一过程主要包括以下几个关键步骤:获取登录凭证code、将code...

1. 微信小程序登录流程概述

微信小程序的登录机制涉及小程序端、业务服务器和微信服务器的三方交互。为了安全获取用户唯一标识,小程序需要通过业务服务器中转获取用户信息,而不是直接从微信服务器获取。这一过程主要包括以下几个关键步骤:获取登录凭证code、将code发送至业务服务器、业务服务器向微信服务器请求用户信息、处理返回数据。

2. 获取登录凭证code

在小程序端,开发者可以通过调用wx.login()接口获取临时登录凭证code。这个code有效期较短(约5分钟),用于后续向微信服务器换取用户信息。在小程序的app.js文件中,可以添加以下代码实现:


wx.login({
  success(res) {
    if (res.code) {
      console.log('获取到的code:', res.code)
    }
  }
})

这段代码会将获取到的code通过控制台输出,便于开发者调试。

3. 向业务服务器发送code

获取到code后,小程序需要通过wx.request()接口将code发送到开发者自己的业务服务器。这一步需要注意的是:

需要配置合法域名

建议使用HTTPS协议确保传输安全

可以在请求头中添加必要的验证信息

虽然这部分代码在本文中暂未展示,但实现起来相对简单,主要是构建一个HTTP请求将code作为参数传递给业务服务器。

4. 业务服务器处理流程

业务服务器(本文使用ASP实现)收到code后,需要完成以下工作:

4.1 构造请求参数

业务服务器需要准备三个关键参数向微信服务器发起请求:

小程序appid

小程序secret

前端传来的code

这些参数需要按照微信接口要求进行组装。

4.2 调用微信接口

微信提供的接口地址为:


https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
ASP代码可以通过XMLHTTP对象发起这个请求:

asp

<%

Dim code, url, xmlhttp, result

code = Request.QueryString("code")

url = "https://api.weixin.qq.com/sns/jscode2session?appid=你的APPID&secret=你的SECRET&js_code=" & code & "&grant_type=authorization_code"

Set xmlhttp = Server.CreateObject("MSXML2.XMLHTTP")

xmlhttp.open "GET", url, false

xmlhttp.send

result = xmlhttp.responseText

Response.Write result

%>


<b>4.3 处理返回数据</b>
微信服务器会返回JSON格式的数据,包含两个重要信息:
 openid:用户唯一标识
 session_key:会话密钥
由于安全考虑,这些信息不应该传回小程序客户端。ASP需要处理这个JSON响应,将其转换为可操作的对象。
<b>5. JSON数据处理</b>
在ASP中处理JSON数据需要借助一些辅助函数。以下是关键代码片段:

asp

<%

' 解析JSON字符串的函数

Function ParseJSON(json)

' 实现JSON解析逻辑

' ...

End Function

' 使用示例

<%''''''''''''''''''''''''''''''''''''''''''     api_login.asp'     与微信服务器发生通讯''''''''''''''''''''''''''''''''''''''''''常量配置'微信API地址WX_LOGIN_API = "https://api.weixin.qq.com/sns/jscode2session"'AppID(小程序ID)WX_APIID = "___你的APPID___"'AppSecret(小程序密钥)WX_APPSECRET = "___你的AppSecret___"'grant_typeWX_GRANT_TYPE = "authorization_code"'JSCODE,接收小程序通过wx.request()传过来的codeJSCODE = Request("code")If JSCODE = "" Then     Response.Write "非法请求。"    Response.End End If'组装完整的LOGIN_APIWX_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=" & JSCODEWX_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 

Dim jsonObj

Set jsonObj = ParseJSON(result)

Dim openid, session_key

openid = jsonObj("openid")

session_key = jsonObj("session_key")

%>

`

这个解析过程可以将微信返回的JSON字符串转换为ASP可以操作的对象,从而提取出openid和session_key等关键信息。

6. 安全注意事项

''''''''''''''''''' ASP读取Json的函数群''''''''''''''''''Dim sc4Json Sub InitScriptControlSet 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.jsonObjectEnd 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.itemTempEnd SubDim objTestCall InitScriptControlSet objTest = getJSONObject(strGetBackInfo)%>session_key:<%=objTest.session_key%>
openid:<%=objTest.openid%>

在整个流程中,有几个重要的安全考虑:

1. 小程序secret是极其敏感的信息,必须妥善保管,绝不能出现在客户端代码中

2. session_key也不应该返回给小程序客户端

3. 建议业务服务器使用HTTPS协议

4. 可以考虑对请求进行签名验证,防止伪造请求

7. 总结

Dim strTeststrTest = "{name:""alonely"", age:24, email:[""ycplxl1314@163.com"",""ycplxl1314@gmail.com""], family:{parents:[""父亲"",""母亲""],toString:function(){return ""家庭成员"";}}}"Dim objTestCall InitScriptControlSet objTest = getJSONObject(strTest)%><%=objTest.name%>的邮件地址是<%=sc4Json.Eval("jsonObject.email[0]")%>
共有邮件地址<%=objTest.email.length%>个
<%Dim fathergetJSArrayItem father, objTest.family.parents, 0Response.Write father%>

本文详细介绍了微信小程序登录机制中业务服务器的实现过程,重点包括:

微信登录的整体流程

ASP调用微信接口的方法

JSON数据的解析处理

这些技术不仅适用于用户登录场景,也可以推广到其他需要与微信服务器交互的业务场景中。通过业务服务器中转的方式,既保障了数据安全,又能灵活地实现各种业务逻辑。

版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;

原文链接:http://wen.bjhwtx.com/post/36752.html

标签:

博览广文网

博览广文网为所有文学爱好者、新闻爱好者、关注生活多方面内容的观众朋友提供多方位的内容呈现、提升阅读空间、填充碎片时间,开阔读者的视野、增长见识、了解民生、一个让您不出户尽知天下事的网站平台!
热门标签
关于我们
广文舒阅网—让天下读者有家可归!这里汇聚了各类优质文化信息,无论是全球热点、历史故事,还是实用百科、趣味探索,您都能轻松获取。我们希望用阅读点亮您的世界,让每一次浏览都充满收获和乐趣。
导航栏A标题
广文舒阅网
扫码关注
联系方式
全国服务热线:0755-88186625
Q Q:8705332
Email:admin@lanyu.com
地址:深圳市福田区海雅缤纷国际大厦5层501
Copyright 深圳市蓝宇科技有限公司 版权所有 备案号:京ICP备20013102号-1