应用场景是:用Hbuilder打包app,在app中点击微信授权登录或者某一操作,调起微信授权登录,用户授权后拿到用户信息。

一、登录插件配置

先配置微信登录参数 appid和appsecret,在manifest.json 文件中选择SDK配置,登录鉴权  勾选微信登录,填入在开放平台申请的app参数。

在manifest.json 文件中选择 源码视图,找到“OAuth”,配置为

"OAuth" : {
"description" : "登录授权"
},

官方相关查阅地址:http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/192

二、在网站中添加授权登录代码

我的需求是:在网站中点击微信授权登录,判断是否来自wap2app,如果来自wap2app则调起微信授权登录。在网站中加入如下代码:

1.点击微信授权登录,获取微信授权服务:

var auths=null;
$("body").on("click",".loginBtn",function(){
// 微信授权登录
if(navigator.userAgent.indexOf("Html5Plus") > -1){
plus.oauth.getServices( function(services){
auths = services;
authLogin();
}, function(e){
alert("获取分享服务列表失败:"+e.message+" - "+e.code);
} );
} })

2.登录认证

//登录
function authLogin(){
var s = auths[0];
if ( !s.authResult ) {
s.login( function(e){
// 获取登录操作结果
var result = e.target.authResult;
alert( "登录认证成功:"+JSON.stringify(result) );
authUserInfo()
}, function(e){
alert("登录认证失败!");
}, {} );
}
}

3.获取用户信息

// 获取登录用户信息操作
function authUserInfo(){
var s = auths[0];
if ( !s.authResult ) {
alert("未登录授权!");
} else {
s.getUserInfo( function(e){
alert( "获取用户信息成功:"+JSON.stringify(s.userInfo) ); //拿到用户信息,进行相关处理,ajax传用户数据到服务器等
var prame = JSON.stringify(s.userInfo); }, function(e){
alert( "获取用户信息失败:"+e.message+" - "+e.code );
} );
}
}

4.退出登录

function authLogout(){
for ( var i in auths ) {
var s = auths[i];
if ( s.authResult ) {
s.logout(function(e){
alert( "注销登录认证成功!" );
}, function(e){
alert( "注销登录认证失败!" );
});
}
}
}

官方相关查阅地址:http://www.html5plus.org/doc/zh_cn/oauth.html

在hbuilder中运行会发现可以调起微信授权,且可以获取用户信息,如下图:

点击确认登录后,返回用户信息和unionid等信息,如下图:

但是打包后会一直提示登录认证失败,无法授权,也没有调起微信授权的页面,主要有以下两个错误:

一、报错 code = -2,用户取消

解决办法:研究了很久,发现主要是两个原因:1.使用了网站的appid和appsecret,应该是申请的app应用的appid和appsecret,2.应该使用自有证书

依旧还是报错 code = -2,检查是否在线上运行,即在开放平台绑定的域名必须与该项目的域名一致,即我们常说的,微信分享、微信登录必须在线上测试

二、报错 code = -100如下图

问题1:检查应用签名是否错误

问题2:检查开放平台的配置授权回调域名是否配置,且是否配置正确(www.baidu.com格式)

解决办法:

微信开放平台移动应用中的应用签名错误,若申请应用时开发信息中数据填写错误,直接修改,已审核通过的不需要重写审核。

应用签名的要求:

1.MD5格式 2.签名为小写;3.去除冒号。都为必须条件。

在Hbuilder中配置时,签名也必须是修改后的格式(md5、小写、去冒号)。

Hbuilder中配置应用签名时,打开manifest.json文件,打开“源码视图”(基础配置,图标配置,启动图配置,SDK配置,模块权限配置中都是没有应用签名配置的,所以很容易遗漏修改它的值),找到 plus --> signature,修改signature的值为符合条件的值即可

以上打包之后,不在报错,但是还有一个问题,在app中点击微信授权后,除了首次会调起微信授权手动授权的界面,再次授权时直接就弹出了用户信息,即直接执行了,缺少用户在终端确认的请求授权过程

alert( "登录认证成功:"+JSON.stringify(result) );

这是因为,授权的微信号只有首次授权时才会调起微信授权的页面,当退出微信授权再次进入时,点击授权会跳转之后再跳回来,自动获取到用户信息。

打包app,微信授权登录常遇到的问题总结

1.使用了网站的appid和appsecret,应该是申请的app应用的appid和appsecret

2.应该使用自有证书

3.微信开放平台移动应用中的应用签名错误,必须满足3点:1.MD5格式 2.签名为小写;3.去除冒号。都为必须条件。

4.(网站或打包app)微信授权登录,必须在开放平台配置授权回调域名,且必须是www形式的,如www.baidu.com,否则授权登录一直报错

5.开发微信分享、微信登录等微信相关的功能,在开放平台或者公众平台绑定的域名必须与该项目的域名一致,即我们常说的,微信分享、微信登录必须在线上测试

