Zoho CRM API:Python 基于请求 POST 或 GET 身份验证 + 插入联系人

Zoho CRM API: Python request-based POST or GET authentication + insertion of contacts

任务##

一个允许用户注册的 django 应用程序,一旦用户点击帐户激活 link,Zoho CRM 就会接收数据并在 CRM 部分创建一个联系人。

问题

我目前正在开发一款绝对的杰作 - ZOHO API。 我正在努力设置使用 POST/GET 请求的本机 Python 代码。 关于zcrmsdk 3.0.0,除非有人能提供一个功能齐全的例子,否则我已经完全放弃了这个解决方案。支持只是指责我的代码。

我查阅的文档: https://www.zoho.com/crm/developer/docs/api/v2/access-refresh.html, https://www.zoho.com/crm/developer/docs/api/v2/insert-records.html

由于 postman API 中的 post 请求工作正常 我不明白为什么它在 python code

中不起作用

我的方法

  1. 生成自客户端 API 代码:https://api-console.zoho.com/
  2. 在 Postman 上插入该代码并检索访问或刷新令牌
  3. 在文档中定义的 add_user_contact 函数中使用此访问令牌 有用!响应成功并且在 Zoho CRM 中

我使用的权限范围是:ZohoCRM.modules.contacts.ALL、ZohoCRM.users.ALL、ZohoCRM.modules.deals.ALL、ZohoCRM.modules.attachments.ALL、ZohoCRM.settings.ALL、AAAserver.profile.ALL

Post 人的图片 POST 请求

我自己的代码

def authenticate_crm():

"""
access to response object id:
response_object.get('data')[0].get('details').get('id')
"""

url = 'https://accounts.zoho.com/oauth/v2/token'

headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
}

# one time self-client token here -
request_body = {
    "code": "1000.aa8abec144835ab79b8f9141fa1fb170.8ab194e4e668b8452847c7080c2dd479",
    "redirect_uri": "http://example.com/yourcallback",
    "client_id": "1000.H95VDM1H9KCXIADGF05E0E1XSVZKFQ",
    "client_secret": "290e505ec52685fa62a640d874e6560f2fc8632e97",
   " grant_type": "authorization_code"
}

response = requests.post(url=url, headers=headers, data=json.dumps(request_body).encode('utf-8'))
if response is not None:
    print("HTTP Status Code : " + str(response.status_code))
    print(response.json())

我基本上是在努力将 Postman API 请求转换为 Python 请求以获取令牌作为工作流程的一部分。我在这里做错了什么?

文档指出:注意:出于安全原因,请在请求正文中将以下参数作为表单数据传递。 (access-refresh link) 但将其作为表单数据传递给 postman 会完全中断调用。

根据他们自己的文档(令人费解、矛盾且充满了过时的屏幕截图),身份验证密钥只需要一次。 一旦上面的请求运行,我会在第三张图片中获取响应并使用刷新键添加联系人。 如果有人可以提供帮助,我也愿意接受 SDK 3.0.0 的解决方案。

我解决了!

我已经更改了这一行:

response = requests.post(url=url, headers=headers, data=json.dumps(request_body).encode('utf-8'))

为此添加了一些 return 语句:

payload =     '1000.6d9411488dcac999f02304d1f7843ab2.e14190ee4bae175debf00d2f87143b19&'     \
          'redirect_uri=http%3A%2F%2Fexample.com%2Fyourcallback&' \
          'client_id=1000.H95VDM1H9KCXIADGF05E0E1XSVZKFQ&' \
         'client_secret=290e505ec52685fa62a640d874e6560f2fc8632e97&'\
          'grant_type=authorization_code'

response = requests.request(method="POST", url=url, headers=headers,     data=payload)
if response is not None:
    print("HTTP Status Code : " + str(response.status_code))
    # print(response.text)
    print(response.json())
    # catch access and refresh token
at = response.json().get('access_token')
rt = response.json().get('refresh_token')

return at, rt

我不明白为什么会有所不同,但可以解决问题,我可以从 ZOHO 检索密钥。