Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django docusignpythonsdk-API异常400-';错误请求';_Django_Python 3.x_Docusignapi - Fatal编程技术网

Django docusignpythonsdk-API异常400-';错误请求';

Django docusignpythonsdk-API异常400-';错误请求';,django,python-3.x,docusignapi,Django,Python 3.x,Docusignapi,关于将Docusign的pythonsdk与我公司的web应用程序集成的问题,我发表了几篇文章。基本上,我所做的是让用户填写表单,在用户单击submit按钮后,weasyprint从我创建的html模板生成pdf,并将客户信息放置在正确的位置。然后,我希望DocuSign使用新生成的PDF向用户发送一封电子邮件,让他们在表单上签名,并将其发送到我公司的电子邮件帐户。以下是我尝试将Python的SDK集成到Django web应用程序中的方法: def Signview(request):

关于将Docusign的pythonsdk与我公司的web应用程序集成的问题,我发表了几篇文章。基本上,我所做的是让用户填写表单,在用户单击submit按钮后,weasyprint从我创建的html模板生成pdf,并将客户信息放置在正确的位置。然后,我希望DocuSign使用新生成的PDF向用户发送一封电子邮件,让他们在表单上签名,并将其发送到我公司的电子邮件帐户。以下是我尝试将Python的SDK集成到Django web应用程序中的方法:

def Signview(request):
    loa = LOA.objects.filter().order_by('-id')[0] # This is pulling the information about the user from a model in my database
    username = "myusername@docusign.com"
    integrator_key = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    base_url = "https://demo.docusign.net/restapi"
    oauth_base_url = "account-d.docusign.com"
    redirect_uri = "http://localhost:8000/path/to/redirecturi"
    private_key_filename = "path/to/pKey.txt"
    user_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    client_user_id = 'Your System ID' # This is the actual string I am using for this variable

    # Add a recipient to sign the document
    signer = docusign.Signer()
    signer.email = loa.email
    signer.name = loa.ainame
    signer.recipient_id = '1'
    signer.client_user_id = client_user_id

    sign_here = docusign.SignHere()
    sign_here.document_id = '1'
    sign_here.recipient_id = '1'
    sign_here.anchor_case_sensitive = 'true'
    sign_here.anchor_horizontal_alignment = 'left'
    sign_here.anchor_ignore_if_not_present = 'false'
    sign_here.anchor_match_whole_word = 'true'

    sign_here.anchor_string = 'Sign Here'
    sign_here.anchor_units = 'cms'
    sign_here.anchor_x_offset = '0'
    sign_here.anchor_y_offset = '0'
    sign_here.tab_label = 'sign_here'
    tabs = docusign.Tabs()
    tabs.sign_here_tabs = [sign_here]

    # Create a signers list, attach tabs to signer, append signer to signers.
    # Attach signers to recipients objects
    signers = []
    tabs = tabs
    signer.tabs = tabs
    signers.append(signer)
    recipients = docusign.Recipients()
    recipients.signers = signers

    # Create an envelope to be signed
    envelope_definition = docusign.EnvelopeDefinition()
    envelope_definition.email_subject = 'My email subject'
    envelope_definition.email_blurb = 'My email blurb'

    # Add a document to the envelope_definition
    pdfpath = "path/to/mypdf.pdf"
    with open(pdfpath, 'rb') as signfile:
        file_data = signfile.read()
        doc = docusign.Document()
        base64_doc = base64.b64encode(file_data).decode('utf-8')
        doc.document_base64 = base64_doc
        doc.name = "MyDoc_Signed.pdf"
        doc.document_id = '1'
        envelope_definition.documents = [doc]
        signfile.close()
    envelope_definition.recipients = recipients
    envelope_definition.status = 'sent'

    api_client = docusign.ApiClient(base_url)

    oauth_login_url = api_client.get_jwt_uri(integrator_key, redirect_uri, oauth_base_url)
    print("oauth_login_url:", oauth_login_url)
    print("oauth_base_url:", oauth_base_url)

    api_client.configure_jwt_authorization_flow(private_key_filename, oauth_base_url, integrator_key, user_id, 3600)
    docusign.configuration.api_client = api_client

    auth_api = AuthenticationApi()
    envelopes_api = EnvelopesApi()

    try: #login here via code
        login_info = auth_api.login()
        login_accounts = login_info.login_accoutns
        base_url, _ = login_accounts[0].base_url.split('/v2')
        api_client.host = base_url
        docusign.configuration.api_client = api_client

        envelope_summary = envelopes_api.create_envelope(login_accounts[0].account_id, envelope_definition = envelope_definition)

        print(envelope_summary)
    except ApiException as e:
        raise Exception("Exception when calling DocuSign API: %s" % e)
    except Exception as e:
        print(e)
    return HttpResponse({'sent'})
