1

我正在尝试将无缝结帐客户流程集成到我们的网站中,客户可以使用 PayPal 登录,然后无需再次登录即可进行付款。

我的 Login with PayPal Rest 应用程序正在运行,并且正在运行。我也有我的经典 API(使用 Mercersdk 库)调用 setExpressCheckout 有效。

文档说明我应该传入一个 IDENTITYACCESSTOKEN 参数。但是,这似乎在 sdk 中不可用。我错过了什么吗?

亲切的问候,达米安

4

1 回答 1

5

我知道这来得太晚了,但这是答案:(希望对某人有所帮助)

我从一开始就概述了所有步骤如下:(我假设您已经有一个基本的 expresschekout 应用程序正在运行,并且您希望将 Login 与 PayPal 集成以进行无缝结帐)

1) 在 developer.paypal.com 上注册使用 PayPal REST 应用程序登录:创建一个新的 REST 应用程序,填写所需的详细信息。如果您想通过 expresscheckout 使用 paypal 登录,请确保启用无缝结帐。您将在使用 PayPal 登录下找到它 - 单击旁边的高级选项。此外,可用于检查的参数,如基本身份验证、个人信息、地址信息等,称为范围,稍后将很重要。您可以检查所有这些。此外,请确保提供隐私信息 url 和用户协议 url。没有它们,该应用程序将无法运行。(出于开发目的,您网站的网址说https://example.com/privacy.html等将起作用。)

2) 用于在您的网站上嵌入使用 PayPal 登录按钮(有关更多信息,请参见:https ://developer.paypal.com/docs/integration/direct/identity/button/ ),这里是动态构建器表单的链接:https ://developer.paypal.com/docs/integration/direct/identity/button-js-builder/

生成的代码如下所示:

<span id="myContainer"></span>
<script src="https://www.paypalobjects.com/js/external/api.js"></script>
<script>
            paypal.use( ["login"], function(login) {
              login.render ({
                "appid": "isaufdiudshfjdsfkjhuwAHsgdnGn",
                "authend": "sandbox",
                "scopes": "openid profile email address phone https://uri.paypal.com/services/paypalattributes https://uri.paypal.com/services/expresscheckout",
                "containerid": "myContainer",
                "locale": "en-us",
                "returnurl": "https://localhost/dp/loggedin.php"
              });
            });
            </script>

当您检查了应用程序中 developer.paypal.com 上可用的所有范围(基本身份验证、地址等)时,这些范围是正确的。范围“ https://uri.paypal.com/services/expresscheckout ”用于无缝结账。注意:如果开发者贝宝网站上的范围和生成的代码中的范围不同,那么您将收到范围不匹配错误。

3) 因此,如果一切正常,在此之后,您的网站上应该会有一个“使用 PayPal 登录”按钮,当您单击它时,您应该会看到一个 Paypal 登录窗口打开。当您使用某个沙盒帐户登录时(假设您使用的是沙盒),您将获得一份同意表格,当您说同意并继续时,它应该将您带回返回 URL。这是核心部分:在返回 URL 中,他们会向您发送一个名为“代码”的参数。这是授权码。

4) 现在您必须从授权码中获取身份访问令牌。以下是此步骤:https ://developer.paypal.com/docs/api/#grant-token-from-authorization-code

还有一个对我有用的示例请求(替换为您的凭据):

 curl -v --insecure api.sandbox.paypal.com/v1/identity/openidconnect/tokenservice -H "Accept: application/json" -H "Accept-Language: en_US" -d "client_id=PjewirksjfhnIksjdlkjskfljds" -d "client_secret=Abcdsffudkjjhirgjkljgkldfjglkdlgd" -d "grant_type=authorization_code" -d "code=asdkajhAkjdksA" gYIXH-FJb1-piZEAXIif4PGAumOeEenS9cjX4rdKfOi6tyuzqRoyGJvFhzrIdI8JYO2aDO3Emtwdv1w‌​L0SSksPbcJJsHsnEKrCjEsh8yscuotBS7vV3HSSLLnl" 

通过这个,您可以在“access_token”字段中获得身份访问令牌。您还将获得 refresh_token (稍后解释)

4)这个access_token是你需要在setexpresscheckout请求中传递的。可以在此页面上找到示例请求:https ://developer.paypal.com/docs/integration/direct/identity/seamless-checkout/

5) 另外,请记住,access_token 会在一段时间后过期。因此,您需要使用第 3 步中提到的刷新令牌来获取新的访问令牌。但对于基本工作,直到第 4 步才能完成。一切顺利 :)

于 2014-04-02T17:56:00.543 回答