4

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

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

  • 我已经用尽了我的 google-fu,并且没有找到任何能够接受传入表单帖子的 Intraweb 代码示例。(这可能就是我们真正需要的。如果我们可以将数据导入Intraweb/Delphi 世界,那么我们就可以管理其余部分。)
  • Intraweb文档建议 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 对她的奥秘。对于这个特殊问题,我们似乎比我们各部分的总和要少。

4

3 回答 3

2

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

于 2011-04-05T16:36:25.947 回答
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。这是用于生产帐户的。您必须为测试帐户使用不同的 URL。所以我一直收到一个空列表,并认为这是我的代码中的错误,没有得到响应。”

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

于 2011-04-12T15:01:41.433 回答
0

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

于 2011-04-05T14:31:48.923 回答