SpringBoot集成支付宝沙箱支付(支付、退款)

前言

支付宝推出一个沙箱环境,能够很好的模拟支付宝支付,并且还提供了demo,但demo是一个普通web项目,怎么整合到Spring Boot项目呢,其实很简单

简单配置请参照支付宝沙箱支付开发文档

一、支付部分

AlipayConfig配置:我使用的是页面跳转同步通知,返回路径return_url为公网访问地址,也可以使用localhost,且不能携带参数,APPID、商户私钥、支付宝公钥和支付宝网关换为自己的。

public class AlipayConfig{
    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    public static String app_id = "2016091600523365";

    // 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "商户私钥";
    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "支付宝公钥";
    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "http://工程公网访问地址";

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String return_url = "http://工程公网访问地址";

    // 签名方式
    public static String sign_type = "RSA2";

    // 字符编码格式
    public static String charset = "utf-8";

    // 支付宝网关
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

    // 支付宝网关
    public static String log_path = "C:\\";


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

    /**
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @param sWord 要写入日志里的文本内容
     */
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
            writer.write(sWord);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

支付请求接口:

@RequestMapping("ali")
    public void ali(HttpServletResponse response, HttpServletRequest request) throws IOException, AlipayApiException {
        ordersService.ali(response,request);
    }

ServiceImpl层:

 

@Override
public void ali(HttpServletResponse response, HttpServletRequest request) throws AlipayApiException, IOException{
        //设置编码
        response.setContentType("text/html;charset=utf-8");

        PrintWriter out = response.getWriter();
        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
        //设置请求参数
        AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest();
        aliPayRequest.setReturnUrl(AlipayConfig.return_url);
        aliPayRequest.setNotifyUrl(AlipayConfig.notify_url);

        //商户订单号,后台可以写一个工具类生成一个订单号,必填
        String order_number = new String(订单号);
        //付款金额,从前台获取,必填
        String total_amount = new String(付款金额);
        //订单名称,必填
        String subject = new String("支付宝沙箱支付(名称随便起)");
        aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\","
                + "\"total_amount\":\"" + total_amount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        //请求
        String result = alipayClient.pageExecute(aliPayRequest).getBody();
        //输出
        out.println(result);//以下写自己的订单代码
}

 

其中:

 

PrintWriter out = response.getWriter();
out.println(result);

是将支付宝请求输出在页面上。

二、退款

 ServiceImpl层:

//退款
@Override
public void refund(HttpServletResponse response,HttpSession session) throws IOException, AlipayApiException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    //获得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
    //设置请求参数
    AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
    //商户订单号,必填
    String out_trade_no = new String(订单号);
    //需要退款的金额,该金额不能大于订单金额,必填
    String refund_amount = new String(退款金额);
    //标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
    String out_request_no = new String(UUID.randomUUID().toString());

    alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
            + "\"refund_amount\":\""+ refund_amount +"\","
            + "\"out_request_no\":\""+ out_request_no +"\"}");
    //请求
    String result = alipayClient.execute(alipayRequest).getBody();
    //输出
    out.println(result);以下写自己的订单退款代码
}

 

 

退款可按照订单号或者支付宝订单号进行退款,博主采用的是按订单号退款。

 

 

结语 

以上是沙箱接入的简要步骤,希望能帮到其他人。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlgerFan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值