【问题标题】:Paypal Rest API - Creating payment using paypal account payment resourcePaypal Rest API - 使用 paypal 账户支付资源创建支付
【发布时间】:2013-03-16 00:05:37
【问题描述】:

使用 python 和 django,我正在尝试使用 REST API 帐户支付资源在贝宝上创建支付。当我使用 curl 时一切正常。在 Django 视图中,我得到了令牌,但是当我尝试使用它进行付款时,我收到“HTTP Error 401: Unauthorized”错误。

这是我的 curl 有效:

curl -v https://api.sandbox.paypal.com/v1/payments/payment -H 'Content-Type:application/json' -H 'Authorization:Bearer ***my_token***' -d '{ "intent":"sale", "redirect_urls":{ "return_url":"http://www.myurl.com", "cancel_url":"http://www.myurl.com"}, "payer":{ "payment_method":"paypal" },"transactions":[{"amount":{ "total":"0.10", "currency":"USD"},"description":"This is the Test payment transaction description."}]}'

这是我的 Django 视图,当:

import urllib2, base64

token = "***my_token***"
values = {
          "intent":"sale",
          "redirect_urls":{
            "return_url":"http://www.myurl.com",
            "cancel_url":"http://www.myurl.com"
          },
          "payer":{
            "payment_method":"paypal"
          },
          "transactions":[
            {
              "amount":{
                "total":"0.10",
                "currency":"USD"
              },
              "description":"This is the Test payment transaction description."
            }
          ]}

data = urllib.urlencode(values)

request1 = urllib2.Request("https://api.sandbox.paypal.com/v1/payments/payment")
base64string = base64.encodestring('%s' % token).replace('\n', '')
request1.add_header("Content-Type", "application/json")
request1.add_header("Authorization", "Bearer %s" % base64string) 

result1 = urllib2.urlopen(request1 , data)
response = result1.read()

换句话说,我正在尝试让 curl 在我看来工作。

谢谢。

【问题讨论】:

  • request1 = urllib2.Request("https://www.sandbox.paypal.com/cgi-bin/webscr")
  • @catherine。我期待具有令牌的 json 数据,但使用您的地址将我带到贝宝屏幕,没有任何形式。
  • 我也有同样的问题,你找到解决办法了吗?

标签: python django paypal


【解决方案1】:

不确定您是否遇到了与我相同的情况,但我试图为我未正确请求许可的第三方 paypal 帐户创建付款。原来我需要使用 Permissions API 来请求适当的权限。

查看此链接:https://developer.paypal.com/webapps/developer/docs/classic/permissions-service/integration-guide/PermissionsAbout/

【讨论】:

    【解决方案2】:

    首先使用基本身份验证向 https://api.sandbox.paypal.com/v1/oauth2/token 发出请求以获取 Bearer 令牌,然后使用 Bearer 令牌进行 REST 调用 (https://api.sandbox.paypal.com/v1/payments/payment)。

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

    使用 PayPal SDK paypalrestsdk 来简化您的 Python 代码。

    1. https://github.com/paypal/rest-api-sdk-python - 自述文件
    2. https://github.com/paypal/rest-api-sdk-python/tree/master/samples - 样本

    【讨论】:

    • 我能够按照我的指示获得 Bearer 令牌。我的问题是用它来付款。
    • request1.add_header("Authorization", "Basic %s" % base64string)行替换为request1.add_header("Authorization", "Bearer %s" % bearer_token)
    • 我使用 ("Authorization", "Bearer %s" % bearer_token) 得到同样的错误
    • 不记名令牌不用做base64编码,所以去掉base64string = base64.encodestring('%s' % token).replace('\n', '')语句直接使用令牌request1.add_header("Authorization", "Bearer %s" % token)
    • PayPal 为 python 发布了一个新的 sdk。欲了解更多信息:github.com/paypal/rest-api-sdk-python
    猜你喜欢
    • 2013-12-25
    • 2016-03-25
    • 2017-08-05
    • 2014-02-06
    • 2019-05-15
    • 2017-02-16
    • 2021-01-30
    • 2018-09-07
    • 1970-01-01
    相关资源
    最近更新 更多