All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.beecloud.BCPay Maven / Gradle / Ivy

There is a newer version: 3.5.5
Show newest version
/**
 * *************************
 *
 * @Date: Mar 18, 2015
 * @Time: 4:50:02 PM
 * @Author: Rui.Feng
 * 

* ************************** */ package cn.beecloud; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import jdk.nashorn.internal.parser.JSONParser; import net.sf.json.JSONObject; import net.sf.json.util.JSONUtils; import org.apache.commons.codec.digest.DigestUtils; import cn.beecloud.BCEumeration.BC_TRANSFER_BANK_TYPE; import cn.beecloud.BCEumeration.PAY_CHANNEL; import cn.beecloud.BCEumeration.RESULT_TYPE; import cn.beecloud.bean.*; /** * BeeCloud JAVA SDK核心类, 包括支付、退款、查询、企业打款、批量退款等接口 * * @author Ray * @since 2015/7/11 */ public class BCPay { private final static String TEST_MODE_SUPPORT_ERROR = "测试模式仅支持国内支付(WX_JSAPI暂不支持)、订单查询、订单总数查询、单笔订单查询"; /** * 支付接口 * * @param order * {@link BCOrder} (必填) 支付参数 * @return 调起BeeCloud支付后的返回结果 * @throws BCException */ public static BCOrder startBCPay(BCOrder order) throws BCException { ValidationUtil.validateBCPay(order); Map param = new HashMap(); buildPayParam(param, order); if (BCCache.isSandbox()) { if (order.getChannel().equals(PAY_CHANNEL.WX_JSAPI)) { throw new BCException(-2, RESULT_TYPE.OTHER_ERROR.name(), TEST_MODE_SUPPORT_ERROR); } Map ret = RequestUtil.doPost(BCUtilPrivate.getkSandboxApiPay(), param); placeSandboxOrder(order, ret); // 易宝点卡支付代码调用回调 if (order.getChannel().equals(PAY_CHANNEL.YEE_NOBANKCARD)) { RequestUtil.doGet(BCUtilPrivate.getkApiSandboxNotify() + "/" + BCCache.getAppID() + "/" + order.getObjectId() + "?para=", new HashMap()); } return order; } Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiPay(), param); placeOrder(order, ret); return order; } /** * (认证支付)确认支付接口 * * @param confirm * {@link BCBillConfirm} (必填) 支付rfa参数 * @return 调起BeeCloud支付后的返回结果 * @throws BCException */ public static Map billConfirm(BCBillConfirm confirm) throws BCException { ValidationUtil.validateBCBillConfirm(confirm); Map param = new HashMap(); buildBillConfirmParam(param, confirm); Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiBillConfirm(), param); return ret; } /** * BeeCloud线下支付接口 * * @param order * {@link BCOrder} (必填) 支付参数 * @return 调起BeeCloud支付后的返回结果 * @throws BCException */ public static BCOrder startBCOfflinePay(BCOrder order) throws BCException { ValidationUtil.validateBCPay(order); Map param = new HashMap(); buildPayParam(param, order); Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiOfflinePay(), param); placeOfflineOrder(order, ret); return order; } /** * 鉴权接口 * * @param auth * {@link BCAuth} (必填) 鉴权参数 * @return 调起BeeCloud鉴权后的返回结果 * @throws BCException */ public static BCAuth startBCAuth(BCAuth auth) throws BCException { Map param = new HashMap(); buildAuthParam(param, auth); Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiAuth(), param); placeAuth(auth, ret); return auth; } /** * 银行卡实名认证及代付签约接口 * * @param cardSign * {@link BCCardSign} (必填) 银行卡实名认证及代付签约接参数 * @return 调起BeeCloud银行卡实名认证及代付签约接口的返回结果 * @throws BCException */ public static BCCardSign startBCCardSign(BCCardSign cardSign) throws BCException { Map param = new HashMap(); buildBcCardSignParam(param, cardSign); Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiCardSign(), param); placeCardSign(cardSign, ret); return cardSign; } /** * 银行卡同步实名认证接口 * * @param cardSign * {@link BCCardSign} (必填) 银行卡同步实名认证参数 * @return 调起BeeCloud银行卡同步实名认证接口的返回结果 * @throws BCException */ public static BCCardSign startBCSyncCardVerify(BCCardSign cardSign) throws BCException { Map param = new HashMap(); buildBcCardSignParam(param, cardSign); Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiSyncCardVerify(), param); placeCardSign(cardSign, ret); return cardSign; } /** * 银行卡同步签约接口 * @param cardId * {@link String} (必填) 银行卡同步实名认证后返回的card_id * @return 调起BeeCloud银行卡同步签约接口的返回结果 * @throws BCException */ public static Map startBCSyncCardSign(String cardId) throws BCException { Map param = new HashMap(); buildBcSyncCardSignParam(param, cardId); return RequestUtil.doPost(BCUtilPrivate.getkApiSyncCardSign(), param); } /** * 代付接口 * * @param bcTransferParameter * {@link BCTransferParameter} (必填) 支付参数 * @return 调起BeeCloud代付后的返回结果 * @throws BCException */ public static Map startBCTransfer(BCTransferParameter bcTransferParameter) throws BCException { ValidationUtil.validateBCTransfer(bcTransferParameter); Map param = new HashMap(); buildBCTransferParam(param, bcTransferParameter); return RequestUtil.doPost(BCUtilPrivate.getkApiBCTransfer(), param); } /** * T0余额代付接口 * * */ public static Map startBCT0transfer(BCT0TransferParameter bcTransferParameter) throws BCException { ValidationUtil.validateBCT0Transfer(bcTransferParameter); Map param = new HashMap(); buildBCT0TransferParam(param, bcTransferParameter); return RequestUtil.doPost(BCUtilPrivate.getkApiBCT0Transfer(), param); } /** * T1余额代付接口 * * */ public static Map startBCT1transfer(BCT1TransferParameter bcTransferParameter) throws BCException { ValidationUtil.validateBCT1Transfer(bcTransferParameter); Map param = new HashMap(); buildBCT1TransferParam(param, bcTransferParameter); return RequestUtil.doPost(BCUtilPrivate.getkApiBCT1Transfer(), param); } /** * 退款接口 * * @param refund * {@link BCRefund} (必填) 退款参数 * @return 发起退款的返回结果 * @throws BCException */ public static BCRefund startBCRefund(BCRefund refund) throws BCException { checkTestModeSwitch(); ValidationUtil.validateBCRefund(refund); Map param = new HashMap(); buildRefundParam(param, refund); Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiRefund(), param); refund.setObjectId(StrUtil.toStr(ret.get("id"))); if (ret.containsKey("url")) { refund.setAliRefundUrl(StrUtil.toStr(ret.get("url"))); } return refund; } /** * 订单查询(批量)接口 * * @param para * {@link BCQueryParameter} (必填) 订单查询参数 * @return 订单查询返回的结果 * @throws BCException */ @SuppressWarnings("unchecked") public static List startQueryBill(BCQueryParameter para) throws BCException { ValidationUtil.validateQueryBill(para); Map param = new HashMap(); buildQueryParam(param, para); if (BCCache.isSandbox()) { Map ret = RequestUtil.doGet(BCUtilPrivate.getkApiSandboxQueryBill(), param); return generateBCOrderList((List>) ret.get("bills")); } Map ret = RequestUtil.doGet(BCUtilPrivate.getkApiQueryBill(), param); return generateBCOrderList((List>) ret.get("bills")); } /** * 订单查询(单笔,根据id)接口 * * @param objectId * (必填) 订单记录唯一标识 * @return id查询返回结果 * @throws BCException */ public static BCOrder startQueryBillById(String objectId) throws BCException { ValidationUtil.validateQueryById(objectId); Map param = new HashMap(); param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); StringBuilder urlSb = new StringBuilder(); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); urlSb.append(BCUtilPrivate.getkApiSandboxQueryBillById()); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); urlSb.append(BCUtilPrivate.getkApiQueryBillById()); } urlSb.append("/"); urlSb.append(objectId); urlSb.append("?para="); Map ret = RequestUtil.doGet(urlSb.toString(), param); return generateBCOrder((Map) ret.get("pay")); } /** * 订单总数查询接口 * * @param para * {@link BCQueryParameter} (必填)订单总数查询参数 * @return 订单总数查询返回的结果 * @throws BCException */ public static Integer startQueryBillCount(BCQueryParameter para) throws BCException { ValidationUtil.validateQueryBill(para); Map param = new HashMap(); buildQueryCountParam(param, para); if (BCCache.isSandbox()) { Map ret = RequestUtil.doGet(BCUtilPrivate.getkApiSandboxQueryBillCount(), param); return (Integer) ret.get("count"); } Map ret = RequestUtil.doGet(BCUtilPrivate.getkApiQueryBillCount(), param); return (Integer) ret.get("count"); } /** * 查询订单状态接口, 只为线下订单服务, 限定渠道为 WX_NATIVE、WX_SCAN、ALI_OFFLINE_QRCODE、ALI_SCAN、BC_ALI_SCAN、BC_WX_SCAN * @param bill_no 待查询订单号 (必填) * @param channel 待查询订单渠道 (选填) * @return * @throws BCException */ public static boolean queryOfflineBillStatus(String bill_no, PAY_CHANNEL channel) throws BCException{ Map param = new HashMap(); buildQueryOfflineStatusParam(param, bill_no, channel); Map ret = RequestUtil.doPost(BCUtilPrivate.getApiOfflineStatusUrl(), param); Boolean b = (Boolean) ret.get("pay_result"); return b == null ? false : b; } /** * 退款记录查询(批量)接口 * * @param para * {@link BCQueryParameter} (必填)订单查询参数 * @return 退款查询返回的结果 * @throws BCException */ public static List startQueryRefund(BCQueryParameter para) throws BCException { checkTestModeSwitch(); ValidationUtil.validateQueryRefund(para); Map param = new HashMap(); buildQueryParam(param, para); Map ret = RequestUtil.doGet(BCUtilPrivate.getkApiQueryRefund(), param); return generateBCRefundList((List>) ret.get("refunds")); } /** * 退款查询接口(根据 id) * * @param objectId * (必填) 退款记录唯一标识 * @return 单笔退款记录查询返回结果 * @throws BCException */ public static BCRefund startQueryRefundById(String objectId) throws BCException { checkTestModeSwitch(); ValidationUtil.validateQueryById(objectId); Map param = new HashMap(); param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); StringBuilder urlSb = new StringBuilder(); urlSb.append(BCUtilPrivate.getkApiQueryRefundById()); urlSb.append("/"); urlSb.append(objectId); urlSb.append("?para="); Map ret = RequestUtil.doGet(urlSb.toString(), param); return generateBCRefund((Map) ret.get("refund")); } /** * 退款记录总数查询接口 * * @param para * {@link BCQueryParameter} (必填) 退款总数查询参数 * @return 退款总数查询返回的结果 * @throws BCException */ public static Integer startQueryRefundCount(BCQueryParameter para) throws BCException { checkTestModeSwitch(); ValidationUtil.validateQueryRefund(para); Map param = new HashMap(); buildQueryCountParam(param, para); Map ret = RequestUtil.doGet(BCUtilPrivate.getkApiQueryRefundCount(), param); return (Integer) ret.get("count"); } /** * 退款状态更新接口 * * @param refundNo * (必填)商户退款单号, 格式为:退款日期(8位) + 流水号(3~24 * 位)。不可重复,且退款日期必须是当天日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000”。 * @param channel * (必填) 渠道类型, 根据不同场景选择不同的支付方式,包含: YEE 易宝 WX 微信 KUAIQIAN 快钱 BD 百度 * @return 退款状态更新返回结果,包括(SUCCESS, PROCESSING, FAIL...) * @throws BCException */ public static String startRefundUpdate(PAY_CHANNEL channel, String refundNo) throws BCException { checkTestModeSwitch(); ValidationUtil.validateQueryRefundStatus(channel, refundNo); Map param = new HashMap(); param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); param.put("channel", StrUtil.toStr(channel)); param.put("refund_no", refundNo); Map ret = RequestUtil.doGet(BCUtilPrivate.getkApiRefundUpdate(), param); return StrUtil.toStr(ret.get("refund_status")); } /** * 境外支付(paypal)接口 * * @param order * {@link BCInternationlOrder} (必填) * @return 支付后返回的order * @throws BCException */ public static BCInternationlOrder startBCInternatioalPay(BCInternationlOrder order) throws BCException { checkTestModeSwitch(); ValidationUtil.validateBCInternatioalPay(order); Map param = new HashMap(); buildInternatioalPayParam(param, order); Map ret = RequestUtil.doPost(BCUtilPrivate.getApiInternationalPay(), param); placePayPalOrder(order, ret); return order; } /** * 单笔打款接口 * * @param para * {@link TransferParameter} (必填)单笔打款参数 * @return 如果channel类型是TRANSFER_CHANNEL.ALI_TRANSFER, 返回需要跳转支付的url, 否则返回空字符串 * @throws BCException */ public static String startTransfer(TransferParameter para) throws BCException { checkTestModeSwitch(); ValidationUtil.validateBCTransfer(para); Map param = new HashMap(); buildTransferParam(param, para); Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiTransfer(), param); if (ret.containsKey("url")) { return StrUtil.toStr(ret.get("url")); } return ""; } /** * 批量打款接口 * * @param para * {@link TransfersParameter} (必填) 批量打款参数 * @return 批量打款跳转支付url * @throws BCException */ public static String startTransfers(TransfersParameter para) throws BCException { checkTestModeSwitch(); ValidationUtil.validateBCTransfers(para); Map param = new HashMap(); buildTransfersParam(param, para); Map ret = RequestUtil.doPost(BCUtilPrivate.getkApiTransfers(), param); return StrUtil.toStr(ret.get("url")); } /** * 预退款审核接口,包括批量否决和批量同意 * * @param batchRefund * (必填) 预退款批量审核参数 * @return 批量审核结果 * @throws BCException */ public static BCBatchRefund startBatchRefund(BCBatchRefund batchRefund) throws BCException { checkTestModeSwitch(); ValidationUtil.validateBatchRefund(batchRefund); Map param = new HashMap(); param.put("channel", StrUtil.toStr(batchRefund.getChannel())); param.put("agree", batchRefund.getAgree()); param.put("ids", batchRefund.getIds()); param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); Map ret = RequestUtil.doPut(BCUtilPrivate.getApiBatchRefund(), param); if (ret.containsKey("result_map")) { batchRefund.setIdResult((Map) ret.get("result_map")); if (ret.containsKey("url")) { batchRefund.setAliRefundUrl(StrUtil.toStr(ret.get("url"))); } } return batchRefund; } /** * 历史数据补全接口(批量) * * @param historyBills * {@link BCHistoryBills} (必填) 历史数据参数 * @return 调起历史数据补后的返回结果 * @throws BCException */ public static Map historyBills(BCHistoryBills historyBills) throws BCException { ValidationUtil.validateBCHistoryBills(historyBills); Map param = new HashMap(); param.put("bill_info", historyBills.getBillInfo()); param.put("app_id", BCCache.getAppID()); param.put("timestamp", Long.valueOf(historyBills.getTimeStamp())); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); return RequestUtil.doPut(BCUtilPrivate.getApiHistoryBills(), param); } public static List fetchBCTransfersBanks(BC_TRANSFER_BANK_TYPE type) throws BCException{ Map param = new HashMap(); param.put("type", StrUtil.toStr(type)); param.put("app_id", BCCache.getAppID()); Map ret = RequestUtil.doGet(BCUtilPrivate.getkApiBCTransferBanks(), param); return (List) ret.get("banks"); } /** * Webhook接收签名验证接口 * * @param sign * (必填) Webhook提供的签名 * @param timestamp * (必填) Webhook提供的timestamp,注意是String格式 * @return 验签结果 */ /* public static boolean verifySign(String sign, String timestamp) { String mySign = MD5.sign(BCCache.getAppID() + BCCache.getAppSecret(), timestamp, "UTF-8"); if (sign.equals(mySign)) return true; else return false; }*/ /** * webbook verifysign * @return */ public static boolean verifySign(String signature,String transactionId,String transactionType,String channelType, String transactionFee) { String masterKey = BCCache.getMasterKey(); StringBuffer toSign = new StringBuffer(); toSign.append(BCCache.getAppID()).append(transactionId) .append(transactionType).append(channelType) .append(transactionFee); boolean isVerified = MD5.verify(toSign.toString(), signature, masterKey, "UTF-8"); if (!isVerified) { return false; } return true; } /** * 生成webhook 的 两个sing * webbook verifysign * @return */ public static String generateSignature(String transactionId,String transactionType,String channelType, String transactionFee) { StringBuffer toSign = new StringBuffer(); toSign.append(BCCache.getAppID()).append(transactionId) .append(transactionType).append(channelType) .append(transactionFee); if (StrUtil.empty(toSign) ) { return ""; } String mysign2 = DigestUtils.md5Hex(MD5.getContentBytes(toSign.toString(),"UTF-8")); return mysign2; } /** * 构建支付rest api参数 */ private static void buildPayParam(Map param, BCOrder para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); } param.put("channel", StrUtil.toStr(para.getChannel())); param.put("total_fee", para.getTotalFee()); param.put("bill_no", para.getBillNo()); param.put("title", para.getTitle()); if (para.getReturnUrl() != null) { param.put("return_url", para.getReturnUrl()); } if (para.getOptional() != null && para.getOptional().size() > 0) { param.put("optional", para.getOptional()); } if (para.getAnalysis() != null && para.getAnalysis().size() > 0) { param.put("analysis", para.getAnalysis()); } if (para.getOpenId() != null) { param.put("openid", para.getOpenId()); } if (para.getIdentityId() != null) { param.put("identity_id", para.getIdentityId()); } if (para.getShowUrl() != null) { param.put("show_url", para.getShowUrl()); } if (para.getQrPayMode() != null) { if (para.getQrPayMode().ordinal() == 2) { param.put("qr_pay_mode", String.valueOf(para.getQrPayMode().ordinal() + 1)); } else { param.put("qr_pay_mode", String.valueOf(para.getQrPayMode().ordinal())); } } if (para.getBillTimeout() != null) { param.put("bill_timeout", para.getBillTimeout()); } if (para.getChannel().equals(PAY_CHANNEL.YEE_NOBANKCARD)) { param.put("cardno", para.getCardNo()); param.put("cardpwd", para.getCardPwd()); param.put("frqid", para.getFrqid()); } if (para.getGatewayBank() != null) { param.put("bank", StrUtil.toStr(para.getGatewayBank())); } if (para.getBcExpressCardNo() != null) { param.put("card_no", StrUtil.toStr(para.getBcExpressCardNo())); } if (para.getLimitCredit() != null) { param.put("limit_credit", para.getLimitCredit().booleanValue()); } if (para.isUseApp() != null) { param.put("use_app", para.isUseApp()); } if (para.getNotifyUrl() != null) { param.put("notify_url", para.getNotifyUrl()); } if (para.getAuthCode() != null) { param.put("auth_code", para.getAuthCode()); } if (para.getIdNo() != null) { param.put("id_no", para.getIdNo()); } if (para.getIdHolder() != null) { param.put("id_holder", para.getIdHolder()); } if (para.getPayType() != null) { param.put("pay_type", para.getPayType()); } if (para.getBuyerId() != null) { param.put("buyer_id", para.getBuyerId()); } if (para.getCardType() != null) { param.put("card_type", para.getCardType()); } if(para.getStoreId()!=null){ param.put("store_id", para.getStoreId()); } if (para.getCardId() != null) { param.put("card_id", para.getCardId()); } if (para.getCouponId() != null) { param.put("coupon_id", para.getCouponId()); } } /** * 构建BC代付rest api参数 */ private static void buildBCTransferParam(Map param, BCTransferParameter para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); } param.put("total_fee", para.getTotalFee()); param.put("bill_no", para.getBillNo()); param.put("title", para.getTitle()); param.put("trade_source", para.getTradeSource()); param.put("bank_fullname", para.getBankFullName()); param.put("card_type", para.getCardType()); param.put("account_type", para.getAccountType()); param.put("account_no", para.getAccountNo()); param.put("account_name", para.getAccountName()); if (!StrUtil.empty(para.getNotifyUrl())) param.put("notify_url", para.getNotifyUrl()); if (!StrUtil.empty(para.getMobile())) param.put("mobile", para.getBankFullName()); if (!StrUtil.empty(para.getOptional())) param.put("optional", para.getOptional()); } /** * 构建BC代付rest api参数 */ private static void buildBCT0TransferParam(Map param, BCT0TransferParameter para) { param.put("app_id", BCCache.getAppID()); param.put("withdraw_amount", para.getTotalFee()); param.put("bill_no", para.getBillNo()); param.put("note", para.getNote()); param.put("transfer_type", para.getTransferType()); param.put("bank_name", para.getBankName()); param.put("bank_account_no", para.getBankAccountNo()); param.put("bank_account_name", para.getBankAccountName()); param.put("bank_code", para.getBankCode()); param.put("signature", BCUtilPrivate.masterSign(BCCache.getAppID() + para.getBillNo() + para.getTotalFee() + para.getBankAccountNo())); if (!StrUtil.empty(para.getNotifyUrl())) param.put("notify_url", para.getNotifyUrl()); if (!StrUtil.empty(para.getOptional())) param.put("optional", para.getOptional()); } /** * 构建BC T1代付rest api参数 */ private static void buildBCT1TransferParam(Map param, BCT1TransferParameter para) { param.put("app_id", BCCache.getAppID()); param.put("total_fee", para.getTotalFee()); param.put("bill_no", para.getBillNo()); param.put("is_personal", para.getIsPersonal()); param.put("bank_name", para.getBankName()); param.put("bank_account_no", para.getBankAccountNo()); param.put("bank_account_name", para.getBankAccountName()); param.put("signature", BCUtilPrivate.masterSign(BCCache.getAppID() + para.getBillNo() + para.getTotalFee() + para.getBankAccountNo())); if (!StrUtil.empty(para.getOptional())) param.put("optional", para.getOptional()); } /** * 构建BCUser代付rest api参数 */ private static void buildBCUserTransferParam(Map param, BCTransferParameter para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); } param.put("total_fee", para.getTotalFee()); param.put("bill_no", para.getBillNo()); param.put("title", para.getTitle()); param.put("trade_source", para.getTradeSource()); param.put("bank_fullname", para.getBankFullName()); param.put("card_type", para.getCardType()); param.put("channel", para.getChannel()); param.put("account_type", para.getAccountType()); param.put("account_no", para.getAccountNo()); param.put("account_name", para.getAccountName()); if (!StrUtil.empty(para.getMobile())) param.put("mobile", para.getBankFullName()); if (!StrUtil.empty(para.getOptional())) param.put("optional", para.getOptional()); } /** * 构建退款rest api参数 */ private static void buildRefundParam(Map param, BCRefund para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignatureWithMasterSecret(StrUtil.toStr(param .get("timestamp")))); param.put("refund_no", para.getRefundNo()); param.put("bill_no", para.getBillNo()); param.put("refund_fee", para.getRefundFee()); if (para.getChannel() != null) { param.put("channel", StrUtil.toStr(para.getChannel())); } if (para.isNeedApproval() != null) { param.put("need_approval", para.isNeedApproval()); } if (para.getOptional() != null && para.getOptional().size() > 0) param.put("optional", para.getOptional()); param.put("refund_account", para.getRefund_account()); } /** * 构建查询rest api参数 */ private static void buildQueryParam(Map param, BCQueryParameter para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); } if (para.getChannel() != null) { param.put("channel", StrUtil.toStr(para.getChannel())); } if (para.getBillNo() != null) { param.put("bill_no", para.getBillNo()); } if (para.getRefundNo() != null) { param.put("refund_no", para.getRefundNo()); } if (para.getSkip() != null) { param.put("skip", para.getSkip()); } if (para.getLimit() != null) { param.put("limit", para.getLimit()); } if (para.getStartTime() != null) { param.put("start_time", para.getStartTime().getTime()); } if (para.getEndTime() != null) { param.put("end_time", para.getEndTime().getTime()); } if (para.getPayResult() != null) { param.put("spay_result", para.getPayResult()); } if (para.getRefundResult() != null) { param.put("refund_result", para.getRefundResult()); } if (para.getNeedDetail() != null && para.getNeedDetail()) { param.put("need_detail", para.getNeedDetail()); } if (para.getNeedApproval() != null && para.getNeedApproval()) { param.put("need_approval", para.getNeedApproval()); } } /** * 构建订单总数查询rest api参数 */ private static void buildQueryCountParam(Map param, BCQueryParameter para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); } if (para.getChannel() != null) { param.put("channel", StrUtil.toStr(para.getChannel())); } if (para.getBillNo() != null) { param.put("bill_no", para.getBillNo()); } if (para.getRefundNo() != null) { param.put("refund_no", para.getRefundNo()); } if (para.getStartTime() != null) { param.put("start_time", para.getStartTime().getTime()); } if (para.getEndTime() != null) { param.put("end_time", para.getEndTime().getTime()); } if (para.getPayResult() != null) { param.put("spay_result", para.getPayResult()); } if (para.getRefundResult() != null) { param.put("refund_result", para.getRefundResult()); } if (para.getNeedApproval() != null && para.getNeedApproval()) { param.put("need_approval", para.getNeedApproval()); } } /** * 构建查询/更新线下订单状态参数 * @param param * @param bill_no * @param channel */ private static void buildQueryOfflineStatusParam(Map param, String bill_no, PAY_CHANNEL channel) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param .get("timestamp")))); param.put("bill_no", bill_no); if (channel != null) { param.put("channel", channel.toString()); } } /** * 构建境外支付rest api参数 */ private static void buildInternatioalPayParam(Map param, BCInternationlOrder order) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); param.put("channel", StrUtil.toStr(order.getChannel())); param.put("currency", StrUtil.toStr(order.getCurrency())); param.put("bill_no", order.getBillNo()); param.put("title", order.getTitle()); param.put("total_fee", order.getTotalFee()); if (order.getCreditCardInfo() != null) { Map map = new HashMap(); param.put("credit_card_info", map); map.put("card_number", order.getCreditCardInfo().getCardNo()); map.put("expire_month", order.getCreditCardInfo().getExpireMonth()); map.put("expire_year", order.getCreditCardInfo().getExpireYear()); map.put("cvv", order.getCreditCardInfo().getCvv()); map.put("first_name", order.getCreditCardInfo().getFirstName()); map.put("last_name", order.getCreditCardInfo().getLastName()); map.put("card_type", StrUtil.toStr(order.getCreditCardInfo().getCardType())); } if (order.getCreditCardId() != null) { param.put("credit_card_id", order.getCreditCardId()); } if (order.getReturnUrl() != null) { param.put("return_url", order.getReturnUrl()); } } /** * 构建单笔打款rest api参数 */ private static void buildTransferParam(Map param, TransferParameter para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignatureWithMasterSecret(StrUtil.toStr(param .get("timestamp")))); param.put("channel", StrUtil.toStr(para.getChannel())); param.put("transfer_no", para.getTransferNo()); param.put("total_fee", para.getTotalFee()); param.put("desc", para.getDescription()); param.put("channel_user_id", para.getChannelUserId()); if (para.getChannelUserName() != null) { param.put("channel_user_name", para.getChannelUserName()); } if (para.getRedpackInfo() != null) { Map redpackInfo = new HashMap(); redpackInfo.put("send_name", para.getRedpackInfo().getSendName()); redpackInfo.put("wishing", para.getRedpackInfo().getWishing()); redpackInfo.put("act_name", para.getRedpackInfo().getActivityName()); param.put("redpack_info", redpackInfo); } if (para.getAccountName() != null) { param.put("account_name", para.getAccountName()); } } /** * 构建批量打款rest api参数 */ private static void buildTransfersParam(Map param, TransfersParameter para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignatureWithMasterSecret(StrUtil.toStr(param .get("timestamp")))); param.put("channel", StrUtil.toStr(para.getChannel())); param.put("batch_no", para.getBatchNo()); param.put("account_name", para.getAccountName()); List> transferList = new ArrayList>(); for (ALITransferData data : para.getTransferDataList()) { Map map = new HashMap(); map.put("transfer_id", data.getTransferId()); map.put("receiver_account", data.getReceiverAccount()); map.put("receiver_name", data.getReceiverName()); map.put("transfer_fee", data.getTransferFee()); map.put("transfer_note", data.getTransferNote()); transferList.add(map); } param.put("transfer_data", transferList); } /** * 构建鉴权rest api参数 */ private static void buildAuthParam(Map param, BCAuth auth) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); param.put("name", StrUtil.toStr(auth.getName())); param.put("id_no", StrUtil.toStr(auth.getIdNo())); param.put("card_no", StrUtil.toStr(auth.getCardNo())); if (auth.getMobile() != null) { param.put("mobile", StrUtil.toStr(auth.getMobile())); } } /** * 构建实名认证及签约rest api参数 */ private static void buildBcCardSignParam(Map param, BCCardSign cardSign) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); param.put("id_name", StrUtil.toStr(cardSign.getIdName())); param.put("id_no", StrUtil.toStr(cardSign.getIdNo())); param.put("card_no", StrUtil.toStr(cardSign.getCardNo())); param.put("mobile", StrUtil.toStr(cardSign.getMobile())); param.put("bank", StrUtil.toStr(cardSign.getBank())); if (cardSign.getNotifyUrl() != null) { param.put("notify_url", StrUtil.toStr(cardSign.getNotifyUrl())); } } /** * 构建同步签约rest api参数 */ private static void buildBcSyncCardSignParam(Map param, String cardId) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); param.put("card_id", cardId); } /** * 生成返回BCOrder list */ private static List generateBCOrderList(List> bills) { List bcOrderList = new ArrayList(); for (Map bill : bills) { BCOrder bcOrder = new BCOrder(); generateBCOrderBean(bill, bcOrder); bcOrderList.add(bcOrder); } return bcOrderList; } /** * 生成返回BCOrder */ private static BCOrder generateBCOrder(Map bill) { BCOrder bcOrder = new BCOrder(); generateBCOrderBean(bill, bcOrder); return bcOrder; } /** * 生成返回BCRefund list */ private static List generateBCRefundList(List> refundList) { List bcRefundList = new ArrayList(); for (Map refund : refundList) { BCRefund bcRefund = new BCRefund(); generateBCRefundBean(refund, bcRefund); bcRefundList.add(bcRefund); } return bcRefundList; } /** * 生成返回BCRefund */ private static BCRefund generateBCRefund(Map refund) { BCRefund bcRefund = new BCRefund(); generateBCRefundBean(refund, bcRefund); return bcRefund; } /** * 构建返回BCOrder bean */ private static void generateBCOrderBean(Map bill, BCOrder bcOrder) { bcOrder.setObjectId(StrUtil.toStr(bill.get("id"))); bcOrder.setBillNo(StrUtil.toStr(bill.get("bill_no"))); bcOrder.setTotalFee((Integer) bill.get("total_fee")); bcOrder.setTitle(StrUtil.toStr(bill.get("title"))); bcOrder.setChannel(PAY_CHANNEL.valueOf(StrUtil.toStr(bill.get("sub_channel")))); bcOrder.setResult(((Boolean) bill.get("spay_result"))); if (bill.containsKey("trade_no") && bill.get("trade_no") != null) { bcOrder.setChannelTradeNo(StrUtil.toStr(bill.get("trade_no"))); } bcOrder.setOptionalString(StrUtil.toStr(bill.get("optional"))); bcOrder.setDateTime(BCUtilPrivate.transferDateFromLongToString((Long) bill .get("create_time"))); if (bill.containsKey("message_detail")) { bcOrder.setMessageDetail(StrUtil.toStr(bill.get("message_detail"))); } bcOrder.setRefundResult((Boolean) bill.get("refund_result")); bcOrder.setRevertResult((Boolean) bill.get("revert_result")); // for coupon usage bcOrder.setBillFee((Integer) bill.get("bill_fee")); bcOrder.setDiscount((Integer) bill.get("discount")); bcOrder.setCouponId((String) bill.get("coupon_id")); } /** * 构建返回BCRefund bean */ private static void generateBCRefundBean(Map refund, BCRefund bcRefund) { bcRefund.setObjectId(StrUtil.toStr(refund.get("id"))); bcRefund.setBillNo(StrUtil.toStr(refund.get("bill_no"))); bcRefund.setChannel(PAY_CHANNEL.valueOf(StrUtil.toStr(refund.get("sub_channel")))); bcRefund.setFinished((Boolean) refund.get("finish")); bcRefund.setDateTime(BCUtilPrivate.transferDateFromLongToString((Long) refund .get("create_time"))); bcRefund.setOptionalString(StrUtil.toStr(refund.get("optional"))); bcRefund.setRefunded((Boolean) refund.get("result")); bcRefund.setTitle(StrUtil.toStr(refund.get("title"))); bcRefund.setTotalFee((Integer) refund.get("total_fee")); bcRefund.setRefundFee((Integer) refund.get("refund_fee")); bcRefund.setRefundNo(StrUtil.toStr(refund.get("refund_no"))); if (refund.containsKey("message_detail")) { bcRefund.setMessageDetail(StrUtil.toStr(refund.get("message_detail"))); } } /** * 构建WXJSAPI返回Map */ private static Map generateWXJSAPIMap(Map ret) { Map map = new HashMap(); map.put("appId", StrUtil.toStr(ret.get("app_id"))); map.put("package", StrUtil.toStr(ret.get("package"))); map.put("nonceStr", StrUtil.toStr(ret.get("nonce_str"))); map.put("timeStamp", StrUtil.toStr(ret.get("timestamp"))); map.put("paySign", StrUtil.toStr(ret.get("pay_sign"))); map.put("signType", StrUtil.toStr(ret.get("sign_type"))); return map; } /** * 组建返回订单 */ private static void placeOrder(BCOrder order, Map ret) { order.setObjectId(StrUtil.toStr(ret.get("id"))); order.setResultMap(ret); switch (order.getChannel()) { /*case WX_NATIVE: case BC_NATIVE: case BC_ALI_QRCODE: case BC_ALI_WAP: if (ret.containsKey("code_url") && null != ret.get("code_url")) { order.setCodeUrl(StrUtil.toStr(ret.get("code_url"))); } break;*/ case WX_JSAPI: case BC_WX_JSAPI: order.setWxJSAPIMap(generateWXJSAPIMap(ret)); break; case BC_ALI_JSAPI: if (ret.containsKey("trade_no") && null != ret.get("trade_no")) { order.setTradeNo(StrUtil.toStr(ret.get("trade_no"))); } break; /*case ALI_WEB: case ALI_QRCODE: case ALI_WAP: if (ret.containsKey("html") && null != ret.get("html") && ret.containsKey("url") && null != ret.get("url")) { order.setHtml(StrUtil.toStr(ret.get("html"))); order.setUrl(StrUtil.toStr(ret.get("url"))); } break; case UN_WEB: case UN_WAP: case JD_WAP: case JD_WEB: case KUAIQIAN_WAP: case KUAIQIAN_WEB: case BC_GATEWAY: case CP_WEB: if (ret.containsKey("html") && null != ret.get("html")) { order.setHtml(StrUtil.toStr(ret.get("html"))); } break; case YEE_WAP: case YEE_WEB: case BD_WEB: case BD_WAP: case BC_WX_WAP: if (ret.containsKey("url") && null != ret.get("url")) { order.setUrl(StrUtil.toStr(ret.get("url"))); } break; case BC_ALI_WEB: case BC_EXPRESS: if (ret.containsKey("url") && null != ret.get("url")) { order.setUrl(StrUtil.toStr(ret.get("url"))); } if (ret.containsKey("html") && null != ret.get("html")) { order.setHtml(StrUtil.toStr(ret.get("html"))); } break;*/ default: if (ret.containsKey("code_url") && null != ret.get("code_url")) { order.setCodeUrl(StrUtil.toStr(ret.get("code_url"))); } if (ret.containsKey("url") && null != ret.get("url")) { order.setUrl(StrUtil.toStr(ret.get("url"))); } if (ret.containsKey("html") && null != ret.get("html")) { order.setHtml(StrUtil.toStr(ret.get("html"))); } if(StrUtil.empty(order.getUrl())&&!StrUtil.empty(order.getCodeUrl())){ order.setUrl(order.getCodeUrl()); } if(StrUtil.empty(order.getCodeUrl())&&!StrUtil.empty(order.getUrl())){ order.setCodeUrl(order.getUrl()); } break; } if(ret.containsKey("token")){ order.setToken(StrUtil.toStr(ret.get("token"))); } } /* * 组建offline order */ private static void placeOfflineOrder(BCOrder order, Map ret) { order.setObjectId(StrUtil.toStr(ret.get("id"))); boolean payResult = (Boolean)ret.get("pay_result"); if (payResult) { order.setResult(true); } } /** * 组建返回境外支付订单 */ private static void placePayPalOrder(BCInternationlOrder order, Map ret) { order.setObjectId(StrUtil.toStr(ret.get("id"))); switch (order.getChannel()) { case PAYPAL_PAYPAL: order.setUrl(StrUtil.toStr(ret.get("url"))); break; case PAYPAL_CREDITCARD: order.setCreditCardId(StrUtil.toStr(ret.get("credit_card_id"))); break; default: break; } } /** * 组建返回沙箱支付订单 */ private static void placeSandboxOrder(BCOrder order, Map ret) { order.setObjectId(StrUtil.toStr(ret.get("id"))); switch (order.getChannel()) { case WX_NATIVE: if (ret.containsKey("url") && null != ret.get("url")) { order.setCodeUrl(StrUtil.toStr(ret.get("url"))); } break; case WX_JSAPI: order.setWxJSAPIMap(generateWXJSAPIMap(ret)); break; case ALI_WEB: case ALI_QRCODE: case ALI_WAP: if (ret.containsKey("url") && null != ret.get("url")) { order.setHtml(BCUtil.generateSandboxHtmlWithUrl(StrUtil.toStr(ret.get("url")))); order.setUrl(StrUtil.toStr(ret.get("url"))); } break; case UN_WEB: case UN_WAP: case JD_WAP: case JD_WEB: case KUAIQIAN_WAP: case KUAIQIAN_WEB: case BC_GATEWAY: if (ret.containsKey("url") && null != ret.get("url")) { order.setHtml(BCUtil.generateSandboxHtmlWithUrl(StrUtil.toStr(ret.get("url")))); } break; case YEE_WAP: case YEE_WEB: case BD_WEB: case BD_WAP: if (ret.containsKey("url") && null != ret.get("url")) { order.setUrl(StrUtil.toStr(ret.get("url"))); } default: break; } } /** * 组建返回鉴权 */ private static void placeAuth(BCAuth auth, Map ret) { if (ret.containsKey("auth_result") && null != ret.get("auth_result")) { auth.setAuthResult((Boolean)ret.get("auth_result")); } if (ret.containsKey("auth_msg") && null != ret.get("auth_msg")) { auth.setAuthMsg(StrUtil.toStr(ret.get("auth_msg"))); } if (ret.containsKey("card_id") && null != ret.get("card_id")) { auth.setCardId(StrUtil.toStr(ret.get("card_id"))); } } /** * 组建返回银行卡实名认证及签约 */ private static void placeCardSign(BCCardSign cardSign, Map ret) { if (ret.containsKey("card_id") && null != ret.get("card_id")) { cardSign.setCardId(StrUtil.toStr(ret.get("card_id"))); } } /** * 构建查询银行卡rest api参数 */ private static void buildGateWayBanksParam(Map param, BCGateWayBanks para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); if (para.getCardType() != null) { param.put("card_type", StrUtil.toStr(para.getCardType())); } if (para.getPayType() != null) { param.put("pay_type", para.getPayType()); } } /** * 构建查询银行卡rest api参数 */ private static void buildTransferBanksParam(Map param, BCTransferBanks para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); if (para.getType() != null) { param.put("type", StrUtil.toStr(para.getType())); } } /** * 检查某一接口是否支持测试模式 */ private static void checkTestModeSwitch() throws BCException { if (BCCache.isSandbox()) { throw new BCException(-2, RESULT_TYPE.OTHER_ERROR.name(), TEST_MODE_SUPPORT_ERROR); } } /** * 京东网关backlist */ public static List getGateWayBanks(BCGateWayBanks para) throws BCException { Map param = new HashMap(); buildGateWayBanksParam(param, para); Map ret = RequestUtil.doGet(BCUtilPrivate.getGateWayBankListUrl(), param); return (List) ret.get("banks"); } public static List getTransferBanks(BCTransferBanks para) throws BCException { Map param = new HashMap(); buildTransferBanksParam(param, para); Map ret = RequestUtil.doGet(BCUtilPrivate.getTransferBankListUrl(), param); return (List) ret.get("banks"); } /** * 构建认证支付rest api参数 */ private static void buildBillConfirmParam(Map param, BCBillConfirm para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); } param.put("token", para.getToken()); param.put("bc_bill_id", para.getBillId()); param.put("verify_code", para.getVerifyCode()); } /** * 构建打款查询rest api参数 */ private static void buildTransferQueryParam(Map param, BCTransferQueryParameter para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); } if (para.getBillNo() != null) { param.put("bill_no", para.getBillNo()); } if (para.getNeedDetail() != null) { param.put("need_detail", para.getNeedDetail()); } if (para.getTransferStatus() != null) { param.put("transfer_status", para.getTransferStatus().toString()); } if (para.getStartTime() != null) { param.put("start_time", para.getStartTime().getTime()); } if (para.getEndTime() != null) { param.put("end_time", para.getEndTime()); } if (para.getStartTime() != null) { param.put("start_time", para.getStartTime().getTime()); } if (para.getEndTime() != null) { param.put("end_time", para.getEndTime().getTime()); } if (para.getSkip() != null) { param.put("skip", para.getSkip()); } if (para.getLimit() != null) { param.put("limit", para.getLimit()); } } /** * 构建打款订单总数查询rest api参数 */ private static void buildTransferQueryCountParam(Map param, BCTransferQueryParameter para) { param.put("app_id", BCCache.getAppID()); param.put("timestamp", System.currentTimeMillis()); if (BCCache.isSandbox()) { param.put("app_sign", BCUtilPrivate.getAppSignatureWithTestSecret(StrUtil.toStr(param .get("timestamp")))); } else { param.put("app_sign", BCUtilPrivate.getAppSignature(StrUtil.toStr(param.get("timestamp")))); } if (para.getBillNo() != null) { param.put("bill_no", para.getBillNo()); } if (para.getTransferStatus() != null) { param.put("transfer_status", para.getTransferStatus().toString()); } if (para.getStartTime() != null) { param.put("start_time", para.getStartTime().getTime()); } if (para.getEndTime() != null) { param.put("end_time", para.getEndTime().getTime()); } } /** * 打款订单查询接口 * * @param para * {@link BCTransferQueryParameter} (必填)打款订单查询参数 * @return 打款订单查询返回的结果 * @throws BCException */ @SuppressWarnings("unchecked") public static List startTransferQuery(BCTransferQueryParameter para) throws BCException { ValidationUtil.validateQueryTransfer(para); Map param = new HashMap(); buildTransferQueryParam(param, para); Map ret = RequestUtil.doGet(BCUtilPrivate.getApiQueryTransfer(), param); return generateBCTransferOrderList((List>) ret.get("bills")); } /** * 打款订单总数查询接口 * * @param para * {@link BCTransferQueryParameter} (必填)打款订单总数查询参数 * @return 打款订单总数查询返回的结果 * @throws BCException */ public static Integer startTransferQueryCount(BCTransferQueryParameter para) throws BCException { ValidationUtil.validateQueryTransfer(para); Map param = new HashMap(); buildTransferQueryCountParam(param, para); Map ret = RequestUtil.doGet(BCUtilPrivate.getApiQueryTransferCount(), param); return (Integer) ret.get("count"); } /** * 生成返回BCTransferOrder list */ private static List generateBCTransferOrderList(List> transferOrders) { List bcTransferOrderList = new ArrayList(); for (Map transferOrder : transferOrders) { BCTransferOrder bcTransferOrder = new BCTransferOrder(); generateBCTransferOrderBean(transferOrder, bcTransferOrder); bcTransferOrderList.add(bcTransferOrder); } return bcTransferOrderList; } /** * 构建返回BCTransferOrder bean */ private static void generateBCTransferOrderBean(Map transferOrder, BCTransferOrder bcTransferOrder) { bcTransferOrder.setId(StrUtil.toStr(transferOrder.get("id"))); bcTransferOrder.setBillNo(StrUtil.toStr(transferOrder.get("bill_no"))); bcTransferOrder.setTotalFee((Integer) transferOrder.get("total_fee")); bcTransferOrder.setTitle(StrUtil.toStr(transferOrder.get("title"))); bcTransferOrder.setSpayResult(((Boolean) transferOrder.get("spay_result"))); bcTransferOrder.setTradeNo(StrUtil.toStr(transferOrder.get("trade_no"))); bcTransferOrder.setOptionalString(StrUtil.toStr(transferOrder.get("optional"))); if (!StrUtil.empty(transferOrder.get("optional"))) { JSONObject jsonObject = JSONObject.fromObject(transferOrder.get("optional")); bcTransferOrder.setOptional(JSONUtils.getProperties(jsonObject)); } bcTransferOrder.setCreateTime(BCUtilPrivate.transferDateFromLongToString((Long) transferOrder .get("create_time"))); bcTransferOrder.setMessageDetail(StrUtil.toStr(transferOrder.get("message_detail"))); if (!StrUtil.empty(transferOrder.get("transfer_status"))) { bcTransferOrder.setTransferStatus(BCEumeration.TRANSFER_STATUS.valueOf(StrUtil.toStr(transferOrder.get("transfer_status")))); } bcTransferOrder.setAccountName(StrUtil.toStr(transferOrder.get("account_name"))); bcTransferOrder.setAccountNo(StrUtil.toStr(transferOrder.get("account_no"))); bcTransferOrder.setBankFullName(StrUtil.toStr(transferOrder.get("bank_full_name"))); bcTransferOrder.setNotifyUrl(StrUtil.toStr(transferOrder.get("notify_url"))); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy