使用setExpressCheckout API调用PayPal无缝结账(使用PayPal登录)

时间:2013-10-23 08:30:50

标签: paypal

我正在尝试在我们的网站中集成无缝结账客户流程,客户可以使用PayPal登录,然后继续付款而无需再次登录。

我已登录PayPal Rest应用程序正在运行并正常工作。 我也使用我的Classic API(使用merchantsdk库)调用setExpressCheckout。

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

亲切的问候, 达米安

1 个答案:

答案 0 :(得分:5)

我知道这已经很晚了但是答案是:(希望它可以帮到某人)

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

1)在developer.paypal.com上注册登录PayPal REST应用程序:制作一个新的REST应用程序,填写所需的详细信息。如果您想通过expresscheckout使用paypal登录,请确保启用无缝结账。您可以在Login with PayPal下找到它 - 点击它旁边的高级选项。此外,可用于检查的参数,如基本身份验证,个人信息, 地址信息等称为范围,稍后将具有重要意义。你可以检查所有这些。此外,请务必提供隐私信息网址和用户协议网址。没有它们,应用程序将无法运行。 (出于开发目的,您网站的网址会说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>

当您在app中检查developer.paypal.com上提供的所有范围(基本身份验证,地址等)时,这些范围是正确的。范围“https://uri.paypal.com/services/expresscheckout”用于无缝检查。警告:如果开发人员paypal网站和生成的代码中的范围不同,那么您将收到范围不匹配错误。

3)所以,如果一切正常,那么你应该在你的网站上有一个“使用PayPal登录”按钮,当你点击它时,你会看到一个Paypal登录窗口打开。当您使用某个沙盒帐户登录时(假设您使用的是沙箱),那么您将获得不同形式,当您表示同意并继续时,它应该会返回到返回URL。这是核心部分: 在返回URL中,他们将向您发送一个名为“code”的参数。这是授权码。

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步应该让您通过。一切顺利:)