我目前正在尝试在我的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请求?
答案 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流的实现:
您可以在此处查看其用法示例:
该示例使用Flask而不是Django,但应该在使用方面为您提供一个好主意。
关于使用现有OAuth实现而不是直接自己实现调用的优势:我看到的一个优势是您的代码将重用通常覆盖所有不同用例的库(例如,更好的错误处理),并且也经过了很好的测试。