拉卡拉支付接口分账功能对接教程——从零到上线

zhangyu 3小时前 23:53:12 8

一、什么是拉卡拉分账功能?

拉卡拉分账功能,是拉卡拉为平台型商户提供的一款自动化资金分配工具。简单说就是:

消费者付了 100 元 → 拉卡拉按规则自动分给多方

例如一个外卖平台:

用户支付 30 元(餐费)
   ↓
├─ 商家 A 分得:25 元(餐费)
├─ 平台分得:3 元(佣金)
└─ 骑手分得:2 元(配送费)

整个过程对消费者无感,对商户来说资金自动清分、T+1 到账。不需要人工对账,不需要手动转账,省时省力还减少差错。

二、接入前的准备工作

  • 第一步:申请拉卡拉商户号
           联系本站客服18056517119,提交营业执照、法人身份证、对公账户信息,申请成为拉卡拉特约商户。分账功能需要在商户资料中注明"开通分账结算"。
           客服热线:95016(工作日 8:00-20:00)


  • 第二步:获取 API 密钥
           拉卡拉会提供以下关键参数:

参数名说明示例值
merchant_no商户号822290070110001
app_id应用ID(接入系统标识)2022022812345678
api_secretAPI密钥(签名用,保密4f3c8a2b9e1d...
public_key拉卡拉公钥(验签用)-----BEGIN ...
安全提醒:api_secret 和私钥请保存在服务器端,不要明文暴露在客户端代码中。
  • 第三步:设置回调地址
           在拉卡拉商户后台配置:
           · 支付结果通知地址(notify_url)
           · 分账结果通知地址(split_notify_url)
           这两个 URL 必须是外网可访问的 HTTPS 地址。

三、分账业务流程全景图

以下是标准的拉卡拉分账对接流程:

┌──────────┐     ┌──────────┐     ┌──────────┐
│ 用户在平台 │ ──→ │ 平台服务端 │ ──→ │ 拉卡拉API │
│ 下单付款   │     │ 处理分账   │     │ 执行清算   │
└──────────┘     └──────────┘     └──────────┘
      │                │                │
      ▼                ▼                ▼
支付凭证展示   组装分账参数   资金分配到各
给用户看       请求支付接口   方账户

关键节点:

  1. 用户下单

  2. 平台调用下单接口(携带分账标记)

  3. 拉卡拉冻结分账金额

  4. 用户支付成功

  5. 平台调用分账执行接口

  6. 资金解冻并分配到各方账户

  7. 各方收到到账通知

四、核心接口对接详解

4.1 下单接口(含分账标记)

请求地址:POST https://open.lakala.com/api/v3/pay/unifiedorder

数据格式:JSON

请求参数示例(简化):

{  "merchant_no": "822290070110001",  "out_trade_no": "ORD20260425123456",  "total_amount": 10000,           // 单位:分,即100元  "subject": "测试商品-外卖订单",  "trade_type": "JSAPI",           // 小程序/H5  "notify_url": "https://api.xxx.com/pay/notify",  "split_mark": "Y",               // ⭐ 关键:标记分账  "split_rule": [                  // 分账规则    {      "receiver_no": "822290070110002",      "receiver_name": "某某餐饮店",      "amount": 8500,              // 85.00元      "remark": "餐费"    },    {      "receiver_no": "822290070110003",      "receiver_name": "配送员张三",      "amount": 1000,              // 10.00元      "remark": "配送费"    }  ],  "sign": "A1B2C3D4E5F6..." }
参数说明
split_mark = "Y"表示此笔交易需要分账
split_rule[].receiver_no必须是已在拉卡拉注册的子商户
amount 总和须 = total_amount - 平台自己留存的金额
最大收款方可分账给最多 10 个收款方

返回示例:

{  "code": "10000",  "msg": "成功",  "data": {    "prepay_id": "wx251234567890",    "trade_no": "LKL202604251234567890",    "pay_info": "..."       // 调起支付签名  } }
注意事项:下单时传了 split_mark = "Y",这笔资金会立刻被冻结在拉卡拉监管户,不会立刻划拨到平台账户。用户支付成功后,拉卡拉会异步通知 notify_url。

4.2 支付结果通知

用户支付成功后,拉卡拉会 POST 请求到你的 notify_url

{  "merchant_no": "822290070110001",  "out_trade_no": "ORD20260425123456",  "trade_no": "LKL202604251234567890",  "trade_status": "TRADE_SUCCESS",  "total_amount": 10000,  "trade_time": "2026-04-25 14:30:00",  "sign": "..." }

收到通知后你需要:

  1. 验证签名(用拉卡拉公钥验签)

  2. 验证 order_no 和金额是否匹配

  3. 更新订单状态为"已支付"

  4. 返回 "SUCCESS"(告诉拉卡拉不用再通知了)

重要:订单支付成功后,资金仍处于冻结状态,分账还没有执行!你需要下一步主动调用分账接口。

4.3 分账执行接口

确认订单 OK 后(例如平台确认商家已接单),调用此接口执行分账:

请求地址:POST https://open.lakala.com/api/v3/split/execute

{  "merchant_no": "822290070110001",  "out_trade_no": "ORD20260425123456",  "trade_no": "LKL202604251234567890",  "split_rule": [    {      "receiver_no": "822290070110002",      "amount": 8500    },    {      "receiver_no": "822290070110003",      "amount": 1000    }  ],  "remark": "订单确认完成,执行分账",  "sign": "..." }

返回结果:

{  "code": "10000",  "msg": "分账受理成功",  "data": {    "split_no": "SPL20260425000001",    "status": "PROCESSING"  } }

分账受理成功后,拉卡拉会异步执行资金清分,并将结果通知到 split_notify_url

4.4 分账结果通知

分账执行完成后,拉卡拉通知你的 split_notify_url

{  "merchant_no": "822290070110001",  "out_trade_no": "ORD20260425123456",  "split_no": "SPL20260425000001",  "status": "SUCCESS",  "split_detail": [    {      "receiver_no": "822290070110002",      "amount": 8500,      "status": "SUCCESS"    },    {      "receiver_no": "822290070110003",      "amount": 1000,      "status": "SUCCESS"    }  ],  "sign": "..." }

到这里,整笔分账完成。剩余平台留存的 500 元会在商户结算周期自动到账。

五、关键代码示例(Node.js)

5.1 签名工具函数

// 拉卡拉 API 签名算法(SHA256withRSA)
const crypto = require('crypto');

function generateSign(params, privateKey) {
  // 1. 参数按字典序排序
  const keys = Object.keys(params).sort();
  const str = keys
    .filter(k => params[k] !== '' && params[k] !== undefined && k !== 'sign')
    .map(k => `${k}=${params[k]}`)
    .join('&');

  // 2. SHA256 签名
  const signer = crypto.createSign('SHA256');
  signer.update(str, 'utf8');
  return signer.sign(privateKey, 'base64');
}

function verifySign(params, publicKey) {
  const sign = params.sign;
  const keys = Object.keys(params).sort();
  const str = keys
    .filter(k => params[k] !== '' && params[k] !== undefined && k !== 'sign')
    .map(k => `${k}=${params[k]}`)
    .join('&');

  const verifier = crypto.createVerify('SHA256');
  verifier.update(str, 'utf8');
  return verifier.verify(publicKey, sign, 'base64');
}

5.2 下单并标记分账

const axios = require('axios');

async function createOrderWithSplit(orderData) {
  const params = {
    merchant_no: '822290070110001',
    out_trade_no: orderData.orderId,
    total_amount: orderData.total,  // 单位:分
    subject: orderData.subject,
    trade_type: 'JSAPI',
    notify_url: 'https://api.xxx.com/pay/notify',
    split_mark: 'Y',
    split_rule: orderData.splits
  };

  // 签名
  params.sign = generateSign(params, PRIVATE_KEY);

  try {
    const res = await axios.post(
      'https://open.lakala.com/api/v3/pay/unifiedorder',
      params
    );
    return res.data;
  } catch (err) {
    console.error('下单失败:', err.response?.data || err.message);
    throw err;
  }
}

5.3 执行分账

async function executeSplit(outTradeNo, tradeNo, splitRule) {
  const params = {
    merchant_no: '822290070110001',
    out_trade_no: outTradeNo,
    trade_no: tradeNo,
    split_rule: splitRule,
    remark: '订单确认完成,执行分账'
  };

  params.sign = generateSign(params, PRIVATE_KEY);

  const res = await axios.post(
    'https://open.lakala.com/api/v3/split/execute',
    params
  );

  return res.data;
}

5.4 处理支付结果通知

// 接收拉卡拉异步通知
app.post('/pay/notify', (req, res) => {
  const data = req.body;

  // 1. 验签
  if (!verifySign(data, LAKALA_PUBLIC_KEY)) {
    return res.status(400).send('签名验证失败');
  }

  // 2. 验证订单状态
  if (data.trade_status !== 'TRADE_SUCCESS') {
    return res.status(200).send('FAIL');
  }

  // 3. 更新本地订单状态
  updateOrderStatus(data.out_trade_no, 'paid');

  // 4. 告诉拉卡拉收到通知
  res.send('SUCCESS');
});

六、常见问题与避坑指南

Q1:分账金额没有立刻到接收方账户?

正常。分账执行后状态为 "PROCESSING",资金实际到账是 T+1 结算周期。拉卡拉会在每个结算日自动将已分账金额划入子商户账户。

Q2:用户支付后发生了退款,分账怎么处理?

分账未执行时:直接全额退款,资金从冻结户原路返回。
   分账已执行后:需要主动调用「退款分账接口」收回已分资金,再进行退款。注意:已分账的资金需要向子商户追回。

Q3:可以支持部分退款 + 部分保留分账吗?

可以。拉卡拉分账支持「退款重分」模式:退款时传入新的分账规则,系统会将剩余金额按新规则分配。

Q4:分账的接收方(子商户)怎么注册?

子商户也需要在拉卡拉完成入驻审核,获得子商户号。子商户可以是企业、个体工商户或个人经营者。平台可以通过拉卡拉提供的「子商户入驻 API」进行批量进件。

Q5:分账比例有限制吗?

每个接收方单笔上限为交易金额的 100%。平台作为主商户,暂未设置最低留存比例限制。但建议平台至少留存 0.01 元以方便对账。

Q6:分账记录如何对账?

拉卡拉提供「日对账单下载接口」和「分账明细查询接口」。建议每日定时拉取对账单,与本地订单做交叉校验。对账是保障资金安全最重要的一环,不要省!

七、适用场景分析

场景分账模式
电商平台货款分给商家,佣金留平台
外卖平台餐费→商家 配送费→骑手 佣金→平台
连锁门店总店统一收款,按比例分给各分店
共享经济/兼职平台用户付款→平台扣服务费→分给服务方
SaaS平台代商户收款→商户结算→SaaS扣订阅费
房产/大宗交易中介下定金→分给各渠道方
供应链金融核心企业收款→分给上下游供应商

八、SEO 优化小贴士

本文已优化的 SEO 要素:

  • 中文标题包含核心搜索词:"拉卡拉支付接口"、"分账功能"、"对接教程"

  • H1-H2-H3 标题层次清晰

  • 涵盖长尾关键词如"平台型商户资金分账"、"子商户入驻"、"T+1结算"、"退款重分模式"等

  • 提供实际可运行的代码示例,提高内容原创度和实用性

  • FAQ 结构覆盖用户真实搜索意图

建议你发布时补充:

  • 在文章头部加 SEO meta description(不超过120字)

  • 内链指向你的产品/服务页面

  • 文中适当插入配图(分账流程图、API调用截图等)

  • 文末加一句引导 CTA,如"如需拉卡拉分账接口技术支持,请联系xxx"

九、附录:重要链接与参考

  • 拉卡拉开放平台:https://o.lakala.com

  • 拉卡拉官网:https://www.lakala.com

  • 拉卡拉客服热线:95016(8:00-20:00)

  • 拉卡拉股票代码:300773.SZ(深交所上市支付公司)

The End