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