Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

账单下载相关接口有误 #3153

Closed
hIxiIan opened this issue Oct 25, 2023 · 5 comments
Closed

账单下载相关接口有误 #3153

hIxiIan opened this issue Oct 25, 2023 · 5 comments
Milestone

Comments

@hIxiIan
Copy link

hIxiIan commented Oct 25, 2023

提问前,请确保阅读过项目首页说明以及wiki开发文档相关内容,尤其是常见问题部分。完成内容后,请务必移除包括本句在内的无用内容,以免影响阅读,否则直接关闭,谢谢合作~

另外如果确认属于bug,而且已明确如何修复,请参考贡献指南直接提交PR,省的浪费时间在这里描述问题,非常感谢配合

简要描述

请简单概括描述下你所遇到的问题。
申请资金账单下载链接报账单文件不存在,微信官方接口文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_7.shtml

模块版本情况

  • WxJava 模块名: weixin-java-pay
  • WxJava 版本号: 4.5.0

详细描述

尽量详细描述。请不要使用截图,尽量使用文字描述,代码直接贴上来,日志则请附在后面所示区域。

public WxPayApplyBillV3Result applyFundFlowBill(WxPayApplyFundFlowBillV3Request request) throws WxPayException {
        String url;
        if (StringUtils.isBlank(request.getTarType())) {
            url = String.format("%s/v3/bill/fundflowbill?bill_date=%s&bill_type=%s", this.getPayBaseUrl(), request.getBillDate(), request.getAccountType());
        } else {
            url = String.format("%s/v3/bill/fundflowbill?bill_date=%s&bill_type=%s&tar_type=%s", this.getPayBaseUrl(), request.getBillDate(), request.getAccountType(), request.getTarType());
        }
        String response = this.getV3(url);
        return (WxPayApplyBillV3Result)GSON.fromJson(response, WxPayApplyBillV3Result.class);
    }

官方接口文档请求地址账单类型参数为account_type,sdk内部链接写成了bill_type,导致获取不到账单

日志

如果日志不多,直接使用md代码引用格式贴在此处,否则如果太长,请将日志放在 pastebin 或者其他地方,然后将其url地址贴在这里

2023-10-25 10:53:43.099 ERROR   --- [           main] c.g.b.w.service.impl.WxPayServiceImpl    : 
【请求地址】:https://api.mch.weixin.qq.com/v3/bill/fundflowbill?bill_date=2023-10-18&bill_type=FEES&tar_type=GZIP
【异常信息】:请求的账单文件不存在
{"RetCode":"0000","RetMsg":"成功","Status":"SUCCESS","FileList":[]}
@papalian
Copy link

papalian commented Oct 25, 2023 via email

@hIxiIan
Copy link
Author

hIxiIan commented Oct 25, 2023

获取异常退票账单,官方接口文档https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_8_4.shtml

sdk内部实现:

/**
     * 按日下载提现异常文件API
     * 适用对象:服务商
     * 请求URL:https://api.mch.weixin.qq.com/v3/merchant/fund/withdraw/bill-type/{bill_type}
     * 请求方式:GET
     *
     * @param billType 账单类型
     *                 NO_SUCC:提现异常账单,包括提现失败和提现退票账单。
     *       示例值:NO_SUCC
     * @param billDate 账单日期 表示所在日期的提现账单,格式为YYYY-MM-DD。
     *                 例如:2008-01-01日发起的提现,2008-01-03日银行返回提现失败,则该提现数据将出现在bill_date为2008-01-03日的账单中。
     *       示例值:2019-08-17
     * @return 返回数据
     * @throws WxPayException the wx pay exception
     */
    @Override
    public PreOrderWithAuthResult merchantFundWithdrawBillType(String billType, String billDate) throws WxPayException {
        String url = String.format("%s/v3/merchant/fund/withdraw/bill-type/%s", payService.getPayBaseUrl(), billType);
        String query = String.format("?bill_date=%s", billDate);
        String response = payService.getV3(url + query);
        return GSON.fromJson(response, PreOrderWithAuthResult.class);
    }

PreOrderWithAuthResult 类与官方接口文档的响应参数完全不匹配:
官方响应:
image

sdk PreOrderWithAuthResult:

public class PreOrderWithAuthResult implements Serializable {
  private static final long serialVersionUID = 1L;

  /**
   * <pre>
   * 字段名:商家核身单号
   * 变量名:authenticate_number
   * 是否必填:是
   * 类型:string[1, 64]
   * 描述:
   *  商户系统内部的商家核身单号,要求此参数只能由数字、大小写字母组成,在服务商内部唯一
   *  示例值:mcdhehfgisdhfjghed39384564i83
   * </pre>
   */
  @SerializedName(value = "authenticate_number")
  private String authenticateNumber;

  /**
   * <pre>
   * 字段名:用户标识
   * 变量名:authenticate_number
   * 是否必填:是
   * 类型:string[1, 64]
   * 描述:
   *  用户在商户对应appid下的唯一标识
   * 示例值:onqOjjmo8wmTOOtSKwXtGjg9Gb58
   * </pre>
   */
  @SerializedName(value = "openid")
  private String openid;

  /**
   * <pre>
   * 字段名:商户号
   * 变量名:mchid
   * 是否必填:是
   * 类型:string[1, 32]
   * 描述:
   *  微信服务商商户的商户号,由微信支付生成并下发
   *  示例值:1111111
   * </pre>
   */
  @SerializedName(value = "mchid")
  private Integer mchid;

  /**
   * <pre>
   * 字段名:特约商户号
   * 变量名:sub_mchid
   * 是否必填:是
   * 类型:string[1, 32]
   * 描述:
   *  微信服务商下特约商户的商户号,由微信支付生成并下发
   *  示例值:1900000109
   * </pre>
   */
  @SerializedName(value = "sub_mchid")
  private String subMchid;

  /**
   * <pre>
   * 字段名:授权token
   * 变量名:token
   * 是否必填:是
   * 类型:string[1, 1024]
   * 描述:
   *  授权token
   *  示例值:abcdefghijklmn
   * </pre>
   */
  @SerializedName(value = "token")
  private String token;

  /**
   * <pre>
   * 字段名:token有效时间
   * 变量名:expires_in
   * 是否必填:是
   * 类型:int
   * 描述:
   * token有效时间,单位秒
   * 示例值:300
   * </pre>
   */
  @SerializedName(value = "expires_in")
  private Integer expiresIn;
}

@binarywang
Copy link
Owner

欢迎直接提供修复代码并提交PR

@binarywang binarywang modified the milestones: 4.5.6, 4.5.7 Oct 29, 2023
@binarywang
Copy link
Owner

#3102 貌似已经修复了,麻烦下次可以先看看最新本代码

@binarywang
Copy link
Owner

#3154 修复了第二个问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants