你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

SpringBoot调用支付宝开发者平台支付接口

2021-11-6 9:29:56

文章目录


环境准备
现在所有的环境都是使用支付宝开发者平台提供的沙箱环境

1.访问https://openhome.alipay.com/platform/appDaily.htm?tab=info 手机扫描登录
填写资料

在这里插入图片描述

2.配置支付密匙详细信息
显示如下:
2.1 首先点击 RSA2(SHA256)密钥 设置
2.2 点击公钥

在这里插入图片描述

2.3 根据你的电脑系统下载对应的生成器

在这里插入图片描述

复制应用公钥保存设置

在这里插入图片描述

这样会生成支付宝公钥

在这里插入图片描述

此时我们就可以进行支付宝正式开发了。

  1. springBoot 配置
    3.1 pom引入jar包
    在这里插入图片描述

3.2 添加配置文件 AliPayConfig

// 应用ID
  public static String APP_ID = "登录网页上的app_id";
// 应用私钥
  public static String MERCHANT_PRIVATE_KEY = "这个就是你软件配置应用公钥上面的应用私钥";
// 应用公钥
  public static String ALIPAY_PUBLIC_KEY = "这个就是你软件生成的应用公钥";
//  支付宝公钥
  public static String ZFB_PUBLIC_ID ="XXXXXXXXXXXXX"
//	异步通知
  public static String notify_url = "";
//如果没有做内网穿透、notify_url  return_url也可以不配,不影响测试支付
// 支付成功后出现几秒的回调页面
  public static String return_url = "XXXXXXXXXXXXX";

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

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

// 支付宝网关  alipaydev 为沙箱网关  这里不用更改
  public static String GATEWAYURL = "https://openapi.alipaydev.com/gateway.do";

3.3 接口编写 ----AlipayTemplate

@Component
@Data
public class AlipayTemplate {

    //在支付宝创建的应用的id
    private   String app_id = AliPayConfig.APP_ID;
    
    // 商户私钥,您的PKCS8格式RSA2私钥
    private  String merchant_private_key = AliPayConfig.MERCHANT_PRIVATE_KEY;
    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    private  String alipay_public_key = AliPayConfig.ALIPAY_PUBLIC_KEY;
    // 服务器[异步通知]页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    // 支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息
    private  String notify_url;
    
    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    //同步通知,支付成功,一般跳转到成功页
    private  String return_url;
    
    // 签名方式
    private  String sign_type = "RSA2";
    
    // 字符编码格式
    private  String charset = "utf-8";
    
    // 支付宝网关; https://openapi.alipaydev.com/gateway.do
    private  String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
    
    public  String pay(PayVo vo) throws AlipayApiException {
    
        //AlipayClient alipayClient = new DefaultAlipayClient(AlipayTemplate.gatewayUrl, AlipayTemplate.app_id, AlipayTemplate.merchant_private_key, "json", AlipayTemplate.charset, AlipayTemplate.alipay_public_key, AlipayTemplate.sign_type);
        //1、根据支付宝的配置生成一个支付客户端
        AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl,
                app_id, merchant_private_key, "json",
                charset, alipay_public_key, sign_type);
    
        //2、创建一个支付请求 //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(return_url);
        alipayRequest.setNotifyUrl(notify_url);
    
        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = vo.getOut_trade_no();
        //付款金额,必填
        String total_amount = vo.getTotal_amount();
        //订单名称,必填
        String subject = vo.getSubject();
        //商品描述,可空
        String body = vo.getBody();
    
        alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                + "\"total_amount\":\""+ total_amount +"\","
                + "\"subject\":\""+ subject +"\","
                + "\"body\":\""+ body +"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
    
        String result = alipayClient.pageExecute(alipayRequest).getBody();
    
        //会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
        System.out.println("支付宝的响应:"+result);
    
        return result;
    
    }

}

一个配套支付工具的vo

@Data
public class PayVo {
    private String out_trade_no; // 商户订单号 必填
    private String subject; // 订单名称 必填
    private String total_amount;  // 付款金额 必填
    private String body; // 商品描述 可空
}

4、实际controller中的应用方式

@Autowired
   AlipayTemplate alipayTemplate ;
@GetMapping(value = "/getPagePay/{total_amount}/{subject}" , produces = "text/html")
    public String getPagePay(@PathVariable("total_amount") String total_amount,@PathVariable("subject") String subject) throws Exception
    {
        log.info("-----------------total_amount="+total_amount);
        log.info("-----------------subject="+subject);
        PayVo payVo = new PayVo();
        payVo.setOut_trade_no(UUID.randomUUID().toString());
        log.info(payVo.getOut_trade_no());
        payVo.setTotal_amount(total_amount);
        payVo.setSubject(subject);
        return alipayTemplate.pay(payVo);
    }

注意沙箱环境的支付账号为沙箱账号、测试环境并不能使用真实的支付账号