我目前正在开发一个 Web 项目,其中包括将 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 字段手动解析。
有没有人遇到过相同或类似的问题?
Fyi:我习惯于用 PHP 编写 Web 应用程序。根据特定需求,我在 C# 中执行此操作。这是标准的 C# 或 Visual Studio 行为(怀疑)还是我在 Visual Studio 中以错误的方式执行/配置 SOAP 服务的一个方面?