支付宝支付方法

    /**
     * 支付接口
     */
public void alyunPay() {
        AlipayTradePagePayModel model = new AlipayTradePagePayModel();
        model.setOutTradeNo(outTradeNo);
        model.setTotalAmount(String.format("%.2f", usePlatFee));
        model.setSubject(subject);
        //model.setProductCode("FAST_INSTANT_TRADE_PAY");
        String rootPath = "";   //外部映射路径
        ApAlipayPayDTO payDTO = new ApAlipayPayDTO();
        payDTO.setNotifyUrl(rootPath + "/lm/payment/aliPayNotify"); //回调方法

        ApAlipayPayDTO apEntity = aliyunPayService.aliyunPay(payDTO, model);
        LmPayResultDTO lprEntity = new LmPayResultDTO();
        String code = apEntity.getQrCode();  //二维码编码
        
    /**
     * 支付回调接口
     */
    public void aliPayNotify(HttpServletRequest request, HttpServletResponse response) {
        //获取支付宝POST过来反馈信息
        Map<String, String> params = RequestUtils.getAllParam(request);
        try {
            //验证签名
            boolean flag = AlipaySignature.rsaCheckV1(params, AliyunPayConstants.ALIPAY_PUBLIC_KEY, AliyunPayConstants.CHARSET, AliyunPayConstants.SIGN_TYPE);
            if (flag) {
                String out_trade_no = params.get("out_trade_no");
                if ("TRADE_SUCCESS".equalsIgnoreCase(params.get("trade_status"))) { // 交易支付成功
                    response.getOutputStream().write("success".getBytes());
                    // 当支付成功时,回写缴费状态为审核通过
                } else {
                    // 当支付失败时,回写缴费状态为审核不通过
                }
            } else {
                response.getOutputStream().write("failure".getBytes());
            }
        } catch (AlipayApiException e) {
            logger.error("【支付宝支付--异步回调】回调失败,阿里云接口调用错误,原因为:{}", e.getMessage());
        } catch (Exception e) {
            logger.error("【支付宝支付--异步回调】回调失败,原因为:{}", e.getMessage());
        }
    }

	/**
     * 获取支付宝POST过来反馈信息
     */
	public static Map<String, String> getAllParam(HttpServletRequest request) {
        Map<String, String> params = new HashMap();
        Map<String, String[]> requestParams = request.getParameterMap();
        Iterator iter = requestParams.keySet().iterator();

        while (iter.hasNext()) {
            String name = (String) iter.next();
            String[] values = requestParams.get(name);
            String valueStr = "";

            for (int i = 0; i < values.length; ++i) {
                valueStr = i == values.length - 1 ? valueStr + values[i] : valueStr + values[i] + ",";
            }

            params.put(name, valueStr);
        }

        return params;
    }
	/**
     * 支付宝工具类
     */
public class AliyunPayService extends BaseService {

    private Map<String, String> map = new HashMap<String, String>();

    /**
     * 初始化获取配置信息
     */
    public Map<String, String> init() {
        map.put("url", AliyunPayConstants.URL);
        map.put("appid", AliyunPayConstants.APPID);
        map.put("privateKey", AliyunPayConstants.APP_PRIVATE_KEY);
        map.put("format", AliyunPayConstants.FORMAT);
        map.put("charset", AliyunPayConstants.CHARSET);
        map.put("publicKey", AliyunPayConstants.ALIPAY_PUBLIC_KEY);
        map.put("signType", AliyunPayConstants.SIGN_TYPE);
        return map;
    }

    /**
     * 阿里云支付
     */
    public ApAlipayPayDTO aliyunPay(ApAlipayPayDTO payDTO, AlipayTradePagePayModel model) {
        ApAlipayPayDTO reDTO = new ApAlipayPayDTO();
        if (map.size() == 0) {
            init();
        }
        AlipayClient alipayClient = new DefaultAlipayClient(map.get("url"), map.get("appid"), map.get("privateKey"),
                map.get("format"), map.get("charset"), map.get("publicKey"), map.get("signType"));

        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
        request.setNotifyUrl(payDTO.getNotifyUrl());
        request.setBizModel(model);

        AlipayTradePrecreateResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        String msg= "";
        if (response.isSuccess()) {
            reDTO.setOutTradeNo(response.getOutTradeNo());
            reDTO.setQrCode(response.getQrCode());
            reDTO.setSubject(model.getSubject());
            reDTO.setTotalAmount(model.getTotalAmount());
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
        return reDTO;

    }

    /**
     * 阿里云支付
     */
    public Map<String, String> aliyunQuery(String outTradeNo, String transactionId) {
        if (map.size() == 0) {
            init();
        }
        //实例化客户端
        AlipayClient alipayClient = new DefaultAlipayClient(map.get("url"), map.get("appid"), map.get("privateKey"),
                map.get("format"), map.get("charset"), map.get("publicKey"), map.get("signType"));
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.query
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
        AlipayTradeQueryModel model = new AlipayTradeQueryModel();
        //优先使用支付宝的订单id
        if(transactionId == null || transactionId.length() == 0){
            model.setOutTradeNo(outTradeNo);
        }else {
            model.setTradeNo(transactionId);
        }
        request.setBizModel(model);
        AlipayTradeQueryResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        System.err.println(response.getBody());
        System.err.println(response.isSuccess());
        Map<String, String> map = new HashMap<String, String>();
        if(response.isSuccess()){
            if("WAIT_BUYER_PAY".equals(response.getTradeStatus())){
                map.put("tradeStatus", "WAIT_BUYER_PAY");
                map.put("returnValue", "交易创建,等待买家付款");
            }else if("TRADE_CLOSED".equals(response.getTradeStatus())){
                map.put("tradeStatus", "TRADE_CLOSED");
                map.put("returnValue", "未付款交易超时关闭,或支付完成后全额退款");
            }else if("TRADE_SUCCESS".equals(response.getTradeStatus())){
                map.put("tradeStatus", "TRADE_SUCCESS");
                map.put("returnValue", "支付成功");
            }else if("TRADE_FINISHED".equals(response.getTradeStatus())){
                map.put("tradeStatus", "TRADE_FINISHED");
                map.put("returnValue", "交易结束,不可退款");
            }else {
                map.put("tradeStatus", response.getSubCode());
                map.put("returnValue", "未知状态");
            }
        } else {
            map.put("tradeStatus", response.getSubCode());
            map.put("returnValue", response.getSubMsg());
        }
        return map;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值