SpringBoot整合支付宝沙箱支付

下载依赖

        <!-- ZXing Core 依赖 -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.4.1</version> <!-- 或者更高版本 -->
            <!-- 这个依赖包含了 ZXing 核心功能,包括条形码和二维码的编码和解码算法 -->
        </dependency>

        <!-- ZXing JavaSE 依赖 -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.4.1</version> <!-- 或者更高版本 -->
            <!-- 这个依赖包含了 ZXing 在 Java SE 环境下的实现,包括图像处理和图形用户界面相关的类 -->
        </dependency>

配置秘钥

登陆支付宝沙箱平台:小程序应用文档指引 - 支付宝文档中心 (alipay.com)

设置自定义秘钥

下载加密工具 小程序文档 - 支付宝文档中心

配置

alipay:  
  appId:          //id
  appPrivateKey:   //私钥
  alipayPublicKey:   //公钥
  notifyUrl:   //回调地址
  # 我的支付宝网关地址 (不需要改)
  gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do

新增配置类 AlipayTemplate

@ConfigurationProperties(prefix = "alipay")
@Component
@Data
public class AlipayTemplate {

 // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
 @Value("{alipay.appId}")

 public String appId;

 // 应用私钥,就是工具生成的应用私钥
 @Value("{alipay.merchantPrivateKey}")
 public String merchantPrivateKey;
 // 支付宝公钥,对应APPID下的支付宝公钥。
 @Value("{alipay.alipayPublicKey}")
 public String alipayPublicKey;

 // 支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息
 @Value("{alipay.notifyUrl}")
 public String notifyUrl;
 //同步通知,支付成功,一般跳转到成功页
 @Value("{alipay.returnUrl}")
 public String returnUrl;

 // 签名方式
 @Value("{alipay.signType}")
 private String signType;

 // 字符编码格式
 @Value("{alipay.charset}")
 private String charset;

 //订单超时时间
 private String timeout = "1m";
 // 支付宝网关;https://openapi-sandbox.dl.alipaydev.com/gateway.do
 @Value("{alipay.gatewayUrl}")
 public String gatewayUrl;

 public String pay(Order order) throws
         AlipayApiException {

  //1、根据支付宝的配置生成一个支付客户端
  AlipayClient alipayClient = new
          DefaultAlipayClient(gatewayUrl, appId, merchantPrivateKey,
          "json", charset, alipayPublicKey, signType);

  //2、创建一个支付请求,并设置请求参数
  AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
  alipayRequest.setReturnUrl(returnUrl);
  alipayRequest.setNotifyUrl(notifyUrl);

  Long id = order.getId();
  Long interfaceInfoId = order.getInterfaceInfoId();
  Double money = order.getMoney();
  String paymentMethod = order.getPaymentMethod();


  alipayRequest.setBizContent(" {\"out_trade_no\":\"" + id + "\","
          + "\"total_amount\":\"" + money + "\","
          + "\"subject\":\"" + interfaceInfoId
          + "\","
          + "\"body\":\"" + paymentMethod + "\","
          +
          "\"timeout_express\":\"" + timeout + "\","
          +
          "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
  String result = alipayClient.pageExecute(alipayRequest).getBody();
  //会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
  System.out.println("支付宝的响应:" + result);
  return result;
 }
}

新增业务类 AliPayController

@RestController
@RequestMapping("/alipay")
public class AliPayController {

 @Resource
 AlipayTemplate alipayTemplate;

 @GetMapping(value = "/pay", produces = "text/html")
 @ResponseBody
 public String pay(@RequestParam long orderId,double money) throws AlipayApiException {
  Order order = new Order();
  order.setId(orderId);
  order.setUserId(129904058947L);
  order.setInterfaceInfoId(294389472934L);
  order.setMoney(money);
  order.setPaymentMethod("支付宝");
  return alipayTemplate.pay(order);
 }

 @PostMapping("/notify")  // 注意这里必须是POST接口
 public String payNotify(HttpServletRequest request) throws Exception {
  if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
   System.out.println("=========支付宝异步回调========");

   Map<String, String> params = new HashMap<>();
   Map<String, String[]> requestParams = request.getParameterMap();
   for (String name : requestParams.keySet()) {
    params.put(name, request.getParameter(name));
    // System.out.println(name + " = " + request.getParameter(name));
   }

   String tradeNo = params.get("out_trade_no");
   String gmtPayment = params.get("gmt_payment");
   String alipayTradeNo = params.get("trade_no");
   // 支付宝验签
   if (Factory.Payment.Common().verifyNotify(params)) {
    // 验签通过
    System.out.println("交易名称: " + params.get("subject"));
    System.out.println("交易状态: " + params.get("trade_status"));
    System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
    System.out.println("商户订单号: " + params.get("out_trade_no"));
    System.out.println("交易金额: " + params.get("total_amount"));
    System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
    System.out.println("买家付款时间: " + params.get("gmt_payment"));
    System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
    // 更新订单状态
   }
  }
  return "success";
 }
}

启动项目访问 http://127.0.0.1:9003/alipay/pay?orderId=100&money=10000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值