Java网站如何集成支付宝当面付,企业个人都能使用的支付(比较简单)

创建应用

这个得先去登录 - 支付宝创建应用

相关配置设置

maven配置

 <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.38.10.ALL</version>
        </dependency>

支付服务代码

/**
 * 支付宝支付
 * @author leell
 * @date 2023/7/21 16:39:58
 */
public interface AliPayService {
    /**
     * 预下单
     * @return 返回二维码链接
     */
    String createPrecreateTrade(AliPrecreateParam param) throws RuntimeException;

    /**
     * 检查支付状态
     * @param orderNo 订单号
     * @return 支付状态 true:已支付 false:未支付
     */
    boolean checkAlipayStatus(String orderNo) throws RuntimeException;

    /**
     * 取消支付
     * @param orderNo 订单号
     * @return 取消状态
     */
    boolean cancelPay(String orderNo) throws RuntimeException;
    /**
     * 退款
     * @param orderNo 订单号
     * @return 取消状态
     */
    boolean refundPay(String orderNo, BigDecimal money) throws RuntimeException;

    /**
     * 验证签名
     * @param params 参数
     * @return 状态
     */
    boolean rsaCheckV1(Map<String,String> params) throws RuntimeException;

    /**
     * 检查回调支付状态
     * @param params 参数
     * @return 状态
     * @throws RuntimeException 异常
     */
    boolean checkNotifyPayStatus(Map<String,String> params) throws RuntimeException;

    /**
     * 获取订单号
     * @param params 支付宝返回参数
     * @return 订单号
     */
    String getOrderNo(Map<String,String> params);
}
/**
 * 支付宝支付
 *
 * @author leell
 * @date 2023/7/21 16:46:16
 */
@Service
public class AliPayServiceImpl implements AliPayService {
    @Autowired
    private PayHelper payHelper;
    @Autowired
    private ConfigService configService;

    @Override
    public String createPrecreateTrade(AliPrecreateParam param) throws RuntimeException {
        try {
            AlipayClient alipayClient = payHelper.getAlipayClient();
            AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
            //异步接收地址,仅支持http/https,公网可访问
            request.setNotifyUrl(param.getNotifyUrl());

            JSONObject bizContent = new JSONObject();
            bizContent.put("out_trade_no", param.getOutTradeNo());
            bizContent.put("total_amount", param.getTotalAmount());
            bizContent.put("subject", param.getSubject());
            request.setBizContent(bizContent.toString());
            AlipayTradePrecreateResponse response = alipayClient.execute(request);
            AssertUtil.isTrue(response.isSuccess(), response.getMsg());
            return response.getQrCode();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public boolean checkAlipayStatus(String orderNo) throws RuntimeException {
        try {
            AlipayClient alipayClient = payHelper.getAlipayClient();
            AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
            JSONObject bizContent = new JSONObject();
            bizContent.put("out_trade_no", orderNo);
            bizContent.put("query_options", new String[]{"trade_settle_info"});
            request.setBizContent(bizContent.toString());
            AlipayTradeQueryResponse response = alipayClient.execute(request);
            JSONObject tradeResponse = JSONObject.parseObject(response.getBody()).getJSONObject("alipay_trade_query_response");
            String result = tradeResponse.getString("trade_status");
            return "TRADE_SUCCESS".equals(result);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public boolean cancelPay(String orderNo) throws RuntimeException {
        try {
            AlipayClient alipayClient = payHelper.getAlipayClient();
            AlipayTradeCancelRequest request = new AlipayTradeCancelRequest();
            JSONObject bizContent = new JSONObject();
            bizContent.put("out_trade_no", orderNo);
            request.setBizContent(bizContent.toString());
            AlipayTradeCancelResponse response = alipayClient.execute(request);
            return response.isSuccess();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public boolean refundPay(String orderNo, BigDecimal money) throws RuntimeException {
        try {
            AlipayClient alipayClient = payHelper.getAlipayClient();
            AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
            JSONObject bizContent = new JSONObject();
            bizContent.put("refund_amount", money);
            bizContent.put("out_trade_no", orderNo);
            request.setBizContent(bizContent.toString());
            AlipayTradeRefundResponse response = alipayClient.execute(request);
            return response.isSuccess();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public boolean rsaCheckV1(Map<String, String> params) throws RuntimeException {
        try {
            String alipayPublicKey = configService.getValue("pay_alipay_public_key");
            String charset = configService.getValue("pay_alipay_charset");
            String signType = configService.getValue("pay_alipay_signType");

            return AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public boolean checkNotifyPayStatus(Map<String, String> params) throws RuntimeException {
        // 取得支付宝POST过来的异步通知参数,进行验签
        // 注意:调用SDK验证签名需要使用支付宝公钥,不要使用自己生成的RSA公私钥对
        boolean verifyResult = this.rsaCheckV1(params);
        if (verifyResult) {
            // 验签通过
            String tradeStatus = params.get("trade_status");
            return "TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus);
        }
        return false;
    }

    @Override
    public String getOrderNo(Map<String, String> params) {
        // 处理交易成功的逻辑
        return params.get("out_trade_no");
    }
}

支付宝相关配置参数

我的后台服务采用的都是参数配置型,并没有放到yaml文件中。上面的appid primarykey和publickey signtype按照支付宝官网上找到自己的,对于特定的publickey和primarykey可以下载支付宝证书生成工具本地生成,然后同步到支付宝

当面付线上案例:

模板码-网站源码,源码下载,模板插件,商业源码平台 (mubanma.com)

惠集会-专业的宠物用品在线购物平台 (huijihui.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Java集成支付宝App支付,需要进行以下几个步骤: 1. 注册支付宝开发者账号并创建应用:首先,去支付宝开放平台(open.alipay.com)注册一个开发者账号,并创建一个应用。在创建应用时,会得到一个AppID,该ID在后续的集成过程中会用到。 2. 导入支付宝SDK:下载最新版本的支付宝SDK,并将其导入到Java开发环境中。一般来说,我们可以通过Maven或Gradle等构建工具来导入依赖。 3. 配置应用信息:在Java代码中,需要配置支付宝相关的参数,包括AppID、支付宝公钥、应用私钥等。这些信息在第一步中获取到的。 4. 创建支付订单:根据业务需求,我们需要创建支付订单并传递给支付宝App进行处理。订单信息包括订单号、支付金额、商品名称等。 5. 调起支付宝App:通过调用支付宝SDK提供的接口,将支付订单发送到支付宝App进行支付支付宝App会弹出一个界面,展示订单信息和支付方式供用户选择。 6. 处理支付结果:支付宝App支付完成后,会返回支付结果。我们需要在Java代码中处理这个结果,判断支付是否成功,并执行相应的业务逻辑。 总的来说,集成支付宝App支付就是将支付宝SDK导入到Java项目中,并按照支付宝提供的接口规范进行相应的配置和调用,实现支付功能。通过以上步骤,我们可以在自己的Java应用中实现与支付宝App的支付交互。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值