支付宝退款接口(java)

查看支付宝退款文档:https://doc.open.alipay.com/docs/api.htm?spm=a219a.7629065.0.0.PbaltX&apiId=759&docType=4

官方文档写的很详细了,按照文档修改一下参数调试一下就可以,错误大多出现在参数上面。

看完公共请求参数和请求参数后,便看一下请求实例,把请求实例复制黏贴一下到自己代码中:


请求参数上面显示的很明显 必须的参数其实只有两个:商户订单号(out_trade_no)和支付宝交易号(trade_no) 二选一即可、另一个必须请求参数是:退款金额(refund_amount

导入sdk


导入到项目中

下面写自己的代码

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.rongke.web.config.AlipayConfig;


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="BZ35581R88001";//随机数  不是全额退款,部分退款使用该参数
        try {
            AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.request_url, AlipayConfig.app_id, AlipayConfig.private_refund_key, AlipayConfig.format, AlipayConfig.input_charset, AlipayConfig.ali_refund_key, "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("109adb5aa64878314ab184e44f4c6f07","",0.1D);
        System.out.println(strq);
    }


}


公共参数说明:

这些参数去支付宝商户平台查看

app_id : 支付宝商户平台    账号管理  中查看 


your private_key :密钥 需要将生产的公钥上传至支付宝、密钥留在代码中使用

alipay_public_key :支付宝公钥

RSA2:签名算法类型 之前用RSA 现在用RSA2 弄错了会报签名不匹配错误

其他参数不用修改

参数查看位置


RSA2 应用公钥是 可以修改的,需要用到验证码。公钥、私钥生成工具官网上面有

下面开始调试

我在调试出现的错误:第一个 就是签名不匹配问题,原因签名算法类型用的是RSA 修个成RSA2后没问题

第二个错误:参数无效 最有可能是你的私钥弄错,要么就是你的请求参数 格式弄错

运行后查看支付宝交易退款结果:


//===========================下面是AlipayConfig工具类===========

public class AlipayConfig {

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓


// 合作身份者ID,以2088开头由16位纯数字组成的字符串
public static String partner = "2088521599027790";
public static String seller_email = "[email protected]";
// 商户的私钥
public static String private_key = "";
//商户的私钥 退款使用
public static  String private_refund_key="";
// 支付宝的公钥,无需修改该值
public static String ali_public_key  = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB";
// 支付宝的公钥,退款使用
public static  String ali_refund_key="";
// 调试用,创建TXT日志文件夹路径,见AlipayCore.java类中的logResult(String sWord)打印方法。
public static String log_path = "D:\\";
// 字符编码格式 目前支持 gbk 或 utf-8
public static String input_charset = "utf-8";
// 参数返回格式,只支持json
public static String format = "json";
// 签名方式 不需修改
public static String sign_type = "RSA";
public static String request_url = "https://openapi.alipay.com/gateway.do";
public static String app_id ="";
}


猜你喜欢

转载自blog.csdn.net/mugua_1252377669/article/details/78269835