java集成支付宝app支付与微信app支付

这里只写请求 回调可以采用web端 可以参考我之前写的文章

废话不多说、上代码

PayController
@Autowired
    private AliPayService aliPayService;
    @Autowired
    private WeiXinPayService weiXinPayService;

    /**
     * android微信app支付
     */
    @ApiOperation("app支付")
    @GetMapping("/pay")
    public ResultVo unifiedOrder(
            @ApiParam(value = "订单号") @RequestParam String oId,
            @ApiParam(value = "(0,微信/1、支付宝)") @RequestParam Integer identification,
            HttpServletRequest request) {
        try {
            if (identification ==0){
                logger.info("PayController.unifiedOrder>>>>>>>>>>>>>>>>>>{pay}微信支付请求单号:oId="+oId);
                return ResultVoUtil.success(weiXinPayService.doUnifiedOrder(oId));
            }else {
                return ResultVoUtil.success(aliPayService.androidAliPay(oId));
            }
        } catch (Exception e) {
            logger.error(e.getMessage());
            return ResultVoUtil.error("运行异常,请联系管理员");
        }
    }

Server

    /**
     * 微信app支付
     * @param
     * @return
     * @throws Exception
     */
    Map<String,String> doUnifiedOrder(String oId);


    /**
     * 支付宝app支付
     * @throws IOException
     * @return*/
    String androidAliPay(String oId) throws Exception;

impl

 /**
     * 微信app支付
     * @param
     * @return
     * @throws Exception
     */
    @Override
    public Map<String,String> doUnifiedOrder(String oId){
        try {
            QueryWrapper<HOrder> wrapper = new QueryWrapper<>();
            wrapper.eq("o_id",oId);
            HOrder order = orderMapper.selectOne(wrapper);
            String num = order.getOrderPrice().multiply(BigDecimal.valueOf(100)).setScale(0).toString();
            orderService.updateOrder(order.getOId(),"微信app",0);
            //WXConfigUtil configUtil = new WXConfigUtil();
            WXPay wxPay = new WXPay(configUtil);
            Map<String, String> data = new HashMap<>();
            data.put("appid", app_id); //appid
            data.put("mch_id", mch_id); //商户号
            data.put("nonce_str", WXPayUtil.generateNonceStr());//随机字符串
            data.put("body", "test");//商品描述
            data.put("out_trade_no", oId); //商品订单号
            data.put("total_fee", num);  // 总金额
            data.put("spbill_create_ip", spbtll_create_ip);//终端IP
            data.put("notify_url", notify_url);//回调地址
            data.put("trade_type", "APP");//交易类型
            //附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
//            data.put("datetime", String.valueOf(new Date().getTime()));
            String sign = WXPayUtil.generateSignature(data,key, WXPayConstants.SignType.MD5);
            data.put("sign", sign); //生成签名
            String str = WXPayUtil.mapToXml(data);
            logger.info("map转xml" + str);
            logger.info("我给的数据是" + data);
            logger.info("第一次签名------------------" + sign);
            //使用官方API请求预付订单
            Map<String, String> response = wxPay.unifiedOrder(data);
            String returnCode = response.get("return_code");    //获取返回码
            Map<String, String> param = new LinkedHashMap<>();
            //判断返回状态码是否成功
            if (returnCode.equals("SUCCESS")) {
                //成功后接受微信返回的参数
                String resultCode = response.get("result_code");
                logger.info("获取返回码" + resultCode);
//                logger.info("获取返回码错误代码---" + response.get("err_code") + "---获取返回码错误代码描述---" + response.get("err_code_des"));
                param.put("appid", response.get("appid"));
                param.put("partnerid", response.get("mch_id"));//商户号
                param.put("packageValue", "Sign=WXPay");
                param.put("noncestr", WXPayUtil.generateNonceStr());//随机字符串
                param.put("datetime", String.valueOf(new Date().getTime()));    //时间戳
                if (resultCode.equals("SUCCESS")) {
                    param.put("prepayid", response.get("prepay_id"));//预支付交易会话ID
                    String retutnSign = WXPayUtil.generateSignature(param, key, WXPayConstants.SignType.MD5);
                    logger.info("第二次签名------------------" + retutnSign);
//说一下这个第二次的签名不是获取,而是拿着你请求微信支付回来的数据再去请求一次生成签名,方式一定要和第一次相同。
                    param.put("sign", retutnSign);
                    String str1 = WXPayUtil.mapToXml(param);
                    System.out.println("map转xml" + str1);
                    param.put("tradetype", response.get("trade_type")); //交易类型
                    logger.info("param=="+param);
                } else {
                    // //此时返回没有预付订单的数据
                    logger.info("此时返回没有预付订单的数据");
                }

            } else {
                logger.info("没有返回我接受到的微信参数");
            }
            return param;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }


 /**
     * 支付宝支付调用接口
     * @throws IOException
     * @return*/
    @Override
    public String androidAliPay(String oId) throws Exception {
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("o_id",oId);
        HOrder SOrder = orderMapper.selectOne(wrapper);
        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.gatewayurl,alipayConfig.appId,
                alipayConfig.rsaPrivateKey, "json",alipayConfig.charset,
                alipayConfig.alipayPublicKey,alipayConfig.signType);
        //设置请求参数
        AlipayTradeAppPayRequest aliPayRequest = new AlipayTradeAppPayRequest();
        //请求参数
        Map<String , String> map = new HashMap<>();
        //订单编号
        map.put("out_trade_no", SOrder.getOId());
        orderService.updateOrder(SOrder.getOId(),"支付宝",0);
        //编码
        map.put("product_code","QUICK_MSECURITY_PAY");
        //交易名
        map.put("subject","test");
        //总金额
        map.put("total_amount",String.valueOf(SOrder.getOrderPrice()));
        map.put("qr_code_timeout_express","120m");
        String string = JSONObject.toJSONString(map);
        logger.info("-----------json封装参数-------"+string);
        aliPayRequest.setBizContent(string);
        aliPayRequest.setReturnUrl(alipayConfig.returnUrl);
        aliPayRequest.setNotifyUrl(alipayConfig.notifyUrl);
        AlipayTradeAppPayResponse response = alipayClient.sdkExecute(aliPayRequest);
        logger.info("返回结果=" + response.getBody());
        return response.getBody();
    }






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值