2016-06-13 53 views
0

首先,所有的按鍵都與沙箱環境貝寶REST API - 的accessToken從RefreshToken返回「INVALID_REQUEST」

我一直在爭取與貝寶REST API的最後幾天,我'試圖讓我的應用程序的用戶登錄,並允許我訪問他們的帳戶來執行服務,如退款,支付匹配等

到目前爲止,我有一個帶有瀏覽器的Winforms應用程序,我重定向我的用戶到:

https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize?client_id=AXg4eyTyKDAhYooB2rHgbt1FNHIr9Mh45EW0H1FPxnOKkt4j8MdyiTjJp1ELRhf15XC7hAe9QYrDG_Eq&response_type=code&scope=openid&redirect_uri=http://XXX/Paypal/Confirm

他們登錄...內嵌瀏覽器掃描地址並收集返回的「代碼」。從這裏開始,我使用grant_type爲'authorization_code'的方式POST到Paypal(/ v1/identity/openidconnect/tokenservice)並收集AccessToken和RefreshToken(我想重用)。

這一切都完美的工作,直到我想使用先前的RefreshToken請求另一個AccessToken。

這是返回的JSON對象:

{{ 
    "token_type": "Bearer", 
    "expires_in": "28800", 
    "refresh_token": "o_u5L17nQ4takc5ek_6QGMWl2lZA0jQThpMhURowJKNm6lBPFdkaLUzy0VFwXRg9xRA-ApjDkAIZm6hys_Yg1sLyjceaHIlGIKX_grDBeT5fOeEsPFKg6R9lHp8", 
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJBWGc0ZXlUeUtEQWhZb29CMnJIZ2J0MUZOSElyOU1oNDVFVzBIMUZQeG5PS2t0NGo4TWR5aVRqSnAxRUxSaGYxNVhDN2hBZTlRWXJER19FcSIsImF1dGhfdGltZSI6MTQ2NTgyOTc4MCwiaXNzIjoiaHR0cHM6Ly93d3cucGF5cGFsLmNvbSIsInNlc3Npb25JbmRleCI6IjIyYjJmNzRkMDA2YzExY2I4N2U3ZGZkY2Q3YjJjNWU0M2RhODljNDYiLCJpYXQiOjE0NjU4Mjk3ODUsImV4cCI6Mjg4MDAsInVzZXJfaWQiOiJodHRwczovL3d3dy5wYXlwYWwuY29tL3dlYmFwcHMvYXV0aC9pZGVudGl0eS91c2VyL0F6V0VmSUtFdE1ldU1SN3laYS1LbkhOSTBPU2x1S2E1N1hVY082VE5sQ1EifQ==.q-JCp-d93CCaS0TgCdMqi9yVmHMzyAID7SbI7O81YwY", 
    "access_token": "A015mqkkXEVVq0Va0BexS.hhQE0Dlzm36eKNS8-4CVLiIZs" 
}} 
    ChildrenTokens: Count = 5 
    Count: 5 
    First: {"token_type": "Bearer"} 
    HasValues: True 
    Last: {"access_token": "A015mqkkXEVVq0Va0BexS.hhQE0Dlzm36eKNS8-4CVLiIZs"} 
    [Next]: Nothing 
    Parent: Nothing 
    Path: "" 
    Previous: Nothing 
    Root: {{ 
    "token_type": "Bearer", 
    "expires_in": "28800", 
    "refresh_token": "o_u5L17nQ4takc5ek_6QGMWl2lZA0jQThpMhURowJKNm6lBPFdkaLUzy0VFwXRg9xRA-ApjDkAIZm6hys_Yg1sLyjceaHIlGIKX_grDBeT5fOeEsPFKg6R9lHp8", 
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJBWGc0ZXlUeUtEQWhZb29CMnJIZ2J0MUZOSElyOU1oNDVFVzBIMUZQeG5PS2t0NGo4TWR5aVRqSnAxRUxSaGYxNVhDN2hBZTlRWXJER19FcSIsImF1dGhfdGltZSI6MTQ2NTgyOTc4MCwiaXNzIjoiaHR0cHM6Ly93d3cucGF5cGFsLmNvbSIsInNlc3Npb25JbmRleCI6IjIyYjJmNzRkMDA2YzExY2I4N2U3ZGZkY2Q3YjJjNWU0M2RhODljNDYiLCJpYXQiOjE0NjU4Mjk3ODUsImV4cCI6Mjg4MDAsInVzZXJfaWQiOiJodHRwczovL3d3dy5wYXlwYWwuY29tL3dlYmFwcHMvYXV0aC9pZGVudGl0eS91c2VyL0F6V0VmSUtFdE1ldU1SN3laYS1LbkhOSTBPU2x1S2E1N1hVY082VE5sQ1EifQ==.q-JCp-d93CCaS0TgCdMqi9yVmHMzyAID7SbI7O81YwY", 
    "access_token": "A015mqkkXEVVq0Va0BexS.hhQE0Dlzm36eKNS8-4CVLiIZs" 
}} 
    [Type]: Object {1} 
    Results View: Expanding the Results View will enumerate the IEnumerable 
    Dynamic View: Expanding the Dynamic View will get the dynamic members for the object 

