支付宝支付学习笔记

实际的支付流程

1.用户浏览器-->订单编辑页面(收货地址,支付方式,商品信息)

2.发送下单请求给-->订单服务

3.订单服务-->接收到下单请求

4.生成订单(保存到数据库)

5.数据库的订单表以及相关的表

生成订单成功后会调用-->自己写的支付服务 

6.调用支付服务进行支付(需要传参数-->订单号,支付方式)

7.调用相应的支付端的API(调用AliPay的API,设置一个同步的url(用户支付完成的意义),和一个异步的url(是为获取用户支付成功,支付宝服务器异步返回的信息))

8.自己写的支付服务-->发起支付宝的支付(订单号,金额.支付宝API需要的一些参数)给-->支付宝服务器

9.支付宝服务器会返回一个HTML页面(支付页面其实就是HTML字符串)

  1. 正常流程是自己的支付服务收到HTML字符串应该返回给-->订单服务在-->返回给浏览器

10.自己写的支付服务-->返回给用户浏览器一个支付的HTML页面

11.用户浏览器-->展示支付宝返回的HTML页面(支付页面)用户看到需要支付的金额,二维码,账号支付等

12.用户支付的过程行为完全和支付宝的服务器交互(其中会交集到加解密)

13.支付宝的服务器-->给用户浏览器返回一个商户设置好的重定向url

14.用户浏览器跳转到重定向的url地址

15.支付宝会通过异步的方式将支付结果告知商户

16.接收到支付宝的异步回调,验证异步信息的来源,根据支付的结果,修改订单状态

 接入支付宝

1.申请商用应用(登记法人信息,营业执照),为了的到: APPID

2.生成商户的公私钥对

3.并且将商户公钥上传到支付宝服务器

4.保存支付宝服务器返回的支付宝公钥

支付能力概览 | 网页&移动应用

demo (电脑网站支付)

 添加依赖

设置端口号

server:
  port: 8080

MiniU 研发工作台密钥在线版

创建一个工具类

 在Controller中发送请求

@RestController
@RequestMapping("/pay")
public class AlipayController {

    /**
     * 进行支付宝的支付
     * @return
     */
    @RequestMapping("/alipay")
    public void aliPay(HttpServletResponse resp){
        //订单号 -> 订单的支付金额
        String oid = UUID.randomUUID().toString();
        Double price = 20000.00;

        //调用支付宝API
        AlipayClient alipayClient = AliPayUtils.getAlipayClient();
        //构造一个支付请求
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setNotifyUrl("http://yjumv3g3.shenzhuo.vip:38791/pay/result");//异步回调
        request.setReturnUrl("http://www.baidu.com");//同步回调

        //封装请求体
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", oid);
        bizContent.put("total_amount", price);
        bizContent.put("subject", "Iphone13 128G");
        bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");

        request.setBizContent(bizContent.toString());
        AlipayTradePagePayResponse response = null;
        try {
            response = alipayClient.pageExecute(request);

            if(response.isSuccess()){
                System.out.println("调用成功");
                String body = response.getBody();
                System.out.println(body);
                //直接将响应体 写入浏览器
                resp.setContentType("text/html;charset=utf-8");
                resp.getWriter().print(body);
                resp.getWriter().close();
//                return body;
            } else {
                System.out.println("调用失败");
            }
        } catch (Exception e) {
        }
//        return null;
    }

    /**
     * 支付宝支付的结果回调
     */
    @RequestMapping("/result")
    public void payResult(){
        System.out.println("接收到支付宝的回调请求!");
    }
}

alipay.trade.close(统一收单交易关闭接口)

关闭订单之前一定要先关闭支付交易

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值