react native微信登录授权,以及一些错误
2018-01-13 17:59
603 查看
一、背景
公司的APP,上次发布版本,我们的APP微信登录还是可以用的。但是在最新一版中,微信登录一直报-6的错误。于是开始了蛋疼的寻找之路。二、关于RN中使用微信组件的问题
请参考链接:http://www.cnblogs.com/tangyuanby2/p/5589836.html我这里解释下里面一些关键性的东西,前提是博主用的是0.47版本的:
1)此处:
可能是大神写博客的时候,RN的版本还比较低。在我用的0.47版本,这部分主要是替换RCTWeChat:
include ':react-native-wechat' project(':react-native-wechat').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-wechat/android')
2、按照大神的博客继续往下走,有个部分需要注意:
这个部分,我们在使用获取第三方包工具的时候,输入的应用包名就是这个部分。
1)红色箭头代表的是我们的应用包名,我们自己可以定义。但是要保证这个部分不会重复,一般都是用域名来区分。
2)大家默认都用反序来表示,所以我这边用的也是反序。
3)我用的获取APP签名的工具叫做:GenSignature,大家自行搜索即可
例如我的应用包名:
域名.user
3、第三个需要注意的地方
这里因为大神用的是android的IDE,所以自动给他生成了com.rnwechatdemo的目录。但是,如果你用的不是IDE,那么你的目录文件应该是这样的:
这里是按照我们上面设定的应用包名来建目录的。先是com,然后是域名,然后是user。这部分一定要注意。
OK,大家按照大神的教程,基本上就算是把配置给弄完了,接下来就是在项目中的引用问题
三、关于微信登录授权的代码部分
1、直接上代码/** * 配置 react-native-wechat 的集成功能 */ //因为我们做了混淆设置,所以这边在引用的时候需要注意下,引用的是* import * as WeChat from 'react-native-wechat'; import toastModule from './toastModule'; // 弹出窗 WeChat.registerApp(wechat_ini.AppId); // ~~~~~~~~~~~~~~~~~~~~~~~需初始化配置 AppId~~~~~~~~~~~~~~~~~~~~~~ // 模块内部 - 工具类 class toolsForWechat { /** * 判断是否安装,并依据功能回调 * @param function func 回调函数 */ static check_install(func) { WeChat.isWXAppInstalled() .then((isInstalled) => { if(isInstalled) { func(); } else { toastModule.run('没有安装微信软件,请您安装微信之后再试'); } }); } /** * 生成随机字符串 * @param bool flag 是否是任意长度 * @param int min 任意长度最小值 * @param int max 任意长度最大值 * @return string */ static random_str(flag, min, max) { let str = ""; let index = ""; let range = min; let arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ]; //min,max范围内随机的一个数 if(flag) { range = Math.floor(Math.random() * (max - min + 1) + min); } for(let i = 0; i < range; i++) { index = Math.round(Math.random() * (arr.length - 1)); str += arr[index]; } return str; } } // 核心 export default class wechatModule { /** * 微信登录 * @param function func 闭包登录成功后的逻辑函数 * @param string set_url 设置带?的url */ login(func, set_url = http.url('v1/wechat/login?')) { // 需配置:后端处理微信登录接口 let __conf__ = { url: set_url, callback: func, state: toolsForWechat.random_str(true, 4, 6), // 随机生成的码 }; //判断微信是否安装 toolsForWechat.check_install(() => { //这里的sendAuthRequest是获取微信授权的意思。发送的字符串代表获取用户的信息 WeChat.sendAuthRequest("snsapi_userinfo") .then(res => { switch(parseInt(res.errCode)) { // 用户换取access_token的code,仅在ErrCode为0时有效 case 0: // 验证此次操作是用户自己进行的,否则结束操作 // if (res.state != __conf__.state) { // toastModule.run('这里state不正确'); // return; // } // 请求后端,登录操作 http.get(__conf__.url + '&code=' + res.code, (d) => { __conf__.callback(d); // 运行回调函数 }); break; default: // code...; } }) .catch((error) => { toastModule.run(error.message); }); }); } }
2、关于获取微信授权的接口:
sendAuthRequest([scope[, state]]) :发送微信登录授权
1)params 参数名 类型 默认值 描述 scope {Array/String} 无 应用授权作用域,如获取用户个人信息则填写snsapi_userinfo state {String} 无 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验 2)return {Promise} 3)返回值: 参数名 类型 描述 errCode Number ERR_OK = 0(用户同意) ERR_AUTH_DENIED = -4(用户拒绝授权) -6(代表APP的签名有问题,需要重新再微信开放平台中填写) ERR_USER_CANCEL = -2(用户取消) errStr String 无 openId String 无 code String 用户换取access_token的code,仅在ErrCode为0时有效
四、关于我碰到的问题。
1、问题:我在微信登录的时候,返回值是-6。
2、原因
因为之前生成APP是在另一个同事那边生成的。然后我自己在本地配置了下RN的秘钥,又重新生成了一版。这就造成APP的签名发生了改变,所以报错是-6
3、解决方案
下载获取APP应用宝的签名工具,然后重新获取签名。获取之后,去微信公众平台,修改下签名。修改之后,APP就可以用了。
这里说下。微信分享好友,微信支付,微信分享朋友圈等,用的都是这个组件。所以大家把它的用法搞清楚,有利于以后使用微信的其他功能。
参考链接:http://www.cnblogs.com/tangyuanby2/p/5589836.html
https://www.jianshu.com/p/3f424cccb888
相关文章推荐
- php 微信授权登录 40029错误
- React Native绑定微信分享/登录/支付(演示+实现步骤+注意事项)
- 微信登录授权错误整理
- 【转】react-native-wechat--微信登录
- react native 微信组件 报undefine 错误处理
- React-Native的微信SDK辅助包,支持微信登录、微信分享、微信支付
- react-native学习(RN)--之Window环境下搭建环境配置,以及初始化建立react-native项目,(真机和模拟器运行的相关错误解决办法,android打包报错)
- android 错误集锦 -- 微信第三方登录授权开发
- React Native 接入微博、微信、QQ 登录功能
- Android微信授权登录跟遇到的一些问题
- 微信授权登录以及静默授权
- thinkphp 微信授权登录 以及微信实现分享
- iOS 【微信登录流程以及遇到的一些坑】
- 微信移动应用接入开发, Android 授权微信登录获取openid,unionid等,score参数错误或者没有scope权限
- 微信第三方授权登录返回错误信息: 40029
- 友盟第三方微信登录分享授权错误
- 微信移动应用接入开发, Android 授权微信登录获取openid,unionid等,score参数错误或者没有scope权限
- 微信授权登录错误记appid
- 微信登录失败——授权回调域名校验出错,错误码:10003原因及解决办法