一敛劝、應(yīng)用場景
當(dāng)交易發(fā)生之后一段時(shí)間內(nèi)纷宇,由于買家或者賣家的原因需要退款時(shí),賣家可以通過退款接口將支付款退還給買家上陕,微信支付將在收到退款請(qǐng)求并且驗(yàn)證成功之后,按照退款規(guī)則將支付款按原路退到買家?guī)ぬ?hào)上释簿。
注意:
1、交易時(shí)間超過一年的訂單無法提交退款
2硼莽、微信支付退款支持單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號(hào)和設(shè)置不同的退款單號(hào)。申請(qǐng)退款總金額不能超過訂單金額醉途。 一筆退款失敗后重新提交砖茸,請(qǐng)不要更換退款單號(hào)隘擎,請(qǐng)使用原商戶退款單號(hào)
3凉夯、請(qǐng)求頻率限制:150qps,即每秒鐘正常的申請(qǐng)退款請(qǐng)求次數(shù)不超過150次
錯(cuò)誤或無效請(qǐng)求頻率限制:6qps劲够,即每秒鐘異常或錯(cuò)誤的退款申請(qǐng)請(qǐng)求不超過6次
4蹲姐、每個(gè)支付訂單的部分退款次數(shù)不能超過50次
二人柿、獲取證書
退款操作是需要安全證書的柴墩。在申請(qǐng)微信支付成功后凫岖,收到的相應(yīng)郵件后,可以按照指引下載API證書歼指,也可以按照以下路徑下載:微信商戶平臺(tái)(pay.weixin.qq.com)-->賬戶中心-->賬戶設(shè)置-->API安全 。根據(jù)操作下載安裝保存即可踩身。
三犀农、java代碼
WXPayConfig wxPayConfig = new WxConfig();
WXPay wxPay = null;
Map<String, String> data = new HashMap<>();
Map<String, String> refund = null;
try {
data.put("appid", WxConfig.APPID);
data.put("mch_id", WxConfig.mchId);
data.put("nonce_str", WXPayUtil.generateNonceStr());
data.put("out_refund_no", "xxxxxxx");
data.put("total_fee", totalFee);
data.put("refund_fee", refundFee);
if (!StringUtils.isEmpty(wxOrderNo)) {
data.put("transaction_id", wxOrderNo);
} else if (!StringUtils.isEmpty(orderNo)) {
data.put("out_trade_no", orderNo);
} else {
return ReturnMessage.fail(44, "請(qǐng)確認(rèn)訂單號(hào)");
}
wxPay = new WXPay(wxPayConfig);
refund = wxPay.refund(data);
System.out.println("申請(qǐng)退款結(jié)果:" + refund);
} catch (Exception e) {
e.printStackTrace();
}
if ("SUCCESS".equals(refund.get("return_code"))) {
return ReturnMessage.success(0, "退款成功", refund);
}
return ReturnMessage.fail(77, "退款失敗");
備注:如果想接受退款通知消息,可以添加參數(shù)notify_url赁濒,該參數(shù)必須是外網(wǎng)可以訪問的url。具體文檔中都有拒炎。掃碼支付開發(fā)者文檔
image.png
使用安全證書
class WxConfig extends WXPayConfig{
@Override
InputStream getCertStream() {
// 安全證書的保存地址
File file = new File(securityPath + "apiclient_cert.p12");
InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return inputStream;
}
}