2012-01-06 56 views
6

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 DoDirectPaymentReqCustomSecurityHeader đố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 đỡ!

Trả lời

6

Bạn có một vài vấn đề ở đây, nhưng không có vấn đề gì quá khó giải quyết. Trước hết, khi tôi thêm một tài liệu tham khảo dịch vụ cho WSDL bạn liên kết ở đầu bài viết của bạn, tôi không có bất kỳ vấn đề với không gian tên mà bạn mô tả. Có thể là không gian tên/tham chiếu của riêng bạn đang xung đột bằng cách nào đó với các thuật ngữ được tạo tự động hoặc có lẽ bạn đã chọn một số tùy chọn lạ trong quá trình thêm tham chiếu? Việc xóa và thêm lại có thể giải quyết được sự cố hoặc tôi đoán bạn có thể bỏ qua nó vì bạn đã làm việc xung quanh nó. (Tuy nhiên, thật khó để chỉnh sửa mã được tạo tự động, vì vậy bạn nên lên kế hoạch sửa chữa sau cùng.)

Để giải quyết InvalidOperationException, bạn có thể chỉ cần chỉ định một trong các thiết bị đầu cuối mà Visual Studio có được thêm vào tệp app.config của bạn. Bạn nên có một cái gì đó như thế này trong tập tin cấu hình của bạn:

<system.serviceModel> 
    <client> 
    <endpoint name="PayPalAPI" ... /> 
    <endpoint name="PayPalAPIAA" ... /> 
    </client> 
</system.serviceModel> 

Bạn có thể vượt qua tên của thiết bị đầu cuối mà bạn muốn các nhà xây dựng của lớp proxy. Có other options để giải quyết vấn đề này, nhưng chỉ cần xác định điểm cuối là dễ dàng và sạch sẽ. (Lưu ý: nếu bạn không có phần này trong tệp cấu hình của mình, thì có lỗi xảy ra trong giai đoạn Thêm tham chiếu dịch vụ. Một lần nữa tôi chỉ đề xuất đặt lại dự án của bạn và thêm lại tham chiếu.)

Cuối cùng , bạn không muốn sử dụng khối using khi bạn sử dụng lớp proxy mặc dù nó là IDisposable. Về cơ bản, there's a design bug in WCF.

+0

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

+1

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

+0

Cảm ơn Robert! Điều đó đã làm việc quá :) – dparkar

1

Tôi đã có cùng một vấn đề, bởi vì tôi đã làm thử nghiệm đơn vị.

Bạn phải sao chép tệp application.config vào dự án thử nghiệm, nếu không nó sẽ không tìm thấy cấu hình WCF.

Các vấn đề liên quan