支付宝支付示例

引入alipay-sdk-java依赖

  1. 创建AlipayConfig类,包含支付宝相关配置信息
public class AlipayConfig {
    // 商户appid
    public static String APPID = "";

    // 私钥
    public static String RSA_PRIVATE_KEY = "";

    // 支付宝公钥
    public static String ALIPAY_PUBLIC_KEY = "";

    // 服务器异步通知页面路径
    public static String notify_url = "";

    // 页面跳转同步通知页面路径
    public static String return_url = "";

    // 签名方式
    public static String sign_type = "RSA2";

    // 字符编码格式
    public static String CHARSET = "UTF-8";

    // 支付宝网关
    public static String GATEWAY_URL = "https://openapi.alipay.com/gateway.do";

    // 日志记录目录
    public static String log_path = "C:\\";
}
  1. 创建AlipayUtil类,包含支付宝支付相关方法
public class AlipayUtil {
    /**
     * 支付宝手机网站支付请求
     * @param out_trade_no 订单号
     * @param total_amount 订单金额
     * @param subject 订单标题
     * @param response HttpServletResponse
     * @throws IOException
     */
    public static void alipayTradeWapPay(String out_trade_no, String total_amount, String subject, HttpServletResponse response) throws IOException {
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.GATEWAY_URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.sign_type);
        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
        model.setOutTradeNo(out_trade_no);
        model.setTotalAmount(total_amount);
        model.setSubject(subject);
        model.setProductCode("QUICK_WAP_PAY");
        model.setTimeoutExpress("30m");
        AlipayTradeWapPayRequest request = new AlipayTradeapapPayRequest();
        request.setReturnUrl(AlipayConfig.return_url);
        request.setNotifyUrl(AlipayConfig.notify_url);
        request.setBizModel(model);
        String form = "";
        try {
            form = alipayClient.pageExecute(request).getBody();
            response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);
            response.getWriter().write(form);//直接将完整的表单html输出到页面
            response.getWriter().flush();
            response.getWriter().close();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
    }

    /**
     * 支付宝手机网站支付回调处理
     * @param request HttpServletRequest
     * @return
     * @throws AlipayApiException
     */
    public static boolean alipayReturn(HttpServletRequest request) throws AlipayApiException {
        Map<String, String> params = new HashMap<String, String>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i values values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
            }
            params.put(name, valueStr);
        }
        boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.sign_type); //调用SDK验证签名
        return signVerified;
    }

    /**
     * 支付宝异步通知处理
     * @param request HttpServletRequest
     * @return
     * @throws AlipayApiException
     */
    public static boolean alipayNotify(HttpServletRequest request) throws AlipayApiException {
        Map<String, String> params = new HashMap<String, String>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i values values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
            }
            params.put(name, valueStr);
        }
        boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.sign_type); //调用SDK验证签名
        if (signVerified) {
            String trade_status = request.getParameter("trade_status"); //交易状态
            if (trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")) {
                //处理订单业务逻辑
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}
  1. 创建AlipayController类,处理支付宝支付请求和回调
@RestController
@RequestMapping("/")
public class AlipayController {
    @RequestMapping("alipay")
    public void alipay(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String out_trade_no = "商户订单号";
        String total_amount = "支付金额";
        String subject = "交易标题";
        AlipayUtil.alipayTradeWapPay(out_trade_no, total_amount, subject, response);
    }

    @RequestMapping("alipayReturn")
    public String alipayReturn(HttpServletRequest request) throws AlipayApiException {
        boolean result = AlipayUtil.alipayReturn(request);
        //处理支付宝同步通知业务逻辑
        if (result) {
            return "支付成功";
        } else {
            return "支付失败";
        }
    }

    @RequestMapping("alipayNotify")
    public String alipayNotify(HttpServletRequest request) throws AlipayApiException {
        boolean result = AlipayUtil.alipayNotify(request);
        //处理支付异异步通知业务逻辑
        if (result) {
            return "success";
        } else {
            return "fail";
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Java 支付宝异步回调接口案例的代码示例: ```java @RequestMapping(value = "/notify_url") public String notifyUrl(HttpServletRequest request) { Map<String, String> params = new HashMap<>(); Map<String, String[]> requestParams = request.getParameterMap(); for (Iterator<String> iterator = requestParams.keySet().iterator(); iterator.hasNext(); ) { String name = iterator.next(); String[] values = requestParams.get(name); StringBuilder valueStr = new StringBuilder(); for (int i = 0; i < values.length; i++) { valueStr.append((i == values.length - 1) ? values[i] : values[i] + ","); } // 将参数放入 map 中 params.put(name, valueStr.toString()); } // 验证签名 boolean signVerified = false; try { signVerified = AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType); } catch (AlipayApiException e) { e.printStackTrace(); } if (signVerified) { // 验证成功 // 处理业务逻辑,例如更新订单状态 return "success"; } else { // 验证失败 return "fail"; } } ``` 其中 `notify_url` 是在支付宝开发文档中配置的异步通知接口,当有支付成功的订单时,支付宝会向该接口发送一个 POST 请求,参数会以键值对的形式传递过来,我们需要将其放入一个 Map 中,然后使用 `AlipaySignature.rsaCheckV1` 方法验证签名,如果验证成功,就可以执行业务逻辑,例如更新订单状态,并返回 "success",如果验证失败,就返回 "fail",告诉支付宝不要再发送通知。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值