前端代码
data() {
return {
openid: "",
server: '',
code:''
};
},
mounted() {
this.getCode()
},
methods:{
getCode() {
// 非静默授权,第一次有弹框
this.code = '';
var callback_url = '回调地址'; // 获取页面url
var appid = 'APPID';
this.code = this.getUrlCode().code; // 截取code
if (this.code == null || this.code === '') {
// 如果没有code,则去请求
window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(
callback_url
)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;
} else {
// 当code不等于空时,调用后端接口获取用户信息
this.getUserInfo();
// 你自己的业务逻辑
}
},
getUserInfo() {
let token = uni.getStorageSync("token");
const header = {
"Content-Type": "application/json",
"Authorization": token
};
let data = {}
data.code = this.code
data.appid= '你的appid'
data.secret= '你的secret'
uni.request({
url: '接口地址',
data: data,
header: header,
timeout: 20000,
method: 'POST',
dataType: 'json',
success: (res) => {
this.setOpenid(res.data.openid);
uni.setStorageSync('openid', res.data.openid)
}
})
},
getUrlCode() {
// 截取url中的code方法
var url = location.search;
var theRequest = new Object();
if (url.indexOf('?') != -1) {
var str = url.substr(1);
var strs = str.split('&');
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1];
}
}
return theRequest;
},
}
后端php代码
public function getOpenid(){
$code = input('post.code');
$param["appid"]=input('post.appid');
$param["secret"]=input('post.secret');
$param["code"]=$code;
$param["grant_type"]="authorization_code";
$json = $this->curlPost("https://api.weixin.qq.com/sns/oauth2/access_token",$param);
$rv=json_decode($json,true);
return json($rv);
}
public function curlPost($url = '', $postData = '', $options = array()) {
if (is_array($postData)) {
$postData = http_build_query($postData);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数
if (!empty($options)) {
curl_setopt_array($ch, $options);
}
//https请求 不验证证书和host
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
文章来源地址https://www.toymoban.com/news/detail-722041.html
文章来源:https://www.toymoban.com/news/detail-722041.html
到了这里,关于uniapp实现公众号微信登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!