【问题标题】:Can Intraweb + Delphi handle an authorize.net relay response using SIM?Intraweb + Delphi 可以使用 SIM 处理 authorize.net 中继响应吗?
【发布时间】:2011-07-27 21:50:44
【问题描述】:

我们*有一个 Web 应用程序,由 Delphi + Intraweb(用于前端/Web 代码管理)创建,用于管理订购流程。它获取订购信息,然后向 authorize.net 发送交易请求(主要使用他们的SIM sample code)。这很好用,信用卡订单也得到了处理。

但是,当 authorize.net 将表单帖子发送回中继响应 URL (http://developer.authorize.net/guides/SIM/Receipt_Options/Relay_Response.htm) 时,Intraweb 应用程序崩溃了。我可以看到,使用 TamperData,表单数据正在正确发送。她可以看到她的程序打开了一个数据库连接,然后超时。

  • 我已经用尽了我的 google-fu,但没有找到任何 Intraweb 代码能够接受传入表单帖子的示例。 (这可能就是我们真正需要的全部。如果我们能够将数据导入 Intraweb/Delphi 世界,那么我们就可以管理其余部分。)
  • Intraweb documentation 表明 IW 将接受通过 URL 传递的参数,但没有提及接受 POST 数据。
  • authorize.net 社区论坛有一个提问/回答的帖子,基本上说“抱歉,我们没有任何 Delphi 代码示例,请咨询您的供应商。”
  • Intraweb 技术支持无法帮助她。 (我认为他们几周前还没有回应请求,但我不确定。)
  • 我建议她创建一个模拟 authorize.net 表单帖子的测试应用程序存根,以确保正确创建表单对象。 (我真的不明白拖放表单字段背后发生了什么,但我倾注了生成的源代码试图弄清楚这一点。)但是表单 POST 是表单 POST,对吗?我的意思是,它是 HTTP,而不是魔法。但这样做有两个问题。 1.) Intraweb 似乎将表单字段名称强制为所有大写字母。 2.) 她说 IW 不接受下划线作为表单字段名称的一部分。当然,我们仍然坚持使用 authorize.net 发送的内容、小写字母、下划线分隔等等。

您是否有任何见解、示例代码指针或建议将其全部扔掉并转向另一个解决方案?我们将不胜感激。

*我们 = 一个老派的 Delphi 程序员/DBA,他对 Delphi 了如指掌,但 Intraweb “自动运行”,而我,一个 Java 程序员,偶尔是 PHP 黑客,在国家的另一边,对可视化 IDE 过敏,但正在尝试为她解读互联网和 HTTP 的奥秘。对于这个特殊的问题,我们似乎比我们各部分的总和要少。

【问题讨论】:

  • 您可以从单独的应用程序管理帖子。如果你是 Delphi 商店,你可以从 Delphi 程序 + INDY 中做到这一点。顺便说一句,Intraweb 是在 INDY 制造的。我不知道 authorize.net 服务,但我相信你可以使用 INDY 管理它,然后重定向到 IW 应用程序。
  • 感谢 jachguate!我在研究问题时看到了对 INDY 的引用,但我不确定是否有必要,或者 Intraweb 是否可以自行处理。
  • @buzzo,Intraweb 位于印度...这样做。
  • 在 IW 中拖放创建表单将无济于事 - 这是创建 HTTP POST 请求的部分。相反,IW 应用程序需要一个通用的 HTTP POST 事件处理程序来处理来自 authorize.net 的传入表单数据。这应该是可能的(在 IW 支持的帮助下)。也许它需要向下一层到 WebBroker 层。为了调试,我会运行一个 Indy HTTP 服务器并检查传入的表单参数,这只需要几行代码。
  • 好的,这真的很有用。我不确定 IW 是否具有通用 HTTP POST 事件处理程序,或者它是否基于拖放到应用程序中的“表单对象”自动创建特定于对象的 POST 处理程序。这是我最初的猜测,假设这就是“正常”表单的管理方式。 是否 IW 是否支持 POST?我假设他们这样做了,至少对于内部页面到页面的使用,但我的同事刚刚说了一些让我认为他们根本不支持 POST 的话。这是真的吗?

标签: delphi authorize.net intraweb


