OTP 850订单详解

本文将以OTP项目为依托,对符合 X12 报文标准的 OTP 850 订单进行解读,并将其转换为更易处理的 XML 格式文件。

在此前的文章如何读懂 X12 中,我们对 X12 已经做了详细的解读,接下来开始深入了解 850 订单。

下图为 OTP EDI X12 850 示例报文转换前以及经知行之桥 EDI 系统转换后的效果对比图:

OTP X12 850 示例订单详解

OTP会给供应商发送 符合X12 国际标准的 EDI 850 订单,示例如下:


  
  
  1. ISA*00* *00* *12*1234567890 *ZZ*GENERIC *160726*1505*U*00401*850002059*0*T*>
  2. GS*PC*1234567890*GENERIC*20160726*1505*850002059*X*004010
  3. ST*850*0001
  4. BEG*00*BY*999262*ReleaseNumber*20160721*12345678
  5. - 00 = 默认值
  6. - BY:买方
  7. - 999262 = 采购订单编号
  8. - ReleaseNumber = 版本号
  9. - 20160721 = 采购订单日期
  10. - 12345678 = 供应商识别号
  11. CUR*LZ*USD*VN*USD
  12. - LZ = 当地连锁店
  13. - USD = 美元
  14. - VN = 供应商
  15. - USD = 美元
  16. REF*VN*VN123456*description
  17. - VN = 供应商订单号限定符
  18. - VN123456 = 供应商订单号
  19. - description = 补充描述
  20. REF*DP*DP123456*description
  21. - DP = 部门编号限定符
  22. - DP123456 = 部门编号
  23. - description = 补充描述
  24. REF*ZZ*ZZ123456*description
  25. - ZZ = 买方名称限定符
  26. - ZZ123456 = 买方名称
  27. - description = 补充描述
  28. REF*6P*6P123456*description
  29. - 6P = 集团编号限定符
  30. - 6P123456 = 集团编号
  31. - description = 补充描述
  32. REF*DB*Note1
  33. - DB = 文本限定符
  34. - Note1 = 文本信息
  35. REF*7N*Note2
  36. - 7N = 文本限定符
  37. - Note2 = 文本信息
  38. REF*7O*Note3
  39. - 7O = 文本限定符
  40. - Note3 = 文本信息
  41. FOB*PP*PrepaidMessage*PrepaidNote
  42. - PP = 预付模式
  43. - PrepaidMessage = 预付信息
  44. - PrepaidNote = 预付注释
  45. FOB*CF*FullFreightAllowanceMessage*Note
  46. - CF = 全额运费补贴模式
  47. - FullFreightAllowanceMessage = 全额运费补贴
  48. - Note = 全额运费补贴注释
  49. SAC*A*A260*ZZ*98al*100**13%
  50. - A = 津贴标识
  51. - A260 = 广告津贴限定符
  52. - ZZ = 默认字符
  53. - 98al = 广告津贴编码
  54. - 100 = 广告津贴数目
  55. - 13% = 广告津贴百分比
  56. SAC*C*A010*ZZ*98ch*100**3%
  57. - C = 收费标识
  58. - A010 = 最低收费限定符
  59. - ZZ = 默认字符
  60. - 98ch = 最低收费编码
  61. - 100 = 最低收费数目
  62. - 3% = 最低收费百分比
  63. ITD***6%*20220302*31*20220402*for sale
  64. - 6% = 定期折扣百分比
  65. - 20220302 = 折扣到期日
  66. - 31 = 折扣天数
  67. - 20220402 = 销售条款到期日
  68. - for sale = 销售条款描述
  69. DTM*010*20221002
  70. - 010 = 要求的发货日期限定符
  71. - 20221002 = 要求的发货日期
  72. DTM*037*20220930
  73. - 037 = 发货不能早于限定符
  74. - 20220930 = 发货日期不能早于20220930
  75. DTM*038*20221010
  76. - 038 = 发货不能晚于限定符
  77. - 20221010 = 发货日期不能晚于
  78. DTM*063*20221031
  79. - 063 = 交付不能晚于限定符
  80. - 20221031 = 交付日期不能晚于
  81. DTM*064*20221025
  82. - 064 = 交付不能早于限定符
  83. - 20221025 = 交付日期不能早于
  84. TD5***6547**shipmentdec
  85. - 6547 = 常规运输路线
  86. - shipmentdec = 运输路线描述
  87. N1*ST*OTP RETAIL*92*0091
  88. - ST = 发货限定符
  89. - OTP RETAIL = 发货地名称
  90. - 92 = 由买方指定
  91. - 0091 = 发货地编码
  92. N3*CHANGAN street*No.098
  93. - CHANGAN street = 发货方地址信息1
  94. - No.098 = 发货方地址信息2
  95. N4*XIAN*YONGING*710111*CN
  96. - XIAN = 发货地城市
  97. - YONGING = 发货地址
  98. - 710111 = 发货地邮编
  99. - CN = 发货地国家编码
  100. N1*BT*billto*92*0034
  101. - BT = 付款方限定符
  102. - billto = 付款方名称
  103. - 92 = 由买方指定
  104. - 0034 = 付款方编码
  105. N3*wujiang street*No.011
  106. - wujiang street = 付款方地址信息1
  107. - No.011 = 付款方地址信息2
  108. N4*Suzhou*shizi*215000*CN
  109. - Suzhou = 付款方城市
  110. - shizi = 付款方地址
  111. - 215000 = 付款方邮编
  112. - CN = 付款方国家编码
  113. N1*VN*vender*92*0025
  114. - VN = 供应商限定符
  115. - vender = 供应商名称
  116. - 92 = 由买方指定
  117. - 0025 = 发货地编码
  118. N3*longhua street*No.099
  119. - longhua street = 供应商地址信息1
  120. - No.099 = 供应商地址信息2
  121. N4*Haikou*haian*571000*CN
  122. - Haikou = 供应商城市
  123. - haian= 供应商地址
  124. - 571000 = 供应商邮编
  125. - CN = 供应商国家编码
  126. 明细信息:
  127. PO1**144*EA*7.6**VN*123456000201*SK*00012345*UP*990*ZZ*VENDOR-STYLE-123*CG*34
  128. - 144 = 订购数量
  129. - EA = 测量单位
  130. - 7.6 = 单价
  131. - VN = 供应商物料编号限定符
  132. - 123456000201 = 供应商物料编号
  133. - SK = 产品标识符(SKU)
  134. - 00012345 = 产品编号(SKU)
  135. - UP = 产品标识符(UCC-12)
  136. - 990 = 产品编号(UCC-12)
  137. - ZZ = 产品描述标识符
  138. - VENDOR-STYLE-123 = 产品描述
  139. - CG = 内包装数量标识符
  140. - 34 = 内包装数量
  141. SAC*A*A260*ZZ*98al*100**13%
  142. - A = 津贴标识符
  143. - A260 = 广告津贴限定符
  144. - ZZ = 默认值
  145. - 98al = 广告津贴编码
  146. - 100 = 广告津贴数目
  147. - 13% = 广告津贴比例
  148. SAC*C*A010*ZZ*98ch*100**3%
  149. - C = 收费限定符
  150. - A010 = 最低收费限定符
  151. - ZZ = 默认字符
  152. - 98ch = 最低收费编码
  153. - 100 = 最低收费数目
  154. - 3% = 最低收费百分比
  155. CTP**RTL*23
  156. - RTL = 零售价格限定符
  157. - 23 = 零售价格
  158. SDQ*EA*92*XIAN*123*CHENGDU*345
  159. - EA= 测量单位编码
  160. - 92 = 由买方或者买方联系人制定
  161. - XIAN= ID
  162. - 123 = 数量
  163. - CHENGDU = ID
  164. - 345 = 数量
  165. DTM*002*20221002
  166. - 002 = 要求交付时间限定符
  167. - 20221002 = 要求交付时间
  168. CTT*1
  169. - 1 = 物料号数量
  170. SE*40*0001
  171. GE*1*850002059
  172. IEA*1*850002059

