我正在尝试将无缝结帐客户流程集成到我们的网站中,客户可以使用 PayPal 登录,然后无需再次登录即可进行付款。
我的 Login with PayPal Rest 应用程序正在运行,并且正在运行。我也有我的经典 API(使用 Mercersdk 库)调用 setExpressCheckout 有效。
文档说明我应该传入一个 IDENTITYACCESSTOKEN 参数。但是,这似乎在 sdk 中不可用。我错过了什么吗?
亲切的问候,达米安
我正在尝试将无缝结帐客户流程集成到我们的网站中,客户可以使用 PayPal 登录,然后无需再次登录即可进行付款。
我的 Login with PayPal Rest 应用程序正在运行,并且正在运行。我也有我的经典 API(使用 Mercersdk 库)调用 setExpressCheckout 有效。
文档说明我应该传入一个 IDENTITYACCESSTOKEN 参数。但是,这似乎在 sdk 中不可用。我错过了什么吗?
亲切的问候,达米安
我知道这来得太晚了,但这是答案:(希望对某人有所帮助)
我从一开始就概述了所有步骤如下:(我假设您已经有一个基本的 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-piZEAXIif4PGAumOeEenS9cjX4rdKfOi6tyuzqRoyGJvFhzrIdI8JYO2aDO3Emtwdv1wL0SSksPbcJJsHsnEKrCjEsh8yscuotBS7vV3HSSLLnl"
通过这个,您可以在“access_token”字段中获得身份访问令牌。您还将获得 refresh_token (稍后解释)
4)这个access_token是你需要在setexpresscheckout请求中传递的。可以在此页面上找到示例请求:https ://developer.paypal.com/docs/integration/direct/identity/seamless-checkout/
5) 另外,请记住,access_token 会在一段时间后过期。因此,您需要使用第 3 步中提到的刷新令牌来获取新的访问令牌。但对于基本工作,直到第 4 步才能完成。一切顺利 :)