【解决方案1】:

我建议您使用 Authorize.net 的 SOAP 接口。我有一个 Delphi/Intraweb 应用程序,它使用 authorize.net 处理付款和订阅,我花了 1 个小时才弄明白。只需设置一个小型测试项目并从 authorize.net 导入 wsdl,您就可以立即处理他们提供的所有内容。如果想尝试并遇到问题,我可以通过我的代码中的一些示例来帮助您。

【讨论】:

  • 谢谢!代码示例会很棒。但是指向基本的 Delphi/Intraweb SOAP 设置的指针可能是我们开始的好地方。有什么建议吗? (我现在要去谷歌了……)
  • 好的,看起来我们已经设置并测试了 Delphi SOAP 基础结构,现在正尝试处理一个示例 authnet 事务。如果代码示例的报价仍然有效,那将是一个很大的帮助!
  • 好的,你开始吧:首先你从 authorize.net 导入 WSDL,你会得到类似这样的东西:pastebin.com/xYPaapbm。然后使用像这个例子这样的代码做任何你想做的事情:pastebin.com/MweDSvfb
  • 以下是您在主表单中调用代码的方式:pastebin.com/W5dFxEWC
【解决方案2】:

感谢@ioan 的指点,我们已经建立并运行了一个SOAP 解决方案。我的同事花了一些时间来编写 Pascal 代码,但她把它传给了我,以防它为其他人节省一些时间。这是她最终得到的结果:

procedure TfrmSOAP.btnGetUnsettledReportClick(Sender: TObject);
var
  X : ServiceSoap;
  MyAuthentication : MerchantAuthenticationType;
  MyRequest : GetUnsettledTransactionListRequestType;
  aResponse : GetUnsettledTransactionListResponseType;
  msg : string;
  i : integer;
begin
  inherited;
  //Call the service
  X := GetServiceSoap(false);
  //create some variables/parameters to pass back and forth
  MyAuthentication := MerchantAuthenticationType.Create;
  MyRequest := GetUnsettledTransactionListRequestType.Create;
  aResponse := GetUnsettledTransactionListResponseType.Create;
  try
    //assign values to the MerchantAuthenticationType parameter
    MyAuthentication.name_ := APILoginTest;
    MyAuthentication.transactionKey := TransKeyTest;
    //request a list of unsettled transactions
    aResponse := X.GetUnsettledTransactionList(MyAuthentication, MyRequest);
    //check to see if the request was successful
    if aResponse.resultCode <> messagetypeenum(0) then
        begin
          ShowMsg('Error');
          ShowMsg(aResponse.messages[0].text);
        end;
    //step through the list, and display i, InvoiceNo, and LastName.
    for i := 0 to high(aResponse.transactions) do
       msg := msg + IntToStr(i) + ') ' + aResponse.transactions[i].invoiceNumber
              + '  '+ aResponse.transactions[i].lastName + #13;
    ShowMsg(msg);
  finally
    MyRequest.Free;
    MyAuthentication.Free;
    aResponse.Free;
  end;
end;

她还发送提醒,以确保您在运行测试与生产时使用正确的信息:“我使用的是下载的 WSDL 中的 URL。这是用于生产帐户的。您必须使用不同的进行测试帐户。所以我一直得到一个空列表,并认为这是我的代码中的错误,没有得到响应。”

再次感谢所有帮助和建议!

【讨论】:

  • 我的代码有点晚了,我看到你已经想通了。好的,你去吧,我这样做的方式:首先你从 authorize.net 导入 WSDL,你会得到这样的东西:pastebin.com/xYPaapbm。然后使用像这个示例这样的代码来做任何你想做的事情:pastebin.com/MweDSvfb,这是你在主表单中调用代码的方式:pastebin.com/W5dFxEWC
【解决方案3】:

曾经有一个来自 Arcana (www.arcanatech.com) 的信用卡组件专门用于 Intraweb 和 authorize.net。虽然配置使用所需的 SSL 有点棘手,但这段代码很便宜,直到今天仍在使用 6-8 年前编写的应用程序。

【讨论】:

  • 感谢您的提示!我去看看。
  • 我在网上找不到这个了。也许它已经退休了?
猜你喜欢
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
相关资源
最近更新 更多