Môi trường:. Visual Studio 2010 Professional .NET Framework 4 C#Tích hợp PayPal trong C#/NET Giải pháp dùng WSDL (SOAP)
Added Service Reference sử dụng WSDL sau: https://www.paypalobjects.com/wsdl/PayPalSvc.wsdl
Sự cố 1: Khi được biên dịch đơn giản như thế này, hãy nhận một loạt lỗi từ tệp Reference.cs. Có vẻ như lỗi không gian tên. Nó đề cập rằng nó không thể tìm thấy không gian tham chiếu dịch vụ trong không gian tên dự án của tôi. Vì vậy, tôi đã đi vào các tập tin Reference.cs và bất cứ nơi nào tôi nhận được lỗi này, tôi loại bỏ không gian tên của dự án trước khi tên phương pháp, và bây giờ nó biên dịch.
Cuối cùng có quyền truy cập vào tất cả các lớp. Được tạo và điền DoDirectPaymentReq và CustomSecurityHeader đối tượng có các thuộc tính bắt buộc. Đã tạo một phiên bản của lớp PayPalAPIAAInterfaceClient, chứa phương thức DoDirectPayment có các đối số thuộc loại CustomSecurityHeader và DoDirectPaymentReq. Trông như thế này:
using (var client = new **PayPalAPIAAInterfaceClient**())
{
var credentials = new CustomSecurityHeaderType
{
Credentials = new UserIdPasswordType
{
Username = "[email protected]",
Password = "xxxxxxx",
Signature = "jksadfuhasfweakjhasf"
}
};
_doDirectPaymentResponseType = client.DoDirectPayment(ref credentials, _doDirectPaymentReq);
}
Vấn đề 2: Sau khi viết một TestMethod cho phương pháp đó có chứa mã trên, tôi nhận được lỗi như sau:
System.InvalidOperationException: Could not find default endpoint element that references contract 'Paypal.PayPalAPIAAInterface' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.
at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
at System.ServiceModel.ClientBase`1..ctor()
at PaymentEngine.Paypal.PayPalAPIAAInterfaceClient..ctor() in Reference.cs: line 30063
Vì vậy, cho đến nay tôi đã không có thể thực hiện một giao dịch thành công bằng giao thức PayPal SOAP thông qua việc sử dụng WSDL trong C#.
Tôi đã ấn tượng rằng điều này rất đơn giản. Đơn giản chỉ cần thêm tham chiếu dịch vụ và sử dụng các lớp với thuộc tính và phương thức của chúng được tạo trong proxy từ WSDL.
Tôi sẽ làm gì sai?
Tôi có sử dụng sai WSDL không? Tôi muốn thử nghiệm với Sandbox trước và sau đó đi Live.
Nếu tôi đúng với WSDL, trông giống như lớp PayPalAPIAAInterfaceClient không biết thiết bị đầu cuối của nó, mà tôi không biết nếu tôi giả sử để thiết lập bằng tay hay không kể từ khi nó đã có trong định nghĩa WSDL tại kết thúc (kiểm tra nó ra). Tôi nghĩ rằng bản thân lớp nên biết điểm cuối nào để gọi tùy thuộc vào việc tôi đang sử dụng Chữ ký hoặc Chứng chỉ để cư trú CustomSecurityHeaderType.
Nhưng lớp PayPalAPIAAInterfaceClient biết tôi đang cố gắng gọi vào Sandbox (thử nghiệm) hay nó là giao dịch trực tiếp?
PayPal đã từng có hai WSDL khác nhau cho Sandbox và Live. Chúng có thể được tìm thấy ở đây: ->https://cms.paypal.com/us/cgi-bin/?cmd=_render-content & CONTENT_ID = nhà phát triển/e_howto_api_soap_PayPalSOAPAPIArchitecture
Sau khi nói chuyện với ủng hộ tôi được yêu cầu sử dụng WSDL sau cho cả Sandbox và Live: ->https://www.paypalobjects.com/wsdl/PayPalSvc.wsdl
Nhưng làm thế nào để tôi nói với lớp PayPalAPIAAInterfaceClient khi nó được giả sử để thực hiện kiểm tra Live hoặc Sandbox. Và cũng có thể sử dụng điểm cuối nào tùy thuộc vào phương pháp SOAP và Chữ ký của tôi. Các điểm cuối từ PayPal được đề cập ở đây:
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_endpoints
Giúp đỡ!
OMG !!! Cách ngu ngốc của tôi !! Tại sao tôi không nhìn vào app.config !! ĐÃ LÀM VIỆC !! CẢM ƠN BẠN, CẢM ƠN BẠN, CẢM ƠN BẠN! Mặc dù tôi đang nhận lại lỗi "Phiên bản không được hỗ trợ" từ Paypal. – dparkar
Phiên bản không được hỗ trợ có thể được giải quyết bằng cách gửi phiên bản chính xác trong yêu cầu SOAP: phiên bản mới nhất là 84.0 tại thời điểm này. – Robert
Cảm ơn Robert! Điều đó đã làm việc quá :) – dparkar