You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django电商项目集成cXML Punch-Out:配置文件及参数适配问询

Django电商网站集成cXML Punch-Out配置指南

一、cXML模板字段配置说明

针对你提供的cXML模板中所有待填充项,逐一说明配置规则:

1. 根节点<cXML>字段

  • payloadID: 生成唯一请求标识符,建议用UUID格式,Django里可通过uuid.uuid4()生成,示例:urn:uuid:123e4567-e89b-12d3-a456-426614174000
  • timestamp: 当前UTC时间,遵循ISO 8601格式,示例:2024-05-20T12:34:56Z

2. <Header>下身份凭证字段

<From>

代表买家系统的身份信息,所有值必须由买家提供:

  • domain: 买家约定的身份标识体系,比如常见的DUNS(邓白氏编码)或买家自定义域名
  • Identity: 买家的唯一系统ID,由买家分配

<To>

代表你的电商网站(供应商)的身份信息,需和买家提前约定:

  • domain: 可用你的电商域名作为标识,比如your-store.com
  • Identity: 你和买家约定的供应商编号,比如SUPPLIER-123

<Sender>

通常和<From>信息一致(由买家发起请求时),其中CredentialMac是签名验证字段:

  • domain/Identity: 和<From>保持一致
  • creationDate: 凭证创建的UTC时间,ISO格式
  • expirationDate: 凭证过期的UTC时间,ISO格式
  • 签名内容:用你和买家约定的密钥,通过HMAC-SHA1-96算法对cXML头部核心信息(From、To、Sender、payloadID、timestamp)加密生成,Django里可借助hmac模块实现

3. <PunchOutSetupRequest>字段

  • BuyerCookie: 买家系统生成的会话唯一标识,需在Django会话中保存,后续提交订单时必须返回给买家,用来关联本次Punch-Out会话
  • Extrinsic name="User": 买家的用户ID/用户名,由买家系统传入,可用来关联Django的用户模型(如需同步买家用户信息)
  • BrowserFormPost > URL: 买家提供的回调URL,用户在你的网站选完商品后,需把购物车数据以cXML格式通过表单POST到这个地址
  • <Contact>: 买家的联系信息,由买家系统传入,可用于订单记录或页面展示
  • SupplierSetup > URL: 你的电商网站的Punch-Out入口URL,比如https://your-django-store.com/punchout/setup/,买家系统会跳转至此,需在Django中编写对应视图处理请求

二、Django项目适配补充步骤

1. 编写cXML处理视图

  • 创建POST视图接收买家的PunchOutSetupRequest,用xml.etree.ElementTree或defusedxml解析XML内容(后者更安全)
  • 实现CredentialMac的签名验证逻辑,确保请求来自合法买家
  • 初始化Django会话,保存BuyerCookie、买家用户信息等关键数据
  • 重定向到你的电商商品列表页或买家专属采购页面

2. 购物车同步逻辑

  • 用户选完商品后,将购物车数据转换成符合cXML规范的PunchOutOrderMessage格式,包含商品ID、名称、数量、单价、总价等信息
  • 编写表单POST逻辑,将生成的cXML数据发送到买家提供的BrowserFormPost URL

3. 配置URL路由

在urls.py中添加Punch-Out相关路由:

path('punchout/setup/', views.punchout_setup, name='punchout_setup'),
path('punchout/submit/', views.punchout_submit, name='punchout_submit'),

4. 安全配置

  • 强制所有cXML相关请求使用HTTPS,在Django中配置SECURE_SSL_REDIRECT = True等安全设置
  • 将和买家约定的签名密钥存放在环境变量中,用django-environ读取,禁止硬编码到代码里
  • 对所有cXML请求做签名验证,拒绝伪造请求

5. 测试验证

  • 使用买家提供的测试环境发送测试请求,检查视图是否正确解析和响应
  • 完整测试购物车提交流程,确保cXML数据能正确同步到买家系统

填充后的cXML示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.028/cXML.dtd">
<cXML payloadID="urn:uuid:123e4567-e89b-12d3-a456-426614174000" timestamp="2024-05-20T12:34:56Z" xml:lang="en-US">
<Header>
 <From>
   <Credential domain="DUNS">
    <Identity>987654321</Identity>
  </Credential>
 </From>
 <To>
   <Credential domain="your-store.com">
     <Identity>SUPPLIER-123</Identity>
  </Credential>
 </To>
 <Sender>
   <Credential domain="DUNS">
     <Identity>987654321</Identity>
     <CredentialMac type="FromSenderCredentials" algorithm="HMAC-SHA1-96" creationDate="2024-05-20T12:00:00Z" 
  expirationDate="2024-05-21T12:00:00Z">abc123xyz456</CredentialMac>
   </Credential>
   <UserAgent>BuyerProcurementSystem/2.0</UserAgent>
 </Sender>
</Header>
<Request deploymentMode="test">
<PunchOutSetupRequest operation="create">
  <BuyerCookie>SESSION-789XYZ</BuyerCookie>
  <Extrinsic name="User">buyer-user-456</Extrinsic>
  <BrowserFormPost><URL>https://buyer-system.com/punchout/callback</URL></BrowserFormPost>
  <Contact>
    <Name xml:lang="en-US">John Doe</Name>
    <Email>john.doe@buyer.com</Email>
  </Contact>
  <SupplierSetup><URL>https://your-django-store.com/punchout/setup/</URL></SupplierSetup>
</PunchOutSetupRequest>
</Request>
</cXML>

内容的提问来源于stack exchange,提问作者Pathia Nanto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:45:29