maa*_*enh 2 c# soap paypal visual-studio-2010
我目前正在开发一个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);
Run Code Online (Sandbox Code Playgroud)
decres对象通常有一个字段DoExpressCheckoutPaymentResponseDetails,其中包含我需要的所有详细信息.根据手册和我的期望,我应该能够,例如,阅读响应中返回的令牌,如下所示:
string token = decres.DoExpressCheckoutPaymentResponseDetails.Token;
Run Code Online (Sandbox Code Playgroud)
相反,DoExpressCheckoutPaymentResponseDetails字段为空,我得到这样的标记:
string token = decres.Any.ChildNodes[0].InnerText;
Run Code Online (Sandbox Code Playgroud)
我没有收到PayPal服务的任何错误代码.
更奇怪的是当我使用TransactionSearch函数来查找多个事务时.假设函数返回50个事务.49个事务填充在正确的对象中,人们希望在阅读API文档后找到它们.但是,第一个事务不是也必须从响应中的Any字段手动解析.
有没有人曾经遇到过相同或类似的问题?
Fyi:我习惯编写Web应用程序PHP.根据具体需求,我在C#中这样做.这是标准的C#或Visual Studio行为(怀疑它)还是我在Visual Studio中以错误的方式构建/配置SOAP服务的一个方面?
已解决:解决方案是停止使用传统的"网络参考",而是使用更新的标准服务参考.
我的大部分代码都适用于新的服务引用,我只需要设置Web.config并改变我创建服务实例的方式.
返回新的PayPalAPIAAInterfaceClient("PayPalAPIAA"); 取代了PayPalAPIAASoapBinding.
原帖后跟.......
我是第二个问题,这不是凭证无效,交易失败或API版本不匹配的问题.我正在做的一切正确,响应包含一个令牌,但它进入了anyField变量而不是它所属的位置.
在我从VS 2008 .Net 3.5升级到VS 2010 .Net 4后,这个错误令人头疼.我怀疑该错误不在PayPal方面,而是.Net 4 XML Parsing中的一个错误.
令牌应该进入Token属性......
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:ebay:api:PayPalAPI")]
public partial class SetExpressCheckoutResponseType : AbstractResponseType {
private string tokenField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public string Token {
get {
return this.tokenField;
}
set {
this.tokenField = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
相反,它最终在这里......
[System.Xml.Serialization.XmlAnyElementAttribute()]
public System.Xml.XmlElement Any {
get {
return this.anyField;
}
set {
this.anyField = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我可能能够在Reference.cs文件中修复此问题,但是一旦我更新了Web服务引用,我的修复就会被覆盖.
这是其他人有同样的问题,但他们的解决方案对我不起作用. https://www.x.com/developers/paypal/forums/soap/paypal-api-aa-and-net-wcf-undeserialized-fields
救命!!
| 归档时间: |
|
| 查看次数: |
1588 次 |
| 最近记录: |