支付寶預受權凍結轉支付

1.public ResultObject forNotSupSwSendAlipayRequest(String orderNo) {
        //獲取訂單信息
        BaseMapEntity orderParamMap = new BaseMapEntity();
        orderParamMap.put("orderNo",orderNo);
        orderParamMap.put("status",7);//訂單狀態(1.待車主接單 2.待租客支付 3.租客取車選擇 4.待車主確認交車 5.待租客確認取車 6.車輛使用中 7.待車主確認還車 8.租客押金凍結 9.待車主確認退還租客押金 10已完成 11.已取消)
        BaseMapEntity vehicleOrderMap = vehicleOrderDao.queryVehicleOrderInfo(orderParamMap);
        if(null == vehicleOrderMap){
            return ResultObjectDto.initError(1, "訂單不存在或狀態已改變");
        }
        
        // TODO chenCang 2018-11-26 增長凍結轉支付邏輯
        BaseMapEntity waterMap = new BaseMapEntity();
        waterMap.put("orderNo", orderNo);
        waterMap.put("profitType", 3);
        waterMap.put("purseChannel", 4);
        
        //查詢訂單流水: 不管有沒有預受權,接下來的分帳操做必定會完成
        BaseMapEntity userPurse = userPurseWaterDao.selectByOrderNo(waterMap);
        if (userPurse != null) {
            String tradeNo = userPurse.getString("thirdTradeNo");   //支付寶交易流水號
            if (!StringUtils.isBlank(tradeNo)) {
                String realCostStr = vehicleOrderMap.getString("orderRealCost");
                String depositStr = vehicleOrderMap.getString("orderCostDeposit");
                BigDecimal realCost = new BigDecimal(realCostStr);
                
                if (!StringUtils.isBlank(depositStr)) {
                    realCost = realCost.subtract(new BigDecimal(depositStr));
                }
                
                //預受權轉支付
                String payUserId = userPurse.getString("payUserId");
                AlipayUtils.authTradePay(orderNo,tradeNo,"預受權轉支付",realCost.toString(),null,"NOT_COMPLETE",payUserId,AlipayBusiTypeEnum.ALPAY300);
            }
        }
        
        return ResultObjectDto.initOk();
    }java

2. /**
     * 支付寶受權轉支付
     * @Date 2018/11/15 14:02
     * @Param orderNo  訂單號
     * @Param authNo 預受權凍結交易號
     * @Param subject 解凍轉支付標題,用於展現在支付寶帳單中
     * @Param amount 結算支付金額
     * @Param body  備註信息
     * @Param authConfirmMode  預受權確認模式,受權轉交易請求中傳入,適用於預受權轉交易業務使用,COMPLETE:轉交易支付完成結束預受權,解凍剩餘金額; NOT_COMPLETE:轉交易支付完成不結束預受權,不解凍剩餘金額
     * @Param busiType 業務類型
     * @return java.lang.String
     **/
    public static String authTradePay(
            String orderNo,
            String authNo,
            String subject,
            String amount,
            String body,
            String authConfirmMode,
            String payUserId,
            AlipayBusiTypeEnum busiType) {
        String alipaySeller = ConfigUtil.getSettings("alipay_seller");api

        String outOrderNo = orderNo + Long.toString(System.currentTimeMillis());
        AlipayClient alipayClient = getAlipayClient();
        AlipayTradePayRequest request = new AlipayTradePayRequest();
        AlipayTradePayModel model = new AlipayTradePayModel();
        model.setOutTradeNo(outOrderNo); // 預受權轉支付商戶訂單號,爲新的商戶交易流水號;若是重試發起扣款,商戶訂單號不要變;
        model.setProductCode("PRE_AUTH_ONLINE"); // 固定值PRE_AUTH_ONLINE
        model.setAuthNo(authNo); // 填寫預受權凍結交易號
        model.setSubject(subject); // 解凍轉支付標題,用於展現在支付寶帳單中
        model.setTotalAmount(amount); // 結算支付金額
        model.setSellerId(alipaySeller); // 填寫賣家支付寶帳戶pid
        model.setBuyerId(payUserId); // 填寫預受權用戶uid,經過預受權凍結接口返回的payer_user_id字段獲取
        //model.setStoreId("test_store_id"); // 填寫實際交易發生的終端編號,與預受權的outStoreCode保持一致便可
        model.setBody(body); // 可填寫備註信息
        model.setAuthConfirmMode(authConfirmMode);//必須使用COMPLETE,傳入該值用戶剩餘金額會自動解凍
        request.setBizModel(model);
        String notifyUrl = ConfigUtil.getSettings("pament_domain")+"/api/pay/alipaycallback/" + busiType.getBusiTypeCode() + "/dealBusinessForAlipayCallback.do";
        request.setNotifyUrl(notifyUrl);//異步通知地址,必填,該接口只經過該參數進行異步通知微信

        String result = "";
        try{
            AlipayTradePayResponse response = alipayClient.execute(request);
            if(response.isSuccess()){
                logger.info("訂單:"+orderNo+"支付寶受權轉支付成功===>"+response.getBody());
                result = response.getBody();
            } else {
                logger.info("訂單:"+orderNo+"支付寶受權轉支付失敗"+response.getMsg());
            }
            
            //處理交易流水記錄
            BaseMapEntity waterMap = new BaseMapEntity();
            waterMap.put("className", "com.ds.tech.service.util.alibaba.AlipayUtils");
            waterMap.put("methodName", "authTradePay");
            waterMap.put("tradeType", "2");   //交易方式:1.銀行卡 2.支付寶 3.微信
            waterMap.put("tradeInput", JSONObject.toJSON(request).toString());
            waterMap.put("tradeOutput", JSONObject.toJSON(response).toString());
            waterMap.put("tradeTime", new Date());
            userPurseWaterHisMapper.insertUserPurseWaterHistory(waterMap);
        }catch (AlipayApiException e){
            logger.info(ExceptionUtil.getExceptionStr("訂單:"+orderNo+"支付寶受權轉支付失敗",e));
        }app

        return  result;
    }dom

3. 異步

相關文章
相關標籤/搜索