以下代码基于uni-app编写 如果没有appid,那么uni-login是受限制的

https://open.weixin.qq.com/ 认证商户()

微信登入

不同的应用对于微信登入会做不同的处理,即微信服务器(微信官方的)返回发送的OpenId是不相同的(后面会解释OpenId是干嘛用的,它涉及到数据库)。因此也有
UnionID

UnionID 机制说明
如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的

本站后端服务后一部分(已经获取到OpenId,UnionID或者请求,暂时叫身份标识VID)

当客户端已经发送带有VID的东西时,可以存入数据库表(
user表,有id, VID, name, avatarUrl等字段

,注意,获取到VID先查询是否存在,不存在则插入新增一条记录,否则检验name和VID是否匹配(其实可以只检查VID),检验成功则表示登入成功(这里可以使用正常的前后端登入逻辑,如token等),返回数据给客户端。

App端

AppSDK配置里的微信登入appid和appsecret需要填写,开发时暂时可以随便写,如果上线要申请微信的(微信开发者平台)

app端可以直接通过接口获取第三方接口:通过发送发送自带的login请求,再响应成功后,获取到VID,再次请求getUserInfo,响应成功获取用户微信已有信息,向本站服务器发起登入请求,携带VID(一般还有头像和名称)

export default {data() {return {};},//生命周期onLoad:function(){//app 端微信登录// 手册位置 https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo// #ifdef APP-PLUS  判断环境uni.login({success: (res) => {// res 对象格式//{"code":"***",//"authResult":{//"openid":"***",//"scope":"snsapi_userinfo",//"refresh_token":"**",//"code":"****",//"unionid":"***",//"access_token":"***",//"expires_in":7200//},//"errMsg":"login:ok"}uni.getUserInfo({success: (info) => {// info 对象格式// {"errMsg":"getUserInfo:ok",// "rawData":"...// "userInfo":{//"openId":"***",//"nickName":"***",//"gender":1,// "city":"Xi'an",// "province":"Shaanxi",// "country":"China",// "avatarUrl":"头像",// "unionId":"oU5Yyt_agt547zWyA0v0eLfFPqxo"//},"signature":""}// 与服务器交互将数据提交到服务端数据库},fail: () => {uni.showToast({title:"微信登录授权失败"});}})},fail: () => {uni.showToast({title:"微信登录授权失败"});}})// #endif}
}

小程序端

进入小程序后台管理,点击开发 => 开发设置 可以看到id和serect,注意改变manifest.json配置即可,后端也是需要这些数据的,下面会讲到

<template><view><!-- #ifdef MP-WEIXIN --><button type="primary" open-type="getUserInfo" @getuserinfo="getUserInfo">使用微信登录</button><!-- #endif --></view>
</template>
var _self, pageOptions, session_key, openid;
export default {data() {return {};},methods:{// #ifdef MP-WEIXINgetUserInfo : (info) => {info = info.mp.detail.userInfo;//userInfo {"nickName":"深海","gender":1,...avatarUrl":"https://7tdPvkPaJlkaLFFbLAffGVApluZdanLkDVplNlAhq1EJA/132"}// 与服务器交互将数据提交到服务端数据库uni.request({url: _self.apiServer+'member&m=login',method: 'POST',header: {'content-type' : "application/x-www-form-urlencoded"},data: {openid : openid,name   : info.nickName,face   : info.avatarUrl,},success: res => {console.log(res);res = res.data;// 登录成功 记录会员信息到本地if(res.status == 'ok'){uni.showToast({title:"登录成功"});uni.setStorageSync('SUID' , res.data.u_id + '');uni.setStorageSync('SRAND', res.data.u_random + '');uni.setStorageSync('SNAME', res.data.u_name + '');uni.setStorageSync('SFACE', res.data.u_face + '');// 跳转if(pageOptions.backtype == 1){uni.redirectTo({url:pageOptions.backpage});}else{uni.switchTab({url:pageOptions.backpage});}}else{uni.showToast({title:res.data});}},fail: (e) => {console.log(JSON.stringify(e));}});},// #endif},onLoad:function(options){_self = this;pageOptions = options;// #ifdef MP-WEIXIN// 调用 微信 login 获取 codeuni.login({success: (res) => {uni.request({url:_self.apiServer+'member&m=codeToSession&code='+res.code,success: (sessions) => {// sessions.date 数据格式// expires_in:7200// openid:"oS6of0V0rdp9nY_BuvCnQUasOHYc"// session_key:"87sE2oDD8lc+aDJj0tB6+g=="// 获取 unionIdsession_key = sessions.data.session_key;openid      = sessions.data.openid;},});}});}
}

客户端先调用uni.login获取,微信平台服务器返回的code、session_key,再向本站服务器访问提交code、session_key,后端拿到这些值进行向微信服务器接口请求带参数

$url =  "https://api.weixin.qq.com/sns/jscode2session?appid=" + APP_ID + "&secret=" + APP_SERECT +"&js_code=" + ctx.request.body['code'] +"&grant_type=authorization_code";
//Get方式 发送请求 返回数据 数据包含OpenId
$weixin = request($url)
ctx.body = {$weixin
}

后端返回OpenId后,当前端点击登入按钮,触发微信的getUserInfo事件(微信只能通过按钮实现),再用获取到的OpenId去完成后面的逻辑

UnionID

(主要是要给钱,注册企业账号)
暂时不想用它,就不搞了,但是其实差不多的:
可以在getUserInFo获取加密信息,将加密数据传给后端,后端通过对于的js解密(官方给出解密函数),解密就能获取
用户信息和VID了

微信小程序之微信登入相关推荐

  1. 分布式,微信小程序 服务器保持登入态解决方案,

    登入解决方案有很多, 传统: => 通过输入密码和用户名, 经过数据库查询, 然后将用户放入session, 下发sessionid 给游览器,  每次游览器携带cookie 里面的sessio ...

  2. 微信小程序-实现元素渐入渐出动画效果-封装方法

    开端 之前一直使用堪称"万能"的jQuery处理用户交互的动画,近日开发微信小程序,微信小程序高度限制的语法和功能使开源函数可谓对其"无能为力". 那没办法,只 ...

  3. 个人怎么制作微信小程序,微信小程序可以免费制作吗?微信小程序制作教程

    微信小程序 微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或搜一下即可打开应 ...

  4. 微信小程序接入微信支付(二):后台调用统一下单接口

    微信统一支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1 因该接口需要商户系统中自己的订单编号,笔者先 ...

  5. 微信小程序接入微信支付(三):小程序端调用支付接口

    微信小程序调用支付接口官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 在上一节中 ...

  6. 微信小程序仿微信SlideView组件slide-view

    微信小程序仿微信SlideView组件. 使用 1.安装 slide-view 从小程序基础库版本 2.2.1 或以上.及开发者工具 1.02.1808300 或以上开始,小程序支持使用 npm 安装 ...

  7. Java微信运动步数排序设计_微信小程序仿微信运动步数排行(交互)

    本文介绍了微信小程序仿微信运动步数排行(交互),分享给大家,也给自己留个笔记,废话不多说了,具体如下: 效果图如下: wxml: {{item.name}} {{item.steps}} wxss: ...

  8. android微信运动页面开发,微信小程序仿微信运动步数排行(交互)

    微信小程序仿微信运动步数排行(交互) 发布时间:2020-08-20 00:51:02 来源:脚本之家 阅读:101 作者:祈澈姑娘 本文介绍了微信小程序仿微信运动步数排行(交互),分享给大家,也给自 ...

  9. 【微信小程序】微信小程序基础知识篇

    开发文档 小程序简介 | 微信开放文档 1.微信小程序的环境准备 1.1注册账号 1.2获取APPID 是开发者唯一的身份认证,应用要发布要上线必须提供APPID 1.3开发工具 由于微信小程序自带开 ...

  10. 微信小程序通过微信群发消息(订阅消息)

    微信小程序通过微信群发消息(订阅消息):(这个是云开发的教程,可能对于http的不适用) 一.怎么实现这个功能: 1.在微信公众号平台上面开启功能 先完善小程序的信息,才能开通这个功能 这一步前面还有 ...

最新文章

  1. Nginx模块之———— RTMP 模块的在线统计功能 stat 数据流数据的获取(不同节点则获取的方式不同)...
  2. 干货 | 携程异地多活-MySQL实时双向(多向)复制实践
  3. 币氪共识指数排行榜0910
  4. nginx能访问html静态文件但无法访问php文件
  5. 使用Mysql工具进行数据清洗
  6. JQuery中淡出和淡入动画效果
  7. 自己写的Point类
  8. ubuntu16.04安装pycharm,并设置快捷启动方式
  9. hdu1166------树状数组(板子)
  10. 常见路由器初始密码合集
  11. 腾讯的天天快报凭什么想挑战今日头条?
  12. 毕业论文设置奇偶页页眉不同时,目录页也出现页眉,解决办法
  13. LinuxAndroid网络前缀和子网掩码的关系
  14. 如何冻结excel指定行和列
  15. vue-cropper图片裁剪网络图片展示时跨域
  16. php socket 介绍
  17. 音频立体声转单声道(音频双通道转单通道)
  18. Java精品项目源码第117期超市收银管理系统
  19. 电磁信号检波方案:是否多此一举?
  20. 大一计算机VB自学教程,2017秋VB6.0程序设计(兰州理工大学)

热门文章

  1. 移动支付难倒老年人 如何让他们不被时代抛弃?
  2. 在ArcMap中画一条彩虹颜色的路
  3. 从telnet www baidu com 80来玩一下http
  4. html怎样把图片做成链接,怎么把图片弄成链接
  5. 高通终端修改nv值后,不重启终端即生效
  6. 大数据笔试题目练习(附答案)
  7. Copernicus Open Access Hub哥白尼开放中心
  8. pika.exceptions.ConnectionClosed 问题的解决
  9. OMIM 表型和基因如何关联
  10. UNITY 使用代码更换地形中草的贴图