springboot对接拉卡拉支付
spring boot对接拉卡拉支付
·
1. 依赖引入
把jar包放在这
<!-- 拉卡拉支付依赖-->
<dependency>
<groupId>com.lkl.laop.sdk</groupId>
<artifactId>lkl-laop-java-sdk</artifactId>
<version>1.0.6</version>
<systemPath>${project.basedir}/src/main/resources/lib/lkl-java-sdk-1.0.6.jar</systemPath>
<scope>system</scope>
</dependency>
2. 获取测试环境信息
拉卡拉开发文档获取测试参数
3. 拉卡拉配置
@Component
@ConfigurationProperties(prefix = "lakala")
public class LakalaAlipayConfig {
public static String MerchantNo;
public static String TermNo;
public static String NotifyUrl;
public static String subAppId; // 微信商户appId
public static String appId; // 拉卡拉appId
public static String serialNo; // 你的证书序列号
/**
* 拉卡拉支付平台密钥
*/
public static String priKeyStr;
/**
* 拉卡拉支付平台证书
*/
public static String lklCerStr;
/**
* 拉卡拉支付平台证书2(用于拉卡拉通知验签)
*/
public static String lklNotifyCerStr;
/**
* 拉卡拉报文加密对称性密钥
*/
public static String sm4Key;
/**
* 服务地址
*/
public static String serverUrl;
public static String getMerchantNo() {
return MerchantNo;
}
public void setMerchantNo(String merchantNo) {
MerchantNo = merchantNo;
}
public static String getTermNo() {
return TermNo;
}
public void setTermNo(String termNo) {
TermNo = termNo;
}
public static String getNotifyUrl() {
return NotifyUrl;
}
public void setNotifyUrl(String notifyUrl) {
NotifyUrl = notifyUrl;
}
public static String getAppId() {
return appId;
}
public void setAppId(String appId) {
LakalaAlipayConfig.appId = appId;
}
public static String getSubAppId() {
return subAppId;
}
public void setSubAppId(String subAppId) {
LakalaAlipayConfig.subAppId = subAppId;
}
public static String getSerialNo() {
return serialNo;
}
public void setSerialNo(String serialNo) {
LakalaAlipayConfig.serialNo = serialNo;
}
public static String getPriKeyStr() {
return priKeyStr;
}
public void setPriKeyStr(String priKeyStr) {
LakalaAlipayConfig.priKeyStr = priKeyStr;
}
public static String getLklCerStr() {
return lklCerStr;
}
public void setLklCerStr(String lklCerStr) {
LakalaAlipayConfig.lklCerStr = lklCerStr;
}
public static String getLklNotifyCerStr() {
return lklNotifyCerStr;
}
public void setLklNotifyCerStr(String lklNotifyCerStr) {
LakalaAlipayConfig.lklNotifyCerStr = lklNotifyCerStr;
}
public static String getSm4Key() {
return sm4Key;
}
public void setSm4Key(String sm4Key) {
LakalaAlipayConfig.sm4Key = sm4Key;
}
public static String getServerUrl() {
return serverUrl;
}
public void setServerUrl(String serverUrl) {
LakalaAlipayConfig.serverUrl = serverUrl;
}
private static volatile boolean init = false;
/***
* @Description: 初始化设置商户公共参数(全局只需设置一次)
* @throws Exception
*/
public static void doInit() throws Exception {
if(!init) {
init = initByJava();
}
}
public static boolean initByJava() throws SDKException {
Config2 config = new Config2();
config.setAppId(appId);
config.setSerialNo(serialNo);
config.setPriKey(priKeyStr);
config.setLklCer(lklCerStr);
config.setLklNotifyCer(lklNotifyCerStr);
config.setServerUrl(serverUrl);
config.setSm4Key(sm4Key);
return LKLSDK.init(config);
}
}
6.支付
@Override
public Result pay(PayDto payDto) {
//todo:获取微信或支付宝userid
payDto.setOrderType("separate");
int amount = new BigDecimal(payDto.getTotalAmount()).multiply(new BigDecimal(100)).intValue();
V3LabsTransPreorderRequest v3LabsTransPreorderAlipayReq = new V3LabsTransPreorderRequest();
v3LabsTransPreorderAlipayReq.setMerchantNo(LakalaConfig.getMerchantNo());
v3LabsTransPreorderAlipayReq.setTermNo(LakalaConfig.getTermNo());
v3LabsTransPreorderAlipayReq.setOutTradeNo(payDto.getOutTradeNo());
v3LabsTransPreorderAlipayReq.setAccountType("ALIPAY");
v3LabsTransPreorderAlipayReq.setTransType(payDto.getTransType());
v3LabsTransPreorderAlipayReq.setTotalAmount(amount+"");
v3LabsTransPreorderAlipayReq.setNotifyUrl(LakalaConfig.getNotifyUrl());
v3LabsTransPreorderAlipayReq.setRemark("备注2");
//地址位置信息
V3LabsTradeLocationInfo v3LabsTradePreorderLocationInfo2 = new V3LabsTradeLocationInfo();
v3LabsTradePreorderLocationInfo2.setLocation("117.88.221.22");
v3LabsTradePreorderLocationInfo2.setBaseStation("00+LAC:6361+CID:58130");
v3LabsTradePreorderLocationInfo2.setRequestIp("+37.123456789/-121.123456789");
v3LabsTransPreorderAlipayReq.setLocationInfo(v3LabsTradePreorderLocationInfo2);
//在订单信息中保存一个appId信息,预防保存支付订单失败时,通过订单id查询后分配到相关应用
JSONObject businessJson = new JSONObject();
businessJson.put("appId", payDto.getAppId());
//支付宝主扫场景下acc_busi_fields域内容
V3LabsTradePreorderAlipayBus alipayBus = new V3LabsTradePreorderAlipayBus();
alipayBus.setStoreId("11111");
alipayBus.setUserId(payDto.getUserId());
alipayBus.setDisablePayChannels("credit_group");
alipayBus.setBusinessParams(businessJson.toJSONString());
alipayBus.setQuitUrl("www.test.com");
alipayBus.setTimeoutExpress("10");
//支付宝goods_detail字段说明
List<V3LabsTradePreorderAlipayBus.AlipayGoodsDeTail> goodsDeTails = new ArrayList<>();
V3LabsTradePreorderAlipayBus.AlipayGoodsDeTail alipayGoodsDeTail1 = new V3LabsTradePreorderAlipayBus.AlipayGoodsDeTail();
alipayGoodsDeTail1.setAlipayGoodsId("6666");
alipayGoodsDeTail1.setGoodsId("123");
alipayGoodsDeTail1.setGoodsName("测试商品");
alipayGoodsDeTail1.setQuantity("1.11");
alipayGoodsDeTail1.setPrice("666.33");
alipayGoodsDeTail1.setShowUrl("www.test.com");
goodsDeTails.add(alipayGoodsDeTail1);
alipayBus.setGoodsDetail(goodsDeTails);
v3LabsTransPreorderAlipayReq.setAccBusiFields(alipayBus);
//响应信息
String res = null;
try {
res = LKLSDK.httpPost(v3LabsTransPreorderAlipayReq);
} catch (SDKException e) {
e.printStackTrace();
}
if (StringUtils.isNotNull(res)) {
JSONObject parseObject = JSONObject.parseObject(res);
String code = parseObject.getString("code");
//判断接口调用是否成功
if (code.equals("BBS00000")) {
//预下单成功,保存支付订单信息
return Result.ok(parseObject.getJSONObject("resp_data").getJSONObject("acc_resp_fields"), 200, "支付宝支付预下单成功");
}
return Result.error(500, code + ":" + parseObject.getString("msg"));
}
return Result.error(500, "调用支付宝支付预下单接口错误");
}
5. 信息回调
@RequestMapping("/messageHandle")
@Operation(summary = "拉卡拉支付信息回调接口")
public ResponseEntity<?> messageHandle(HttpServletRequest request) throws Exception {
// 1. 配置初始化
try {
LakalaConfig.doInit();
} catch (Exception e) {
e.printStackTrace();
}
// spring-boot 2.x 直接调用读取请求提并验签方法,返回请求体
String body = LKLSDK.notificationHandle(request);
//spring-boot 3.x 先读取请求体及请求头中的认证信息,SDK提供验签方法
// LKLSDK.notificationHandle(getBody(request), getAuthorization(request));
System.out.println("验签成功,请求body:" + body);
return lklPayService.messageHandle(body);
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)