拉卡拉支付接口分賬功能對接教程——從零到上線

zhangyu 1個月前 ( 04-25 ) 218

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

拉卡拉分賬功能,是拉卡拉為平臺型商戶提供的一款自動化資金分配工具。簡單說就是:

消費者付了 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