支付宝支付

这里采用支付宝沙盒

支付宝开放平台 (alipay.com)

文档:

通用版 - 支付宝文档中心 (alipay.com)

一、导入依赖 

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

二、沙盒案例 

手机网站支付 DEMO下载地址:手机网站支付 DEMO - 支付宝文档中心 (alipay.com)

查看配置信息

1.密钥工具下载

密钥工具下载 - 支付宝文档中心 (alipay.com)

2. 配置沙盒 密钥

支付宝开放平台 (alipay.com)

 

 

 

三、整合使用

1.配置信息

alipay:
    appid: 9021000134660751
    private:
      key: 应用私钥
    public:
      key: 支付宝公钥
    notify:
      url: http://回调地址(此处无响应未知)
    return:
      url: http://支付完成后跳转地址
    url: https://openapi-sandbox.dl.alipaydev.com/gateway.do
    charset: UTF-8
    format: json
    sign:
      type: RSA2
    log:
      path: /logs

2.构造Template对象 -核心案例代码

package com.yueluo.mall.order.template;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.yueluo.mall.common.vo.PayVo;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 支付宝支付模板类
 * @author xjx
 * @email 15340655443@163.com
 * @date 2024/2/17 12:40
 */
@Component
public class AlipayTemplate {

    // 商户appid
    @Value("${alipay.appid}")
    public static String APPID="";
    // 私钥 pkcs8格式的
    @Value("${alipay.private.key}")
    public static String RSA_PRIVATE_KEY="";
    // 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    @Value("${alipay.notify.url}")
    public static String notify_url="http://www.yueluo.top/order/pay/notityUrl";
    // 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
    @Value("${alipay.return.url}")
    public static String return_url="http://www.yueluo.top/order/pay/returnUrl";
    // 请求网关地址
    @Value("${alipay.url}")
    public static String URL="https://openapi-sandbox.dl.alipaydev.com/gateway.do";
    // 编码
    @Value("${alipay.charset}")
    public static String CHARSET="UTF-8";
    // 返回格式
    @Value("${alipay.format}")
    public static String FORMAT="json";
    // 支付宝公钥
    @Value("${alipay.public.key}")
    public static String ALIPAY_PUBLIC_KEY="";
    // 日志记录目录
    @Value("${alipay.log.path}")
    public static String log_path="/logs";
    // RSA2
    @Value("${alipay.sign.type}")
    public static String SIGN_TYPE="RSA2";

    public String toPay(PayVo payVo){
        // SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
        //调用RSA签名方式
        AlipayClient client = new DefaultAlipayClient(URL, APPID, RSA_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY,SIGN_TYPE);
        AlipayTradeWapPayRequest alipay_request=new AlipayTradeWapPayRequest();

        // 封装请求支付信息
        AlipayTradeWapPayModel model=new AlipayTradeWapPayModel();
        model.setOutTradeNo(payVo.getOut_trade_no());
        model.setSubject(payVo.getSubject());
        model.setTotalAmount(payVo.getTotal_amount());
        model.setBody(payVo.getBody());
        model.setTimeoutExpress("5000");
        model.setProductCode("商品码");
        alipay_request.setBizModel(model);
        // 设置异步通知地址
        alipay_request.setNotifyUrl(notify_url);
        // 设置同步地址
        alipay_request.setReturnUrl(return_url);

        // form表单生产
        String form = "";
        try {
            // 调用SDK生成表单
            form = client.pageExecute(alipay_request).getBody();
            return form;
        } catch (AlipayApiException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "支付宝支付";
    }
}

3. Controller调用 

 /**
     * 整合支付宝支付
     * 跳转到支付宝支付页面
     * 沙盒账号:puhsea0558@sandbox.com
     *    密码:111111
     * @param orderSn
     * @param model
     * @return
     */
    @GetMapping(value = "/order/alipay",produces = "text/html")
    @ResponseBody
    public String alipay(@RequestParam(value = "orderSn") String orderSn, Model model){
        //1.调用订单服务查询订单信息
        PayVo payVo = orderService.getPayVo(orderSn);
        //2.整合支付宝支付
        String pay = alipayTemplate.toPay(payVo);
        //3.跳转到支付宝支付页面
        return pay;
    }

4.跳转页面Controller 

 /**
     * 支付--后台支付成功后跳转到订单详情页
     * @param orderSn
     * @param model
     * @return
     */
    @GetMapping("/order/pay/returnUrl")
    public String pay(@RequestParam(value = "orderSn",required = false) String orderSn,
                      @RequestParam(value = "out_trade_no",required = false) String out_trade_no,
                      Model model){
        System.out.println("接收到的要支付的订单编号为:"+orderSn);
        System.out.println("接收已经支付成功后的订单编号为:"+out_trade_no);
        //1.调用订单服务更新订单状态并返回订单及其订单项信息
        if (StringUtils.isNotBlank(orderSn)) {
            //TODO 表单提交支付(银行卡)相关的支付操作
            System.out.println("银行卡支付成功");
            orderService.paySuccess(orderSn);
        }else {
            //TODO 支付宝支付成功后的更新操作
            orderService.paySuccess(out_trade_no);
        }
        //TODO 加载订单详情

        //2.支付成功跳转到订单详情页
        return "list";
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值