Как перенаправить из iframe после завершения процесса входа в Docusign - PullRequest
0 голосов
/ 04 октября 2019

Я бы хотел перенаправить пользователей на другую часть моего веб-сайта после того, как они закончили подписываться в Docusign Iframe, но у меня возникли проблемы с выходом из Iframe. Я знаю, что этот вопрос уже задавался здесь, но без ответа: Здесь

И Здесь , но предоставленный пользователем код не работает в моем случае,новая страница даже не загружается:

<iframe id ="docusignFrame" name="docusignFrame" th:src="${docusignURL}" width="100%" height="900" onLoad="(this.contentWindow.location != '' ? DocusignCompleted(this.contentWindow.location) : void(0));"></iframe>
<script>
function DocusignCompleted(url) {
    $("#docusignFrame").hide();
}
</script>

Что я пробовал:

Код PHP:

$recipientViewRequest = new DocuSign\eSign\Model\RecipientViewRequest([
    'authentication_method' => $authenticationMethod, 'client_user_id' => $clientUserId,
    'recipient_id' => '1', 'return_url' => $baseUrl . '/' . "end_print.php",
    'user_name' => $signerName, 'email' => $signerEmail
]);
$results = $envelopeApi->createRecipientView($accountId, $envelopeId,
    $recipientViewRequest);
return $results['url'];

Код HTML:

<iframe src="<?=$result?>" width="1000" height="1000"></iframe>

Возможно ли это, только с использованием HTML и PHP, или я должен попробовать что-то в JavaScript, как пользователь сверху.

Любая помощь будет признательна, спасибо.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Я рекомендую не использовать iFrame для церемонии подписания:

  1. iFrames, если они не занимают 100% высоты и ширины экрана, будут портить подпись на мобильных устройствах. (Совет: люди любят подписывать на мобильных устройствах.)
  2. iFrames не нужны для поддержания состояния вашего приложения: для этого используйте библиотеку сессий вашей платформы.
  3. iFrameусложняет работу с DocuSign (как вы уже видели).

Вывод: лучше и проще просто перенаправить на церемонию подписания DocuSign. DocuSign перенаправит браузер подписавшего обратно к вам, когда они будут готовы.

Добавлено

Re: библиотека сессий фреймворка

Библиотека сессий позволяет вашему приложению легко поддерживать состояние дляконкретное использование на протяжении всей их сессии.

Например, для PHP см. https://www.php.net/manual/en/book.session.php

Re: iFrames не рекомендуется:

См. Документы DocuSign здесь :

Примечание: пожалуйста, перенаправьте клиента на URL. Не следует использовать iFrames, особенно если получатель использует мобильный телефон или планшет.

Также см. серию примеров eg-03 для нескольких языков. Все они перенаправляют браузер. См. список репозиториев.

0 голосов
/ 04 октября 2019

Я нашел решение в моем случае, это проверить onload Ифрейма, а затем в Javascript, чтобы проверить, существует ли GET["event"] Docusign.

В этом случае, если процесс подписания завершится неудачно, он все равно изменит страницу, но вы можете изменить эту часть кода на то, что вам нужно.

<html>
    <head>
        <script>
            function handleIframe(str){
                url = new String(str);
                if (url.indexOf('?event=signing_complete') > 0) {
                    window.top.location.href = "signing_complete.php";
                }
            }
        </script>
    </head>
    <body>
        <iframe width="1000"
                height="1000"
                onload="handleIframe(this.contentWindow.location)"
                frameborder="0"
                src="<?=$result?>">
        </iframe>
    </body>
</html>

Я сейчас работаю над исправлением следующей ошибки, если будет найдено, я также опубликую его здесь.

Uncaught DOMException: заблокирован фрейм с источником "http://localhost" от доступа к> фрейму перекрестного происхождения. в новой String () вhandleIframe [...] на HTMLIFrameElement.onload [...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...