通过上述报文解读可以看到,我们接收到的 X12 850 报文可读性较差,无论是企业的业务人员还是 IT 人员都很难从以上订单中直接获取到有效的业务信息。因此需要对此 850 订单进行格式转换。

EDI 系统转换效果

利用知行之桥 EDI 系统可以将其转换为可读性更强的目标 XML 格式文件,以便于进一步处理,转换效果如下:


  
  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <EDI_850 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  3. <Version>0.0.3 </Version>
  4. <Mode>T </Mode>
  5. <!--采购订单编号-->
  6. <PONumber>999262 </PONumber>
  7. <!--版本号-->
  8. <ReleaseNumber>ReleaseNumber </ReleaseNumber>
  9. <!--采购订单日期-->
  10. <PODate>20160721 </PODate>
  11. <!--供应商识别号-->
  12. <ContractNumber>12345678 </ContractNumber>
  13. <CurrencySpecification>
  14. <!--当地连锁店货币代码-->
  15. <LZCurrencyCode>USD </LZCurrencyCode>
  16. <!--供应商货币代码-->
  17. <VNCurrencyCode>USD </VNCurrencyCode>
  18. </CurrencySpecification>
  19. <!--供应商订单号-->
  20. <VendorOrderNumber>VN123456 </VendorOrderNumber>
  21. <VendorOrderNumberDescription>description </VendorOrderNumberDescription>
  22. <!--部门编号-->
  23. <DepartmentNumber>DP123456 </DepartmentNumber>
  24. <DepartmentNumberDescription>description </DepartmentNumberDescription>
  25. <!--买方名称-->
  26. <MutuallyDefined>ZZ123456 </MutuallyDefined>
  27. <MutuallyDefinedDescription>description </MutuallyDefinedDescription>
  28. <!--集团编号-->
  29. <GroupNumber>6P123456 </GroupNumber>
  30. <GroupNumberDescription>description </GroupNumberDescription>
  31. <!--文本信息1-->
  32. <BuyerDebitMemoDescription>Note1 </BuyerDebitMemoDescription>
  33. <!--文本信息2-->
  34. <PiggybackDescription>Note2 </PiggybackDescription>
  35. <!--文本信息3-->
  36. <TriplebackDescription>Note3 </TriplebackDescription>
  37. <ShipmentTransportationInstructions>
  38. <!--预付模式-->
  39. <ShipmentMethodOfPayment>PP </ShipmentMethodOfPayment>
  40. <!--预付信息-->
  41. <LocationQualifier>PrepaidMessage </LocationQualifier>
  42. <!--预付注释-->
  43. <Description>PrepaidNote </Description>
  44. </ShipmentTransportationInstructions>
  45. <ShipmentTransportationInstructions>
  46. <!--全额运费补贴模式-->
  47. <ShipmentMethodOfPayment>CF </ShipmentMethodOfPayment>
  48. <!--全额运费补贴-->
  49. <LocationQualifier>FullFreightAllowanceMessage </LocationQualifier>
  50. <!--全额运费补贴注释-->
  51. <Description>Note </Description>
  52. </ShipmentTransportationInstructions>
  53. <ServicePromotionAllowanceOrChargeInfo>
  54. <!--津贴标识-->
  55. <AllowanceOrChargeIndicator>A </AllowanceOrChargeIndicator>
  56. <!--广告津贴限定符-->
  57. <ServicePromotionAllowanceChargeCode>A260 </ServicePromotionAllowanceChargeCode>
  58. <!--广告津贴编码-->
  59. <AgencyServicePromotionAllowanceChargeCode>98al </AgencyServicePromotionAllowanceChargeCode>
  60. <!--广告津贴数目-->
  61. <Amount>100 </Amount>
  62. <!--广告津贴百分比限定符-->
  63. <AllowanceOrChargePercentQualifier> </AllowanceOrChargePercentQualifier>
  64. <!--广告津贴百分比-->
  65. <Percent>13% </Percent>
  66. <Description> </Description>
  67. </ServicePromotionAllowanceOrChargeInfo>
  68. <ServicePromotionAllowanceOrChargeInfo>
  69. <!--收费标识-->
  70. <AllowanceOrChargeIndicator>C </AllowanceOrChargeIndicator>
  71. <!--最低收费限定符-->
  72. <ServicePromotionAllowanceChargeCode>A010 </ServicePromotionAllowanceChargeCode>
  73. <!--最低收费编码-->
  74. <AgencyServicePromotionAllowanceChargeCode>98ch </AgencyServicePromotionAllowanceChargeCode>
  75. <!--最低收费数目-->
  76. <Amount>100 </Amount>
  77. <!--最低收费百分比限定符-->
  78. <AllowanceOrChargePercentQualifier> </AllowanceOrChargePercentQualifier>
  79. <!--最低收费百分比-->
  80. <Percent>3% </Percent>
  81. <Description> </Description>
  82. </ServicePromotionAllowanceOrChargeInfo>
  83. <TermsOfSaleOrDefferdTermsOfSale>
  84. <!--定期折扣百分比-->
  85. <DiscountPercent>6% </DiscountPercent>
  86. <!--折扣到期日-->
  87. <DiscountDueDate>20220302 </DiscountDueDate>
  88. <!--折扣天数-->
  89. <DiscountDaysDue>31 </DiscountDaysDue>
  90. <!--销售条款到期日-->
  91. <NetDueDate>20220402 </NetDueDate>
  92. <!--销售条款描述-->
  93. <Description>for sale </Description>
  94. </TermsOfSaleOrDefferdTermsOfSale>
  95. <RequestedShipDateTimeInfo>
  96. <!--要求的发货日期-->
  97. <Date>20221002 </Date>
  98. </RequestedShipDateTimeInfo>
  99. <ShipNotBeforeDateTimeInfo>
  100. <!--发货日期不能早于-->
  101. <Date>20220930 </Date>
  102. </ShipNotBeforeDateTimeInfo>
  103. <ShipNotAfterDateTimeInfo>
  104. <!--发货日期不能晚于-->
  105. <Date>20221010 </Date>
  106. </ShipNotAfterDateTimeInfo>
  107. <DoNotDeliverAfterDateTimeInfo>
  108. <!--交付日期不能晚于-->
  109. <Date>20221031 </Date>
  110. </DoNotDeliverAfterDateTimeInfo>
  111. <DoNotDeliverBeforeDateTimeInfo>
  112. <!--交付日期不能早于-->
  113. <Date>20221025 </Date>
  114. </DoNotDeliverBeforeDateTimeInfo>
  115. <CarrierDetails>
  116. <!--常规运输路线-->
  117. <IdentificationCode>6547 </IdentificationCode>
  118. <!--运输路线描述-->
  119. <Routing>shipmentdec </Routing>
  120. </CarrierDetails>
  121. <ShipToInfo>
  122. <!--发货地名称-->
  123. <Name>OTP RETAIL </Name>
  124. <!--发货地编码-->
  125. <CodeAssignedByBuyerOrAgentId>0091 </CodeAssignedByBuyerOrAgentId>
  126. <AddressInfo>
  127. <!--发货方地址信息1-->
  128. <Address>CHANGAN street </Address>
  129. <!--发货方地址信息2-->
  130. <Address2>No.098 </Address2>
  131. </AddressInfo>
  132. <GeographicLocation>
  133. <!--发货地城市-->
  134. <CityName>XIAN </CityName>
  135. <!--发货地址-->
  136. <StateOrProvinceCode>YONGING </StateOrProvinceCode>
  137. <!--发货地邮编-->
  138. <PostalCode>710111 </PostalCode>
  139. <!--发货地国家编码-->
  140. <CountryCode>CN </CountryCode>
  141. </GeographicLocation>
  142. </ShipToInfo>
  143. <BillToInfo>
  144. <!--付款方名称-->
  145. <Name>billto </Name>
  146. <!--付款方编码-->
  147. <CodeAssignedByBuyerOrAgentId>0034 </CodeAssignedByBuyerOrAgentId>
  148. <AddressInfo>
  149. <!--付款方地址信息1-->
  150. <Address>wujiang street </Address>
  151. <!--付款方地址信息2-->
  152. <Address2>No.011 </Address2>
  153. </AddressInfo>
  154. <GeographicLocation>
  155. <!--付款方城市-->
  156. <CityName>Suzhou </CityName>
  157. <!--付款方地址-->
  158. <StateOrProvinceCode>shizi </StateOrProvinceCode>
  159. <!--付款方邮编-->
  160. <PostalCode>215000 </PostalCode>
  161. <!--付款方国家编码-->
  162. <CountryCode>CN </CountryCode>
  163. </GeographicLocation>
  164. </BillToInfo>
  165. <VendorInfo>
  166. <!--供应商名称-->
  167. <Name>vender </Name>
  168. <!--发货地编码-->
  169. <CodeAssignedByBuyerOrAgentId>0025 </CodeAssignedByBuyerOrAgentId>
  170. <AddressInfo>
  171. <!--供应商地址信息1-->
  172. <Address>longhua street </Address>
  173. <!--供应商地址信息2-->
  174. <Address2>No.099 </Address2>
  175. </AddressInfo>
  176. <GeographicLocation>
  177. <!--供应商城市-->
  178. <CityName>Haikou </CityName>
  179. <!--供应商地址-->
  180. <StateOrProvinceCode>haian </StateOrProvinceCode>
  181. <!--供应商邮编-->
  182. <PostalCode>571000 </PostalCode>
  183. <!--供应商国家编码-->
  184. <CountryCode>CN </CountryCode>
  185. </GeographicLocation>
  186. </VendorInfo>
  187. <BaselineItem>
  188. <!--订购数量-->
  189. <QuantityOrdered>144 </QuantityOrdered>
  190. <!--测量单位-->
  191. <UOM>EA </UOM>
  192. <!--单价-->
  193. <UnitPrice>7.6 </UnitPrice>
  194. <!--供应商物料编号-->
  195. <VendorItemNumber>123456000201 </VendorItemNumber>
  196. <!--产品标识符(SKU)-->
  197. <SKU>00012345 </SKU>
  198. <!--产品编号(UCC-12)-->
  199. <UPCConsumerPackageCode12>990 </UPCConsumerPackageCode12>
  200. <!--产品描述-->
  201. <MutuallyDefinedNumber>VENDOR-STYLE-123 </MutuallyDefinedNumber>
  202. <!--内包装数量-->
  203. <CommodityGrouping>34 </CommodityGrouping>
  204. <PriceInfo>
  205. <!--零售价格-->
  206. <UnitPrice>23 </UnitPrice>
  207. </PriceInfo>
  208. <DestinationQuantity>
  209. <!--ID-->
  210. <IdentificationCode1>XIAN </IdentificationCode1>
  211. <!--数量-->
  212. <Quantity1>123 </Quantity1>
  213. <!--ID-->
  214. <IdentificationCode2>CHENGDU </IdentificationCode2>
  215. <!--数量-->
  216. <Quantity2>345 </Quantity2>
  217. <IdentificationCode3> </IdentificationCode3>
  218. <Quantity3> </Quantity3>
  219. <IdentificationCode4> </IdentificationCode4>
  220. <Quantity4> </Quantity4>
  221. <IdentificationCode5> </IdentificationCode5>
  222. <Quantity5> </Quantity5>
  223. <IdentificationCode6> </IdentificationCode6>
  224. <Quantity6> </Quantity6>
  225. <IdentificationCode7> </IdentificationCode7>
  226. <Quantity7> </Quantity7>
  227. <IdentificationCode8> </IdentificationCode8>
  228. <Quantity8> </Quantity8>
  229. <IdentificationCode9> </IdentificationCode9>
  230. <Quantity9> </Quantity9>
  231. <IdentificationCode10> </IdentificationCode10>
  232. <Quantity10> </Quantity10>
  233. </DestinationQuantity>
  234. <DeliveryRequestedDateTimeInfo>
  235. <!--要求交付时间-->
  236. <Date>20221002 </Date>
  237. </DeliveryRequestedDateTimeInfo>
  238. </BaselineItem>
  239. </EDI_850>

