【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(三)---退款

这篇具有很好参考价值的文章主要介绍了【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(三)---退款。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用微信支付接口退款

准备工作

微信支付开发文档:https://pay.weixin.qq.com/docs/merchant/apis/jsapi-payment/create.html
【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(三)---退款,【微信支付】,java,微信,spring boot退款与查单的请求头类似,但是查单是GET请求,所以在构造签名的时候相对简单些,但是退款请求中有请求参数,在构造签名时,需要将请求体添加到请求头参数中。

开始开发

1、构造请求参数

查看微信支付开发文档,请求参数中refund_id/out_refund_no,transaction_id/out_trade_no这两个参数,一个是微信支付系统中的退款号以及订单号,一个是自己的系统中的退款号以及订单号,这里我们使用后者;其次必填的参数还有refund、total、currency、amount

		//构造请求参数
        Map data = new HashMap();
        data.put("out_trade_no", orderDao.getOrder_no());
        data.put("out_refund_no", orderDao.getRefund_order_no());
        Map amount = new HashMap();
        amount.put("refund", (int) (Double.parseDouble(orderDao.getPrice()) * 100));
        amount.put("total", (int) (Double.parseDouble(orderDao.getPrice()) * 100));

        amount.put("currency", "CNY");
        data.put("amount", amount);

2.构造请求头签名(具体方法类可以查看博主上篇文章)

⚠️:与查单不同的是,退款借口是post请求并且携带参数,在构建请求头签名时,getToken()中的第三个参数是请求体的json类型

		String schema = "WECHATPAY2-SHA256-RSA2048 ";
        HttpUrl httpurl = HttpUrl.parse("https://api.mch.weixin.qq.com/v3/refund/domestic/refunds");
        // 设置请求链接
        HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/refund/domestic/refunds");
        //设置请求头信息
        httpPost.setHeader("Authorization", schema + getToken("POST", httpurl, JSONObject.toJSONString(data)));
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-Type", "application/json");

        httpPost.setEntity(new StringEntity(JSONObject.toJSONString(data)));

        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        CloseableHttpResponse response = httpClient.execute(httpPost);

        // 获取响应状态码
        int statusCode = response.getStatusLine().getStatusCode();
        // 获取响应内容
        String responseBody = EntityUtils.toString(response.getEntity());
        // 关闭响应对象
        response.close();
        map.put("code", statusCode);
        map.put("data", responseBody);

3.完整接口代码

	@PostMapping("/refund_order")
    public Map<String, Object> refund_order(@RequestBody OrderDao orderDao) throws IOException, SignatureException, NoSuchAlgorithmException, InvalidKeyException {
    
        Map<String, Object> map = new HashMap<>();

        //构造请求参数
        Map data = new HashMap();
        data.put("out_trade_no", orderDao.getOrder_no());
        data.put("out_refund_no", orderDao.getRefund_order_no());
        Map amount = new HashMap();
        amount.put("refund", (int) (Double.parseDouble(orderDao.getPrice()) * 100)); // 我存的是string类型的单位为元的价格,所以需要转换成整形单位为分
        amount.put("total", (int) (Double.parseDouble(orderDao.getPrice()) * 100)); 

        amount.put("currency", "CNY");
        data.put("amount", amount);

        String schema = "WECHATPAY2-SHA256-RSA2048 "; //注意有一个空格
        HttpUrl httpurl = HttpUrl.parse("https://api.mch.weixin.qq.com/v3/refund/domestic/refunds");
        // 设置请求链接
        HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/refund/domestic/refunds");
        //设置请求头信息
        httpPost.setHeader("Authorization", schema + getToken("POST", httpurl, JSONObject.toJSONString(data)));
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-Type", "application/json");

        httpPost.setEntity(new StringEntity(JSONObject.toJSONString(data))); //设置请求参数

        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        CloseableHttpResponse response = httpClient.execute(httpPost);

        // 获取响应状态码
        int statusCode = response.getStatusLine().getStatusCode();
        // 获取响应内容
        String responseBody = EntityUtils.toString(response.getEntity());
        // 关闭响应对象
        response.close();
        map.put("code", statusCode);
        map.put("data", responseBody);
        return map;
    }

