Code Monkey home page Code Monkey logo

yeepay-java's Introduction

yeepay

易宝标准版支付 JAVA SDK (订单支付接口、单笔订单查询接口、单笔退款接口、单笔退款查询接口、单笔订单撤销接口)

仓库:

<repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
</repository>

依赖:

<dependency>
    <groupId>com.github.izerui</groupId>
    <artifactId>yeepay</artifactId>
    <version>1.1.0</version>
</dependency>

如何使用:

一、设置商户编号和商户秘钥:

通过静态方法调用、或者程序初始化方法中调用

YeepayEngine.setMerId("10000457067");
YeepayEngine.setMerSecret("U26po59182dV8d7654bo24o5z369408u4sQ3To9j6QuopAbo3gwj4h33mro4");

二、设置请求参数、并完成engine对象建立

可以将 engine 对象作为单例bean放入spring上下文中

YeepayEngine engine = new YeepayEngine();

或:

OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .connectionPool(new ConnectionPool(5,5,TimeUnit.MINUTES))
        .pingInterval(30,TimeUnit.SECONDS)
        .readTimeout(15,TimeUnit.SECONDS)
        .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
        .build();

YeepayEngine engine = new YeepayEngine(client);

三、调用接口示例

  • 请求支付url
PayRequest request = new PayRequest();
request.setP5_Pid("35242111");
request.setP3_Amt("0.01");
request.setPd_FrpId("CCB-NET-B2C");
String url = engine.getPayURL(request);
  • 订单查询
OrderQueryRequest request = new OrderQueryRequest();
request.setP2_Order("123");
OrderQueryResponse order = engine.queryOrder(request);
  • 退款
RefundRequest request = new RefundRequest();
request.setP2_Order("222");
request.setP3_Amt("0.01");
request.setPb_TrxId("868855800142162B");
RefundResponse response = engine.refund(request);
  • 退款查询
RefundQueryRequest request = new RefundQueryRequest();
request.setP2_Order("ddd");
request.setPb_TrxId("868855800142162B");
RefundQueryResponse response = engine.queryRefund(request);
  • 取消订单
OrderCancelRequest request = new OrderCancelRequest();
request.setPb_TrxId("123");
OrderCancelResponse response = engine.cancelOrder(request);

注意: 该sdk为原生的易宝接口请求和返回封装,建议在使用时进行二次包装。并要注意非rpc内部接口的话进行安全性校验。

示例:

@Override
public String getPayUrl(String order,String amount,String productName,String callBackUrl,String info,FrpIdEnum channel) {

    try {
        PayRequest request = new PayRequest();
        request.setP2_Order(order);
        request.setP3_Amt(amount);
        request.setP5_Pid(productName);
        request.setP8_Url(callBackUrl);
        request.setPa_MP(info);
        if(channel!=null){
            request.setPd_FrpId(channel.getValue());
        }
        recordService.recordRequest(request);
        return engine.getPayURL(request);
    }catch (YeepayException e){
        throw new BusinessException(e.getMessage(),e.getErrCode());
    }
}

@Override
public OrderQueryResponseVo queryOrder(String order) {
    try {
        OrderQueryRequest request = new OrderQueryRequest();
        request.setP2_Order(order);
        OrderQueryResponse response = engine.queryOrder(request);
        switch (response.getR1_Code()) {
            case "1":
                if(response.getErrorMsg()!=null&&!"".equals(response.getErrorMsg())){
                    throw new BusinessException(response.getErrorMsg());
                }
                recordService.updateOrder(response);
                return beanMapper.map(response, OrderQueryResponseVo.class);
            case "50":
                throw new BusinessException("订单不存在","UN_KNOWN_ORDER_ERROR");
            default:
                throw new BusinessException("发生错误,错误码:"+response.getR1_Code()+",请重试","ERROR");
        }
    }catch (YeepayException e){
        throw new BusinessException(e.getMessage(),e.getErrCode());
    }
}


@Override
public RefundResponseVo refund(String amount,String transactionId) {

    try {
        RefundRequest request = new RefundRequest();
        request.setP3_Amt(amount);
        request.setPb_TrxId(transactionId);
        RefundResponse response = engine.refund(request);

        switch (response.getR1_Code()) {
            case "1":
                return beanMapper.map(response, RefundResponseVo.class);
            case "2":
                throw new BusinessException("账户状态无效","ACCOUNT_STATUS_ERROR");
            case "7":
                throw new BusinessException("该订单不支持退款","UNREFUND_ERROR");
            case "10":
                throw new BusinessException("退款金额超限","TRANSFINITE_ERROR");
            case "18":
                throw new BusinessException("余额不足","LACK_FEE_ERROR");
            case "50":
                throw new BusinessException("订单不存在","UN_KNOWN_ORDER_ERROR");
            case "55":
                throw new BusinessException("历史退款未开通","REFUND_HISTORY_OPENED_ERROR");
            case "6801":
                throw new BusinessException("IP 限制","IP_ERROR");
            case "900":
                throw new BusinessException("保证金金额不足,请充值","MARGIN_LACK_FEE_ERROR");
            case "526":
                throw new BusinessException("订单未支付","UN_PAY_ERROR");
            case "10803":
                throw new BusinessException("出款功能关闭,不允许退款,请联系客户经理","NOT_ALLOW_REFUND_ERROR");
            case "32":
                throw new BusinessException("无此交易,请重新核实流水号","NO_TRAD_ERROR");
            default:
                throw new BusinessException("发生错误,错误码:"+response.getR1_Code()+",请重试","ERROR");
        }
    }catch (YeepayException e){
        throw new BusinessException(e.getMessage(),e.getErrCode());
    }
}


@Override
public RefundQueryResponseVo queryRefund(String refundOrder,String transactionId) {

    try {
        RefundQueryRequest request = new RefundQueryRequest();
        request.setP2_Order(refundOrder);
        request.setPb_TrxId(transactionId);
        RefundQueryResponse response = engine.queryRefund(request);
        switch (response.getR1_Code()) {
            case "1":
                    return beanMapper.map(response, RefundQueryResponseVo.class);
            case "-1":
                throw new BusinessException("请求参数不合法:为空,或空字符串","PARAMS_ERROR");
            case "-2":
                throw new BusinessException("商户不存在","MER_ERROR");
            case "-3":
                throw new BusinessException("给定的流水号,没有对应的退款记录","REFUND_NOT_EXSIT_ERROR");
            default:
                throw new BusinessException("发生错误,错误码:"+response.getR1_Code()+",请重试","ERROR");
        }
    }catch (YeepayException e){
        throw new BusinessException(e.getMessage(),e.getErrCode());
    }
}

@Override
public void cancelOrder(String order) {
    try {
        OrderCancelRequest request = new OrderCancelRequest();
        request.setPb_TrxId(order);
        OrderCancelResponse response = engine.cancelOrder(request);
        if(response.getR1_Code()==null){
            throw new BusinessException("发生错误,错误码:"+response.getR1_Code()+",请重试","ERROR");
        }else if(response.getR1_Code().equals("50")){
            throw new BusinessException("订单不存在","UN_KNOWN_ORDER_ERROR");
        }else if(response.getR1_Code().equals("53")){
            throw new BusinessException("订单已经成功,不可撤销","ORDER_TRADED_ERROR");
        }
        if(response.getErrorMsg()!=null&&!"".equals(response.getErrorMsg())){
            throw new BusinessException(response.getErrorMsg());
        }
    }catch (YeepayException e){
        throw new BusinessException(e.getMessage(),e.getErrCode());
    }
}

yeepay-java's People

Contributors

izerui avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.