e-Buy PaaS 介绍

e-Buy PaaS 是易百提供给品牌商户的saas化数据服务平台。
1、以微服务架构构建中台系统能力,通过对每个微服务进行标准接口封装,将能力输出给PaaS系统内的各APP应用或品牌商户合同的其他供应商,旨在将品牌商户的数据统一汇总沉淀在中台系统。
2、可通过简单配置实现各微服务之间的自由组合,按需形成品牌商户的服务系统,并提供标准化后台管理系统供品牌各部门人员使用。
3、支持为KA品牌商户定制化开发后管系统和APP用户端功能。

能力地图

支付能力

支付能力

支付能力概览

支付能力

收银中台产品介绍

test
支付能力

接入准备

支付能力

接入指南-注意事项

支付能力

接入指南-扫码支付

支付能力

接入指南-条码支付

支付能力

接入指南-扩展功能

支付能力

异步通知

支付能力

SDK&DEMO

易百JAVA版SDK下载

public static void main(String[] args) {
        String pattern = "yyyyMMdd";
        String tradeNo = DateUtils.formatDate(new Date(), pattern) + System.currentTimeMillis();
//        refund(tradeNo, tradeNo);
        createTrade(tradeNo);
//        queryPay();
//        pay();
//        queryTrade();
    }
    
    public static CashierClient getClient() {
        CashierConfig config = new CashierConfig();
        config.setAppId("ebuyfc163adf6a81");
        config.setAppSecret("r0t1ngvqtp72xma6iy7m6hzy43ol5hz0");
        config.setLang("zh_CN");
        config.setUrl(Constants.UAT_URL);
        return CashierClient.getCashierClient(config);
    }

    /**
     * 统一下单
     */
    public static void createTrade(String tradeNo) {
        CashierClient cashierClient = getClient();
        CreateTradeRequest createTradeRequest = new CreateTradeRequest();
        //流水号格式固定
        createTradeRequest.setOutTradeNo(tradeNo);
        //使用场景必填,易百分配
        createTradeRequest.setUseScene("H5");
        //可提供给易百,易百配置
        createTradeRequest.setNotifyUrl("https://develop.tuesday-tech.com/pcs/ebuy/notify");
        //请求支付总金额
        //如果有不走易百渠道优惠,扣除优惠部分
        createTradeRequest.setTotalAmount(BigDecimal.valueOf(1.00));
        //币种,国际标准
        createTradeRequest.setCurrency("CNY");

        //交易数据需区分到门店,需上传
        //有优惠限制到门店,需上传
        //有结算到门店,需上传
        //其他需要上传门店信息到场景,需上传
//        StoreInfo storeInfo = new StoreInfo();
//        //店名称
//        storeInfo.setName("test");
//        //店号
//        storeInfo.setShopNo("test");
//        createTradeRequest.setStoreInfo(storeInfo);
        //产品信息,建议所有订单产品上传
        //有不需要走易百优惠的产品,不上传
        //goodsDetail最大产品数限制100
        List<OutGoodsDto> goodsDetail = new ArrayList<>();
        OutGoodsDto outGoodsDto = new OutGoodsDto();
        //产品名称,长度限制50
        outGoodsDto.setGoodsName("测试产品");
        //产品sku
        outGoodsDto.setGoodsId("1061797738");
        //产品数量
        outGoodsDto.setGoodsNum(1);
        //产品金额
        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");
        /**
         * 渠道会员id
         * method.setThirdUserId("okKky5fnJb68U6c7Ujui3ZKVo6Ea");
         */
        /**
         * 资产使用限制规则
         * method.setUseLimit("product");
         */
        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();
            if (paidResult != null) {
                //此支付资产支付总金额
                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();
        }
    }



易百JS版SDK下载


支付能力

API 列表

支付能力

支付对接常见字段问题

