收藏
回答

[第三方平台]授权后回调URI对redirect_uri中的自定义参数转义错误导致回调失败

在该页面内,有如下说明:

https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Authorization_Process_Technical_Description.html

“方式二:点击移动端链接快速授权 第三方平台方可以生成授权链接,将链接通过移动端直接发给授权管理员,管理员确认后即授权成功。”

其中,参数“redirect_uri”在“步骤 4:授权后回调 URI,得到授权码(authorization_code)和过期时间”时,如果redirect_uri中存在自定义参数并按&拼接,则其&会被微信服务器变成&,导致回调失败。

例子:

假设用户的redirect_uri为:

http://127.0.0.1/test/?a=1&b=2&c=3


通过RFC 3986 URL编码后成为

http%3A%2F%2F127.0.0.1%2Ftest%2F%3Fa%3D1%26b%3D2%26c%3D3


拼接后得到移动授权链接:

https://mp.weixin.qq.com/safe/bindcomponent?action=bindcomponent&auth_type=3&no_scan=1&component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=http%3A%2F%2F127.0.0.1%2Ftest%2F%3Fa%3D1%26b%3D2%26c%3D3&auth_type=xxx&biz_appid=xxxx#wechat_redirect


最终回调时,微信服务器把redirect_uri中的&变成&,导致返回如下地址:

http://127.0.0.1/test/?a=1&b=2&c=3&auth_code=xxxxxxxxxxxxxxxxxx&expires_in=3600


结果第三方平台无法获取自定义参数b和c,导致回调业务失败。


===============

查了查,这个bug似乎很早有人提,但不知道为什么没人受理。


相关例子:https://developers.weixin.qq.com/community/develop/doc/0004a019c24f48fdfba74d84551000

回答关注问题邀请回答
收藏

2 个回答

  • 凯瑟琳
    凯瑟琳
    2020-05-27

    我也遇到了这个问题,顶!

    2020-05-27
    有用 1
    回复 5
    • 一半海水一半火焰
      一半海水一半火焰
      2020-07-17
      亲,解决了吗?我现在也遇到这个问题了
      2020-07-17
      回复
    • 你才到碗里去
      你才到碗里去
      2020-10-13
      亲,解决了吗,我现在也遇到了这个问题
      2020-10-13
      回复
    • 你才到碗里去
      你才到碗里去
      2020-10-13
      看到请回应,着急
      2020-10-13
      回复
    • tian
      tian
      2021-02-23
      亲,解决了吗?我现在也遇到这问题了
      2021-02-23
      回复
    • 凯瑟琳
      凯瑟琳
      2021-05-07
      因为我们就是第三方平台,所以我们自己使用 html_entity_decode 和 parse_str 解决了 & 的问题
      2021-05-07
      回复
  • 易~
    易~
    2021-11-16
    encode a=1&b=2&c=3  ==>  a%3D1%26b%3D2%26c%3D3
    
    state=a%3D1%26b%3D2%26c%3D3
    
    redirect_uri=http%3A%2F%2F127.0.0.1%2Ftest%2F%3Fstate%3Da%253D1%2526b%253D2%2526c%253D3
    
    回调后接收到的参数: state: a=1&b=2&c=3,自己再解析成所需参数
    
    2021-11-16
    有用
    回复
登录 后发表内容
问题标签