Django:Stripe和POST请求

时间:2018-06-29 04:57:52

标签: django stripe-payments

我目前正在尝试在我的Django项目中实现Stripe Connect。标准帐户的条带化文档状态:

  

假设没有错误发生,最后一步是使用提供的代码   向我们的access_token_url端点发出POST请求以获取   用户的Stripe凭证:

curl https://connect.stripe.com/oauth/token \
   -d client_secret=sk_test_Dur3X2cOCwyjlf9Nr7OCf3qO \
   -d code="{AUTHORIZATION_CODE}" \
   -d grant_type=authorization_code

我现在想知道如何在没有表单和用户操作(单击提交按钮)的情况下使用Django发送POST请求?

2 个答案:

答案 0 :(得分:0)

由于@psmvac,我现在可以使用Stripe的oAuth以“正确”的方式实现它。如果有人尝试这样做,这里有一些参考/示例Django代码。显然,必须配置urls.py。这是在我的views.py中:

def stripe_authorize(request):
    import stripe

    stripe.api_key = ''
    stripe.client_id = 'XYZ'

    url = stripe.OAuth.authorize_url(scope='read_only')
    return redirect(url)


def stripe_callback(request):
    import stripe
    from django.http import HttpResponse
    # import requests

    stripe.api_key = 'XYZ'
    ## import json  # ?

    code = request.GET.get('code', '')
    try:
        resp = stripe.OAuth.token(grant_type='authorization_code', code=code)
    except stripe.oauth_error.OAuthError as e:
        full_response = 'Error: ' + str(e)
        return HttpResponse(full_response)

    full_response = '''
<p>Success! Account <code>{stripe_user_id}</code> is connected.</p>
<p>Click <a href="/stripe-deauthorize?stripe_user_id={stripe_user_id}">here</a> to
disconnect the account.</p>
'''.format(stripe_user_id=resp['stripe_user_id'])
    return HttpResponse(full_response)


def stripe_deauthorize(request):
    from django.http import HttpResponse
    import stripe

    stripe_user_id = request.GET.get('stripe_user_id', '')
    try:
        stripe.OAuth.deauthorize(stripe_user_id=stripe_user_id)
    except stripe.oauth_error.OAuthError as e:
        return 'Error: ' + str(e)

    full_response = '''
<p>Success! Account <code>{stripe_user_id}</code> is disconnected.</p>
<p>Click <a href="/">here</a> to restart the OAuth flow.</p>
'''.format(stripe_user_id=stripe_user_id)
    return HttpResponse(full_response)

答案 1 :(得分:0)

由于Standard Connect依赖OAuth进行连接,因此:

https://stripe.com/docs/connect/standard-accounts#oauth-flow

因此您可以使用Rauth之类的OAuth python库(如上所述)来处理流程。

还请注意,Stripe Python库在此处提供了OAuth流的实现:

https://github.com/stripe/stripe-python/blob/a938c352c4c11c1e6fee064d5ac6e49c590d9ca4/stripe/oauth.py

您可以在此处查看其用法示例:

https://github.com/stripe/stripe-python/blob/f948b8b95b6df5b57c7444a05d6c83c8c5e6a0ac/examples/oauth.py

该示例使用Flask而不是Django,但应该在使用方面为您提供一个好主意。

关于使用现有OAuth实现而不是直接自己实现调用的优势:我看到的一个优势是您的代码将重用通常覆盖所有不同用例的库(例如,更好的错误处理),并且也经过了很好的测试。