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);
}
}
}