支付宝支付网页端

1,:先调用支付宝支付接口,帮返回的form表单返给前端

2:前端触发submit按钮自动跳转

3:用户支付后触发 同步和异步

public class PayMentUtil {

//配置文件实体类
    private final PayMent payMent;


    public AlipayTradePagePayResponse pay(OrderDto orderDto) throws AlipayApiException {


      
        AlipayClient alipayClient = new DefaultAlipayClient(payMent.getGatewayUrl(), payMent.getAppId(), payMent.getRsaPrivateKey(), payMent.getFormat(), payMent.getCharset(), payMent.getAlipayPublicKey(), payMent.getSignType());
     
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
     //同步触发  返回的页面
        request.setNotifyUrl(payMent.getNotifyUrl());
       //异步触发  支付完成后触发
        request.setReturnUrl(payMent.getReturnUrl());
        System.out.println(request);
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", orderDto.getOrderNo());
        bizContent.put("total_amount", orderDto.getTotalAmount().divide(bigDecimal));
        bizContent.put("subject", orderDto.getProductName());
     
      
        bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
       


        //  bizContent.put("time_expire","2021-11-24 19:18:32");

 商品明细信息,按需传入http://36.7.111.213:9098/ser
//JSONArray goodsDetail = new JSONArray();
//JSONObject goods1 = new JSONObject();
//goods1.put("goods_id", "goodsNo1");
//goods1.put("goods_name", "子商品1");
//goods1.put("quantity", 1);
//goods1.put("price", 0.01);
//goodsDetail.add(goods1);
//bizContent.put("goods_detail", goodsDetail);

 扩展信息,按需传入
//JSONObject extendParams = new JSONObject();
//extendParams.put("sys_service_provider_id", "2088511833207846");
//bizContent.put("extend_params", extendParams);

        request.setBizContent(bizContent.toString());
        log.info(bizContent.toString());
        AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
        if (response.isSuccess()) {
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
        System.out.println(response);
        return response;
    }

//查询接口
    public String query(OrderDto orderDto) throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient(payMent.getGatewayUrl(), payMent.getAppId(), payMent.getRsaPrivateKey(), payMent.getFormat(), payMent.getCharset(), payMent.getAlipayPublicKey(), payMent.getSignType());

        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", orderDto.getOrderNo());
        request.setBizContent(bizContent.toString());
        AlipayTradeQueryResponse response = alipayClient.execute(request);
        if (response.isSuccess()) {
            System.out.println("调用成功");
            if ("TRADE_SUCCESS".equals(response.getTradeStatus())) {
                return "success";
            }

        } else {
            System.out.println("调用失败");
            return "fail";
        }
        return "fail";
    }

2:支付宝异步触发先验签,后用返回的结果做数据处理

//支付宝异步通知改变订单状态
    @PostMapping("/notify")
    public String notify(HttpServletRequest request) throws Exception {
        log.info("异步通知开始");
        //获取异步传来的数据
        Map<String, String> map = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator 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.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
//            //乱码解决,这段代码在出现乱码时使用
//            try {
//                valueStr = new String(valueStr.getBytes(), "utf-8");
//            } catch (UnsupportedEncodingException e) {
//                e.printStackTrace();
//            }
            map.put(name, valueStr);
        }
        System.out.println("支付结果---:" + map.toString());
        //调用SDK验证签名
        boolean signVerified = false;
        try {
            signVerified = AlipaySignature.rsaCheckV1(map, payMent.getAlipayPublicKey(), payMent.getCharset(), payMent.getSignType());
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (signVerified) {
            System.out.println("支付结果---:" + map.toString());
            String trad_no = map.get("out_trade_no");
            //根据交易流水号查询交易信息
            //交易成功
            if ("TRADE_SUCCESS".equals(map.get("trade_status"))) {
                //数据处理
              //  orderService.updateOrderByOrderNo(trad_no);

            }
            return "success";
        }
        return "failure";
    }

    //支付宝同步通知,只会调到我们转回的页面
    @GetMapping("/return")
    public ModelAndView returnUrl(HttpServletRequest request) throws Exception {
       log.info("同步验签");
        //获取异步传来的数据
        Map<String, String> map = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator 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.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
            //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
            map.put(name, valueStr);
        }
        log.info("支付结果---:" + map.toString());
        //调用SDK验证签名
        boolean signVerified = false;
        try {
            signVerified = AlipaySignature.rsaCheckV1(map, payMent.getAlipayPublicKey(), payMent.getCharset(), payMent.getSignType());
        } catch (Exception e) {
            e.printStackTrace();
        }

        ModelAndView view = new ModelAndView();
        //页面路径
        RedirectView redirectView = new RedirectView(payMent.getReturnOrder());
        redirectView.setExpandUriTemplateVariables(false);
        redirectView.setExposeModelAttributes(false);
        view.setView(redirectView);
        view.addObject("order", "finish");
        return view;
    }

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值