Intraweb + Delphi可以使用SIM处理authorize.net中继响应吗?

时间:2011-04-01 18:40:45

标签: delphi authorize.net intraweb

我们*有一个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似乎强制形成所有CAPS的字段名称。 2.)她说IW不会接受下划线作为表单字段名称的一部分。当然,我们仍然坚持使用authorize.net发送的内容,小写,下划线等等。

您是否有任何见解,指向示例代码的指示,或建议将其全部放入并转移到另一个解决方案?我们非常感谢上述任何一个。

*我们=一个老式的Delphi程序员/ DBA,他知道Delphi里面的东西,但是Intraweb“自动运行”而我,一个Java程序员和偶尔在该国另一边的PHP黑客,他们对Visual IDE过敏但是尝试过解释teh Internets&她的神秘面纱。对于这个特殊问题,我们似乎小于我们各部分的总和。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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。这适用于生产帐户。您必须使用不同的一个进行测试所以我不断得到一个空列表,并认为我的代码中有错误,没有得到回复。“

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

答案 2 :(得分:0)

Arcana(www.arcanatech.com)曾经有一个信用卡组件专门用于Intraweb和authorize.net。虽然配置使用所需的SSL有点棘手,但这段代码价格低廉,至今仍在6-8年前的应用程序中使用。