美文网首页工作生活
微信支付之退款

微信支付之退款

作者: shmilylyp | 来源:发表于2019-07-05 14:49 被阅读0次

一、应用场景

当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。
注意:
1、交易时间超过一年的订单无法提交退款
2、微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号
3、请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次
错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
4、每个支付订单的部分退款次数不能超过50次

二、获取证书

退款操作是需要安全证书的。在申请微信支付成功后,收到的相应邮件后,可以按照指引下载API证书,也可以按照以下路径下载:微信商户平台(pay.weixin.qq.com)-->账户中心-->账户设置-->API安全 。根据操作下载安装保存即可。

三、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, "请确认订单号");
            }
            wxPay = new WXPay(wxPayConfig);
            refund = wxPay.refund(data);
            System.out.println("申请退款结果:" + refund);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if ("SUCCESS".equals(refund.get("return_code"))) {
            return ReturnMessage.success(0, "退款成功", refund);
        }
        return ReturnMessage.fail(77, "退款失败");

备注:如果想接受退款通知消息,可以添加参数notify_url,该参数必须是外网可以访问的url。具体文档中都有。扫码支付开发者文档

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;
    }
}

相关文章

  • 微信APP支付和退款(JAVA)

    微信APP支付和退款 微信支付流程说明 Java demo实例 退款 转账 1、微信支付 1 微信支付流程说明 本...

  • 微信支付与退款

    微信支付和微信退款大致相同,只不过微信支付有一个回调的过程,而退款只需要看返回的状态就可以了。 一、微信小程序支付...

  • 微信支付之退款

    一、应用场景 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,...

  • 微信支付之微信退款

    官方文档 无论刷卡支付、微信公众号支付、扫码支付、H5支付、APP支付等都有申请退款API并且接口一样,本篇文章就...

  • 微信支付--PHP 封装

    微信支付开发文档 类的使用方法 笔者阅读微信支付SDK里面的example之后,把下单,查询订单,退款,查询退款等...

  • 对接微信和支付宝退款api

    1、微信退款 参考:(41条消息) weixin-java-pay实现公众号微信支付与退款_earthhour的博...

  • 支付宝退款

    支付宝退款 支付宝退款可微信退款差不多 只是配置文件和第三方调用不同支付宝没有退款回调通知

  • 黑阈如何支付并确认

    本文包括三个部分: 微信支付及确认 历史支付宝确认 Play 支付及确认 如果支付有误,请参照 退款政策 退款。 ...

  • SSM实现微信JSAPI支付以及退款

      微信支付方式有很多,这里主要记录网页微信支付唤起以及退款的主要流程,微信JSAPI支付必传openid,这里需...

  • 微信支付和微信退款的金额的一些坑

    金额的格式限制 微信支付、微信退款的金额的限制(下文仅仅说微信支付),以前只知道,微信的支付金额的是按照分为单位的...

网友评论

    本文标题:微信支付之退款

    本文链接:https://www.haomeiwen.com/subject/kqwlhctx.html