实现支付宝全额退款和部分退款功能 |
您所在的位置:网站首页 › 支付宝k4怎么退款 › 实现支付宝全额退款和部分退款功能 |
由于公司开发需要,特地花时间看了看,在此记录一下,废话不多说,直接上代码,代码里面都有注释 到官网查看文档: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 |