转载时请注明出处及相应链接,本文永久地址:https://www.cnblogs.com/wangxiaoling/p/9850717.html,文章标题备注转载,如:xxx【转载】,谢谢!

wap2app(五)-- 微信授权登录以及踩过的坑的更多相关文章

  1. 微信公众平台开发——微信授权登录(OAuth2.0)

    1.OAuth2.0简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户 ...

  2. [转] Android:微信授权登录与微信分享全解析

    https://wohugb.gitbooks.io/wechat/content/qrconnent/refresh_token.html http://blog.csdn.net/xiong_it ...

  3. 微信授权登录(PHP)

    微信授权登录(PHP) 微信授权 OAuth2.0授权 微信网页授权 主要是在项目中遇到网页授权登录这个需求,就对此做些总结记录. OAuth2.0授权 OAuth是一个开放协议,允许用户让第三方应用 ...

  4. 【第二十一篇】手C# MVC 微信授权登录 OAuth2.0授权登录

    首先一定要熟读,最起码过一遍微信开发者文档 微信开发者文档 文档写的很清楚 授权登录四步走 在正文开始前,我得讲清楚一个事情 敲黑板,划重点:微信一共有两个 access_token 一个是7200就 ...

  5. .net core identity集成微信授权登录

    最快的方式是直接nuget安装AspNetCore.Authentication.WeChat包. 想要知道是如何实现的,可以看下面github上面的源码. 源码在这里:https://github. ...

  6. 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)

    场景介绍 对于构建在微信公众号的系统,帐号体系往往使用微信授权登录(如各类微信商城应用系统). 这样操作不仅可以实现静默注册,对用户几乎是无感的,同时也达到了区分用户,获取用户基本信息(头像,昵称等) ...

  7. VUE开发SPA之微信授权登录

    SPA单页应用中微信授权登录的一点思路 单页应用应该如何解决微信授权登录的尴尬跳转?后退无法返回?主要遇到的问题就是 先进入单页应用,一边渲染页面一边判断用户有没有登录,当判断到没有登录时异步数据请求 ...

  8. Android接入微信SDK之一:发起微信授权登录

    1.重要的事情首先说! 包名.应用签名.app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功. 包名:就是在腾讯上申请的包名 应用签名:使用微信官网提供的<签名生成工具>(这个 ...

  9. 微信授权登录,关于调不起授权页面,无法响应回调方法,获取不到code 详解

    前期准备工作:申请AppId,下载资源包jar.文档等. 微信授权登录步骤: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据c ...

随机推荐

  1. Angularjs中的缓存以及缓存清理

    写在最前面:这篇博文是2篇文章组成,详细介绍了Angularjs中的缓存以及缓存清理,文章由上海尚学堂转载过来,欢迎大家阅读和评论.转载请注明出处,谢谢! 一个缓存就是一个组件,它可以透明地储存数据, ...

  2. http请求抓包神器-Fiddler(记录和检查你电脑的所有http通讯)

    Fiddler是做什么的,能帮助我们做什么? 1.能够监听http/httpS的流量,可以截获从浏览器或者客户端软件向服务器发送的http/https请求: 2.对截获之后的请求,我们还能够查看请求中 ...

  3. [Swift]LeetCode208. 实现 Trie (前缀树) | Implement Trie (Prefix Tree)

    Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...

  4. [Swift]LeetCode454. 四数相加 II | 4Sum II

    Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l)there are such th ...

  5. [Swift]LeetCode788. 旋转数字 | Rotated Digits

    X is a good number if after rotating each digit individually by 180 degrees, we get a valid number t ...

  6. Hystrix概念设计

    1. Hystrix概念设计 1.1. 大纲 1.2. 基本的容错模式 1.3. 断路器模式 1.4. 舱壁隔离模式 1.5. 容错理念 凡事依赖都可能失败 凡事资源都有限制 网络并不可靠 延迟是应用 ...

  7. python安装whl文件

    在命令指示符下(cmd)的Python3安装命令为: pip3 install 文件名.whl 安装出错: matplotlib-2.0.0-cp34-cp34m-win_amd64.whl is n ...

  8. BBS论坛(十八)

    18.首页轮播图实现 (1)front/css/front_base.css .main-container{ width: 990px; margin: 0 auto; overflow: hidd ...

  9. 让 CDN 更省流量的 Brotli 算法详解

    早年,我还是学生的时候,时常会鼓捣自己的个人网站,其中最困扰我的问题就是源站服务器易崩溃.作为学生,一方面我没有足够的钱购买高质量的服务器,另一方面一年的流量费用算下来也挺贵的,要花掉我不少的生活费. ...

  10. C语言中你可能不熟悉的头文件(stdlib.h)

    C语言中你可能不熟悉的头文件<cstdlib>(stdlib.h) C Standard General Utilities Library (header) C标准通用工具库(头文件) ...