如何将1С与Django集成实现商品数据双向互通?
Django商城与1С商品数据交换(CommerceML协议)集成操作指南
一、Django侧前置准备(必须先完成再配置1С端)
- 开发符合CommerceML 2/3标准的交换接口,固定接口地址如
https://你的商城域名/1c_exchange/,必须同时支持GET(鉴权、状态查询)和POST(接收商品数据)请求 - 实现标准Basic Auth鉴权逻辑,配置1С专用的交换账号密码,示例代码如下:
# Django views.py 核心鉴权及基础响应示例 from django.http import HttpResponse from django.views.decorators.http import require_http_methods import base64 @require_http_methods(["GET", "POST"]) def onec_exchange(request): # 校验Basic Auth鉴权信息 auth_header = request.META.get('HTTP_AUTHORIZATION', '') if not auth_header.startswith('Basic '): response = HttpResponse('Unauthorized', status=401) response['WWW-Authenticate'] = 'Basic realm="1C Exchange"' return response auth_info = base64.b64decode(auth_header.split(' ')[1]).decode().split(':') if auth_info != ['你配置的1C账号', '你配置的1C密码']: return HttpResponse('Unauthorized', status=401) # 响应1С标准流程请求 mode = request.GET.get('mode') if mode == 'checkauth': return HttpResponse('success\nsessionid\n'+request.session.session_key) elif mode == 'init': # 配置是否支持压缩、单文件大小上限(单位字节) return HttpResponse('zip=no\nfile_limit=10485760') # 后续文件接收、XML解析、商品入库逻辑自行实现
- 提前放行服务器规则:确保WAF、防火墙不会拦截1С的User-Agent请求,不会限制XML格式大体积POST请求,Django的
DATA_UPLOAD_MAX_MEMORY_SIZE参数、Web服务器的上传大小上限调整到符合你的商品数据体积要求
二、1С端具体配置步骤(以国内常用的汉化版1С:贸易管理 8、1С:会计核算 8版本为例)
2.1 进入交换配置页面
- 打开1С管理后台,依次进入「管理」→「数据交换」→「电商站点数据交换配置」
- 选择「新建交换配置」,交换类型选择「与CMS站点交换」,协议选择CommerceML标准选项
2.2 注册Django接口地址
- 在「站点交换地址」输入框填入你Django侧的完整接口地址,注意末尾的斜杠不要遗漏,否则Django的自动重定向会导致1С同步失败
- 鉴权方式选择「Basic Auth(基础鉴权)」,填入你之前在Django侧配置的1С专用交换账号和密码
- 勾选需要同步的内容:商品基础信息、分类、价格、库存、商品图片、属性参数等,按实际需求选择
2.3 配置同步规则
- 进入「商品上传规则」页面,选择需要同步到商城的商品分类、对应价格类型、库存统计的仓库范围
- 配置同步触发方式:可以选择手动触发,也可以设置定时自动同步,建议非高峰时段执行全量同步
- 点击「测试连接」按钮,1С提示连接成功即代表两端基础通信正常
2.4 触发首次同步
- 保存所有配置后,点击「上传数据」触发首次全量同步
- 1С会按照CommerceML标准流程自动执行全流程:鉴权校验→上传分类XML→上传商品基础信息XML→上传价格库存XML→上传商品图片等二进制文件→发送同步完成请求
- 可以在Django的请求日志中查看每一步的处理状态,出现报错对应调整1С配置或者Django的接口逻辑即可
三、常见配置问题排查
- 测试连接失败:优先检查接口地址的斜杠是否正确,Basic Auth账号密码是否匹配,服务器是否拦截了1С的请求
- 商品数据缺失:检查1С侧的上传规则是否勾选了对应分类/属性,确认Django侧的XML解析逻辑兼容你1С导出的CommerceML版本
- 同步中途中断:检查Web服务器和Django的上传大小限制是否小于你导出的商品数据包体积,确认服务器超时时间配置足够长
内容的提问来源于stack exchange,提问作者Yerke
相关产品推荐
相关产品推荐