/**
 * 获取请求客户端对象
 * 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);

}
支付能力

错误码列表

错误码

描述

SYSTEM_ERROR

系统错误

SYSTEM_BUSY

系统繁忙

REQUEST_UUID_FORMAT_ERROR

uuid格式错误

REQUEST_APPID_FORMAT_ERROR

应用id格式错误

SIGN_TYPE_NOT_SUPPORT

签名类型不支持

SIGN_CHECK_NOT_PASS

签名校验失败

GET_APP_AUTH_INFO_ERRRO

配置获取错误

TRADE_FAIL

交易失败

TRADE_SUCCESS

交易成功

TRADE_CLOSE

交易已关闭

TRADE_NO_USED

交易流水号重复

INVALID_PARAMETER

参数错误

INVALID_CONFIG

业务配置错误

ACCESS_FORBIDDEN

无权限

PULL_CASHIER_FAIL

唤起收银台失败

ACCOUNT_INVALID

用户账号异常

COUPON_INVALID

券状态异常

COUPON_USED

券已使用

COUPON_NOEXIST

券不存在

TIME_LIMIT

资产使用时间限制

支付能力

对接签名

1. 协议
	请求协议:https协议post请求
	Content-Type:  application/json
	报文格式(请求&返回):json
2. 请求地址
	uat环境:https://uat-paas-gateway.e-buychina.com
3. 安全签名
	签名算法:
		为了保证请求及接收数据在传输过程中不被篡改,对接口请求及响应数据统一使用sha256进行签名。请求需要计算签名值,响应报文需要校验paas返回的签名值。
	签名方法:
		将json格式请求报文第一级key按照字母表顺序排序后使用key1=value1&key2=value2格式拼接成字符串最后再拼上签名密钥。
	特别说明:
		如果value也是一个对象,将对象转成json转字符串后参与签名。
		使用SHA-256签名算法
4. 签名示例:appId=ebuyde43082858d1;KEY=D6954F665B12A4318DF2DE43082858DE
	1、原始请求报文
        {
            "action":"refund",
            "appId":"ebuyde43082858d1",
            "content":{
                "outTradeNo":"202107071625649048080",
                "refundTradeNo":"202107071625649048080"
            },
            "lang":"zh_CN",
            "signType":"sha256",
            "timestamp":1625649048115,
            "uuid":"20210707-cd28bed6332846979cf012223c981a14"
        }
	2、签名字符串拼接
		content对象先转String字符串后再拼接,键值key值根据ASCII码的顺序拼接
		拼接示例:action=refund&appId=ebuyde43082858d1&content={"outTradeNo":"202107071625649048080","refundTradeNo":"202107071625649048080"}&lang=zh_CN&signType=sha256&timestamp=1625649048115&uuid=20210707-cd28bed6332846979cf012223c981a14
	3、签名前字符串
		拼接KEY:action=refund&appId=ebuyde43082858d1&content={"outTradeNo":"202107071625649048080","refundTradeNo":"202107071625649048080"}&lang=zh_CN&signType=sha256&timestamp=1625649048115&uuid=20210707-cd28bed6332846979cf012223c981a14&D6954F665B12A4318DF2DE43082858DE
	4、签名结果
		sign=cefb7347b73b2793a6d4a99993480500bd74752e7b983acedb9515166e22d271
支付能力

新页面test

会员能力

会员能力

会员能力概览

1.背景说明

商户在实际运营场景中可能出现以下痛点:

针对以上痛点,易百会员系统提供以下开放接口:

产品类型 产品能力 场景描述
会员注册 创建会员(产品介绍|API接口)  
  获取会员详情(产品介绍|API接口)  
会员资产 获取会员资产【卡+券+积分】(产品介绍|API接口)  
卡包能力 卡包资产查询【卡+券】(产品介绍|API接口)  
  领取卡券到卡包(产品介绍|API接口)  
积分管理 积分消费(产品介绍|API接口)  
  积分累积(产品介绍|API接口)  
  积分查询(产品介绍|API接口)  
会员订单 会员订单同步(产品介绍|API接口)  
会员能力

卡包查询——产品介绍

电子券能力

电子券能力

电子券能力概览

现金卡能力

现金卡能力

现金卡能力概览

订单中心能力

订单中心能力

订单中心能力概览

主档管理能力

主档管理能力

主档管理能力概览

卡券包能力

卡券包能力

卡券包能力

卡券包能力概览

产品需求

鉴于易百在服务KA商户过程中,向大量KA商户提供电子券系统、现金卡系统等资产系统,为商户在多种场景下发行卡券资产,积累了丰富的卡券系统能力。并在实际合作过程中,发现商户有以下痛点:

1、商户的卡券系统服务商会有多家并存的情况。

2、商户的卡券系统发行的资产分散在各供应商,须与会员资产进行打通后统一展现给会员。

3、商户在多种互联网渠道或银行端渠道销售的卡券游离在体系外,无法向会员提供统一的标准服务。

4、商户有多种小程序、APP或H5用户端需要使用卡券作为支付方式时,需要逐一对接各卡券系统,开发量大,周期长,且后期维护成本高。

解决方案

一、整合各会员卡券资产落地卡券中台

1、整合商户通过易百进行资产发行的各类卡券资产自动加入卡包中台;

2、通过以下两种方式兼容多家卡券服务商:

1)提供对接其他卡券系统服务商发卡券服务,或通过批导的方式,实现卡券入口统一,很好的兼容多家卡券系统服务商;

2)开放【领取卡券到卡包】的接口给到其他系统服务商,将会员卡券资产统一落地卡包中台。

二、提供会员卡券中台数据统一查询,统一展示的能力

通过以下两种方式实现:

1)通过【卡包资产查询】的能力统一对外输出展示。

2)提供标准卡包前端APP,包括小程序、H5等版本提供给品牌前端应用直接调用。

三、提供卡券模板自定义创建

各品牌不同的用户体验要求,以及不同卡券的使用场景不同,可自定义创建配置不同的卡券模板,创建完成后,该批次的卡券将统一使用该模板进行发券展示给会员用户,各供应商仅需要显示制作卡券时下发的短链即可。

产品导航

卡包能力 卡包资产查询【卡+券】(产品介绍|API接口)  
  领取卡券到卡包(产品介绍|API接口)  
  卡券模板创建【API开发中,暂仅支持后台创建】  
卡券包能力

卡券包产品介绍

e-Buy PaaS IDEA开发配置

版权声明配置

代码风格配置

Java代码

文件模板配置