Skip to main content

支付对接常见字段问题

/**
 * 获取请求客户端对象
 * setAppId ebuy分配的应用id
 * setAppSecret ebuy分配的密钥
 * setLang使用的语言
 * setUrl请求的环境地址
 */
public static CashierClient getClient() {
    CashierConfig config = new CashierConfig();
    config.setAppId("ebuy6fbbe5471500");
    config.setAppSecret("rbnoi3klpiell7qqby2ipy8jprrbtaf9");
    config.setLang("zh_CN");
    config.setUrl(Constants.PRO_URL);
    return CashierClient.getCashierClient(config);
}
/**
 * 退款示例
 * 只填写流水号代表整单退,流水号的格式:YYYYMMDD + 随机字符串,总长度小于等于32位
 * 如果部分退款需要填写refundMethod,填写退款资产类型和退款金额
 * tradeNo 是正交易时流水号
 * refundTradeNo退请求流水号
 */
public static void refund(String tradeNo, String refundTradeNo) {

    CashierClient cashierClient = getClient();

    RefundRequest refundRequest = new RefundRequest();
    //正交易流水号
    refundRequest.setOutTradeNo(tradeNo);
    //退款请求流水号
    refundRequest.setRefundTradeNo(refundTradeNo);

    PaasResponse<RefundResponse> refundResponse = cashierClient.refund(refundRequest);
    System.out.println(refundResponse);
    //只有全部成功此处是true,其他均为false
    //如false,content不一定有
    //退款不做强一致性校验,可以查看明细
    //资产类不一定能退款,需要对应支付平台支持
    refundResponse.isSuccess();
    //返回报文签名
    refundResponse.getSign();
    //uuid和请求一致
    refundResponse.getUuid();
    //报错码
    refundResponse.getErrorCode();
    //报错原因
    refundResponse.getErrorMessage();
    if (refundResponse.getContent() != null) {
        //退款信息
        RefundResponse refund = (RefundResponse) refundResponse.getContent();
        //退款时间
        refund.getRefundTime();
        //总退款金额
        refund.getRefundAmount();
        //退款的交易流水号
        refund.getOutTradeNo();
        //资产退款详情,商家储值卡
        RefundResult rslt = refund.getCardRefund();
        //此资产退款金额
        rslt.getRefundAmount();
        //此资产退款状态
        rslt.getRefundStatus();
        //电子钱包退款详情
        refund.getCashRefund();
        //商家优惠券类退款详情
        refund.getCouponRefund();
        //商家积分积分类退款详情
        refund.getPointsRefund();
    }
}

/**
 * 统一下单
 */