但是,这是我运行此代码时收到的错误:

Environment:


Request Method: GET
Request URL: http://localhost:8000/createquote/genloa/sign/

Django Version: 2.0.6
Python Version: 3.7.0
Installed Applications:
['createquote',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\users\wkstat\appdata\local\programs\python\python37\lib\site-packages\django\core\handlers\exception.py" in inner
  35.             response = get_response(request)

File "C:\users\wkstat\appdata\local\programs\python\python37\lib\site-packages\django\core\handlers\base.py" in _get_response
  128.                 response = self.process_exception_by_middleware(e, request)

File "C:\users\wkstat\appdata\local\programs\python\python37\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\wkstat\Desktop\Development\LNQuoteTool\createquote\views.py" in Signview
  142.  api_client.configure_jwt_authorization_flow(private_key_filename, oauth_base_url, integrator_key, user_id, 3600)

File "C:\users\wkstat\appdata\local\programs\python\python37\lib\site-packages\docusign_esign\api_client.py" in configure_jwt_authorization_flow
  126.                                 post_params=self.sanitize_for_serialization({"assertion": assertion, "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer"}))

File "C:\users\wkstat\appdata\local\programs\python\python37\lib\site-packages\docusign_esign\api_client.py" in request
  430.                                          body=body)

File "C:\users\wkstat\appdata\local\programs\python\python37\lib\site-packages\docusign_esign\rest.py" in POST
  244.                             body=body)

File "C:\users\wkstat\appdata\local\programs\python\python37\lib\site-packages\docusign_esign\rest.py" in request
  200.             raise ApiException(http_resp=r)

Exception Type: ApiException at /createquote/genloa/sign/
Exception Value: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Cache-Control': 'private', 'Content-Type': 'text/html', 'X-AspNetMvc-Version': '5.2', 'X-DocuSign-TraceToken': 'b27fdab1-e157-4f13-968c-f5606e0e90b1', 'X-DocuSign-Node': 'DA2DFE5', 'Date': 'Tue, 31 Jul 2018 22:41:16 GMT', 'Content-Length': '11'})
HTTP response body: b'Bad Request'
我已经在我的DocuSign admin页面上用我的integrator密钥输入了重定向URI,我已经转到链接并点击“accept”,以便获得开始签名的许可,但是,这是我遇到的问题,我不确定出了什么问题。这里的一位同事向我提供了这个解决方案,他告诉我,代码应该可以工作,而且可能是DocuSign管理端的一些我没有做的事情。这里的代码有什么明显的错误吗


提前谢谢

很难定义管理面板中的错误。您可以尝试完成以下步骤来定义错误:

  • 检查管理员和代码中的重定向uri是否相同
  • 在管理面板中检查用户id是否与API用户名相同(这是我的问题)
  • 确保路径/to/pKey.txt中的私钥与管理面板中的私钥相同

  • 我希望它能帮上忙。

    非常感谢!我不能100%确定具体的修复方法是什么(我将用户id更改为错误的,然后又将其更改回来,它就成功了)。然而,我现在有它在文件中的电子邮件被列为已发送,但我从来没有收到过电子邮件。我仍然在使用演示,当我使用演示版本时,我不应该能够收到电子邮件吗?或者可能还有其他问题?我确实点击了“重发”,但我仍然没有收到。这是因为我没有为信封创建“通知”变量吗?这对信封收件人收到的电子邮件是必要的吗?不,您可以在演示模式下使用所有功能。您确定电子邮件是正确的吗?当您从DocuSign面板创建演示信封时,它也没有发送电子邮件?尝试设置不同的客户端\用户\ id,从中发送我检查,电子邮件肯定是正确的。但是,我确实尝试了另一次发送,这次将客户端用户id从“您的本地系统id”更改为收件人的电子邮件。没有任何变化,但是,仍然没有任何人收到电子邮件。即使是Docusign那边的人也不确定到底出了什么问题。我可能会发表另一篇文章来解决这个问题。