2016-06-10 43 views
0

我是新来的Authorize.Net,我正在实施Authorize.Net PHP SDK来实现它。我试图收取信用卡,但它给错误为:Authorize.net,收费信用卡请求给出错误重复交易已提交

“重复的事务已提交”

我读了几篇文章,参考:https://community.developer.authorize.net/t5/Integration-and-Testing/Prevent-Duplicate-Transactions/td-p/20417

解决方案中提到将x_duplicate_window =(您自己选择的最大28800秒)添加到您的脚本中。 所以我加了它,如下所示:

<createTransactionRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> 
    <merchantAuthentication> 
     <name> 
      <![CDATA[API_LOGIN_ID]]> 
     </name> 
     <transactionKey> 
      <![CDATA[API_TRANSACTION_KEY]]> 
     </transactionKey> 
    </merchantAuthentication> 
    <refId> 
     <![CDATA[ref1465541052]]> 
    </refId> 
    <transactionRequest> 
     <transactionType> 
      <![CDATA[authCaptureTransaction]]> 
     </transactionType> 
     <amount>1</amount> 
     <payment> 
      <creditCard> 
       <cardNumber> 
        <![CDATA[4111111111111111]]> 
       </cardNumber> 
       <expirationDate> 
        <![CDATA[1233]]> 
       </expirationDate> 
      </creditCard> 
     </payment> 
     <order> 
      <description> 
       <![CDATA[DESCRIPTION]]> 
      </description> 
     </order> 
    </transactionRequest> 
    <extraOptions><![CDATA[x_duplicate_window=0]]></extraOptions> 
</createTransactionRequest> 

但它抛出的错误作为

E00003:元素 'createTransactionRequest' 命名空间“AnetApi/XML/V1 /模式/ AnetApiSchema.xsd具有无效名称空间'AnetApi/xml/v1/schema/AnetApiSchema.xsd'中的子元素'extraOptions'。

我无法在我的脚本中添加x_duplicate_window。 这是为了防止重复事务错误

注意正确的方法:我在沙箱环境,并在LIVE模式

请帮助工作。

回答

3

您需要使用<transactionSettings>元素添加此设置:

<createTransactionRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> 
    <merchantAuthentication> 
     <name> 
      <![CDATA[API_LOGIN_ID]]> 
     </name> 
     <transactionKey> 
      <![CDATA[API_TRANSACTION_KEY]]> 
     </transactionKey> 
    </merchantAuthentication> 
    <refId> 
     <![CDATA[ref1465541052]]> 
    </refId> 
    <transactionRequest> 
     <transactionType> 
      <![CDATA[authCaptureTransaction]]> 
     </transactionType> 
     <amount>1</amount> 
     <payment> 
      <creditCard> 
       <cardNumber> 
        <![CDATA[4111111111111111]]> 
       </cardNumber> 
       <expirationDate> 
        <![CDATA[1233]]> 
       </expirationDate> 
      </creditCard> 
     </payment> 
     <order> 
      <description> 
       <![CDATA[DESCRIPTION]]> 
      </description> 
     </order> 
     <transactionSettings> 
      <setting> 
       <settingName>duplicateWindow</settingName> 
       <settingValue>0</settingValue> 
      </setting> 
     </transactionSettings> 
    </transactionRequest> 
</createTransactionRequest> 
+0

WOOW ......它的工作...感谢ü洙多。非常感谢。 – Amol

+0

只是想问,如果我们可以改变'duplicateWindow'的值,那么为什么它已经被设置为2分钟。如果我更改'duplicateWindow'的值,它是否会破坏我的事务ID或某事? – Amol

+0

它默认为两分钟,但如果有必要,您有机会取代它,因为每个业务都有不同的业务规则。改变它不会影响其他任何事情,那么您需要等待多久才能运行重复事务。 –