记录一波支付宝和微信的退款功能

支付宝相对微信而已。退款,支付宝相对容易。有封装好的sdk。也有列代码。仔细看文档就能搞定。重点记录一波微信的退款。微信退款有两种。1种可以自己登陆微信后台,自己手动退款。可以配置一个退款成功的回掉url。第二种自己程序调用微信的退款接口。退款接口,微信要求。配置正书

@RequestMapping("/wxRefund")
  @ResponseBody
    public AjaxResult  wxRefund(String totalFee, String out_trade_no,String refund_amount,HttpServletRequest request, HttpServletResponse response){
   
    Map<Object, Object> map = new HashMap<Object, Object>();
        // 封装一个请求的参数model
        PrepayIdRequestHandler prepayReqHandler = new PrepayIdRequestHandler(request, response);
        int total_fee=(int) (Float.valueOf(totalFee)*100);
        System.out.println("total:"+total_fee);
        System.out.println("total_fee:" + total_fee);
        prepayReqHandler.setParameter("appid", ConstantUtil.APP_ID);
        prepayReqHandler.setParameter("mch_id", ConstantUtil.MCH_ID);
        String nonce_str = WXUtil.getNonceStr();
        prepayReqHandler.setParameter("nonce_str", nonce_str);
        prepayReqHandler.setParameter("out_trade_no", out_trade_no);//request.getRemoteAddr()
        String timestamp = out_trade_no;
        prepayReqHandler.setParameter("out_refund_no", timestamp);
        prepayReqHandler.setParameter("total_fee", String.valueOf(total_fee));
        prepayReqHandler.setParameter("refund_fee", String.valueOf(total_fee));
        //prepayReqHandler.setParameter("notify_url", "123/callbacks.do");
        /**
         * 注意签名(sign)的生成方式,具体见官方文档(传参都要参与生成签名,且参数名按照字典序排序,最后接上APP_KEY,转化成大写)
         */
     
        prepayReqHandler.setParameter("sign", prepayReqHandler.createMD5Sign());
        String createOrderURL = "https://api.mch.weixin.qq.com/secapi/pay/refund";
        /*String  retur = ClientCustomSSL.doRefund(createOrderURL, "123456");*/
        prepayReqHandler.setGateUrl(createOrderURL);


String retur=null;
try {
retur = prepayReqHandler.sendRefund();
} catch (Exception e) {
new AjaxResult("退款失败",false);
e.printStackTrace();
}
if (!StringUtils.isEmpty(retur)) {
Map<String, String> map1=null;
try {
map1 = XMLUtil.doXMLParse(retur);
} catch (JDOMException | IOException e) {
new AjaxResult("退款失败",false);
e.printStackTrace();
}


        String returnCode = (String) map1.get("return_code");
        if(returnCode.equals("SUCCESS")){
        System.out.println("成功");
        return new AjaxResult();
        }
        else {
        return new AjaxResult("退款失败",false);
}          
          }
else {
return new AjaxResult("退款失败",false);
}
    } 
    




猜你喜欢

转载自blog.csdn.net/lvping100/article/details/80227543