调过的最难调的接口 /捂脸,不同位置的文档不同的参数,有的文档里面还找不到,参数报错原因找不到
参考文档:
支付宝小程序资金授权相关链接
支付宝资金API
支付宝商户后台
支付宝授权文档
依赖:
dependency groupIdcom.alipay.sdk/groupId artifactIdalipay-sdk-java/artifactId version3.4.49.ALL/version/dependency1.发起授权(下面的方法仅支持余额+银行卡(不支持花呗))
注意:这个订单号需要每次请求换一个新的,不然这个接口虽然调用成功,但是小程序唤起支付的时候会失败;
如果填写了extraParam,则使用信用授权
public String frozen(String orderName, String orderNo, Long totalAmount, String gid) { try { AlipayClient alipayClient = new DefaultAlipayClient(GET_WAY, APP_ID, PRIVATE_KEY, "json", CHARSET, PUBLIC_KEY, "RSA2"); AlipayFundAuthOrderAppFreezeRequest request = new AlipayFundAuthOrderAppFreezeRequest(); AlipayFundAuthOrderAppFreezeModel model = new AlipayFundAuthOrderAppFreezeModel(); model.setOrderTitle(orderName + "资金授权"); //替换为实际订单号 model.setOutOrderNo(orderNo); //替换为实际请求单号,保证每次请求都是唯一的(just like wx's nonce_str) model.setOutRequestNo(OrderNoUtil.genOrderNo()); //PRE_AUTH_ONLINE为固定值,不要替换 model.setProductCode("PRE_AUTH_ONLINE"); //格式为0.01 model.setAmount(MoneyUtil.trans(totalAmount)); //如果是信用授权 则下面注释的必须传 MapString, String extraParam = new HashMap(); extraParam.put("category", "RENT_LUGGAGE"); extraParam.put("outStoreCode", "G" + gid); extraParam.put("outStoreAlias", orderName); model.setExtraParam(JSON.toJSONString(extraParam)); //outStoreAlias将在用户端信用守护、支付信息、账单详情页展示 request.setBizModel(model); request.setNotifyUrl(NOTIFY_URL); AlipayFundAuthOrderAppFreezeResponse response = alipayClient.sdkExecute(request); if (response.isSuccess()) { return response.getBody(); } } catch (AlipayApiException e) { e.printStackTrace(); } return null;}2.发起授权(允许使用花呗等)
接口调用成功,小程序调起报错:订单参数异常,请重新下单后再发起付款。(ALIN42682)
//商户可用该参数指定用户可使用的支付渠道,本期支持商户可支持三种支付渠道,余额宝(MONEY_FUND)、花呗(PCREDIT_PAY)以及芝麻信用(CREDITZHIMA)。商户可设置一种支付渠道,也可设置多种支付渠道。model.setEnablePayChannels("{"payChannelType":"MONEY_FUND"},{"payChannelType":"PCREDIT_PAY"},{"payChannelType":"CREDITZHIMA"}]");// 如果上面的渠道里面有涉及到 花呗,则下面的两个参数比传(二选一,以PayeeUserId为准)model.setPayeeUserId(userId);//payee_user_id,Payee_logon_id不能同时为空//model.setPayeeLogonId("Payee_logon_id");3.授权转支付
注意:sellerId比传,可以去商户后台找到,不传的时候一直是 参数错误;
authNo非authCode
public String auth2trade(String orderNo, String authNo, String orderName, Long totalAmount, String openId) { try { AlipayClient alipayClient = new DefaultAlipayClient(GET_WAY, APP_ID, PRIVATE_KEY, "json", CHARSET, PUBLIC_KEY, "RSA2"); AlipayTradePayRequest request = new AlipayTradePayRequest(); request.setNotifyUrl(NOTIFY_URL); AlipayTradePayModel model = new AlipayTradePayModel(); // 预授权转支付商户订单号,为新的商户交易流水号 model.setOutTradeNo(orderNo); // 固定值PRE_AUTH_ONLINE model.setProductCode("PRE_AUTH_ONLINE"); // 填写预授权冻结交易号 model.setAuthNo(authNo); // 解冻转支付标题,用于展示在支付宝账单中 model.setSubject(orderName); // 结算支付金额(格式:0.01) model.setTotalAmount(MoneyUtil.trans(totalAmount)); // 填写卖家支付宝账户pid(必填) model.setSellerId(SELLER_ID); // 填写预授权用户uid,通过预授权冻结接口返回的payer_user_id字段获取(支付宝userId) model.setBuyerId(openId);// model.setStoreId("G" + goodsId); // 填写实际交易发生的终端编号,与预授权的outStoreCode保持一致即可// model.setBody(orderName + "授权转支付"); // 可填写备注信息 /* 预授权确认模式,授权转交易请求中传入,适用于预授权转交易业务使用,目前只支持 PRE_AUTH(预授权产品码) COMPLETE:转交易支付完成结束预授权,解冻剩余金额; NOT_COMPLETE:转交易支付完成不结束预授权,不解冻剩余金额 */ model.setAuthConfirmMode("NOT_COMPLETE"); request.setBizModel(model); AlipayTradePayResponse response = alipayClient.execute(request); log.info(JSON.toJSONString(response)); } catch (AlipayApiException e) { e.printStackTrace(); } return null;}4.取消冻结,用官方示例,没坑













