2

Paypal のサイトのこの対話型ログインの例に従っています。

  public ActionResult PaypalResponse(string scope, string code)
    {
        Dictionary<string, string> configurationMap = new Dictionary<string, string>();
        configurationMap.Add("mode", "sandbox");

        APIContext apiContext = new APIContext();
        apiContext.Config = configurationMap;

        CreateFromAuthorizationCodeParameters param = new CreateFromAuthorizationCodeParameters();
        param.setClientId(clientId);
        param.setClientSecret(clientSecret);
        param.SetCode(code);

         // Exception here: 
        Tokeninfo info = Tokeninfo.CreateFromAuthorizationCode(apiContext, param);

        return null;
    }

メソッド CreateFromAuthorizationCode は、この (間違った) 呼び出しになります。クライアント ID とクライアント シークレットが欠落していることに注意してください

POST https://api.sandbox.paypal.com/v1/identity/openidconnect/tokenservice HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: PayPalSDK/  ;lang=DOTNET;v=4.0.30319.18051;bit=64;os=Microsoft Windows 8 Enterprise 6.2.9200.0;
Host: api.sandbox.paypal.com
Content-Length: 211
Expect: 100-continue
Connection: Keep-Alive

grant_type=authorization_code&code=d2mSEzm9xvE_l9Ibho0g6FNBVrC7wHZchJWqJfY...redacted...

フィドラーの出力は

HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json
Vary: Accept-Encoding
Content-Length: 76
DC: origin1-api.sandbox.paypal.com
Date: Mon, 14 Oct 2013 01:30:05 GMT
Connection: close
Set-Cookie: DC=origin1-api.sandbox.paypal.com; secure

{"error_description":"client id or secret is null","error":"invalid_client"}
4

5 に答える 5

1

まったく同じ問題があり、呼び出し方法を変更して解決しました

string postcontents = string.Format("client_id={0}&client_secret={1}&grant_type=authorization_code&redirect_uri={2}&code={3}"
                                      , System.Web.HttpUtility.UrlEncode(clientId)
                                      , System.Web.HttpUtility.UrlEncode(secret)
                                      , System.Web.HttpUtility.UrlEncode(url)
                                      , System.Web.HttpUtility.UrlEncode(code));


        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://api.sandbox.paypal.com/v1/identity/openidconnect/tokenservice");
        request.Credentials = new NetworkCredential(clientId, secret);
        request.Method = "POST";
        byte[] postcontentsArray = System.Text.Encoding.UTF8.GetBytes(postcontents);
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = postcontentsArray.Length;
        //OAuth.
        using (Stream requestStream = request.GetRequestStream())
        {
            requestStream.Write(postcontentsArray, 0, postcontentsArray.Length);
            requestStream.Close();
            WebResponse response = request.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(responseStream))
            {
                string responseFromServer = reader.ReadToEnd();
                reader.Close();
                responseStream.Close();
                response.Close();
                // return SerializeToken(responseFromServer);
                dynamic dynObj = JsonConvert.DeserializeObject(responseFromServer);
                string token = dynObj["access_token"];
                //token = ser.Deserialize<ImportContacts._Default.GoogleOAuthToken>(responseFromServer);
            }
        }

それが役に立てば幸い

于 2014-02-12T19:33:30.580 に答える
0

このサンプルではありませんが、PayPal でもいくつか問題がありました。node.jsを使用しました。このライブラリは正常に動作します。使用しているメモと比較して、違いがあるかどうかを確認してください。(エンドポイントは確かに異なります)。具体的にはこちらをご覧ください。

于 2013-10-15T05:25:54.440 に答える
0

私はここで同じ問題を抱えており、あなたの方法を試しています。ただし、サイトに戻った後、aa 400 Bad Request を取得しています。

WebResponse response = authRequest.GetResponse();

clientId と secret が正しいこと、および authCode がメソッドに正常に返されていることを確認しました。この問題にも遭遇した可能性がありますか?

ありがとう

- - アップデート - -

ソリューションとブラウザのキャッシュを消去し、問題なく動作するようになりました

于 2015-02-17T01:51:11.563 に答える