实现支付宝全额退款和部分退款功能

您所在的位置:网站首页 支付宝k4怎么退款 实现支付宝全额退款和部分退款功能

实现支付宝全额退款和部分退款功能

2023-03-23 00:58| 来源: 网络整理| 查看: 265

由于公司开发需要,特地花时间看了看,在此记录一下,废话不多说,直接上代码,代码里面都有注释

到官网查看文档:https://docs.open.alipay.com/api_1/alipay.trade.refund

之前必须要引入相应jar包

maven依赖如下:

              install-alipay-sdk                         clean                                                      ${project.basedir}/libs/alipay-sdk-java20171026141113.jar                             com.alipay                             alipay-sdk                             20171026141113                             jar                             true                                                                               install-file                              

            com.alipay             alipay-sdk             20171026141113

import org.slf4j.Logger; import org.slf4j.LoggerFactory;   import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.AlipayTradeRefundModel; import com.alipay.api.request.AlipayTradeRefundRequest; import com.alipay.api.response.AlipayTradeRefundResponse;  //全额退款 public class AlipayUtil {          private static final Logger LOGGER = LoggerFactory.getLogger(AlipayUtil.class);             //商户的appid     public static String APP_ID="";     //支付宝退款请求的网关     private static String requestUrl = "https://openapi.alipay.com/gateway.do";     //用户自己生成的私钥     public static String PRIVATE_KEY = "";     //支付宝公钥     public static String ALIPAY_PUBLIC_KEY  = "";          //编码级别     private static String CHARSET = "UTF-8";       public static String refundOrder(AliRefundTO aliRefundTO){       System.out.println("开始调用支付宝加密。。。");           //实例化客户端         AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, APP_ID, PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");         //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。                      AlipayTradeRefundModel refundModel = new AlipayTradeRefundModel();         refundModel.setTradeNo(aliRefundTO.getTrade_no());         refundModel.setRefundAmount(aliRefundTO.getRefund_amount());         refundModel.setRefundReason("商品退款");         //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay         AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();         request.setBizModel(refundModel);         try{             AlipayTradeRefundResponse response = alipayClient.execute(request);             System.out.println(response.getMsg()+"\n");             System.out.println(response.getBody());         }catch(Exception e){             e.printStackTrace();             LOGGER.error("支付宝退款错误!",e.getMessage());                     }             return "";               }          public static void main(String[] arg){           AliRefundTO aliRefundTO=new AliRefundTO();           aliRefundTO.setRefund_amount("0.01");//金额           aliRefundTO.setTrade_no("xxxxxxxxxxxxxxxxxxxx");//设置支付宝流水号           String res=refundOrder(aliRefundTO);       } }

//一个订单部分退款

import org.apache.commons.lang.RandomStringUtils;

import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradeRefundRequest; import com.alipay.api.response.AlipayTradeRefundResponse;

public class AlipayRefundUtil {      /**  支付宝退款接口      * @param out_trade_no 订单支付时传入的商户订单号,不能和支付宝交易号(trade_no)同时为空。      * @param trade_no 支付宝交易号      * @param refund_amount 需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数      * @return 将提示信息返回      */     public  synchronized static  String alipayRefundRequest(String out_trade_no,String trade_no,double refund_amount) {         String returnStr = null;         String out_request_no=RandomStringUtils.randomAlphanumeric(13);//随机数  不是全额退款,部分退款必须使用该参数,同一个订单,不同的out_request_no代表部分退款         try {             AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","商户的appid","用户自己生成的私钥","JSON", "utf-8", "支付宝公钥", "RSA2");             AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();             request.setBizContent("{" +                     "\"out_trade_no\":\"" + out_trade_no + "\"," +                     "\"trade_no\":\"" + trade_no + "\"," +                     "\"refund_amount\":\"" + refund_amount + "\"," +

                    "\"out_request_no\":\"" + out_request_no+ "\"," +                     "\"refund_reason\":\"正常退款\"" +                     " }");             AlipayTradeRefundResponse response;             response = alipayClient.execute(request);             if (response.isSuccess()) {                 System.out.println("支付宝退款成功");             } else {                 returnStr = response.getSubMsg();//失败会返回错误信息             }

        } catch (Exception e) {             e.printStackTrace();         }         return returnStr;     }

    public static void main(String str[]){                String strq=  alipayRefundRequest("","XXXXXX",0.01D);//第一个参数和第二个参数必须填一个       System.out.println(strq);     }

}

到此,就可以实现醍醐宝退款功能了,还是很简单的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3