4.apifox测试结果

【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(三)---退款,【微信支付】,java,微信,spring boot文章来源地址https://www.toymoban.com/news/detail-803178.html

到了这里,关于【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(三)---退款的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java对接微信支付:JSAPI支付成功之“微信回调”

    承接上一篇微信支付,现在简单说一下 微信支付回调 目录 一、支付回调 二、微信回调地址问题 1.本地/上线测试 2.控制器调用接口(代码) 总结 当用户支付成功之后,支付平台会向我们指定的服务器接口发送请求传递订单支付状态数据 如果你是再本地进行测试,那就需要使用

    2024年02月12日
    浏览(35)
  • java微信公众号JSAPI支付以及所遇到的坑

    上周做了个支付宝微信扫码支付,今天总结一下。微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊。 笔记地址 http://note.youdao.com/noteshare?id=269ddffb1f95e69eafb281d054f9ff25sub=82AACBC2E6814133938D407BD3FF4737 先梳理下流程,对应的文档 微信统一下

    2024年02月08日
    浏览(45)
  • java微信小程序支付-回调(Jsapi-APIv3)

            准备:  接入前准备-小程序支付 | 微信支付商户平台文档中心 准备好了就可以获得( 第二点里需要的参数 ):         参数1 商户号 merchantId:xxxxxx(全是数字)         参数2 商户APIV3密钥 apiV3key:xxxxxxx(32位字母数字大小写串,开发自己准备的)         参

    2024年02月08日
    浏览(48)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年02月03日
    浏览(55)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包(包含支付出现的多次回调的问题解析,接口幂等性)

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年01月16日
    浏览(74)
  • 微信的 h5 支付和 jsapi 支付

    申请地址: https://pay.weixin.qq.com/ 如果你还没有微信商户号,请点击上面的链接进行申请,如果已经有了,可以跳过这一步 首先点击 账户中心 ▶ API安全 ▶ 申请API证书 申请详细步骤: https://kf.qq.com/faq/161222NneAJf161222U7fARv.html 首先点击 账户中心 ▶ API安全 ▶ 设置APIv3密钥 ▶

    2024年02月13日
    浏览(43)
  • 【微信公众号】微信 jsapi 支付大概流程

    jsapi 支付可运用于微信小程序和 h5 jsapi 支付不会弹出二维码(这点与 native 支付不同) jsapi 支付运用于移动端 native 支付运用于 PC 端 🔥 微信支付需要商家申请 商户号 ,商务号需要和小程序或公众号(服务号)进行绑定 💦 在微信商务平台可开通 native 支付、jsapi 支付或其

    2024年02月09日
    浏览(61)
  • JAVA接入小程序微信支付

    1、在 微信公众平台 注册应用,并保存好appId和appSecret 2、在微信支付商户平台 注册一个商户,保存好mchId(商户id)、api_key(支付密钥)、以及商户证书序列号。还需要将支付商户密钥文件下载放到项目resources目录中 (结构中包含的其他内容与支付无关) 1、导入jar包 2、在y

    2024年04月14日
    浏览(40)
  • uniapp微信小程序JSAPI支付前端生成签名,并调起微信支付

    签名方式使用的是SHA256withRSA 插件 npm install jsrsasign 使用

    2024年01月17日
    浏览(62)
  • 微信支付(JSAPI支付)/支付宝支付(手机网站支付)实现思路及实现方案-无源码

    停车系统 一个二维码同时支持微信及支付宝扫码付款,使用手机网站实现 临时车费用缴费二维码需要通知支持微信及支付宝。 用户缴纳的停车费直接到各个商户的账户上,不经过停车系统开发公司。 微信:使用微信服务商提供的服务 支付宝:使用支付服务商提供的服务 两

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包