公众号迁移成功后,无法获取用户的OPENID 昵称 性别等信息。
用的ASP,获取的时候会提示要获取头像等信息,然后就提示:获取 access_token 时发生错误,错误信息:{"errcode":41008,"errmsg":"missing code, rid: 646dd077-3a51413d-25cbdf70"}。
ASP 代码为:
from.wx.asp:
<!--#include file="WxApi_jbt.asp"-->
Dim Wx, url
SET Wx = New WxAPI
url = Wx.GetAuthorization_Code()
Response.Redirect(url)
Set Wx=Nothing
wxapi_jbt.asp
```html
<script language="jscript" runat="server">
function getjson(str){
try{
eval("var jsonStr = (" + str + ")");
}catch(ex){
var jsonStr = null;
}
return jsonStr;
}
</script>
<%
Class WxAPI
Private APPID
Private APPSECRET
Private CALLBACK_URL
Private SCOPE
Private Sub Class_Initialize
APPID = "wx76fdf0fcf9e60c80"
APPSECRET = "741319ddeb0003f35322cf9b1a34b9582c"
CALLBACK_URL = "http://www.zkkae.net/membership/wx_user_jbt.asp"
SCOPE ="snsapi_userinfo"
'SCOPE ="snsapi_base"
End Sub
Private Function RequestUrl(url)
Set XmlObj = Server.CreateObject("Microsoft.XMLHTTP")
XmlObj.open "GET",url, false
XmlObj.send
If XmlObj.Readystate=4 Then
RequestUrl = XmlObj.responseText
Else
Response.Write("xmlhttp请求超时!")
Response.End()
End If
Set XmlObj = nothing
End Function
Private Function CheckData(data,str)
If Instr(data,str)>0 Then
CheckData = True
Else
CheckData = False
End If
End Function
'生成登录地址
Public Function GetAuthorization_Code()
Dim url, params
url = "https://open.weixin.qq.com/connect/oauth2/authorize"
params = "appid="&APPID
params = params & "&redirect_uri=" & server.URLEncode(CALLBACK_URL)
params = params & "&response_type=code"
params = params & "&scope="&SCOPE
params = params & "&state=123#wechat_redirect"
url = url & "?" & params
GetAuthorization_Code = (url)
End Function
'https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=URL&response_type=code&scope=snsapi_base&state=#wechat_redirect
Public Function GetAccess_Token(sCode)
Dim url, params,Temp
Url="https://api.weixin.qq.com/sns/oauth2/access_token"
params = "appid="&APPID
params = params & "&secret=" & APPSECRET
params = params & "&code=" & sCode
params = params & "&grant_type=authorization_code"
url = Url & "?" & params
Temp=RequestUrl(url)
If CheckData(Temp,"access_token") = True Then
set obj = getjson(Temp)
if isobject(obj) Then
GetAccess_Token = Array(obj.access_token,obj.openid)
End If
set obj = Nothing
Else
Response.Write("获取 access_token 时发生错误,错误信息:"&Temp)
Response.End()
End If
End Function
Public Function CheckLogin()
Dim Code,mState
Session("Code")=Trim(Request.QueryString("code"))
If Code<>"" Then
CheckLogin = True
Else
CheckLogin = False
End If
End Function
Public Function GetUserInfo()
Dim url, params, result
url = "https://api.weixin.qq.com/sns/userinfo?"
'url = "api.weixin.qq.com/cgi-bin/user/info?"
params = params & "&access_token=" & Access_Token
params = params & "&openid=" & Openid
params = params & "&lang=zh_CN"
url = url & "?" & params
Temp = RequestUrl(url)
If CheckData(Temp,"nickname") = False Then
set obj = getjson(Temp)
if isobject(obj) Then
ret = obj.errcode
msg = obj.errmsg
End If
set obj = Nothing
Response.Write("获取用户信息时发生错误,错误代码:"&ret&" , 错误描述:"&msg)
Response.End()
End If
GetUserInfo = Temp
End Function
Public Function GetUserName(json)
Dim nickname,sex,headimgurl,obj
set obj = getjson(json)
if isobject(obj) Then
nickname = obj.nickname
sex = obj.sex
headimgurl = obj.headimgurl
End If
set obj = Nothing
GetUserName = Array(nickname,sex,headimgurl)
End Function
End Class
%>
wx_user.jbt.asp
<!--#include file="WxApi_jbt.asp"-->
<!--#include file="born_20txt.asp"-->
<!--#include file="./reg/md5.asp"-->
<%
'获得用户真实IP
userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
session.Timeout = 999
Server.ScriptTimeOut=999
Response.Charset = "utf-8"
Code = Trim(Request.QueryString("code"))
SET Wx = New WxAPI
TokenArray = Wx.GetAccess_Token(Code)
Access_Token=TokenArray(0)
Openid=TokenArray(1)
subs = TokenArray(2)
'End If
UserInfo=Wx.GetUserInfo()
nickname = Wx.GetUserName(UserInfo)(0)
sex = Wx.GetUserName(UserInfo)(1)
icon = Wx.GetUserName(UserInfo)(2)
city = Wx.GetUserName(UserInfo)(3)
Set Wx=Nothing
If sex="1" then
sex = "男"
Else
sex = "女"
End If
set rs=server.createobject("adodb.recordset")
sql="select * from hy_jbt_0063 where hy_wx ='"&openid&"'"
rs.open sql,conn,1,3
if rs.eof then
rs.close
Session.Contents("wx_oi_notreg_jbt") = Openid
Session.Contents("wx_nickname_notreg_jbt") = nickname
Session.Contents("wx_sex_jbt") = sex
Session.Contents("wx_icon_jbt") = icon
response.end
else
hy_card = rs("hy_card_0063")
hy_tel = rs("hy_tel_0063")
rs("hy_last_date_0063") = now()
rs("hy_wx_sex_0063") = sex
rs("hy_wx_img_0063") = icon
rs("hy_wx_name_0063") = nickname
rs.update
rs.close
set rs=server.createobject("adodb.recordset")
exec="select * from hy_login_record_0063"
rs.open exec,conn,1,3
rs.addnew
rs("hy_tel_0063") = hy_tel
rs("hy_wx_oi_0063") = Openid
rs("login_time_0063") = now()
rs("login_ip_0063") = userip
rs.update
rs.close
Session.Contents("from_wx") = md5(Openid & hy_hash)
Session.Contents("mem_wx_oi_jbt") = Openid
Response.Cookies("tel")=hy_tel
Response.Cookies("tel").expires = DateAdd("h", 1, Now())
'response.write Session.Contents("from_wx")
'response.end
response.Redirect("./")
response.end
end if
%>
请帮忙看看,怎么办?