文档签名 Python SDK - API 异常 400 - "错误请求"



我发表了几篇关于将Docusign的Python SDK与我公司的web应用程序集成的文章。从本质上讲,我要做的是让用户填写一份表格,在用户单击提交按钮后,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:userswkstatappdatalocalprogramspythonpython37libsite-packagesdjangocorehandlersexception.py" in inner
35.             response = get_response(request)
File "C:userswkstatappdatalocalprogramspythonpython37libsite-packagesdjangocorehandlersbase.py" in _get_response
128.                 response = self.process_exception_by_middleware(e, request)
File "C:userswkstatappdatalocalprogramspythonpython37libsite-packagesdjangocorehandlersbase.py" in _get_response
126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:UserswkstatDesktopDevelopmentLNQuoteToolcreatequoteviews.py" in Signview
142.  api_client.configure_jwt_authorization_flow(private_key_filename, oauth_base_url, integrator_key, user_id, 3600)
File "C:userswkstatappdatalocalprogramspythonpython37libsite-packagesdocusign_esignapi_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:userswkstatappdatalocalprogramspythonpython37libsite-packagesdocusign_esignapi_client.py" in request
430.                                          body=body)
File "C:userswkstatappdatalocalprogramspythonpython37libsite-packagesdocusign_esignrest.py" in POST
244.                             body=body)
File "C:userswkstatappdatalocalprogramspythonpython37libsite-packagesdocusign_esignrest.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管理页面上输入了带有集成密钥的重定向URI,我已经转到链接并点击"接受",这样就可以同意开始签名,然而,这是我遇到的问题,我不确定出了什么问题。这里的一位同事向我提供了这个解决方案,他告诉我,代码应该可以工作,而且很可能是DocuSign管理方面我没有做的事情。这里的代码有什么明显的错误吗?

提前感谢!

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

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

我希望它会有帮助。

相关内容

  • 没有找到相关文章

最新更新