2016-04-08 10 views
2

Passport(Jared Hanson)、戦略パスポートの使用PayPal:アクセストークンを取得できません

openIDまたはOAuthでPaypalを使用するにはどうすればよいですか?私はパスポート-ペイパル-OAuthの戦略(https://github.com/jaredhanson/passport-paypal-oauth)を使用してい

注:私のルートは、ローカルホストで始まる:4000/API /ユーザー

マイペイパルエンドポイント:

var passport_paypal = require('../middlewares/passport-paypal'); 

router.get('/signin/paypal', passport_paypal.authenticate('paypal-signin', { 
scope: 'openid profile email'})); 

router.get('/signin/paypal/callback', function(req, res, next){ 
passport_paypal.authenticate('paypal-signin', function(err, user, info){ 
    // Handle cases 
    //return res.status(xxx).json('.. 
}); 

マイペイパル戦略:

var PaypalStrategy = require('passport-paypal-oauth').Strategy; 

passport.use('paypal-signin', new PaypalStrategy({ 
clientID   : "MY APP ID", 
clientSecret  : "MY APP SECRET", 
callbackURL  : "http://localhost:4000/api/users/signin/paypal/callback", 
tokenURL   : "https://api.sandbox.paypal.com/v1/oauth2/token", 
authorizationURL : "https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize" 

}, function(token, refreshToken, profile, done) { 

    !!!!! Not called ... 

    // Get user profie 
    // Save in db or other handling 
})); 

問題:私は呼び出すとhttp://localhost:4000/api/users/signin/paypal、 I入手ブラウザで次の答え:

[InternalOAuthError: failed to obtain access token] 
name: 'InternalOAuthError', 
message: 'failed to obtain access token', 
oauthError: 
{ statusCode: 400, 
data: '{"error":"invalid_client","error_description":"Client credentials are missing"}' } } 

function(token, refreshToken, profile, done) {は決して呼び出されません。

どうしたのですか?


私はすでに、私はそれで問題が解決するかどうか知らないが、行わ関数があれば真の値とコールバックで呼ばれるべきhttp://127.0.0.1:4000/api/users/signin/paypal

代わりhttp://localhost:4000/api/users/signin/paypal

+0

は、私がpassport-、パスポート、ペイパルを使用してみてくださいpaypal-op enidconnectとそれは動作しません。..わからない – Kael

+0

を、それはあなたの問題を解決しますが、callbackUrlがHTTPを含める必要がある場合:// localhostを:4000 httpで – Molda

+0

は:// – Molda

答えて

1

私はtokenURLがopenidconnect URLとないのOAuth2トークンURLである必要があり

をフォークとopenidconnectパッケージを維持するものだ...

あなたはtokenURLを残すことができますそしてauthorizationURLとちょうどサンドボックスを使用します。私と同じ問題が真(私はそれがあまりにもに建てられていることがあれば、私は忘れてしまった、パスポート、PayPalのために話すことができない)

passport.use('paypal-signin', new PaypalStrategy({ 
    clientID   : "MY APP ID", 
    clientSecret  : "MY APP SECRET", 
    callbackURL  : "http://localhost:4000/api/users/signin/paypal/callback", 
    sandbox: true 
}, function(token, refreshToken, profile, done) { 
    // Get user profie 
    // Save in db or other handling 
    done(true); 
})); 
+0

btw正しいURLが何であるか不思議な人のために、openidconnectトークンは '/ v1/oauth2/token'ではなく'/v1/identity/openidconnect/tokenservice'を使うべきです –

+0

https:// wwwを使ってこの問題を解決しました。 npmjs.com/package/paypal-rest-sdk。 –

+0

@ dA3m0nああ、実際にはこれは実際にはプラグインの問題ではなく、これは部分的にはpaypalの文書化によるもので、oauth2のURLはもう機能しないようで、openid-connectのURLは古いものではなく、プラグインが動作します限り、正しいURLが使用される限り... –

0

でテストしてみましたOK。

passport.use('paypal-signin', new PaypalStrategy({ 
clientID   : "MY APP ID", 
clientSecret  : "MY APP SECRET", 
callbackURL  : "http://localhost:4000/api/users/signin/paypal/callback", 
tokenURL   : "https://api.sandbox.paypal.com/v1/oauth2/token", 
authorizationURL : "https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize" 

}, function(token, refreshToken, profile, done) { 
    // Get user profie 
    // Save in db or other handling 
    done(true); 
})); 
+0

この関数は決して呼び出されません...それは問題です。 –

関連する問題