支付宝电脑网站支付,(统一收单下单并支付页面接口)

一:准备工作

1:登录支付宝开放平台

支付宝开放平台

2:点击控制台

3:点击沙箱环境

4:沙箱应用

5:沙箱账号,分为商户账号和买家账号

6:点击沙箱工具可以下载沙箱支付宝到手机,方便手机扫码支付

二:支付宝api文档地址

小程序文档 - 支付宝文档中心

选择电脑网站支付,也可以选择其他的app支付,手机网站支付等等,这次对接的是电脑网站支付

三:引入maven依赖

<!--支付宝支付-->
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.38.85.ALL</version>
</dependency>

四:对接  alipay.trade.page.pay(统一收单下单并支付页面接口)

示例代码:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//异步接收地址,仅支持http/https,公网可访问
request.setNotifyUrl("");
//同步跳转地址,仅支持http/https
request.setReturnUrl("");
/******必传参数******/
JSONObject bizContent = new JSONObject();
//商户订单号,商家自定义,保持唯一性
bizContent.put("out_trade_no", "20210817010101004");
//支付金额,最小值0.01元
bizContent.put("total_amount", 0.01);
//订单标题,不可使用特殊符号
bizContent.put("subject", "测试商品");
//电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY
bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");


request.setBizContent(bizContent.toString());
AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}

五:常量类

public class constant {
    /**
     * 支付宝网址
     */
    public static final String serverUrl = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
    /**
     * appId
     */
    public static final String appId = "";
    /**
     * 应用私钥:
     */
    public static final String privateKey = "";
    /**
     * format
     */
    public static final String format = "JSON";
    /**
     * charset
     */
    public static final String charset = "UTF-8";
    /**
     * 应用公钥
     */
    public static final String alipayPublicKey = "";
    /**
     * 签名方式
     */
    public static final String signType = "RSA2";
    /**
     * 异步返回
     */
    public static final String NotifyUrl = "  http://c45fjq.natappfree.cc/pay/alpay";
    /**
     * 同步返回
     */
    public static final String ReturnUrl = "http://localhost:9999/pay/pcfh";
    /**
     * 支付宝公钥
     */
    public static final String PublicKey="";
}

解析常量类里面的数据和获取方式:

serverUrl:是支付宝进行支付的网址
appId:商户id,获取方式

format=json
charset=utf-8
signType=RSA2

这三个值是默认值,不会改变

privateKey
alipayPublicKey
PublicKey

这三个值是:应用私钥,应用公钥,支付宝公钥,获取方式

 
ReturnUrl:同步返回地址,支付成功之后页面自动跳转的页面
NotifyUrl:异步通知,用于支付宝回调通知商户

六:创建订单表

CREATE TABLE `sys_orders` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单ID',
  `commodity_name` varchar(50) DEFAULT NULL COMMENT '商品名称',
  `customer_name` varchar(100) DEFAULT NULL COMMENT '顾客姓名',
  `order_date` date DEFAULT NULL COMMENT '订单日期',
  `total_amount` decimal(10,2) DEFAULT NULL COMMENT '订单总金额',
  `order_state` varchar(2) DEFAULT NULL COMMENT '订单状态(1:支付成功,2:支付失败,3:取消交易,4:已退款)',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;

创建订单表CRUD,自行解决

七:支付流程图

八:发起支付

@RequestMapping("/pc")
    public void payPc(String orderId, HttpServletResponse httpServletResponse) {
        try {
//根据订单id查询订单信息
            SysOrders sysOrders = sysOrdersService.selectOne( orderId );
            AlipayClient alipayClient = new DefaultAlipayClient(
                    constant.serverUrl,
                    constant.appId,
                    constant.privateKey,
                    constant.format,
                    constant.charset,
                    constant.alipayPublicKey,
                    constant.signType
            );
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//异步接收地址,仅支持http/https,公网可访问
            //request.setNotifyUrl( constant.NotifyUrl );
//同步跳转地址,仅支持http/https
           // request.setReturnUrl( constant.ReturnUrl );
/******必传参数******/
            JSONObject bizContent = new JSONObject();
//商户订单号,商家自定义,保持唯一性
            bizContent.put( "out_trade_no", sysOrders.getOrderId() );
//支付金额,最小值0.01元
            bizContent.put( "total_amount", sysOrders.getTotalAmount() );
//订单标题,不可使用特殊符号
            bizContent.put( "subject", sysOrders.getCommodityName() );
//电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY
            bizContent.put( "product_code", "FAST_INSTANT_TRADE_PAY" );
            request.setBizContent( bizContent.toString() );
            AlipayTradePagePayResponse response = alipayClient.pageExecute( request );
            if (response.isSuccess()) {
                String body = response.getBody();
                httpServletResponse.setContentType( "text/html;charset=utf-8" );
                PrintWriter writer = httpServletResponse.getWriter();
                writer.write( "<!DOCTYPE html>\n" +
                        "<html lang=\"en\">\n" +
                        "<head>\n" +
                        "    <meta charset=\"UTF-8\">\n" +
                        "    <title>Title</title>\n" +
                        "</head>\n" +
                        "<body>" );
                writer.write( response.getBody() );
                writer.write( "</body>\n" +
                        "</html>" );
                writer.flush();
                writer.close();
                System.out.println( "调用创建订单接口成功" );
            } else {
                System.out.println( "调用创建订单接口失败" );
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

调用支付接口创建订单基本信息,用httpServletResponse返回给前端

九:测试

数据库新增一条订单信息,

浏览器调用支付接口,传入订单id

账号是沙箱账号中的买家账号和买家密码,注意,不能填写为商户账号和商户密码

输入账号选择下一步

输入支付密码,同在沙箱环境沙箱账号买家信息中

支付成功,等待几秒之后会跳转到同步通知这个网址,这个网址可以是本地的,可以使用localhost,在常量类的同步通知中配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值