问题描述
我是django中的新集成Stripe,但最近我遇到一个错误,就是找不到答案,每次尝试将Stripe帐户连接到我的网站时,都会出现此错误:
{“错误”:{“消息”:“没有应用程序与提供的客户端标识符匹配”}}
这是代码:
import urllib
import requests
from django.urls import reverse
from django.http import HttpResponseRedirect
from django.views import View
from django.conf import settings
from django.shortcuts import redirect
from .models import Seller
class StripeAuthorizeView(View):
def get(self,request):
if not self.request.user.is_authenticated:
return HttpResponseRedirect(reverse('login'))
url = 'https://connect.stripe.com/oauth/authorize'
params = {
'response_type': 'code','scope': 'read_write','client_id': settings.STRIPE_CONNECT_CLIENT_ID,'redirect_uri': f'http://localhost:8000/users/oauth/callback'
}
url = f'{url}?{urllib.parse.urlencode(params)}'
return redirect(url)
class StripeAuthorizeCallbackView(View):
def get(self,request):
code = request.GET.get('code')
if code:
data = {
'client_secret': settings.STRIPE_SECRET_KEY,'grant_type': 'authorization_code','code': code
}
url = 'https://connect.stripe.com/oauth/token'
resp = requests.post(url,params=data)
# add stripe info to the seller
stripe_user_id = resp.json()['stripe_user_id']
stripe_access_token = resp.json()['access_token']
seller = Seller.objects.filter(user_id=self.request.user.id).first()
seller.stripe_access_token = stripe_access_token
seller.stripe_user_id = stripe_user_id
seller.save()
url = reverse('home')
response = redirect(url)
return response
settings.py
STRIPE_PUBLISHABLE_KEY = '<your test publishable key here>'
STRIPE_SECRET_KEY = '<your test secret key here>'
STRIPE_CONNECT_CLIENT_ID = '<your test connect client id here>'
解决方法
当您应该使用data = data时,似乎正在使用params = data:
static void sleepSome(int durationInSeconds)
{
Console.WriteLine("About to sleep for " + durationInSeconds + " seconds");
Thread.Sleep(durationInSeconds * 1000);
Console.WriteLine("Sleep over");
}
从请求文档中,参数用于Url参数:
您通常希望在 URL的查询字符串中发送某种数据。如果您是手动构建网址,则此数据会在网址中以问号(例如, httpbin.org/get?key=val 。通过请求,您可以
https://requests.readthedocs.io/en/master/user/quickstart/
对于data = data部分,也来自同一页面: 请求的简单API意味着所有形式的HTTP请求都是显而易见的。例如,这是您发出HTTP POST请求的方式:
data = {
'client_secret': settings.STRIPE_SECRET_KEY,'grant_type': 'authorization_code','client_id': settings.STRIPE_CONNECT_CLIENT_ID,'code': code
}
url = 'https://connect.stripe.com/oauth/token'
#resp = requests.post(url,params=data)
resp = requests.post(url,data=data) #Try with this instead