添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
瘦瘦的竹笋  ·  Azure Notification ...·  3 天前    · 
冷冷的牛排  ·  Solved: Rest api ...·  3 天前    · 
纯真的橙子  ·  Java Rest API client ...·  3 天前    · 
逆袭的日光灯  ·  Rest apis vs java ...·  3 天前    · 
悲伤的甜瓜  ·  Package clash on ...·  1 周前    · 
温文尔雅的野马  ·  curl.setopt·  1 月前    · 
刀枪不入的玉米  ·  Unable to load model ...·  2 月前    · 
傻傻的地瓜  ·  搜索结果·  4 月前    · 

I’m trying to implement Paypal payment using the rest api. I’m following the tutorial from this article I can get the token from Paypal without a problem. The issue comes when I try to get links back from paypal for my payment. I get a 400 error and Paypal lists other info it should show, but the response I get is just <response [400]>. I can’t find on the paypal site the format for the message. I am running this from localhost. I’ve run the json through verification. I did notice the stack trace shows it in single-quotes. Not sure if this can be an issue.

This is the stack trace

            response = self.handle_exception(exc) …
Local vars
/Users/tim/env/nyc/lib/python3.9/site-packages/rest_framework/views.py, line 469, in handle_exception
            self.raise_uncaught_exception(exc) …
Local vars
/Users/tim/env/nyc/lib/python3.9/site-packages/rest_framework/views.py, line 480, in raise_uncaught_exception
        raise exc …
Local vars
/Users/tim/env/nyc/lib/python3.9/site-packages/rest_framework/views.py, line 506, in dispatch
            response = handler(request, *args, **kwargs) …
Local vars
/Users/tim/websites/nycenv/NebraskaYouthCamp/registration/views.py, line 369, in get
        order_id = response.json()['id'] …
Local vars
Variable	Value
headers	
{'Authorization': 'Bearer '
                  'xxxxxxxxxxxxxxxxxxxxxx',
 'Content-Type': 'application/json'}
json_data	
{'application_context': {'brand_name': 'Nebraska Youth Camp',
                         'cancel_url': 'http://www.nebraskayouthcamp.com',
                         'landing_page': 'BILLING',
                         'return_url': 'http://www.nebraskayouthcamp.com',
                         'shipping_preference': 'NO_SHIPPING',
                         'user_action': 'CONTINUE'},
 'intent': 'CAPTURE',
 'purchase_units': [{'amount': {'currency_code': 'USD', 'value': '200'},
                     'custom_id': 'Camp Session',
                     'description': 'Summer Camp',
                     'reference_id': '294375635',
                     'soft_descriptor': 'Camp Session'}]}
request	
<rest_framework.request.Request: GET '/registration/paypal/create/order'>
response	
<Response [400]>
<registration.views.CreateOrderViewRemote object at 0x1048d2700>
token	
'xxxxxxxxxxxxxxxx'
'https://api-m.sandbox.paypal.com/v2/checkout/orders'

and the code

def PaypalToken(client_ID, client_Secret):
    url = "https://api-m.sandbox.paypal.com/v1/oauth2/token"
    data = {
                "client_id":client_ID,
                "client_secret":client_Secret,
                "grant_type":"client_credentials"
    headers = {
                "Content-Type": "application/x-www-form-urlencoded",
                "Authorization": "Basic {0}".format(base64.b64encode((client_ID + ":" + client_Secret).encode()).decode())
    token = requests.post(url, data, headers=headers)
    return token.json()['access_token']
class CreateOrderViewRemote(APIView):
    def get(self, request):
        url = "https://api-m.sandbox.paypal.com/v2/checkout/orders"
        token = PaypalToken(clientID, clientSecret)
        headers = {
            "Content-Type": "application/json",
            "Authorization": "Bearer "+token
        json_data = {
             "intent":"CAPTURE",
             "application_context": {
                 "return_url": "http://www.nebraskayouthcamp.com",
                 "cancel_url": "http://www.nebraskayouthcamp.com",
                 "brand_name": "Nebraska Youth Camp",
                 "landing_page": "BILLING",
                 "shipping_preference": "NO_SHIPPING",
                 "user_action": "CONTINUE"
             "purchase_units": [
                     "reference_id": "294375635",
                     "description": "Summer Camp",
                     "custom_id": "Camp Session",
                     "soft_descriptor": "Camp Session",
                     "amount": {
                         "currency_code": "USD",
                         "value": "200"
        response = requests.post(url, json_data, headers=headers)
        print("json response " + str(response))
        order_id = response.json()['id']
        linkForPayment = response.json()['links'][1]['href']
        return linkForPayment

Thanks for your help.

You need to pass json_data as a keyword argument named json. This will make requests properly handle the payload and transform it into json. If you pass the argument positionally that will go to the data parameter of the request, and that can be converted to some sort of form-data. So in the end you can try this:

response = requests.post(url, json=json_data, headers=headers)