可以看到,经 EDI 系统转换之后的目标 XML 文件中,我们将业务数据与业务字段联系起来,这样的文件可读性更强,并且更方便进行下一步数据处理。

工作流示例

通过上述的讲解想必大家已经了解了 OTP 850 订单在知行之桥 EDI 系统中的转换流程了,以下是上述工作流示例,您可以下载知行之桥EDI系统,导入【示例工作流】以及【X12 850 测试文件】,进行实战操作。

 下载示例工作流以及测试文件

在知行之桥 EDI 系统中导入上述工作流以及测试文件。

如下图所示:

①先点击右上角的工作区齿轮图标,选择创建工作区,命名为OTP_850。

②然后选择导入工作区,选择OTP_850.arcflow。

③点开OTP_X12ToXML端口,点击上方 输入 ,在 更多 里点击上传文件,上传OTP_850_Sample.edi。

④点开OTP_XMLMap_850端口,点击上方 输出 ,点击 OTP_850_Sample_850002059.xml 即可下载文件,看到转换后的结果。

端口解读

以下端口是上述工作流的核心要素:

X12端口:即上文命名为OTP_X12ToXML的端口

X12端口可以将 XML 文档转换为 X12 文档,也可以将 X12 文档转换为 XML。本次示例中,需要将 XML Map 处理后的目标XML文件转换为X12 格式。生成 X12 文档时,X12 端口将 XML 转换为 X12 格式的文档,并生成适当的 X12 头,也就是我们上述报文讲解中出现的ISA字段。这个字段包含发送方ID以及接收方ID信息,您可以在X12 端口的设置选项卡中,根据您与文件接收方的实际情况设置以上信息。

