努力为docusign重新生成新的签名URL

时间:2019-07-16 06:08:00

标签: docusignapi

我正在尝试在我们的Web应用程序中实现DocuSign嵌入式签名功能。我已经能够在应用程序中实现如下一般流程:

  • 用户创建一个信封并将其发送给所有签名者。
  • 帐户中的收件人可以单击签名链接以对文档进行签名。

我在这里面临的关键问题是签名链接在5分钟后失效。

根据DocuSign文档,我尝试重新生成签名URL,如下所示:

from docusign_esign import ApiClient, EnvelopesApi, RecipientViewRequest

def generate_new_signing_url(request, document_signer):
    api_client = ApiClient()
    api_client.host = DOCUSIGN_URL
    api_client.set_default_header("Authorization", "Bearer " + ACCESS_TOKEN)
    #ACCESS_TOKEN is retrieved from the session variable

    envelope_api = EnvelopesApi(api_client)

    recipient_view_request = RecipientViewRequest(
        authentication_method='None',
        client_user_id=CLIENT_USER_ID,
        recipient_id=RECIPIENT_ID,
        return_url=RETURN_URL,
        user_name=FULL_NAME,
        email=EMAIL
    )

    response = envelope_api.create_recipient_view(ACCOUNT_ID, 
     ENVELOP_ID,recipient_view_request=recipient_view_request)
    # We store the ENVELOP_ID in the database when it's created for the first time and use it to regenerate the URL

    return response.url

关键问题是上述代码仅在原始创建者而不是签名者调用此代码时才起作用。理想的情况应该是,当链接在签名者的一端过期时,应该给它们提供一个新的URL来对文档进行签名。

有人遇到过类似的问题吗?请帮忙。

1 个答案:

答案 0 :(得分:1)

正如您所指出的,签字仪式的URL仅持续5分钟。因此,必须在将签名者的浏览器重定向到签名仪式URL之前立即生成它。

您不应将签署仪式的网址提供给签署者以供单击。相反,您应该始终:

  1. 从DocuSign获取签名仪式网址
  2. 将签名者的浏览器重定向到url

延迟的嵌入式签名仪式

  1. 为一个或多个嵌入式签名者创建信封。 (设置收件人的clientUserId属性)
  2. 在您自己的安全数​​据库中,为每个延迟签名者创建一行:

    列:

    1. envelopeId
    2. 收件人姓名
    3. 收件人的电子邮件
    4. 收件人的clientUserId
    5. guid(此签名者和此信封的唯一标识符)
  3. 将引导发送给签名者,后者稍后将使用嵌入式签名仪式。使用它作为查询参数。例如:myapp.company.com?signingguid=1234

(稍后)

  1. 签名者将点击网址
  2. 您的应用将在其表中查找guid
  3. 您的应用使用表格的属性从DocuSign请求签名仪式网址
  4. 您的应用将签名者的浏览器重定向到签名仪式的URL。
  5. 签名者签名,签名者随后被重定向回您的应用。
  6. 完成!

您的应用程序用于创建签名仪式URL的访问令牌可能需要代表信封的发件人(我不确定)或管理员。无论哪种方式,您的应用程序都可以使用JWT Grant流来模拟该DocuSign用户。

签名人本身不需要DocuSign用户帐户。

信息安全

  1. 在发送签名者的URL中使用GUID或其他随机字符串。您不希望这些网址容易猜测!
  2. 考虑如何验证签名者的身份。您可以在签署仪式上让DocuSign要求其他信息,或者可以检查应用程序的会话信息,以确保签署者也已通过身份验证(登录)到您的应用程序。