Ruoyi-vue对接扫呗平台

1、开发流程:接入指南 · 扫呗支付技术文档 (lcsw.cn)

2、创建模块:

3、导入saobei-open-1.1.9.jar包,下载地址 :支付2.0接口 - API - 帮助中心 

4.创建Constants,简单创建 PayOrderController

package com.ruoyi.saobei.controller;

import com.alibaba.fastjson.JSON;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.saobei.domain.PayOrder;
import com.ruoyi.saobei.entity.dto.PaymentDto;
import com.ruoyi.saobei.entity.enums.ServerIdEnum;
import com.ruoyi.saobei.service.IPayOrderService;
//下面代码要导入saobei-open-sdk.jar包引用为项目库才不会报错
import com.saobei.open.sdk.DefaultSaobeiApiClient;
import com.saobei.open.sdk.SaobeiApiClient;
import com.saobei.open.sdk.model.requst.trade.SaobeiBarcodePayRequest;
import com.saobei.open.sdk.model.requst.trade.SaobeiTradeQueryRequest;
import com.saobei.open.sdk.model.requst.trade.SaobeiTradeRefundRequest;
import com.saobei.open.sdk.model.response.trade.SaobeiBarcodePayResponse;
import com.saobei.open.sdk.model.response.trade.SaobeiTradeQueryResponse;
import com.saobei.open.sdk.model.response.trade.SaobeiTradeRefundResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

import static com.ruoyi.saobei.entity.constants.SaoBeiConstants.*;

/**
 * 订单Controller
 *
 * @author mingbao
 */
@RestController
@RequestMapping("/saobei/order")
public class PayOrderController extends BaseController {
    @Autowired
    private IPayOrderService payOrderService;

