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

Logo

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

更多推荐