就像早期的請求 '/ V1 /身份證/ openidconnect/tokenservice'(這工作!)我再次發佈它,這一次的grant_type 'refresh_token'。這次迴應是一個例外:

"Unable to refresh access token - invalid_request - https://developer.paypal.com/docs/api/#errors"} 
    Data: {System.Collections.ListDictionaryInternal} 
    HResult: -2146233079 
    HelpLink: Nothing 
    InnerException: {"The remote server returned an error: (400) Bad Request."} 
    Message: "Unable to refresh access token - invalid_request - https://developer.paypal.com/docs/api/#errors" 
    Response: Nothing 
    Source: "PPTest_RESTSDK" 
    StackTrace: " at PPTest_RESTSDK.Wrapper.WebRequest.Post(Dictionary`2 Contents, String RelativeURL, String AccessToken) in C:\Development\DELME\_PPTest_RESTSDK\PPTest_RESTSDK\Wrapper.vb:line 432" & vbCrLf & " at PPTest_RESTSDK.Wrapper.RegisterByRefreshToken() in C:\Development\DELME\_PPTest_RESTSDK\PPTest_RESTSDK\Wrapper.vb:line 294" 
    Status: UnknownError {16} 
    TargetSite: {System.String Post(System.Collections.Generic.Dictionary`2[System.String,System.String], System.String, System.String)} 

要刪除我的代碼有錯誤的假設,我已經使用POSTMAN(Chrome插件)重新創建了這個。運行此操作也將重新創建我所看到的完全相同的錯誤 - 請參閱下文。

的授權是我的Base64編碼的版本 「客戶端:祕密」,這等於:

基本QVhnNGV5VHlLREFoWW9vQjJySGdidDFGTkhJcjlNaDQ1RVcwSDFGUHhuT0trdDRqOE1keWlUakpwMUVMUmhmMTVYQzdoQWU5UVlyREdfRXE6RUlYdklvQ3A1bVNRNDZ4RmhtS2VxbGR4anBzMGNIUkxBdTRFZnJnTXZBN3VRMXBaVFN0dWwyTlE1OVNIcjVydEYyeHZYVUNOOWxCT1FEd1g =

客戶: AXg4eyTyKDAhYooB2rHgbt1FNHIr9Mh45EW0H1FPxnOKkt4j8MdyiTjJp1ELRhf15XC7hAe9QYrDG_EqSecret:EIXvIoCp5mSQ46xFhmKeqldxjps0cHRLAu4EfrgMvA7uQ1pZTStul2NQ59SHr5rtF2xvXUCN9lBOQDwX

,這是同樣的結果在郵差:

enter image description here

有人能告訴我這到底我做錯了嗎?我非常感謝它!

+0

您的文章看起來很好,但在郵遞員刷新令牌是從一個在你的第一張截圖不同。 – iandayman

+0

是的你是非常正確的 - 錯誤是在這篇文章中,但在代碼中,我使用了同樣的刷新標記。爲了清楚起見,我只是重新註冊一個新的授權碼和生成(81hrG2lAY2916ocCs68kt8015dlWlEcKr2zjsGZC_V1zQ-s9POtYA4o4FSJVB3t35Euaxh9cnWVPm71TjYrUQhElJWopZSyAzgnpfrYMAD06hmDYcDAegk17a4k)的新refresh_token,它仍然無法正常工作。 –

+0

更新:編輯帖子以反映這一點 –

回答

0

經過數小時的擺弄,我終於意識到了這個問題。

默認情況下,PayPal Developer中的應用程序沒有被賦予請求身份的權利。

設置應用程序時,您需要選擇並完全配置「我的應用程序+憑證」頁面上的信息。只要我這樣做,refresh_token現在將刷新。

我非常惱火與貝寶允許我請求access_token,也爲我返回這樣一個可憐的和通用的錯誤!

希望這個啓示有助於未來的人!

enter image description here