    /**
     * @return 刷卡支付(微信-我的-收款码)
     */
    @RequestMapping(value = "/barcodepay", method = RequestMethod.POST)
    public static SaobeiBarcodePayResponse barCodePay(@Validated @RequestBody PaymentDto paymentDto) {
        String pay_type = paymentDto.getPay_type();//支付方式
        String terminal_trace = paymentDto.getTerminal_trace(); //终端流水号,填写商户系统的订单号
        String auth_no = paymentDto.getAuth_no(); //前端传来的数据卡号
        Integer total_fee = paymentDto.getTotal_fee();//前端传来的数据金额 单位/分
        try {
            //创建client
            SaobeiApiClient<SaobeiBarcodePayRequest, SaobeiBarcodePayResponse> client = new DefaultSaobeiApiClient<>(ACCESS_TOKEN);
            //创建request
            SaobeiBarcodePayRequest request = new SaobeiBarcodePayRequest();
            request.setPay_ver(PAY_VER);//版本号
            request.setPay_type(pay_type);//支付方式,010微信,020 支付宝,060qq钱包,080京东钱包,090口碑,100翼支付,110银联二维码,140和包支付(仅限和包通道),000自动识别类型
            request.setService_id(ServerIdEnum.ONE.getType());//接口类型,当前类型010
            request.setMerchant_no(MERCHANT_NO);//商户号
            request.setTerminal_id(TERMINAL_ID);//终端号
            request.setTerminal_trace(terminal_trace);//终端流水号,填写商户系统的订单号
            request.setTerminal_time(TERMINAL_TIME);//终端交易时间,yyyyMMddHHmmss,全局统一时间格式
            request.setAuth_no(auth_no);//授权码
            request.setTotal_fee(String.valueOf(total_fee));//金额,单位分
            //发送请求
            System.out.println("请求报文:" + JSON.toJSONString(request));
            SaobeiBarcodePayResponse response = client.execute(request);
            System.out.println("返回报文:" + JSON.toJSONString(response));
            //处理响应或异常
            if ("01".equals(response.getReturn_code()) && "01".equals(response.getResult_code())) {
                System.out.println("调用成功");
                //修改数据订单
            } else {
                System.err.println("调用失败,原因:" + response.getReturn_msg());
            }
            return response;
        } catch (Exception e) {
            System.err.println("调用遭遇异常,原因:" + e.getMessage());
            throw new RuntimeException(e.getMessage(), e);
        }
    }
    /**
     * @return 查询订单
     */
    @RequestMapping(value = "/query", method = RequestMethod.POST)
    private static SaobeiTradeQueryResponse query(@Validated @RequestBody PaymentDto paymentDto)  {
        String pay_type = paymentDto.getPay_type();//支付方式
        String terminal_trace = paymentDto.getTerminal_trace(); //终端流水号,填写商户系统的订单号
        String out_trade_no = paymentDto.getout_trade_no(); //前端传来的数据卡号
        Integer total_fee = paymentDto.getTotal_fee();//前端传来的数据金额 单位/分
        try {
            SaobeiApiClient<SaobeiTradeQueryRequest, SaobeiTradeQueryResponse> client = new DefaultSaobeiApiClient<>(ACCESS_TOKEN);
            SaobeiTradeQueryRequest request =new SaobeiTradeQueryRequest();
            request.setPay_ver("201");
            request.setPay_type("000");
            request.setService_id("020");
            request.setMerchant_no(MERCHANT_NO);//商户号
            request.setTerminal_id(TERMINAL_ID);//终端号
            request.setTerminal_trace("202104271623000002");//终端流水号,填写商户系统的订单号
            request.setTerminal_time("20210428143209");//终端交易时间,yyyyMMddHHmmss,全局统一时间格式
            request.setOut_trade_no(out_trade_no);
            //发送请求
            System.out.println("请求报文:" + JSON.toJSONString(request));
            SaobeiTradeQueryResponse response = client.execute(request);
            System.out.println("返回报文:" + JSON.toJSONString(response));
            //处理响应或异常
            if ("01".equals(response.getReturn_code()) && "01".equals(response.getResult_code())) {
                System.out.println("调用成功");
                //修改数据订单
            } else {
                System.err.println("调用失败,原因:" + response.getReturn_msg());
            }
            return response;
        } catch (Exception e) {
            System.err.println("调用遭遇异常,原因:" + e.getMessage());
            throw new RuntimeException(e.getMessage(), e);
        }
    }
    /**
     * @return 退款申请
     */
    @RequestMapping(value = "/refund", method = RequestMethod.POST)
    private static SaobeiTradeRefundResponse refund(@Validated @RequestBody PaymentDto paymentDto){
        String pay_type = paymentDto.getPay_type();//支付方式
        String terminal_trace = paymentDto.getTerminal_trace(); //终端流水号,填写商户系统的订单号
        Integer total_fee = paymentDto.getTotal_fee();//前端传来的数据金额 单位/分
        String out_trade_no = paymentDto.getout_trade_no(); //前端传来的数据卡号
        try {
            SaobeiApiClient<SaobeiTradeRefundRequest, SaobeiTradeRefundResponse> client = new DefaultSaobeiApiClient<>(ACCESS_TOKEN);
            SaobeiTradeRefundRequest request =new SaobeiTradeRefundRequest();
            request.setPay_ver("201");
            request.setPay_type("000");
            request.setService_id("030");
            request.setMerchant_no(MERCHANT_NO);//商户号
            request.setTerminal_id(TERMINAL_ID);//终端号
            request.setTerminal_trace("202104271623000002");//终端流水号,填写商户系统的订单号
            request.setTerminal_time("20210428143209");//终端交易时间,yyyyMMddHHmmss,全局统一时间格式
            request.setRefund_fee("1");
            request.setOut_trade_no(out_trade_no);
            //发送请求
            System.out.println("请求报文:" + JSON.toJSONString(request));
            SaobeiTradeRefundResponse response = client.execute(request);
            System.out.println("返回报文:" + JSON.toJSONString(response));
            if ("01".equals(response.getReturn_code()) && "01".equals(response.getResult_code())) {
                System.out.println("调用成功");
                //修改数据订单
            } else {
                System.err.println("调用失败,原因:" + response.getReturn_msg());
            }
            return response;
        } catch (Exception e) {
            System.err.println("调用遭遇异常,原因:" + e.getMessage());
            throw new RuntimeException(e.getMessage(), e);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值