Джанго: полоса и POST запрос - PullRequest
0 голосов
/ 29 июня 2018

В настоящее время я пытаюсь реализовать Stripe Connect в моем проекте Django. Стрип-документация гласит Стандартные счета:

При условии отсутствия ошибок, последний шаг - использовать предоставленный код сделать запрос POST к нашей конечной точке access_token_url, чтобы получить учетные данные пользователя Stripe:

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

Теперь мне интересно, как отправить запрос POST с Django без формы и действий пользователя (нажав кнопку отправки)?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Поскольку Standard Connect использует OAuth для своего потока соединения:

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

так что вы можете использовать библиотеку OAuth-Python, такую ​​как Rauth, как вы упоминали, для управления потоком.

Также обратите внимание, что библиотека 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 по сравнению с непосредственным выполнением вызовов: я вижу одно преимущество в том, что ваш код будет повторно использовать библиотеку, которая обычно охватывает все различные варианты использования (например, лучшую обработку ошибок), и является также хорошо проверено.

0 голосов
/ 29 июня 2018

Благодаря @psmvac я теперь могу реализовать его «правильным» способом, используя oAuth of Stripe. Вот некоторые ссылки / примеры кода 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)
...