public static void createTrade(String tradeNo) {
    CashierClient cashierClient = getClient();
    CreateTradeRequest createTradeRequest = new CreateTradeRequest();
    //流水号格式固定
    createTradeRequest.setOutTradeNo(tradeNo);
    //使用场景必填,易百分配
    createTradeRequest.setUseScene("WECHAT_MINI");
    //提供给易百,易百配置
    createTradeRequest.setNotifyUrl("https://develop.tuesday-tech.com/pcs/ebuy/notify");
    //请求支付总金额
    //如果有不走易百渠道优惠,扣除优惠部分
    createTradeRequest.setTotalAmount(BigDecimal.valueOf(10.00));
    //币种,国际标准
    createTradeRequest.setCurrency("SGD");
    //支付身份信息
    UserInfo userInfo = new UserInfo();
    //支付者id
    userInfo.setUserId("okKky5fnJb68U6c7Ujui3ZKVo6Ea");
    //支付者id所在平台,易百提供
    userInfo.setPlatform("WECAHT_O");
    createTradeRequest.setUserInfo(userInfo);

    //交易数据需区分到门店,需上传
    //有优惠限制到门店,需上传
    //有结算到门店,需上传
    //其他需要上传门店信息到场景,需上传
    StoreInfo storeInfo = new StoreInfo();
    //店名称
    storeInfo.setName("Fresh4ALL");
    //店号
    storeInfo.setShopNo("fresh4allmp");
    createTradeRequest.setStoreInfo(storeInfo);
    //产品信息,建议所有订单产品上传
    //有不需要走易百优惠的产品,不上传
    //goodsDetail最大产品数限制100
    List<OutGoodsDto> goodsDetail = new ArrayList<>();
    OutGoodsDto outGoodsDto = new OutGoodsDto();
    //产品名称,长度限制50
    outGoodsDto.setGoodsName("test");
    //产品sku
    outGoodsDto.setGoodsId("1061797738");
    //产品数量
    outGoodsDto.setGoodsNum(41);
    //产品金额
    outGoodsDto.setPriceSale(BigDecimal.valueOf(1.00));
    goodsDetail.add(outGoodsDto);
    createTradeRequest.setGoodsDetail(goodsDetail);
    //支付方式集合
    //支持优惠券coupon、商户储值卡cashcard、商户积分points、电子钱包cash(支付宝、微信等)、数字人民币ECNY
    List<PayMethod> payMethod = new ArrayList<>();
    PayMethod method = new PayMethod();
    //coupon,cashcard的资产类型非必填,优先取易百路由结果
    //其他场景必填
    method.setAssetType("cash");
    //coupon,cashcard的资产类型非必填,优先取易百路由结果
    //其他场景必填
    method.setPayWay("WECHAT");
    //coupon不填,其他场景必填
    method.setAmount(BigDecimal.valueOf(0.00));
    //coupon,cashcard的资产必填
    //如有密钥格式是cardCoupon01|secret01
    method.setCardCoupons("10089234876342347753");
    //指定优惠用在SKU为A的产品,如果A产品没上传,交易失败
    method.setGoodsId("A");
    payMethod.add(method);
    createTradeRequest.setPayMethod(payMethod);
    //需要易百记录此笔交易中其他的支付信息
    List<Subsidy> subsidies = new ArrayList<>();
    Subsidy subsidy = new Subsidy();
    //支付主体
    subsidy.setAccount("xx");
    //支付金额
    subsidy.setAmount(BigDecimal.valueOf(20));
    subsidies.add(subsidy);
    createTradeRequest.setSubsidy(subsidies);
    PaasResponse<CreateTradeResponse> createTradeResponse = cashierClient.createTrade(createTradeRequest);
    System.out.println(createTradeResponse);
    //只有全部成功此处是true,其他均为false
    //如false,content不一定有
    createTradeResponse.isSuccess();
    //返回报文签名
    createTradeResponse.getSign();
    //uuid和请求一致
    createTradeResponse.getUuid();
    //报错码
    createTradeResponse.getErrorCode();
    //报错原因
    createTradeResponse.getErrorMessage();
    if (createTradeResponse.getContent() != null) {
        CreateTradeResponse body = (CreateTradeResponse) createTradeResponse.getContent();
        //PaidResult 某种资产(商家券、商家卡、商家积分、电子钱包和数字人民币)支付结果
        PaidResult paidResult = body.getCardPaid();
        //此支付资产支付总金额
        paidResult.getPaidAmount();
        //此支付资产用户实付金额
        paidResult.getUserAmount();
        //此支付资产商户实收金额
        paidResult.getMerchantAmount();
        //此支付资产优惠金额入账编码
        paidResult.getDiscountCode();
        //此支付资产实收金额入账编码
        paidResult.getTenderCode();
        //此支付资产使用明显,正常不返回
        paidResult.getUseList();
        //电子钱包支付详情,字段描述同上
        body.getCashPaid();
        //优惠券支付详情,字段描述同上
        body.getCouponPaid();
        //电子钱包支付渠道的app id
        body.getChannelAppId();
        //唤起电子钱包支付渠道支付台报文
        body.getChannelParams();
        //总支付成功金额
        body.getPaidAmount();
        //总用户实付总金额
        body.getUserPaid();
        //总商户实收总金额
        body.getMerchantAmount();
        //电子钱包预支付id
        body.getPrepayId();
        //支付二维码
        body.getQrCodeUrl();
        //支付跳转页面
        body.getRedirectUrl();
    }
}
/**
 * 交易查询
 */
public static void queryTrade() {

    CashierClient cashierClient = getClient();

    QueryTradeRequest queryTradeRequest = new QueryTradeRequest();
    //正交易交易流水号
    queryTradeRequest.setOutTradeNo("20210621swuirptcttimyjbofgdnoqrj");
    //正交易时间
    queryTradeRequest.setTradeTime("");
    //返回报文类似正交易报文
    PaasResponse<QueryTradeResponse> queryTradeResponse = cashierClient.queryTrade(queryTradeRequest);

}