金蝶星辰API对接实战:从手工记账到自动化的技术落地

发布时间:2026/8/27 9:40:47
金蝶星辰API对接实战:从手工记账到自动化的技术落地 一、星辰API认证金蝶星辰开放平台使用OAuth 2.0认证获取access_token后调用业务接口。hljs java// 星辰API认证工具类public class KingdeeAuthUtil {private static final String AUTH_URL https://api.kingdee.com/kapi/passport/auth; private static final String APP_ID your_app_id; private static final String APP_SECRET your_app_secret; public static String getAccessToken() { MapString, String params new HashMap(); params.put(app_id, APP_ID); params.put(app_secret, APP_SECRET); params.put(grant_type, client_credentials); String response HttpClientUtil.post(AUTH_URL, params); JSONObject json JSON.parseObject(response); return json.getString(access_token); }}二、采购订单自动同步将自研系统的采购订单自动同步到星辰避免重复录入。hljs java// 采购订单同步服务Servicepublic class PurchaseOrderSyncService {private static final String API_BASE https://api.kingdee.com/kapi/lemon/purchase; public SyncResult syncPurchaseOrder(PurchaseOrder order) { // 1. 构建星辰采购订单JSON JSONObject payload new JSONObject(); payload.put(FBillNo, order.getOrderNo()); payload.put(FDate, order.getOrderDate()); payload.put(FSupplierId, order.getSupplierCode()); payload.put(FBusinessDate, order.getBusinessDate()); // 构建明细行 JSONArray entryArray new JSONArray(); for (OrderLine line : order.getLines()) { JSONObject entry new JSONObject(); entry.put(FMaterialId, line.getMaterialCode()); entry.put(FQty, line.getQuantity()); entry.put(FPrice, line.getUnitPrice()); entry.put(FTaxRate, line.getTaxRate()); entry.put(FWarehouseId, line.getWarehouseCode()); entryArray.add(entry); } payload.put(FEntry, entryArray); // 2. 调用星辰API创建采购订单 String token KingdeeAuthUtil.getAccessToken(); MapString, String headers new HashMap(); headers.put(Authorization, Bearer token); headers.put(Content-Type, application/json); String response HttpClientUtil.post( API_BASE /order/save, payload.toJSONString(), headers ); // 3. 解析返回结果 JSONObject result JSON.parseObject(response); if (result.getInteger(code) 0) { return SyncResult.success(result.getString(data)); } else { return SyncResult.fail(result.getString(message)); } }}三、库存实时同步通过星辰库存查询接口实现库存数据实时同步到自研系统。hljs java// 库存同步定时任务Componentpublic class InventorySyncTask {Scheduled(cron 0 */10 * * * ?) // 每10分钟同步一次 public void syncInventory() { String token KingdeeAuthUtil.getAccessToken(); MapString, String headers new HashMap(); headers.put(Authorization, Bearer token); // 分页查询库存 int page 1; int pageSize 100; boolean hasMore true; while (hasMore) { JSONObject params new JSONObject(); params.put(page, page); params.put(page_size, pageSize); params.put(warehouse_code, WH001); String response HttpClientUtil.post( https://api.kingdee.com/kapi/lemon/inventory/query, params.toJSONString(), headers ); JSONObject result JSON.parseObject(response); JSONArray items result.getJSONArray(data); for (int i 0; i items.size(); i) { JSONObject item items.getJSONObject(i); // 更新本地库存 inventoryMapper.updateStock( item.getString(material_code), item.getString(warehouse_code), item.getBigDecimal(qty) ); } hasMore items.size() pageSize; page; } log.info(库存同步完成共同步{}页, page - 1); }}四、应收应付自动核销通过星辰财务接口实现收款单与应收单的自动核销。hljs java// 应收自动核销服务Servicepublic class ReceivableSettleService {public SettleResult autoSettle(String customerCode, BigDecimal amount) { String token KingdeeAuthUtil.getAccessToken(); MapString, String headers new HashMap(); headers.put(Authorization, Bearer token); // 1. 查询客户未核销的应收单 JSONObject queryParams new JSONObject(); queryParams.put(customer_code, customerCode); queryParams.put(status, unsettled); String queryResp HttpClientUtil.post( https://api.kingdee.com/kapi/lemon/receivable/query, queryParams.toJSONString(), headers ); JSONArray receivables JSON.parseObject(queryResp).getJSONArray(data); // 2. 按到期日排序先核销最早到期的 ListJSONObject sortedList receivables.stream() .map(obj - (JSONObject) obj) .sorted(Comparator.comparing(o - o.getString(due_date))) .collect(Collectors.toList()); // 3. 逐笔核销 BigDecimal remaining amount; for (JSONObject recv : sortedList) { if (remaining.compareTo(BigDecimal.ZERO) 0) break; BigDecimal recvAmount recv.getBigDecimal(amount); BigDecimal settleAmount remaining.min(recvAmount); JSONObject settleParams new JSONObject(); settleParams.put(receivable_id, recv.getString(id)); settleParams.put(settle_amount, settleAmount); settleParams.put(customer_code, customerCode); HttpClientUtil.post( https://api.kingdee.com/kapi/lemon/receivable/settle, settleParams.toJSONString(), headers ); remaining remaining.subtract(settleAmount); } return SettleResult.success(amount.subtract(remaining)); }}五、落地效果指标 对接前 对接后采购订单录入 手工5分钟/单 自动3秒/单库存同步频率 每天1次人工 每10分钟自动应收核销 手工逐笔 自动按到期日数据一致性 经常不一致 实时一致六、踩坑记录Token缓存access_token有效期2小时建议缓存而非每次请求都获取接口限流星辰API有QPS限制批量操作需要加限流控制数据校验调用前务必校验字段格式星辰对编码格式有严格要求异常重试网络波动时需要幂等重试机制避免重复创建单据七、总结金蝶星辰开放API文档完善认证流程清晰适合做系统集成。关键注意点Token缓存、接口限流、数据校验、幂等重试。对于贸易企业采购同步库存同步应收核销三个场景就能覆盖80%的集成需求。

相关新闻