Java对接支付宝(alipay)电脑网站生成二维码扫码支付 alipay.trade.page.pay统一收单下单并支付页面接口

SDK版本

gradle

compile group: 'com.alipay.sdk', name: 'alipay-sdk-java', version: '4.15.0.ALL'

maven

	<dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <scope>4.15.0.ALL</scope>
    </dependency>

创建连接的bean

 	@Bean
    public AlipayClient alipayClient() {
        AlipayConfig alipayConfig = new AlipayConfig();
        //支付宝公钥,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602487431
        alipayConfig.setAlipayPublicKey(ALIPAY_PUBLIC_KEY);
        //支付宝私钥
        alipayConfig.setPrivateKey(APP_PRIVATE_KEY);
        // 应用私钥,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602469554
        alipayConfig.setAppCertPath(APP_CERT_PATH);
        //应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024
        alipayConfig.setAppId(APP_ID);
        try {
            return new DefaultAlipayClient(alipayConfig);
        } catch (AlipayApiException e) {
            logger.error("创建支付宝链接Bean失败 AlipayApiException:{}", e);
            return null;
        }
    }

收款码示例代码

	/**
     * 创建支付信息
     *
     * @param order 支付订单信息
     * @return 支付页面URL
     */
    public String createAlipayUrl(RechargeIntegralReferOrder order) {
        AlipayTradePagePayModel model = new AlipayTradePagePayModel();
        //商户订单号,商户自定义,需保证在商户端不重复,如:20200612000001
        model.setOutTradeNo(order.getOrderCode());
        model.setProductCode(FAST);
        model.setSubject(order.getSubject());//订单标题
        //设置过期时间
        long time = System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5);
        String ymdHmsStr = DateTimeUtil.getYmdHmsStr(new Date(time));
        model.setTimeExpire(ymdHmsStr);
        //订单金额,精确到小数点后两位
        model.setTotalAmount(order.getPrice().toString());
        //订单描述
        model.setBody(order.getBody());
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setBizModel(model);//设置配置的参数
        logger.info("获取支付订单接口参数配置 userNick:{} 金额:{} 过期时间:{}", order.getUserNick(), order.getPrice(), ymdHmsStr);
        //异步通知地址,以http或者https开头,商户外网可以post访问的异步地址,用于接收支付宝返回的支付结果
        alipayRequest.setNotifyUrl(ymlConfigBean.getAlipay_notify_url());
        //支付成功后同步地址,用于提示用户支付成功
        alipayRequest.setReturnUrl(ymlConfigBean.getAlipay_return_url());
        String alipayUrl = null;
        try {
            alipayUrl = alipayClient.pageExecute(alipayRequest, "GET").getBody();
        } catch (AlipayApiException e) {
            logger.error("getAlipayUrl AlipayApiException:{}", e);
        }
        return alipayUrl;
    }

回调示例代码

异步回调

 	/**
     * 支付宝异步订单回调
     *
     * @param request
     */
    public void alipayNotifyCallBack(HttpServletRequest request) {
        Map<String, String> params = convertRequestParamsToMap(request); // 将异步通知中收到的待验证所有参数都存放到map中
        String paramsJson = JSON.toJSONString(params);
        logger.info("支付宝异步回调,{}", paramsJson);
        try {
            AlipayConfig alipayConfig = new AlipayConfig();// 支付宝配置
            // 调用SDK验证签名,使用秘钥的验证方式
            boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayBeanConfig.ALIPAY_PUBLIC_KEY,
                    alipayConfig.getCharset(), alipayConfig.getSignType());
            logger.info("signVerified:{}", signVerified);
            if (!signVerified) {
                logger.info("支付宝异步回调签名认证失败,signVerified=false, paramsJson:{}", paramsJson);
                return;
            }
            logger.info("支付宝异步回调签名认证成功,开始处理订单业务");
            String tradeStatus = params.get("trade_status");//订单状态
            String orderCode = params.get("out_trade_no");//唯一的商家订单编号,创建订单的时候传入
            logger.info("订单状态TradeStatus:{} orderCode:{}", tradeStatus, orderCode);
            if (tradeStatus.equals(AlipayTradeEnum.支付成功.getTradeStatus()) || tradeStatus.equals(AlipayTradeEnum.交易完成.getTradeStatus())) {
                synchronized (orderCode.intern()) {
                    RechargeIntegralReferOrder integralReferOrder = integralOrderService.findByOrderCode(orderCode);
                    if (!integralReferOrder.getPayResult().isCancelable()) {
                        logger.info("当前订单已进行过充值积分相关操作 orderCode:{}", orderCode);
                        return;
                    }
                    //积分充值增加
                    iIntegralOpsRecordService.integralRecharge(integralReferOrder.getUserNick(), integralReferOrder.getPrice(),
                            integralReferOrder.getDiscount(), integralReferOrder.getIntegral(), IntegralOpsEnum.积分充值);
                    RechargeIntegralReferOrder payResult = integralOrderService.updateOrderPayResult(integralReferOrder, PayResultEnum.支付成功);
                    userVipService.plusVipIntegral(integralReferOrder.getUserNick(), null, integralReferOrder.getPrice().intValue(), UserVipOpsEnum.充值加分);
                    logger.info("积分充值完毕 订单状态:{} orderCode:{}", payResult.getPayResult(), orderCode);
                }
            } else {
                integralOrderService.updateOrderPayResult(orderCode, PayResultEnum.支付失败);
                logger.info("订单支付失败,不进行业务操作");

            }

        } catch (AlipayApiException e) {
            logger.error("支付宝回调签名认证失败,paramsJson:{},errorMsg:{}", paramsJson, e.getMessage());
        }
    }

同步回调

	/**
     * 支付宝同步订单回调
     *
     * @param request
     * @return
     */
    public AlipayReturnParam alipayReturnCallBack(HttpServletRequest request) {
        Map<String, String> params = convertRequestParamsToMap(request); // 将异步通知中收到的待验证所有参数都存放到map中
        String paramsJson = JSON.toJSONString(params);
        logger.info(paramsJson);
        AlipayConfig alipayConfig = new AlipayConfig();//支付宝配置
        try {// 调用SDK验证签名,使用秘钥的验证方式
            boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayBeanConfig.ALIPAY_PUBLIC_KEY,
                    alipayConfig.getCharset(), alipayConfig.getSignType());
            logger.info("signVerified:{}", signVerified);
            if (!signVerified) {
                logger.info("支付宝同步回调签名认证失败,signVerified=false");
                return null;
            }
        } catch (AlipayApiException e) {
            logger.error("alipayReturnCallBack AlipayApiException:{}", e);
        }
        logger.info("支付宝同步回调签名认证成功,开始处理订单业务");
        AlipayReturnParam param = new AlipayReturnParam();
        String timestamp = params.get("timestamp");//支付时间
        param.setTimestamp(timestamp);
        String amount = params.get("total_amount");//金额
        param.setAmount(amount);
        logger.info("支付宝同步回调 {}", param.toString());
        return param;
    }
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acmen-zym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值