一、背景

公司的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

react native微信登录授权,以及一些错误相关推荐

  1. 混合应用 微信登录授权 微信登录认证失败 ios PGWXAPI错误-1 code:-100 / 安卓 message:invalid appsecret innerCode:40125...

    最近项目需要做微信登录,于是利用HTML5+ API Reference的OAuth模块管理客户端的用户登录授权验证功能,允许应用访问第三方平台的资源. (链接:https://www.dcloud. ...

  2. 网站微信登录授权 ASP.NET

    最新做一些项目都有微信登录注册什么的,今天就把自己整理的demo提供给大家 微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过code换取网页授权access_token, ...

  3. java调用微信加密_微信登录授权, 并且解密加密内容获取手机号和地区

    所使用的的依赖 org.springframework.boot spring-boot-starter-web 2.3.7.RELEASE org.apache.httpcomponents htt ...

  4. native react 集成微信登录_React Native 接入微博、微信、QQ 登录功能

    在 App 开发中我们经常需要在用户登录模块接入 SNS 登录组件,这样会大大提高用户的注册体验.特别当一个不是刚性需求 App 推广的时候,这样会很大的降低用户体验的成本,没有人愿意忍受输入邮箱.手 ...

  5. React Native微信分享

    捣鼓了有一段时间了,终于搞完这个微信分享的接口接入模块.直接看效果: 第一步 首先你要有自己的打包签名完的项目,运行在你的手机设备上,因为后面需要用到应用签名.(具体怎么获得后面会讲解) 在自己的项目 ...

  6. React Native微信支付开发爬坑之旅

    早闻微信支付一直为移动开发者所诟病,这次公司项目新增微信支付需求,一试果然是一把辛酸泪,从配置到与后台调试真是一波三折,整整花了一天的时间才从坑里爬出来,效率也是低.所以有必要做下总结,日后再有微信支 ...

  7. App中快速复用微信登录授权的一种方法

    在微信小程序下,小程序登录功能一般会通过 OpenID 或 UnionID 作为唯一标识,与小程序服务的账号体系进行关联打通,完成用户账户体系的构建与设计. 如果在像支付宝小程序.百度小程序第三方平台 ...

  8. 如何进行微信登录授权测试?

    准备工作 移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应 ...

  9. 微信登录——授权登录获取用户信息

    引言 实现微信扫码登录关键之处就是获取到微信用户信息,那么这就涉及到了微信授权,通过微信授权我们可以获取到用户信息:微信官方文档写的还是比较详细的,但是没有代码演示,这里我就用代码演示一下如何实现微信 ...

最新文章

  1. 笔记-计算机网络基础-计算机网络分类
  2. 初学者学MvcMovie遇到的问题解决办法
  3. boost::remove_edge_if用法的测试程序
  4. OO真经——关于面向对象的哲学体系及科学体系的探讨(下)
  5. Ubuntu 查看默认软件安装位置
  6. WeTest功能优化第3期:业内首创,有声音的云真机
  7. vs2015企业版密钥
  8. 文件解密 [Java]
  9. 抢购茅台,618只能用这种方法
  10. JavaScript---网络编程(9-1)--DHTML技术演示(2-1)-表格创建的几种方式
  11. C# 查询科星继电器的输入端状态以及控制输出
  12. 白鹭(egret)工具集介绍一
  13. java集合类深度解析
  14. 有什么软件可以复制并粘贴文件?
  15. 条码标签设计软件Nicelabel使用方法
  16. python输入多个整数 输入quit表示结束_Python Selenium 之关闭窗口close与quit的方法
  17. HTTP代理中的api 代理的使用方法有什么?
  18. United Plugins发布TrapTune人声插件
  19. 18. SPI协议,spi转can,MCP2515裸机驱动详解
  20. JAVA开发之旅(十)###面向对象(其他)###

热门文章

  1. Android 深层链接DeepLink和应用链接AppLink:实现浏览器跳转 app
  2. 改善重复办公的计算机工具,吐血推荐!我电脑上「最引以为豪」的办公工具,用上立马效率翻倍...
  3. 科学恋爱(一) 如何培养吸引力和好感
  4. uniapp 录音组件
  5. 安科第一面+中兴软创第一面 总结
  6. 【工具】最全的 postman 工具使用教程!收藏了
  7. 微信小程序------阳历与农历互转
  8. INA3221 电压电流监测
  9. java.nio.Buffer 中的 flip()方法
  10. 专访经纶世纪余中:“防大病、管慢病”背后的技术与商业思考