XML MAP端口:即上文命名为OTP_XMLMap_850的端口

XML Map 端口提供了一种可视化设计器驱动的方式来将 XML 数据从一种结构转换为另一种结构。

XML Map 端口为转换 XML 结构提供了灵活且直观的界面。首先,应将源模板文件(包含所有输入文档的 XML 结构的文件)和目标模板文件(包含端口应输出的 XML 结构的文件)上传到端口。上述示例中我们已经提前将源模板以及目标模板文件设置好。 上传源和目标模板文件后,映射设计器将填充源和目标 XML 结构。然后,可以将源中的元素拖放到目标中的元素上,以建立映射关系。

以上是对接收 OTP 850 订单报文的解读以及转换的详细介绍,了解更多 OTP 的 EDI 报文信息,欢迎交流。

更多EDI信息,请参阅: EDI是什么?

阅读原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Secure OTP(One-Time Password)是一种用于身份验证的安全机制。它基于密码学算法生成一次性密码,用于在用户登录或进行敏感操作时进行验证。Secure OTP可以提供更高的安全性,因为每个密码只能使用一次,有效期很短,并且密码是动态生成的,不容易被猜测或重复使用。 以下是一个使用HMAC-SHA算法生成Secure OTP的Python示例代码[^1]: ```python import hmac import hashlib import time def generate_otp(secret_key): counter = int(time.time() / 30) # 每30秒生成一个新的密码 counter_bytes = counter.to_bytes(8, byteorder='big') # 将计数器转换为字节数组 hmac_digest = hmac.new(secret_key, counter_bytes, hashlib.sha1).digest() # 使用HMAC-SHA1算法生成摘要 offset = hmac_digest[-1] & 0x0F # 获取摘要的最后一个字节的低4位作为偏移量 otp = (hmac_digest[offset] & 0x7F) << 24 | (hmac_digest[offset + 1] & 0xFF) << 16 | \ (hmac_digest[offset + 2] & 0xFF) << 8 | (hmac_digest[offset + 3] & 0xFF) # 将4个字节的值转换为整数 otp = otp % 10 ** 6 # 将整数限制在6位数范围内 return str(otp).zfill(6) # 将密码补齐为6位数 # 使用示例 secret_key = b'secret_key' # 密钥,可以是任意字节串 otp = generate_otp(secret_key) print("Secure OTP:", otp) ``` 这段代码使用了HMAC-SHA1算法生成摘要,并从摘要中提取了一个6位数的密码。每30秒生成一个新的密码,以确保安全性。你可以根据需要调整计数器的时间间隔和密码的位数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值