前端代码:
<template>
<view class='other'>
<view class='other-item' @tap='loginOther()'>
<button>微信登录</button>
<view></view>
</view>
</view>
</template>
<script>
// 这里是引入请求本地的ip地址
import $http from '@/common/api/request.js'
export default{
methods:{
loginOther(){
uni.login({
success:(res)=>{
let code=res.code;
$http.request({
url:"/login",
method:"POST",
data:{
code
},
}).then((res)=>{
console.log(res)
}).catch(()=>{
uni.showToast({
title:'请求失败',
icon:'none'
})
})
}
})
}
}
}
</script>
<style scoped>
</style>
请求代码(request.js):
export default{
common:{//默认数据格式
baseUrl:"http://本地ip地址或者你的服务器ip地址或者你服务器的域名:3000/api",
data:{},
header:{
"Content-Type":"application/json",
"Content-Type":"application/x-www-form-urlencoded"
},
method:"GET",
dataType:"json"
},
request( options={} ){//options是默认值
//这里是进行设置加载中给数据进行缓存一下
uni.showLoading({
title: '加载中'
});
options.url = this.common.baseUrl + options.url;
options.data = options.data || this.common.data;
options.method = options.method || this.common.method;
options.dataType = options.dataType || this.common.dataType;
return new Promise((res,rej)=>{
uni.request({
...options,
success: (result) => {
if(result.statusCode != 200){//处理其他接口没有数据而出现404报错的问题
return rej();
}
setTimeout(function () {
uni.hideLoading();
}, 0);//这是设置加载数据的显示时间
let data = result.data.data;
res(data);
}
})
})
}
}
后端node.js代码(express框架)
var express = require('express');
var router = express.Router();
//要记得下载这个包,npm install request
const request = require('request')
router.post('/api/login', function(req, res, next) {
let code=req.body.code;//登陆传过来的code
let appid = "自己的"; //自己小程序后台管理的appid,可登录小程序后台查看
let mysecret = "自己的"; //小程序后台管理的secret,可登录小程序后台查看
let grant_type = "authorization_code"; // 授权(必填)默认值
//拼接出请求微信服务器的url地址然后请求oppenid和session_key
let url ='https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + mysecret + '&js_code=' + code + '&grant_type=authorization_code';
request(url,(error, response, body)=>{
//JSON.parse()方法将JSON格式字符串转换为js对象
let parsData = JSON.parse(body.toString());
let openid=parsData.openid;
let session_key=parsData.session_key;
//返回前端是下面这个被注释的
// res.send({
// data:parsData
// })
})
})
module.exports = router;
这样子是可以完全请求出微信小程序的openid,目前我这样子做是有效的