前端代码:
<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,目前我这样子做是有效的