11

ユーザーが Paypal API を介して Web サイトからサービスを購入できるようにする単純なアプリケーションを開発しようとしています。このアプリケーションは、C# を使用して ASP.NET で実行されています。

Paypal API を連携させようとしても、ほとんど運がありませんでした。私が呼び出しているメソッドは、すべての適切な変数を持つ SetExpressCheckout です。

調査を行ったところ、Localhost でテストしているため、Paypal がアプリケーションと通信する機能に影響を与える可能性があることがわかりました。そのため、次に試みたのは、開いているポートとパブリックにアクセス可能な IP アドレスを介してアプリケーションにアクセスすることでしたが、SetExpressCheckout の呼び出しで同じエラーが発生しました。

エラーは次のとおりです。

Exception Details: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.

Source Error: 


Line 1790:        [return: System.Xml.Serialization.XmlElementAttribute("SetExpressCheckoutResponse", Namespace="urn:ebay:api:PayPalAPI")]
Line 1791:        public SetExpressCheckoutResponseType SetExpressCheckout([System.Xml.Serialization.XmlElementAttribute(Namespace="urn:ebay:api:PayPalAPI")] SetExpressCheckoutReq SetExpressCheckoutReq) {
Line 1792:            object[] results = this.Invoke("SetExpressCheckout", new object[] {
Line 1793:                        SetExpressCheckoutReq});
Line 1794:            return ((SetExpressCheckoutResponseType)(results[0]));

Source File: c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\anan_p2\730602d6\31a8d74e\App_WebReferences.c8vgyrf8.2.cs    Line: 1792 

また、OpenSSL を使用して証明書を生成し、それらを Paypal アカウントの暗号化された販売者オプションにアップロードしようとしましたが、効果はありません。

私の質問を読んでくれてありがとう!

更新:ここで要求されたとおり、使用されているコードです。

        String hostingOn = ConfigurationManager.AppSettings["default_site_url"];
        reqDetails.ReturnURL = hostingOn + "marketplace_confirm.aspx";
        reqDetails.CancelURL = hostingOn + "marketplace.aspx";
        reqDetails.NoShipping = "1";
        reqDetails.ReqConfirmShipping = "0";

        reqDetails.OrderTotal = new BasicAmountType()
        {
            currencyID = CurrencyCodeType.CAD,
            Value = payment_amt.Value,
        };

        SetExpressCheckoutReq req = new SetExpressCheckoutReq()
        {
            SetExpressCheckoutRequest = new SetExpressCheckoutRequestType()
            {
                Version = UtilPayPalAPI.Version,
                SetExpressCheckoutRequestDetails = reqDetails
            }

        };

        PayPalAPIAASoapBinding paypal = new PayPalAPIAASoapBinding();

        paypal.SetExpressCheckout(req);

また、API へのアクセスにhttps://api-aa-3t.paypal.com/2.0/ URL を使用しています

4

4 に答える 4

19

2016 年の初めから、Paypal はサンドボックスでの通信に TLS 1.2 プロトコルを要求し始め、6 月 17 日からライブ環境でそれを実施します。参照については、こちらを参照してください。

ほとんどの .NET アプリケーションでは、TLS 1.2 はデフォルトで無効になっているため、有効にする必要があります。

たとえば、Application_Startメソッドの先頭に次の行を追加する必要があります。

public class Site : HttpApplication
{
    protected void Application_Start()
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        // other configuration
    }
}
于 2016-02-09T09:42:20.207 に答える
5

おそらく api.paypal.com または api.sandbox.paypal.com に接続していて、API 証明書を送信していません。API 証明書は、SSL チェーンを完成させるために使用されるクライアント SSL 証明書です。

API 証明書を持っていない、または使用していない場合は、ライブまたはサンドボックス用にそれぞれ api-3t.paypal.com または api-3t.sandbox.paypal.com に接続する必要があります。

于 2012-10-02T11:33:58.020 に答える
1

本当に私を助けてくれてありがとう。

参考までに、VB.NET でインターフェイスを確立するための私のコードを次に示します。

  'Create a service Binding in code
                            Dim ppEndpointAddress As New System.ServiceModel.EndpointAddress("https://api-3t.sandbox.paypal.com/2.0/")
                            Dim ppBinding As New System.ServiceModel.BasicHttpBinding(System.ServiceModel.BasicHttpSecurityMode.Transport)

                            Dim ppIface As New PayPalAPI.PayPalAPIAAInterfaceClient(ppBinding, ppEndpointAddress)

                            Dim ppPaymentReq As New PayPalAPI.DoDirectPaymentReq()

                            ppPaymentReq.DoDirectPaymentRequest = ppRequest
于 2013-07-02T09:24:16.913 に答える