最近在做小程序开发,小程序关于API请求访问难点之一:微信小程序获取用户唯一标识openid,官方文档实在是讲的不详细,初学者用处不大。把自己实际做项目的源码共享与大家,供小程序初学者学习。
第一步:小程序端代码比较简单:调用wx.login(),获取临时登陆凭证的code值(每次请求都是随机值),
第二步:调用wx.request,重点:url值不是他人案例上的链接,这是你自己编写后台C#程序封装的API路径(本地预览是localhost之类的),通过后台C#程序再来访问官方提供的网址(https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code),
第三步:把C#程序访问网址的结果返回给小程序就好了
具体代码:
小程序端:
wx.login({
success(res) {
if (res.code) {
console.log("用户登陆品证" + res.code);
wx.request({
url: 'http://localhost:59132/api/user',
data: {
code: res.code,
},
success(res) {
console.log("获取openid" + res.data);
}
})
}
}
})
代码解析:wx.login官网有详细解说,固定格式固定语法,直接照搬。注:我这边是url路径就是Visual Studio本地预览的网址,也就是该C#源码的路径,不懂的可以看C# MVC的API创建与访问
C#程序端:
[HttpGet]
public string login(string code)
{
string js_code = code.ToString();
string serviceAddress = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=" + js_code + "&grant_type=authorization_code";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
代码解析:这里的代码也是固定语法格式直接照搬。可以看出这段代码是返回一个叫retString的值,这个值里包含openid等信息。
这个代码开始传入一个值,就是小程序端的code值,通过url传过来。之前说的https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code网址就写在这里面用程序读取。这个网址里包含三个变量,一个是code值,一个是appId,一个是appSecret,code值小程序传过来了,appId和appSecret在我们的小程序平台的设置里有直接换掉链接里的APPID和SECRET值,这两个写死就好了。执行结果
初学者理解起来可能困难,有不懂的可以给我留言。共同进步!