SpringBoot集成阿里云支付

阿里云支付

支付宝官方文档说明

https://opendocs.alipay.com/open/203/107091

开发准备

1、登录支付宝开发平台(支付宝账号)

地址: https://open.alipay.com/platform/home.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、生成私钥公钥

参照官方文档即可,按照步骤来保存私钥与公钥:官方文档

Java集成支付宝支付

1、加入相关Jar

//官方网站:https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java

//实例:
<dependency>
     <groupId>com.alipay.sdk</groupId>
     <artifactId>alipay-sdk-java</artifactId>
     <version>4.9.28.ALL</version>
</dependency>

2、新建支付宝的Config

package com.example.config;

import org.springframework.context.annotation.Configuration;

/**
 * @Description:支付宝接口
 */
@Configuration
public class AliPayConfig {

    /**
     * netApp映射地址
     */
    private static String neturl = "http://localhost:8080";
    /**
     * 应用的APPID
     */
    public static String app_id = "你的APPID";
    /**
     * 商户私钥,您的PKCS8格式RSA2私钥  刚刚生成的私钥直接复制填写(填写自己利用第三方工具生成的私钥)
     */
    public static String merchant_private_key = "你的商品私钥";
    /**
     * 支付宝公钥,对应APPID下的支付宝公钥(填写沙箱环境中的支付宝公钥)
     */
    public static String alipay_public_key = "支付宝公钥,不是公钥";
    /**
     * 服务器异步通知页面路径 需http://格式的完整路径(支付宝完成后返回的页面)
     */
    public static String notify_url = neturl+"/alipay/notify_url";
    /**
     * 页面跳转同步通知页面路径 需http://格式的完整路径(支付宝完成后返回的页面)
     */
    public static String return_url = neturl+"/alipay/return_url";
    /**
     * 签名方式
     */
    public static String sign_type = "RSA2";
    /**
     * 字符编码方式
     */
    public static String charset = "utf-8";
    /**
     * 支付宝网关
     */
    public static String url = "https://openapi.alipaydev.com/gateway.do";
}

3、创建Service业务逻辑处理

​ 调用支付宝的支付接口即将一包数据通知支付SDK的一个接口发送给支付宝的服务器,然后会返回输入密码确认支付的页面

package com.example.service;

import com.alipay.api.AlipayApiException;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.config.AliPayConfig;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description:支付宝业务逻辑接口
 */
@Service
public class AliPayService {

    /**
     * 支付服务(推荐传入订单号和金额,其余的从其他地方获取)
     */
    public String aliPay(){
        try {
            //1、构建支付数据信息
            AlipayTradePagePayModel model = new AlipayTradePagePayModel();
             //订单标题
            model.setSubject("Test");
            //订单号
            model.setOutTradeNo("Ab125dasogggiDsd151515");
            //订单付款金额
            model.setTotalAmount("100");
            //订单付款时间
            model.setTimeoutExpress("");
            //销售产品码(必填)
            model.setProductCode("FAST_INSTANT_TRADE_PAY");
            //2、构建客户端
            DefaultAlipayClient defaultAlipayClient = new DefaultAlipayClient(AliPayConfig.url,
                    AliPayConfig.app_id,AliPayConfig.merchant_private_key,"json",
                    AliPayConfig.charset,AliPayConfig.alipay_public_key,AliPayConfig.sign_type);
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
            //异步通知后回调
            request.setNotifyUrl(AliPayConfig.notify_url);
            //支付成功后回调
            request.setReturnUrl(AliPayConfig.return_url);
            request.setBizModel(model);
            String response = defaultAlipayClient.pageExecute(request).getBody();
            return response;
        }catch (AlipayApiException ex){
            ex.printStackTrace();
            return null;
        }
    }
}

4、Controller

@Autowired
    AliPayService aliPayService;

    @ApiOperation("支付接口")
    @GetMapping("/alipay/toPay/pay/{productId}")
    public String alipay(@PathVariable(value = "productId")Integer productId){
        return aliPayService.aliPay();
    }

    @ApiOperation("支付宝异步通知接口")
    @GetMapping("/alipay/notify_url")
    public String notifyAlipay(){
        return "这是异步通知接口";
    }

    @ApiOperation("支付成功之后的回调")
    @GetMapping("/alipay/return_url")
    public String returnAlipay(){
        return "支付成功后的回调";
    }

注意:

1、标题Subject

支付宝的Subject(标题)如果不是Post提交方式的话,用中文好像会出问题

 @ApiOperation("支付接口")
    @GetMapping(value="/alipay/toPay/pay/{productId}",produces="application/xml",
                consumes="application/x-www-form-urlencoded")
    public String alipay(@PathVariable(value = "productId")Integer productId){
        return aliPayService.aliPay();
    }

2、三种接口

2.1、网页支付(支持扫码)
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
	model.setOutTradeNo("Ab125dasogggiDsd151515");
 	model.setSubject("Test");
	model.setTotalAmount("100");
 	model.setTimeoutExpress("");
	model.setProductCode("FAST_INSTANT_TRADE_PAY");
	request.setBizModel(model);
    String response = defaultAlipayClient.pageExecute(request).getBody();
2.2、移动H5支付(不支持扫码)
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
AlipayTradeWapPayModel model1 = new AlipayTradeWapPayModel();
	 model.setOutTradeNo("Ab125dasogggiDsd151515");
     model.setSubject("Test");
     model.setTotalAmount("100");
     model.setTimeoutExpress("");	
	model.setProductCode("QUICK_WAP_PAY");
	request.setBizModel(model);
    String response = defaultAlipayClient.pageExecute(request).getBody();
2.3、APP支付
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
AlipayTradeAppPayModel model2 = new AlipayTradeAppPayModel();
	 model.setOutTradeNo("Ab125dasogggiDsd151515");
     model.setSubject("Test");
     model.setTotalAmount("100");
     model.setTimeoutExpress("");	
	 model.setProductCode("QUICK_WAP_PAY");
	request.setBizModel(model);
    String response = defaultAlipayClient.pageExecute(request).getBody();
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值