收藏
回答

微信支付V3分账接口,添加分账接收方API,报参数错误

我检查了下 参数已经完全按照文档传的了,name字段也按官方的函数用平台证书加密了

实在找不出问题了,网上也找不到类似的demo。

报错为:应答的状态码不为200-299。status code[400]

相关代码如下

@Autowired
private CertificatesManagerService certificatesManagerService;

WechatConfig config =  SpringUtils.getBean(WechatConfig.class);

HttpPost httpPostAdd = new HttpPost("https://api.mch.weixin.qq.com/v3/profitsharing/receivers/add");

@Override
public void profitSharing(SharingDto param) throws Exception {
Verifier verifier = certificatesManagerService.getCertificate();
// 构造httpclient
httpClient = WechatPayHttpClientBuilder.create()
        .withMerchant(config.getMchId(), config.getMchSerialNo(), config.getPrivateKey())
        .withValidator(new WechatPay2Validator(verifier))
        .build();;



httpPostAdd.addHeader("Accept", "application/json");
httpPostAdd.addHeader("Content-type","application/json; charset=utf-8");
httpPostAdd.addHeader("Wechatpay-Serial",config.getMchSerialNo());


ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectMapper objectMapper = new ObjectMapper();


//敏感信息 分账的商户名称加密
String name = rsaEncryptOAEP(config.getName(),verifier.getValidCertificate());

//构造请求参数
ObjectNode rootNodeAdd = objectMapper.createObjectNode();
rootNodeAdd.put("sub_mchid", config.getPaymchid()) //子商户号
        .put("appid",config.getAppId()) //appid
        .put("type","MERCHANT_ID")
        .put("name",name)
        .put("account", config.getMchId()) //分润的服务商号
        .put("relation_type", "SERVICE_PROVIDER")
        .put("custom_relation", "代理商"); 



objectMapper.writeValue(bos, rootNodeAdd);
httpPostAdd.setEntity(new StringEntity(bos.toString("UTF-8"), "UTF-8"));


CloseableHttpResponse response = httpClient.execute(httpPostAdd);

}





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

2 个回答

  • Memory
    Memory
    2022-05-05

    贴请求参数和回参看看

    2022-05-05
    有用 1
    回复 20
    • tracymcladdy
      tracymcladdy
      2022-05-06
      应答的状态码不为200-299。
      2022-05-06
      回复
    • tracymcladdy
      tracymcladdy
      2022-05-06
      应答的状态码不为200-299。status code[400]
      2022-05-06
      回复
    • Memory
      Memory
      2022-05-06回复tracymcladdy
      同样的参数postman请求一下,看详细报错
      2022-05-06
      回复
    • Memory
      Memory
      2022-05-06回复tracymcladdy
      另外name字段,分账接收方为商户号不需要传
      2022-05-06
      回复
    • tracymcladdy
      tracymcladdy
      2022-05-06
      关于name字段:分账接收方类型是MERCHANT_ID时,是商户全称(必传) ,这是您文档描述的啊,又不是必传了么。。。
      2022-05-06
      回复
    查看更多(15)
  • tracymcladdy
    tracymcladdy
    2022-05-05

    已经搞定了,没折腾了,跳过这个接口直接商户后台配置了。

    直接商户后台分账功能可以添加分账的服务商。然后直接调用 请求分账的接口就行了。。

    这个添加分账接收方的接口就是个坑。。(怀疑还是name用平台公钥加密不对导致验签失败;或者因为我是商户后台添加服务商为分账接收方,按这个逻辑应该是商户发出请求,应该把签名构造的参数都由服务商换成商户的)


    2022-05-05
    有用
    回复
登录 后发表内容