博客简介
本篇博客介绍如何用服务器获取openId,当然如果你没有服务器,也可以使用微信提供的云开发获取。步骤如下:
- 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
- 在服务器中拼接字符串,得到完整URL
- 发送网络请求,调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。
示意图如下:
调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
调用 wx.login() 获取 临时登录凭证code ,我们只需要在前端调用wx.login()函数即可,调用成功后即可获取到用户的code。之后通过request请求回传到服务器
注意:
- URL代表服务器地址
- 传入参数为code
Login:function(){
//获取登录凭证(code)
wx.login({
success(res) {
console.log(res.code);
if (res.code) {
//发起网络请求
wx.request({
//URL代表服务器地址
url: 'https://littlede.applinzi.com/code.php',
data: {
//传入参数为code
code: res.code
},
success(res){
console.log(res.data);
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
}
这个时候我们就能获取到code了:
043sRZaG0NV28g2HIVbG05Q7bG0sRZaF
在服务器中拼接字符串,得到完整URL
在服务器端,我们获取到了字符串,但是想要请求 auth.code2Session 接口需要将字符拼接进code2Session 接口:
请求地址:
https://api.weixin.qq.com/sns/jscode2sessionappid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
请求参数:
拼接
- code:登录凭证code
- appid:appId
- secret:小程序秘钥,在开发者设置中获取
<?php
$code=$_GET["code"];
//登录凭证code
$appid="wxd13a86f9b482fcf1";
//小程序秘钥
$secret="4ae3bcc0dda4624b72f3d2e8d28097e5";
$api="https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";
?>
发送网络请求
在服务器端发送网络请求,调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key,我们继续编写php文件:
<?php
$code=$_GET["code"];
$appid="wxd13a86f9b482fcf1";
//小程序秘钥
$secret="4ae3bcc0dda4624b72f3d2e8d28097e5";
$api="https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";
//php请求网络的方法
function curl_get($url, &$httpCode = 0) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//不做证书校验,部署在linux环境下请改为true
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$file_contents = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $file_contents;
}
$str=curl_get($api);
echo $str;
?>
在小程序界面设置一个按钮,调用函数:
成功获取到openid: