连接到Paypal Rest Api以获得用户同意

时间:2014-05-02 14:41:50

标签: rest paypal coldfusion

我正在尝试连接到Paypal以获得用户同意访问其PayPal付款历史记录。最终目标是下载在当天结束时收到的付款并获取信息并将其转储到本地数据库中。

https://developer.paypal.com/webapps/developer/docs/api/#obtain-users-consent

<Cfset returnlink="http://www.xxxxxx.com/paypal/paypalreturn.cfm">

<cfset paypalLink="https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize">
<Cfset paypallink="#paypallink#?client_id=#settingsLive.clientid#">
<Cfset paypallink="#paypallink#&redirect_uri=#urlencodedformat(returnlink)#">
<Cfset paypallink="#paypallink#&response_type=code">
<Cfset paypallink="#paypallink#&scope=profile+email+address+phone+https%3A%2F%2Furi.paypal.com%2Fservices%2Fpaypalattributes">
<cfset paypalLink="#paypallink#&nonce=#createUUID()#">
<cfset paypalLink="#paypallink#&state=create">


<a href="<cfoutput>#paypalLink#</cfoutput>">Login with paypal</a>

点击以下链接返回:

  

依赖方验证错误:请求中提供了redirect_uri   与注册的redirect_uri不匹配。请检查   请求。

我已登录到Rest API,修改了我的应用程序并确保重定向uri用于测试和实时返回链接与上面列出的匹配。我还确保选中了“接受登录”选项。

我也尝试过针对沙箱网址的相同代码:

https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize

而不是收到验证错误,我得到一个页面无法显示。

我尝试过各种我能想到的事情 1)一次删除1个cfset语句以隔离坏变量 2)确保返回uri是https vs http 3)切换到沙箱模式URL并返回

我过去曾与其他oauth2 api相关联,但无法弄明白这一点。

3 个答案:

答案 0 :(得分:3)

这已经发生了一些变化,很快就会再次发生变化......但现在就是你现在这样做的。

  • 登录developer.paypal.com
  • 点击信息中心(https://developer.paypal.com/developer/applications
  • 点击&#34; Rest API Apps&#34;
  • 下的应用名称
  • 滚动至屏幕底部标有&#34;沙盒(或实时)应用设置
  • 的框
  • 设置返回网址(测试交易后用户将被重定向的位置)
  • 点击保存

注意

此返回网址必须与您通过查询字符串传入的 redirect_uri 完全匹配(因此,您首先需要将其传递给它的原因令人困惑)

<强> GOTCHA

目前,返回网址似乎永远不会更新。根据我最近的经验,如果您在第一次保存时没有正确输入,则必须创建一个新应用。

答案 1 :(得分:0)

我唯一一次看到此错误的时候是redirect_uri与您的应用资料中设置的{{1}}不匹配。

您需要在开发者网站上的应用内设置此值。

  • 登录developer.paypal.com
  • 点击应用
  • 在My Rest Apps下点击您的应用名称
  • 点击“应用重定向网址
  • 旁边的修改”
  • 设置实时或测试
  • 的返回网址
  • 保存

我也无法通过PayPal测试登录沙箱,因此不仅仅是你。

答案 2 :(得分:0)

截至目前(2015年10月),the Dashboard返回网址应与LicenseAppSerializer(context={'request': <rest_framework.request.Request object at 0x03E9D870>}, data={'price': 0, 'style': u'http://localhost:8000/api/1/styles/69/', 'years': 30, 'order': 'http://localhost:8000/api/1/orders/44/', 'qty': 80}): url = HyperlinkedIdentityField(view_name='licenseapp-detail') start = DateField(allow_null=True, required=False) end = DateField(allow_null=True, required=False) price = DecimalField(decimal_places=2, max_digits=10) years = IntegerField(allow_null=True, required=False) qty = IntegerField() order = HyperlinkedRelatedField(queryset=Order.objects.all(), view_name='order-detail') style = HyperlinkedRelatedField(queryset=Style.objects.all(), view_name='style-detail') 对应。您可以通过下载HTTPFox浏览器插件获取Firefox中的redirect_uri参数。然后启动HTTPFox,将浏览器指向OmniAuth登录链接,并在HTTPFox历史记录最底部链接的查询字符串中查看redirect_uri以获取scParams

您必须确保返回URL与输入redirect_uri完全相同的字符序列。例如,如果一个指向“localhost”而另一个指向“127.0.0.1”,则它将不会将redirect_uri值识别为相同。如果redirect_uri值中只有一个有最终斜杠,它也无法识别redirect_uri

是的,根据我的经验,可以更新返回网址。