微信登录Oauth2.0授权回调出现多次

IT小灰灰 2017-05-12 05:46:12
我们接入微信登录Oauth2.0获取用户信息时,redirect之后微信那边总是会回调多次,最多出现3次,一直解决不了问题,求解!!!!!!!!!!!!!
...全文
6688 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ken263263 2017-12-09
  • 打赏
  • 举报
回复
我也遇到了这个问题,同求解决办法,有大神在吗
cheng306719308 2017-11-03
  • 打赏
  • 举报
回复
鉴权后面的回调url使用URLEncoder对链接进行处理,
逗子王 2017-10-17
  • 打赏
  • 举报
回复
这个问题我也遇到了,也是两次。
雨雾晨曦 2017-10-17
  • 打赏
  • 举报
回复
请问下,您解决了没有,我也是微信回调两次不知道是为什么
是镜花水月 2017-10-01
  • 打赏
  • 举报
回复
微信访问你的回调地址,你必须给它返回个“SUCCESS”字符串,不然他就会认为你没有接收到信息
WXG_xiaoyan 2017-05-18
  • 打赏
  • 举报
回复
oauth接口是不会回调多次的,异步通知回调模式中你配置的回调地址,微信是会调用多次的,这个是用于你处理消息等。 但是oauth认证接口,你调用的时候是需要指定一个返回地址,这个返回地址只会调用一次。你检查一下你的方法看是不是两个回调是不是公用了同一个方法。
微信OAuth2.0网页授权接口 微信OAuth2.0网页授权接口的thinkphp实现版本,主要实现了oauth网页受权,以及部分其他接口。 使用方法 为什么用OAuth2.0受权? 通过OAuth2.0受权的网页将会获取到打开者的微信信息,甚至包括微信昵称、头像等有用的数据,开发者们可以凭此设计出更多更丰富的页面应用,比如最近一直很火爆的红包类活动。除此之外还有个额外的好处,就是可以控制页面在非微信浏览器中无法打开,可以减少代码被人窥窃的风险。 那么红包类活动是如何使用OAuth2.0受权接口的呢? 1.首先用户打开页面连接(php页面),php接收到请求后将页面跳转到微信的OAuth2.0受权页面,在获取到受权后再次将页面跳转回php服务器;此次跳转中带有用户的各种信息,php服务器记录后返回用户所看到的页面。 2.然后用户转发此页面,在转发的连接中带有自己的标识参数。当好友点击分享后的连接的时候也会重复第1步的步骤,当php服务器发现从微信OAuth2.0受权返回的数据中的用户数据与标识参数对应的分享者的用户数据不一致的时候,则可以判断出有好友打开了分享页面,给用户增加一个红包。 使用方法 AuthAction.class.php ---- 认证基类 IndexAction.class.php --- 测试类 index/Conf/config.php --- 设置 wx_appID 微信公众账号的appid wx_appsecret 微信公众账号的appsecret weixin_token 微信公众账号接口配置信息的Token wx_webauth_callback_url OAuth2.0授权后跳转到的默认页面 wx_webauth_expire OAuth2.0授权Token过期时间默认6500 配置好config.php后在微信公号后台设置index.php/Index/wechatInitAuth进行微信API认证,提示"配置成功"后方可使用。 测试公众号申请与具体的测试步骤见下方。 测试 IndexAction.class.php --- 测试类 申请微信测试公众帐号 微信提供测试用的公众账号,此帐号只能添加100个关注者且只有已关注的用户才可以进行OAuth2.0受权。 点此开通测试帐号 1.开通后将appID、appsecret、Token填入index/Conf/config.php中。然后将接口配置信息中的URL改至php服务器,将地址定位到index.php/Index/wechatInitAuth进行微信API认证,直到提示"配置成功"。 2.点击‘体验接口权限表--OAuth2.0网页授权(仅关注者才能授权)’中的修改,将授权回调页面域名改为php服务器地址。直到出现‘通过安全监测’。 配置完微信测试号后,在微信中打开http://项目目录/index.php(例:http://121.40.135.90/weixin_auth/index.php)将会在页面中打印出session中的受权数据,表示测试受权成功。 代码结构 在AuthAction中的初始化函数_initialize中进行了OAuth2.0受权,所有基于AuthAction的控制器都将进行受权过程(除了微信API认证过程wechatInitAuth)。 对于同一用户在受权过期时间内多次打开此控制器的页面,将不会进行多次受权,因为其受权信息记录在session中,以免重复受权,减慢访问速度。受权过期时间在index/Conf/config.php中wx_webauth_expire设置,建议不要大于微信的过期时间7200秒。 注意: 微信OAuth2.0受权分为snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息),AuthAction.class.php默认为snsapi_base,而且session中只记录了snsapi_base中的基础数据,如需要snsapi_userinfo请自行修改。 具体的实现方法见代码注释。
微信OAuth2.0网页授权接口PHP版用法示例,测试前请先申请一个公众号供测试,微信提供测试用的公众账号,此帐号只能添加100个关注者且只有__已关注__的用户才可以进行OAuth2.0受权。   1.开通后将```appID```、```appsecret```、```Token```填入```index/Conf/config.php```中。然后将接口配置信息中的URL改至php服务器,将地址定位到```index.php/Index/wechatInitAuth```进行微信API认证,直到提示"配置成功"。   2.点击‘体验接口权限表--OAuth2.0网页授权(仅关注者才能授权)’中的修改,将授权回调页面域名改为php服务器地址。直到出现‘通过安全监测’。   配置完微信测试号后,在微信中打开```http://项目目录/index.php```(例:```http://121.40.135.90/weixin_auth/index.php```)将会在页面中打印出session中的受权数据,表示测试受权成功。   在AuthAction中的初始化函数```_initialize```中进行了OAuth2.0受权,所有基于AuthAction的控制器都将进行受权过程(除了微信API认证过程wechatInitAuth)。   对于同一用户在受权过期时间内多次打开此控制器的页面,将不会进行多次受权,因为其受权信息记录在session中,以免重复受权,减慢访问速度。受权过期时间在```index/Conf/config.php```中```wx_webauth_expire```设置,建议不要大于微信的过期时间7200秒。注意:   * 微信OAuth2.0受权分为snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息),AuthAction.class.php默认为snsapi_base,而且session中只记录了snsapi_base中的基础数据,如需要snsapi_userinfo请自行修改。   * 具体的实现方法见代码注释。
书名:《微信公众平台应用开发:方法、技巧与案例》(机械工业出版社.柳峰) PDF格式扫描版,全书分为9章,共245页。2014年1月出版。 内容简介 该书系统讲解了微信公众平台应用开发的流程、方法和技巧,并配有若干完整的案例。 全书共11章,逻辑上划分为四个部分: 第一部分(第1~2章)介绍了公众平台的使用、公众账号的认证、编辑模式的使用等基础知识。 第二部分(第3~4章)首先讲解了如何启用开发模式,然后详细讲解了公众平台的消息接口(包括请求校验、请求消息、事件推送和响应消息)。 第三部分(第5~6章)重点介绍了公众平台的自定义菜单接口和高级接口,并配有完整的接口调用示例和说明。 第四部分(第7~11章)首先总结了一些实用的公众平台开发技巧,如使用表情、识别微信浏览器、图文消息使用、公众账号无响应处理、服务多个账号等,然后逐步详细地讲解了“周边搜索”、“猜数字”(游戏)和“聊天机器人”3个综合案例的开发过程。 作者简介 刘运强,网名“柳峰”,资深微信公众平台应用开发工程师,国内微信公众平台应用开发的先驱之一,项目经验丰富。他还是一位资深的Java软件开发工程师和Android/iOS移动应用开发工程师,活跃于CocoaChina、开源中国、CSDN等社区,CSDN博客专家,在CSDN博客撰写了系列微信公众平台二次开发的教程,深受欢迎并被广泛传播,也因此获得CSDN博客移动开发版块的“博客冠军”。 目 录 第1章 公众平台基础知识 1   1.1 公众平台简介 1   1.1.1 平台定位 1   1.1.2 发展历程 2   1.2 注册公众账号 3   1.2.1 公众账号的分类 3   1.2.2 注册账号所需资料 4   1.2.3 公众账号的注册流程 5   1.3 公众平台的使用 8   1.3.1 功能 9   1.3.2 管理 11   1.3.3 服务 14   1.3.4 统计 15   1.3.5 设置 16   1.4 公众账号认证 17   1.4.1 认证条件 18   1.4.2 微信认证流程 18   1.4.3 微博认证流程 19   1.5 小结 19 第2章 编辑模式的使用 20   2.1 编辑模式的应用场景 20   2.2 自动回复 20   2.2.1 被添加自动回复 21   2.2.2 消息自动回复 22   2.2.3 关键词自动回复 22   2.2.4 自动回复优先规则 24   2.3 案例:简易号码簿 24   2.3.1 案例功能描述 25   2.3.2 数据准备 25   2.3.3 设计关注提示语 25   2.3.4 设计关键词规则 26   2.3.5 设置默认回复 28   2.3.6 测试体验 28   2.4 自定义菜单 29   2.4.1 编辑菜单 30   2.4.2 预览和发布菜单 32   2.5 小结 33 第3章 开发模式的启用 34   3.1 开发模式的基础知识 34   3.1.1 启用开发模式的必备条件 34   3.1.2 应用引擎简介 34   3.1.3 开发工具介绍 35   3.2 开发请求校验程序 36   3.2.1 开发者文档介绍 37   3.2.2 明确请求校验流程 37   3.2.3 请求校验流程分析 38   3.2.4 请求校验程序的实现 40   3.2.5 本地测试 43   3.2.6 导出WAR包 44   3.3 BAE的使用 46   3.3.1 注册账号 46   3.3.2 创建应用 47   3.3.3 托管设置 47   3.3.4 部署应用 48   3.3.5 获取访问地址 49   3.4 启用开发模式的步骤 49   3.5 小结 51 第4章 消息的接收与响应 52   4.1 消息交互基础知识 52   4.1.1 消息交互流程 52   4.1.2 消息的分类 53   4.2 消息结构的封装 54   4.2.1 封装请求消息 54   4.2.2 封装事件 63   4.2.3 封装响应消息 68   4.3 消息的处理 79   4.3.1 Dom4j的使用 79   4.3.2 XStream的使用 80   4.3.3 解析请求消息 83   4.3.4 响应消息对象转XML 85   4.4 案例:消息的接收与响应 88   4.4.1 开发准备工作 88   4.4.2 消息封装类 88   4.4.3 封装消息处理工具 89   4.4.4 使用CoreServlet类完成消息的接收与响应 93   4.4.5 使用CoreService类完成消息的处理 95   4.4.6 部署应用及测试体验 97   4.5 小结 98 第5章 自定义菜单的使用 99   5.1 发送HTTPS请求 99   5.1.1 两种解决方法 99   5.1.2 自定义信任管理器 100   5.2 接口访问凭证 101   5.2.1 获取凭证接口介绍 101   5.2.2 获取凭证的方式 102   5.3 自定义菜单接口 105   5.3.1 菜单按钮的分类 105   5.3.2 菜单结构说明 105   5.3.3 封装菜单结构 106   5.3.4 案例:创建菜单 109   5.3.5 菜单的查询与删除 111   5.4 响应菜单点击事件 111   5.5 接口调用频率限制 112   5.6 案例:网址导航 112   5.6.1 案例功能描述 113   5.6.2 案例开发准备 113   5.6.3 封装通用工具类 115   5.6.4 封装菜单工具类 118   5.6.5 创建自定义菜单 120   5.6.6 实现业务逻辑 123   5.6.7 部署应用及测试体验 125   5.7 小结 126 第6章 高级接口的使用 127   6.1 语音识别 127   6.1.1 开启语音识别功能 128   6.1.2 如何获取语音消息 128   6.2 客服接口 129   6.2.1 接口描述 129   6.2.2 方法封装 131   6.2.3 案例:发送客服消息 134   6.3 OAuth2.0网页授权 134   6.3.1 配置网页授权回调域名 135   6.3.2 网页授权流程 135   6.3.3 方法封装 139   6.3.4 案例:通过网页授权获取用户信息 145   6.4 生成带参数二维码 149   6.4.1 创建临时二维码 149   6.4.2 创建永久二维码 152   6.4.3 换取二维码 154   6.4.4 案例:通过ticket换取二维码 155   6.5 获取用户地理位置 155   6.5.1 开启获取用户地理位置功能 156   6.5.2 接收上报地理位置事件 156   6.6 获取用户基本信息 157   6.6.1 接口描述 157   6.6.2 方法封装 158   6.6.3 案例:获取用户基本信息 162   6.7 获取关注者列表 163   6.7.1 接口描述 163   6.7.2 方法封装 164   6.7.3 案例:获取公众账号关注者列表 166   6.8 用户分组接口 166   6.8.1 查询分组 167   6.8.2 创建分组 169   6.8.3 修改分组名 171   6.8.4 移动用户分组 173   6.9 上传及下载多媒体文件 174   6.9.1 上传多媒体文件接口描述 174   6.9.2 使用抓包工具分析文件上传请求 176   6.9.3 上传多媒体文件方法封装 179   6.9.4 下载多媒体文件 183   6.9.5 案例:上传及下载语音文件 184   6.10 小结 185 第7章 网络表情的使用 186   7.1 微信支持的网络表情 186   7.2 QQ表情 186   7.2.1 微信上的QQ表情代码 187   7.2.2 在微信上发送QQ表情 189   7.2.3 QQ表情的识别 190   7.2.4 回复QQ表情 191   7.2.5 案例:原样回复QQ表情 191   7.3 Emoji表情 192   7.3.1 微信上的Emoji表情编码 193   7.3.2 如何使用Emoji表情编码 196   7.3.3 案例:回复Emoji表情 196   7.4 小结 198 第8章 公众平台开发技巧 199   8.1 图文消息使用详解 199   8.1.1 单图文消息的实现 199   8.1.2 多图文消息的实现 200   8.1.3 图文消息使用注意事项 201   8.2 公众账号无响应的处理 202   8.2.1 公众账号无响应的几种情况 202   8.2.2 计算字符串所占字节数 202   8.3 应用开发最佳实践 204   8.3.1 解析消息创建时间 204   8.3.2 换行符的使用 205   8.3.3 网页超链接的使用 206   8.3.4 隐藏浏览器工具栏 206   8.3.5 表情飘落效果 207   8.4 识别微信浏览器 208   8.4.1 判断微信浏览器 208   8.4.2 只允许微信浏览器访问 210   8.5 服务多个公众账号 211   8.5.1 公众账号托管平台原理 211   8.5.2 案例:服务两个公众账号 213   8.6 业务系统对接 214   8.6.1 短信方式绑定账号 215   8.6.2 网页方式绑定账号 215   8.7 公众平台开发测试 215   8.8 小结 216 第9章 LBS应用开发实战:周边搜索 217   9.1 “周边搜索”功能及设计 217   9.1.1 使用方法 217   9.1.2 功能演示 217   9.1.3 需求分析 218   9.1.4 数据表设计 219   9.2 百度地图API的使用 220   9.2.1 百度地图API产品简介 220   9.2.2 申请访问密钥 221   9.2.3 Place API的使用 221   9.2.4 步行导航检索的使用 224   9.2.5 百度坐标转换 225   9.3 MySQL的使用 227   9.3.1 MySQL的下载与安装 228   9.3.2 MySQL的常用操作 228   9.3.3 JDBC的基本使用 232   9.3.4 案例:使用JDBC查询数据 234   9.4 BAE的MySQL服务 235   9.4.1 创建数据库 235   9.4.2 使用phpMyAdmin操作MySQL 237   9.4.3 案例:使用JDBC操作MySQL 237   9.5 “周边搜索”应用实现 241   9.5.1 应用开发准备 241   9.5.2 封装数据库操作 241   9.5.3 封装百度地图操作 245   9.5.4 编写步行导航页面 251   9.5.5 CoreService类的实现 252   9.5.6 部署应用及测试体验 256   9.6 小结 257 第10章 游戏开发实战:猜数字 258   10.1 “猜数字”功能及设计 258   10.1.1 游戏规则 258   10.1.2 游戏术语 259   10.1.3 核心流程设计 259   10.1.4 数据表设计 259   10.2 “猜数字”游戏的实现 261   10.2.1 游戏开发准备 261   10.2.2 游戏算法封装 262   10.2.3 数据库操作封装 265   10.2.4 核心处理逻辑 273   10.2.5 CoreService类的实现 277   10.2.6 部署应用及测试体验 279   10.3 小结 280 第11章 智能聊天应用开发实战:聊天机器人 281   11.1 聊天机器人原理及设计 281   11.1.1 实现原理 281   11.1.2 数据表设计 283   11.2 全文检索引擎Lucene 285   11.2.1 Lucene的组成结构 286   11.2.2 倒排索引结构 286   11.2.3 索引和检索原理 288   11.2.4 常用API介绍 288   11.2.5 Lucene的评分机制 290   11.2.6 案例:使用Lucene索引和检索 291   11.3 中文分词 296   11.3.1 中文分词方法 296   11.3.2 IK分词器的使用 297   11.4 索引浏览器Luke 299   11.4.1 Luke的功能及下载 299   11.4.2 Luke的用法 300   11.5 聊天机器人的实现 301   11.5.1 应用开发准备 301   11.5.2 封装数据库操作 301   11.5.3 封装聊天服务类 307   11.5.4 CoreService类的实现 311   11.5.5 应用启动时创建索引 313   11.5.6 部署应用及测试体验 314   11.6 小结 314 附录 返回码及接口调用次数说明 316

869

社区成员

发帖
与我相关
我的任务
社区描述
本版块主要讨论微信支付开发接入过程中的技术问题。包括微信支付线上线下支付的接入,微信支付营销能力的开发等。
微信社交电子 技术论坛(原bbs)
社区管理员
  • 微信支付
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