ColdFusion Paypal REST API oAuth

Posted

技术标签:

【中文标题】ColdFusion Paypal REST API oAuth【英文标题】: 【发布时间】:2013-08-16 14:17:38 【问题描述】:

我正在尝试为 ColdFusion 中的应用程序实现 paypal REST API。我在 paypal 中设置了我的应用程序,所以我有 client_id 和密钥。

https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/

此 URL 显示了我试图在 CF 中重现的示例 curl 调用:

curl https://api.sandbox.paypal.com/v1/oauth2/token \
-H "Accept: application/json" \
-H "Accept-Language: en_US" \
-u "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" \
-d "grant_type=client_credentials"

这是我的 CF 调用(为我的测试帐户修改了一些密钥)

<cfhttp method="post" url="https://api.sandbox.paypal.com/v1/oauth2/token"  result="test">
<cfhttpparam type="header" name="authorization" value="ASfK_BCZ54849na-kMSKvrKEk4WNDkoIikQlTfsI3nS-ghY1VTzH5q2pU:EC-7qhACEQ7XGjo2dU4gFPJDH3Et0KeMx0Z5Xmbf9PnhPE5diq-CO" >
<cfhttpparam type="header" name="content-type" value="application/x-www-form-urlencoded" >
<cfhttpparam type="formfield" name="grant_type" value="client_credentials" >

我收到的响应是“invalid_client”-“无效的客户端凭据”。文档声明授权应该以“client_id:secret”的形式传递。我一直在尝试更改字段的名称,尝试将其传递到标题中并尝试将其作为表单字段传递,但均无济于事。尽我所能,paypal 不需要签名方法并声明它使用基本的 http auth。

谁能看到我在这里遗漏了什么?

【问题讨论】:

【参考方案1】:

我不确定为什么您的解决方案不适合您,但不适合我。它让我开始了,但我需要调整我的才能让请求通过。对我想出的 php 脚本进行逆向工程:

<cfset clientid = "***************************"/>
<cfset secret = "***************************"/>

<cfhttp method="post" url="https://api.sandbox.paypal.com/v1/oauth2/token" result="local.test">
    <cfhttpparam type="header" name="Content_Type" value="application/json" >
    <cfhttpparam type="formfield" name="grant_type" value="client_credentials" >
    <cfhttpparam type="header" name="Authorization" value="Basic #ToBase64(clientid & ":" & secret)#">
</cfhttp>

我希望这可以为其他人节省 3 个小时的周六时间。现在,我要弄清楚接下来的步骤。如果有人有兴趣将其包装成一个完整的 SDK,例如 PayPal REST API 的解决方案,请告诉我,我可能有兴趣合作。

【讨论】:

谢谢!这只是帮助我获得了用户令牌。我知道这是旧的,但只是一个问题,我没有玩过 oauth,但是从查看文档来看,你可以使用“Basic #ToBase64(.....:....)# ”。这让我绊倒了。【参考方案2】:

我是凭记忆在这里回答的,但我似乎记得需要将内容类型设置为 application/json,您将其设置为 application/x-www-form-urlencoded。

【讨论】:

我把它改成了: 现在它返回一个空字符串。我按照教皇链接上的说明进行操作,上面写着“注意确保对访问令牌的请求将内容类型设置为 application/x-www-form-urlencoded。默认情况下,这是在 cURL 调用中完成的。”这就是我当时正在尝试做的事情,即检索令牌。 我现在可以工作了,解决方案是在 CFHTTP 行中传递凭据:api.sandbox.paypal.com/v1/oauth2/token" result="test" username="** **" password="******"> @Dan - 您应该将其作为单独的答案发布,以便更明显。

以上是关于ColdFusion Paypal REST API oAuth的主要内容,如果未能解决你的问题,请参考以下文章

PayPal REST API [沙盒] - 执行付款销售时出现 INTERNAL_SERVICE_ERROR

如何在 ColdFusion 中访问 Java 枚举?

贝宝 sdk '类 'PayPal\Rest\ApiContext' 未找到'

为 PayPal 客户端 REST 集成传递项目名称

PAYPAL 支付客户端 REST 脚本

Paypal 快速结账与 PayPal REST API 的集成