支付宝手机唤起app支付

1:调用支付宝接口,获取的结果from表单给前端

2:将返回的结果发送给前端,前端触发submin表番

3:用户支付完成会触发 异步和同步

//手机唤起支付宝                                 //传参
    public AlipayTradeWapPayResponse payPhone(OrderDto orderDto) throws AlipayApiException {

        AlipayClient alipayClient = new DefaultAlipayClient(payMent.getGatewayUrl(), payMent.getAppId(), payMent.getRsaPrivateKey(), payMent.getFormat(), payMent.getCharset(), payMent.getAlipayPublicKey(), payMent.getSignType());
        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
        request.setNotifyUrl(payMent.getNotifyUrl());
        request.setReturnUrl(payMent.getReturnUrl());
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", orderDto.getOrderNo());
        bizContent.put("total_amount", orderDto.getTotalAmount());
        bizContent.put("subject", orderDto.getProductName());
        bizContent.put("product_code", "QUICK_WAP_WAY");



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

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("/PhoneReturn")
    public ModelAndView PhoneReturn(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.getReturnPhoneUrl());
        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、付费专栏及课程。

余额充值