springboot对接微信退款

大家好,我又来了!!!
哎,我上一篇的文章。因为版权原因发布不出来。就是一个破解idea的方法。很简单,也超级好用。
如果又需要的话,可以私信小铁。我可以私发给你

一、微信退款

第三方微信的干活又来了,之前讲了微信授权和微信支付,我想大家对微信第三方的已经有了一定的了解了。今天咱们来讲讲微信退款。
还是先看微信支付的文档,点这里,直接跳转了
在这里插入图片描述
咱们先看看需要的参数,其实你能写出来微信支付的话,这个微信退款你也不会非常困难的。
在我看来的话,您比较疑惑的是 这个证书是怎么搞的。
好的,咱们主要来看看这个证书是怎么弄的。

二、证书下载

1)在微信商户平台–>账户中心–>账户设置–>API安全中下载微信提供的证书生成工具
在这里插入图片描述
2)填写商户信息,需要自己的商户号、商户名称。完成后,点击下一步
在这里插入图片描述
3)将软件生成的密钥字符串复制到微信商户平台。完成后,点击下一步
在这里插入图片描述
4)复制粘贴到商户后台后,提交请求串,证书串生成后,复制到“证书工具”中
在这里插入图片描述
5)这里粘贴商户后台生成的证书串,点击下一步,生成证书
在这里插入图片描述
6)这里证书已经生成成功,点击“查看证书文件”查看电脑本地的证书,提供给微信API使用
在这里插入图片描述
咱们已经下载完了,现在就开始安装吧!!
小铁在这里就不写了,请直接访问这里把,点击这里
好了,微信的证书现在已经安装完了吧。现在就开始写代码吧。

三、退款证书配置

public static String doRefund(String url, String data) throws Exception{
        KeyStore keyStore  = KeyStore.getInstance("PKCS12");
        //P12文件目录 证书路径,这里需要你自己修改,linux下还是windows下的根路径
        String filepath = "D:\\xhaccount\\src\\main\\resources\\";
        System.out.println("filepath->"+filepath);
        FileInputStream instream = new FileInputStream(filepath+"apiclient_cert.p12");
        try {
            keyStore.load(instream, "none".toCharArray());//这里写密码..默认是你的MCHID
        } finally {
            instream.close();
        }

        // Trust own CA and all self-signed certs
        SSLContext sslcontext = SSLContexts.custom()
                .loadKeyMaterial(keyStore, "none".toCharArray())//这里也是写密码的
                .build();
        // Allow TLSv1 protocol only
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslcontext,
                SSLConnectionSocketFactory.getDefaultHostnameVerifier());
        CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslsf)
                .build();
        try {
            HttpPost httpost = new HttpPost(url); // 设置响应头信息
            httpost.addHeader("Connection", "keep-alive");
            httpost.addHeader("Accept", "*/*");
            httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            httpost.addHeader("Host", "api.mch.weixin.qq.com");
            httpost.addHeader("X-Requested-With", "XMLHttpRequest");
            httpost.addHeader("Cache-Control", "max-age=0");
            httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
            httpost.setEntity(new StringEntity(data, "UTF-8"));
            CloseableHttpResponse response = httpclient.execute(httpost);
            try {
                HttpEntity entity = response.getEntity();

                String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println("结果"+jsonStr);
                EntityUtils.consume(entity);
                return jsonStr;
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }

    }

小铁把证书放在了这里,位置可以随便放,只要能找到就可以
加粗样式
咱们现在开始发送请求。

//退款
    public static Map refund(UserPayOrderVo userPayOrderVo) throws Exception {

        //创建请求地址
        String url = "https://api.mch.weixin.qq.com/secapi/pay/refund";

        Map<String, String> paramMap = new LinkedHashMap<>();


        paramMap.put("appid",WxConstant.appId);
        paramMap.put("mch_id",WxConstant.mchId);
        paramMap.put("nonce_str",WXPayUtil.generateNonceStr());
        paramMap.put("out_refund_no",WXPayUtil.generateNonceStr());
        paramMap.put("out_trade_no",userPayOrderVo.getPayOrderNumber()); //这个是订单号
        paramMap.put("refund_fee",moneyToShareTheMoney(userPayOrderVo.getPayMoney())+""); //这个是钱
        paramMap.put("total_fee",moneyToShareTheMoney(userPayOrderVo.getPayMoney())+"");
        paramMap.put("sign",WXPayUtil.generateSignature(paramMap,WxConstant.return_sign));

//        接收请求返回值
        String content = doRefund(url,WXPayUtil.mapToXml(paramMap));

        Map<String, String> resultMap = WXPayUtil.xmlToMap(content);
        if ("SUCCESS".equals(resultMap.get("return_code")) && "SUCCESS".equals(resultMap.get("result_code"))) {
            return resultMap;
        }
        throw new RuntimeException("微信调用失败");
    }

如果,您看了小铁的上一篇文章就会知道:“这里面的“WXPayUtil”都是小铁引入第三方的sdk”

		<!--微信支付-->
        <dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>

好了,如果您其他的信息没有填错的话,您的退款就可以成功了,快拿去试试去吧! 如果对您有帮助的话,就请您转发给您身边的程序员的朋友,小铁希望自己的文章能够帮到您和您的朋友。

如果,您显示签名错误,就请看看小铁的上一篇文章微信支付结尾的部分去吧!!!
还有几天,就过年了。或许这几天小铁的文章会停更,但不会迟到!!
最后小铁送大家一句话。

我不去想是否能够成功,既然选择了远方,便只顾风雨兼程!

加油,少年!!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值