项目背景:采用uniapp框架开发微信和支付宝两端小程序,前端授权基础信息和code传给后端获取openid(微信)和user_id(支付宝)建立用户体系。
项目描述:之前分开用原生框架开发的时候,都分别做过,现在既然统一用同一套框架了,所以尽量都用统一套写法去实现。
想起来简单,但做起来还是略有不同,因为这块毕竟是授权相关,不像那些纯展示的内容,属于各平台特有的东西的,下面是踩坑过后的总结,记录如下:
获取服务供应商 - uni-app官网 (dcloud.io)
// 获取服务供应商
uni.getProvider({
service: 'oauth',
success: function (res) {
console.log(res.provider)
}
});
// 获取用户登录凭证code
uni.login({
provider: res.provider,
success: function (loginRes) {
console.log('uniapp登录凭证',loginRes);
}
});
// 获取用户基础信息 无需授权 不含code
uni.getUserInfo({
provider: res.provider,
success(res) {
// 测试只有在微信端能拿到 支付宝端拿不到
console.info('uniapp用户基础信息',res)
}
});

以上三步,在微信端看没有任何问题,无需授权弹框,可以正常获取用户基础信息及code,code进行验证后也可以正常拿到openid。但是在支付宝端稍微有点问题,会发现code是正常返回的,但是用户基础信息拿不到,提示无效的授权关系。

所以这块我们想到的方案是针对支付宝单独写一个授权,采用my.getAuthCode获取authCode,注意这里的scopes分为两种auth_base和auth_user,前者拿到code只能获取user_id无需弹框授权,后者拿到的code可以同时获取user_id和其他用户基础信息,需要弹框授权。
// #ifdef MP-ALIPAY
my.getAuthCode({
scopes: 'auth_user',
success: (auth) => {
console.log('支付宝授权凭证',auth)
},
});
// #endif


// 统一登录
changeLogin(){
// 获取服务供应商
let self = this;
uni.getProvider({
service: 'oauth',
success: function (res) {
console.log(res.provider)
self.provider = res.provider[0];
// 获取用户登录凭证code
uni.login({
provider: self.provider,
success: function (loginRes) {
console.log('uniapp统一登录凭证',loginRes)
// 获取用户基础信息 无需授权 不含code
uni.getUserInfo({
provider: self.provider,
success(infoRes) {
// 测试只有在微信端能拿到 支付宝端拿不到
console.info('uniapp用户基础信息',infoRes)
// #ifdef MP-ALIPAY
my.getAuthCode({
scopes: 'auth_user',
success: (auth) => {
console.log('支付宝授权凭证',auth)
},
});
// #endif
}
});
}
});
}
});
}
关于授权基础信息 发现微信环境 静默获取的用户信息 昵称全都是‘微信用户’


使用button结合getUserProfile调用再次查看 发现基础信息里 还是拿不到省市区和基础信息


支付宝环境 使用my.getAuthCode传参auth_user静默获取用户基础信息发现也不行了,需要使用按钮触发用户授权才能拿到。
<button open-type="getAuthorize" scope='userInfo' @getAuthorize="scopeUserInfo" onError="onAuthError"></button>
scopeUserInfo() {
my.getUserInfo({
success: (infoRes) => {
console.log('支付宝用户基础信息',infoRes);
this.sendUserInfo(infoRes.userInfo.avatarUrl,infoRes.userInfo.nickName);
},
});
}, 大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我遇到了这个奇怪的错误.../Users/gideon/Documents/ca_ruby/rubytactoe/lib/player.rb:13:in`gets':Isadirectory-spec(Errno::EISDIR)player_spec.rb:require_relative'../spec_helper'#theuniverseisvastandinfinite...itcontainsagame....butnoplayersdescribe"tictactoegame"docontext"theplayerclass"doit"musthaveahumanplay