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

作者:AlgerFan 时间:2022-02-15 16:50:52 

前言

支付宝推出一个沙箱环境,能够很好的模拟支付宝支付,并且还提供了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);以下写自己的订单退款代码
}

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

结语 

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

来源:https://blog.csdn.net/qq_40914991/article/details/80584843

标签:SpringBoot,支付宝,沙箱
0
投稿

猜你喜欢

  • C# 9使用foreach扩展的示例详解

    2023-01-27 08:35:56
  • 浅谈Ribbon、Feign和OpenFeign的区别

    2022-12-21 15:40:27
  • 详解Spring中的Environment外部化配置管理

    2023-11-23 05:24:24
  • Spring Boot启动端口修改方法

    2022-11-21 19:37:53
  • SpringBoot+Elasticsearch实现数据搜索的方法详解

    2023-04-17 02:45:46
  • 深入了解c#多线程编程

    2022-08-14 15:13:58
  • Android使用Retrofit实现自定义Converter解析接口流程详解

    2022-12-30 23:19:38
  • C#实现拼手气红包算法

    2023-07-27 13:52:18
  • Java爬取豆瓣电影数据的方法详解

    2021-12-12 16:21:06
  • C#中抽象方法与虚拟方法的区别

    2021-10-30 07:30:15
  • java 查找字符串所在的位置代码

    2023-12-22 21:48:17
  • 简单分析Java的求值策略原理

    2022-03-22 19:14:00
  • mybatis映射文件操作存储过程的实现

    2023-07-03 22:36:41
  • WPF开发技巧之花式控件功能扩展详解

    2022-07-13 05:56:52
  • java 出现Zipexception 异常的解决办法

    2022-11-07 11:03:03
  • C#图像处理之边缘检测(Sobel)的方法

    2022-05-12 02:05:50
  • C#实现两接口中同名方法实例分析

    2022-09-08 13:04:42
  • ObjectMapper 如何忽略字段大小写

    2023-07-31 07:07:18
  • SpringBoot整合dataworks的实现过程

    2023-11-29 12:13:09
  • java中List接口与实现类介绍

    2022-11-17 02:54:40
  • asp之家 软件编程 m.aspxhome.com