收藏
回答

平台收付通-电商交易解决方案中添加分账接收方,name字段设计不合理

平台收付通-电商交易解决方案中添加分账接收方

name字段表示需要加密,但是长度只有256个字符。我以为他验证的是加密后的字段的长度,调用发现直接把请求的内容加密字段的长度限制了。任何字段通过微信支付公钥加密后都会超过256子字符,那我应该怎么提交呢?

我的请求参数如下:

{
"appid":"wx718d228016e92507",
"name":"ZwbIjwGF9tJ2bS/9QS6wPfn3c9LEEnhGFKAo/EkvMjEjwOGuQp4oG7gAGZmXkoN85z8u0JyyNQm4VOLShPNjItOjw/Znei3xNVtWVCc7ccoVnqVYKpcm3yNKD3wHcnSp1j8s21skvyvIppNWCYDsaH2S4idA/ola4jBDreatR53kAUwn7NtMrYf8STJIc8w7NMymIWu4LScsmEB80sM8Q3gyshazrvW0kbVLXwV1v0jLbQoub8tP77eIRY8Y4sfKX/FhAHzqFc7fV6DytIK2ZtVXS2qY+Hkzg0nKbKzkl2V2A1ffoaig9ePAmQjraNvPeRakqEx/va2eJNqFRCtaqw\u003d\u003d",
"relation_type":"PLATFORM",
"type":"MERCHANT_ID",
"account":"170XXX7918"
}

响应体:

{
"code":"PARAM_ERROR",
"detail":{"location":"body","value":344},
"message":"输入源“/body/name”映射到值字段“接收方名称”字符串规则校验失败,字符数 344,大于最大值 256"
}

已排除转义的问题,转义后加密字段的长度还是344个字符,超过接口规定的256个字符

有人遇到过吗?感觉是微信支付的bug

最后一次编辑于  10-16
回答关注问题邀请回答
收藏

3 个回答

  • 支付社区运营
    支付社区运营
    10-16

    这里编码有问题 辛苦调整下重试

    10-16
    有用
    回复 4
    • Fighter
      Fighter
      发表于小程序端
      10-16

      这个是加密生成的,还是一样。同样是name普通账户分账的接口是1024字段,为什么这边是256呢? 加密后base64都是344字符

      10-16
      回复
    • 支付社区运营
      支付社区运营
      10-16回复Fighter
      你好,name按加密规则计算传递密文即可。另外,经过我查看最新文档的分账产品接口中的name都是1024,辛苦发下你参考的文档链接协助核实。
      10-16
      回复
    • Fighter
      Fighter
      发表于小程序端
      10-16回复支付社区运营

      https://pay.weixin.qq.com/doc/v3/partner/4012477758 这边文档是256个字符。1024是服务商分账的,其实这个是对的

      10-16
      回复
    • Fighter
      Fighter
      10-16回复支付社区运营
      这个能帮忙确认一下吗,两个地方的字段限制不一样,很有可能是接口限制错了
      10-16
      回复
  • loaf
    loaf
    10-16

    https://developers.weixin.qq.com/community/pay/doc/000ac4c2050110b30833da1ce66000


    RSA签名签名值在传输或存储时,可能会采用特定的编码方式(如Base64编码)。编码方式可能会增加签名的字节数不够3的倍数会用=号补齐。例如,Base64编码会将每3个字节的数据编码为4个字节的输出,从而增加签名的字节数,签名值的长度256经过Base64编码到344位。你的=是被转义了 所以校验报错了

    10-16
    有用
    回复 6
    • Fighter
      Fighter
      发表于小程序端
      10-16

      但是示例代码要去就是用base64转义的。哪我应该怎么解决?不转义就base就可以转发?

      10-16
      回复
    • loaf
      loaf
      10-16回复Fighter
      你没看文档中的签名吗  所有签出来的几乎都是一个=或者两个==结尾的。你要用Base后的字符 不要转义就可以过了
      10-16
      回复
    • Fighter
      Fighter
      10-16
      Base64后不转义还是过不了,跟base64无关,你上面的文档中也说了,总长度是344个字符,这边限制是256个字符
      10-16
      回复
    • Fighter
      Fighter
      10-16
      10-16
      回复
    • loaf
      loaf
      10-17回复Fighter
      都说了344长度是没问题的。因为限制的256的Base前的长度,Base后344长度没问题的。你长度过不了你检查下你实际传的密文内容是什么,或者找在线技术支持查下实际请求的参数是什么https://support.pay.weixin.qq.com/aidevhelper?from=wechatpaydoc
      10-17
      回复
    查看更多(1)
  • Memory (私信不回复)
    Memory (私信不回复)
    10-16

    2048-bit 的 RSA 密钥,密文长度最大就是 256 字节,怎么可能会超出呢?

    你 body 请求编码有问题的,"="被转义了

    10-16
    有用
    回复 10
    • Fighter
      Fighter
      发表于小程序端
      10-16

      base64转换以后是344字符。按照微信文档中的实例代码写的

      10-16
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      10-16回复Fighter
      你请求的内容被转义了
      10-16
      回复
    • Fighter
      Fighter
      发表于小程序端
      10-16回复Memory (私信不回复)

      https://pay.weixin.qq.com/doc/v3/partner/4013059044 参考的这边的java代码,用base64转义的

      10-16
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      10-16回复Fighter
      这里是等号,不是\u003d\u003d,你这都看不出来吗?
      10-16
      回复
    • Fighter
      Fighter
      10-16回复Memory (私信不回复)
      这个就是==的base64阿,怎么会看不出来呢,我都把转义都取消了,这个接口还是报一一样的错误,分本不是转义的问题吧。
      10-16
      回复
    查看更多(5)
登录 后发表内容