当前位置: 首页 > 编程笔记 >

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

刘成礼
2023-03-14
本文向大家介绍SpringBoot集成支付宝沙箱支付(支付、退款),包括了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);以下写自己的订单退款代码
}

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

结语 

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍springboot 集成支付宝支付的示例代码,包括了springboot 集成支付宝支付的示例代码的使用技巧和注意事项,需要的朋友参考一下 最简单的springboot集成支付宝 1 注册沙箱 沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下 然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载一个生成密钥的工具。然后解压按照里面的rea

  • 1、新版支付宝支付配置 配置支付宝支付之前,需要到支付宝商家中心开通手机网站应用和电脑网站应用两个产品。 产品开通链接:快捷手机wap支付 电脑网站支付 一个工作日即可通过审核,完成产品签约。 接下来,介绍支付宝支付配置教程。 第一步 登录商城后台,设置->交易设置->支付配置 ,选择支付宝支付,点击配置,进入到支付宝支付参数配置界面,选择新版支付宝。 需要我们配置应用APPID、应用私钥、应用公

  • 本文向大家介绍Android集成支付宝支付功能示例,包括了Android集成支付宝支付功能示例的使用技巧和注意事项,需要的朋友参考一下 公司项目中需要支付功能,现在支付宝、微信支付很方便,也很多人使用,因此,他们是首选。在此记录一下支付宝集成过程,下期为微信支付,敬请期待 首先去支付宝官网下载其最新的Android的SDK集成Dmeo 支付宝 选择SDK&Dmeo进行下载 将支付宝jar包添加项目

  • 本文向大家介绍支付宝支付开发——当面付条码支付和扫码支付实例,包括了支付宝支付开发——当面付条码支付和扫码支付实例的使用技巧和注意事项,需要的朋友参考一下 本文介绍支付宝中当面付下属的条码支付、扫码支付、订单查询、退款申请的集成开发过程。  本文分为以下五个部分: 条码支付和扫码支付介绍 申请应用 密钥生成及配置 API及SDK集成 条码支付、扫码支付、订单查询、退款申请  一、条码支付及二维码支

  • 本文向大家介绍SpringBoot接入支付宝支付的方法步骤,包括了SpringBoot接入支付宝支付的方法步骤的使用技巧和注意事项,需要的朋友参考一下 支付宝今年推出了新的转账接口alipay.fund.trans.uni.transfer(升级后安全性更高,功能更加强大) ,老转账接口alipay.fund.trans.toaccount.transfer将不再维护,新老接口的一个区别就是新接口

  • 本文向大家介绍python支付宝支付示例详解,包括了python支付宝支付示例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python支付宝支付示例代码,供大家参考,具体内容如下 项目演示: 1、输入金额 2、扫码支付: 3、支付完成: 一、注册账号 https://openhome.alipay.com/platform/appDaily.htm?tab=info 二、设置