【发布时间】:2012-08-19 19:57:22
【问题描述】:
我目前正在开展一个网络项目,其中包括将 PayPal 的 Express Checkout 实施为支付服务。该项目使用 C#,我使用 Visual Studio 2010 和 PayPal API 的 SOAP 版本。我使用的 API 版本是 91.0(尝试将其切换到其他版本,但问题仍然存在),我正在沙箱中进行开发。
在 SOAP API 开发人员指南中,我找到了 WSDL 以将服务导入我的项目中作为 Web 参考。我可以完成 Express Checkout 付款流程的每一步。发出请求就像在公园里散步,但使用来自服务的响应却不是。
由于某种原因,响应中的数据字段没有像我预期的那样自动填写。所有有用的字段都是空的。因此,我必须手动解析响应中的 XML 字符串以获取我需要的数据,而不仅仅是访问正确的对象。不用说,我不想这样工作。
支付流程最后一步 (DoExpressCheckout) 的简单示例:
PayPalAPIAASoapBinding apiaa = new PayPalAPIAASoapBinding();
apiaa.RequesterCredentials = ... ;
DoExpressCheckoutPaymentReq decreq = new DoExpressCheckoutPaymentReq();
decreq.DoExpressCheckoutPaymentRequest = new DoExpressCheckoutPaymentRequestType();
/* Filling in all the fields required */
DoExpressCheckoutPaymentResponseType decres = apiaa.DoExpressCheckoutPayment(decreq);
decres 对象通常有一个 DoExpressCheckoutPaymentResponseDetails 字段,其中包含我需要的所有详细信息。根据手册和我的期望,例如,我应该能够像这样读取响应中返回的令牌:
string token = decres.DoExpressCheckoutPaymentResponseDetails.Token;
相反,DoExpressCheckoutPaymentResponseDetails 字段为空,我得到了这样的令牌:
string token = decres.Any.ChildNodes[0].InnerText;
我没有收到任何来自 PayPal 服务的错误代码。
更奇怪的是,当我使用 TransactionSearch 功能查找多个交易时。假设函数返回 50 笔交易。 49 笔交易填写在正确的对象中,人们在阅读 API 文档后可以找到它们。然而,第一笔交易不是,必须从响应中的 Any 字段手动解析。
有没有人遇到过相同或类似的问题?
仅供参考:我习惯于用 PHP 编写 Web 应用程序。根据特定需求,我在 C# 中执行此操作。这是标准的 C# 或 Visual Studio 行为(怀疑)还是我在 Visual Studio 中以错误的方式执行/配置 SOAP 服务的一个方面?
【问题讨论】:
标签: c# visual-studio-2010 soap paypal