草庐IT

xml - Shopify XML API 响应 - 无效的元素名称 : 3DSecureStatus

coder 2024-07-02 原文

当查询涉及 SagePay 的交易的 Shopify 交易数据(来自 python api 客户端)时,当客户端尝试解析返回的 xml 时,我们收到错误:

Error(Error('无法解析 xml 数据:格式不正确(无效标记):第 24 行,第 7 列',),)

这似乎是由交易/收据元素内容引起的,其中包括用于指示 3D 安全状态的无效 xml 标签名称。

例如:

<?xml version="1.0" encoding="UTF-8"?>
<transactions type="array">
  <transaction>
    <order-id type="integer">123456789</order-id>
    <amount type="decimal">123.45</amount>
    <status>success</status>
    <kind>sale</kind>
    <authorization>{-REDACTED-}</authorization>
    <created-at type="datetime">2012-01-01T01:01:01+00:00</created-at>
    <gateway>sage_pay_form</gateway>
    <id type="integer">123456789</id>
    <test type="boolean">false</test>
    <receipt>
      <VendorTxCode>123456789</VendorTxCode>
      <VPSTxId>{-REDACTED-}</VPSTxId>
      <Status>OK</Status>
      <StatusDetail>0000 : The Authorisation was Successful.</StatusDetail>
      <TxAuthNo>123456789</TxAuthNo>
      <AVSCV2>SECURITY CODE MATCH ONLY</AVSCV2>
      <AddressResult>NOTMATCHED</AddressResult>
      <PostCodeResult>NOTMATCHED</PostCodeResult>
      <CV2Result>MATCHED</CV2Result>
      <GiftAid>0</GiftAid>
      <3DSecureStatus>OK</3DSecureStatus>
      <CAVV>-REDACTED-</CAVV>
      <CardType>MC</CardType>
      <Last4Digits>1234</Last4Digits>
      <Amount>123.45</Amount>
    </receipt>
  </transaction>
</transactions>

由于“3DSecureStatus”不是有效的 xml 元素名称,xml 解析失败。

我们目前无法使用 json api,因为 python api 客户端不支持它。

最佳答案

Shopify 将需要修复以不发送无效的 XML 元素名称。例如。元素名称可以使用下划线作为前缀。完成后我会在这里更新。

shopify python API中不支持JSON其实是pyactiveresource中不支持造成的。我发了JSON support patches上游到您可以使用的事件资源。由于缺乏上游事件,它们似乎已被忽略。

更新:Shopify 已修复,不会返回包含无效元素名称的 XML。相反,它会在元素名称中使用下划线作为无效起始字符的前缀。

关于xml - Shopify XML API 响应 - 无效的元素名称 : 3DSecureStatus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13396578/

有关xml - Shopify XML API 响应 - 无效的元素名称 : 3DSecureStatus的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  3. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  4. ruby - 在哈希的键数组中追加元素 - 2

    查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用

  5. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  6. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  7. ruby-on-rails - 应用程序的名称是否可以作为变量使用? - 2

    当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve

  8. ruby-on-rails - 如何从过时的 TZInfo 标识符中获取 Rails TimeZone 名称? - 2

    已经有一个问题回答了如何将“America/Los_Angeles”转换为“PacificTime(US&Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为RailsTimeZone。我无法在图书馆中找到任何可以帮助我完成此任务的东西。 最佳答案 来自RailsActiveSupport::TimeZonedocs:TheversionofTZInfobundledwithActiveSupportonlyincludesthedefinitionsnecessarytosupportthezonesdefinedb

  9. ruby - Hanami link_to 助手只呈现最后一个元素 - 2

    我是HanamiWorld的新人。我已经写了这段代码:moduleWeb::Views::HomeclassIndexincludeWeb::ViewincludeHanami::Helpers::HtmlHelperdeftitlehtml.headerdoh1'Testsearchengine',id:'title'hrdiv(id:'test')dolink_to('Home',"/",class:'mnu_orizontal')link_to('About',"/",class:'mnu_orizontal')endendendendend我在模板上调用了title方法。htm

  10. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

随机推荐