응용 프로그램에 전자 서명 포함
문제.
기능이 완비된 React 프로그램이 있지만, 프로그램 흐름에 PDF를 채우고 사용자로부터 전자 서명을 수집하는 방법이 없습니다.사용자에게 일치된 사용자 체험을 제공하기를 원합니다. 전체 과정에서 사용자 체험은 응용 프로그램과 같습니다.
Anvil의 식각 전자 서명 API는 전자 우편의 기본 해결 방안을 사용하거나 응용 프로그램의 끼워넣기 해결 방안을 통해 사용자에게 서명을 알리는 두 가지 방법을 제공합니다.
오늘 나는 삽입식 방법을 소개할 것이다.서명자가 서명할 차례가 되면 전자메일을 받지 않고, 반대로, 응용 프로그램은 iframe이나modal을 통해 서명하도록 안내합니다.응용 프로그램을 서명 페이지로 다시 지정하고 서명한 후에 응용 프로그램으로 다시 지정하는 것도 선택입니다.
이메일 알림을 통한 부각 서명에 대한 자세한 내용은 Dell의 블로그 기사adding e-signatures to your app in 3 steps를 참조하십시오.
목표
저희 프로그램은 신입사원이 회사에 들어오는 포털입니다. 신입사원마다 NDA와 IRS표 W-4 두 통을 서명해야 합니다.
응용 프로그램 프로세스는 다음과 같습니다.
/onboarding/start
에서 사용자는 인터넷 폼을 작성할 것이다./onboarding/sign/:signaturePacketEid
에서 사용자는 끼워 넣은 서명 프레임워크를 통해 파일에 서명할 것이다./onboarding/finish
에 들어갈 것이다. 이것은 사용자에게 입사 절차가 이미 끝났다는 것을 알려줄 것이다.용어
Signature packet
- 서명이 필요한 PDF 설명서PDF template
(cast
라고도 함) - 데이터 저장 및 서명이 저희가 시작하기 전에. - 설정.
Sign up 모루 계좌에서 retrieve your API key까지.
yarn add @anvilco/anvil
# or
npm install @anvilco/anvil
import Anvil from '@anvilco/anvil'
// The API key is found under your organization settings
const apiKey = '5AeDVVQ2ybDKqU8LktSVwFL63aLXgH2f'
const anvilClient = new Anvil({ apiKey })
신입사원 네트워크 폼의 첫 페이지 구축
우선, 신입사원들이 정보를 입력할 수 있도록 간단한 웹 폼을 구축합니다. 이 정보는 이따가 서명 패키지를 만드는 데 사용됩니다.
클라이언트:
<form action="/api/packet/create" method="POST">
<input name="firstName" type="text" />
<input name="lastName" type="text" />
<input name="email" type="email" />
<input name="date" type="date" />
<input name="ssn" type="text" />
<input name="address" type="text" />
<input type="submit" value="Submit" />
</form>
우리의 서명 패키지 정의
비밀 협정
이것은 신입 사원이 우리 프로그램의 입사 절차에 서명해야 하는 두 장의 표 중 첫 번째이다.이 파일에 미리 제작된 PDF 템플릿이 없으므로 PDF를 업로드하고 PDF에 데이터를 채울 필드를 지정합니다.
먼저 파일을 JavaScript 객체로 초기화합니다.우리는 잠시 후에 그것을 사용하여 서명 패키지를 만들 것입니다.
const uploadedNDA = {
id: 'uploadedNDA',
title: 'Company Onboarding NDA',
file: anvilClient.prepareGraphQLFile('./static/onboardingNDA.pdf'),
fields: [
{
id: 'employeeSignature',
type: 'signature',
rect: { x: 270, y: 374, height: 22, width: 142 },
pageNum: 1,
},
]
}
국세청 표 W-4
NDA에 서명한 신입 사원은 다음 페이지의 서명 페이지에서 이 양식을 보아야 한다.이 양식의 PDF 템플릿이 Anvil 대시보드에 이미 있습니다.PDF 템플릿을 사용하는 것은 필드 구성이 정의되어 있으므로 에칭 전자 서명을 사용하는 가장 간단한 방법입니다.
NDA처럼 이 PDF 템플릿을 JavaScript 객체로 초기화합니다.우리는 잠시 후에 그것을 사용하여 우리의 서명 패키지를 만들 것입니다.
const templateW4 = {
id: 'templateW4',
// castEid is also known as the 'PDF template ID'
// found under the 'API Info' tab on the PDF template page
castEid: 'nCpCqnkpRxjg1jNIUDZk',
}
모든 파일
이 그룹은 신입 사원들이 서명할 모든 서류를 저장합니다.
const packetFiles = [uploadedNDA, templateW4]
서명자 추가
신입 사원은 우리의 유일한 서명인이다.우리는 서명자가 우리 프로그램에 서명하기를 원하기 때문에
signerType
를 embedded
로 설정해야 한다.신입 사원이 서명한 후에 확인 페이지로 바뀌는 것을 확보하기 위해서 redirectURL
를 /onboarding/finish
로 설정해야 합니다.const packetSigners = [
{
id: 'signer1',
// Important! This tells Anvil that our app will be
// notifying the signer when it is their turn to sign
signerType: 'embedded',
// Important! This tells Anvil to redirect to this URL
// after the signer has completed their signatures
redirectURL: '/onboarding/finish',
// fields left undefined to be filled using webform input
name: undefined,
email: undefined,
fields: [
{
fileId: 'uploadedNDA',
fieldId: 'employeeSignature',
},
{
fileId: 'templateW4',
fieldId: 'employeeSignature',
},
],
}
]
데이터로 PDF 미리 채우기
const packetPrefillData = {
uploadedNDA: {
data: {
// fields left undefined to be filled using webform input
disclosingPartyName: undefined,
disclosingPartyEmail: undefined,
effectiveDate: undefined,
recipientName: 'Demo Company Inc.',
recipientEmail: '[email protected]',
purposeOfBusiness: 'DEMO!!',
},
},
templateW4: {
data: {
// fields left undefined to be filled using webform input
firstName: undefined,
lastName: undefined,
address: undefined,
ssn: undefined,
},
},
}
우리의 서명 가방 변수를 한데 조합하다
export const signaturePacketVariables = {
files: packetFiles,
signers: packetSigners,
data: {
payloads: {
...packetPrefillData,
},
},
}
네트워크 폼에 루트를 만들고 서명 패키지를 생성합니다
신입 사원이 첫 페이지에서 웹form을 제출할 때, 우리는 서버가 이 정보를 사용하여 node-anvil 클라이언트가 서명 패키지를 만들어야 한다.
모루 / 노드 모루
Anvil의 노드 API 클라이언트
서버에 루트를 만들어서 이를 실현할 것입니다. 첫 페이지의 웹form에서 이 루트를 명중시킬 것입니다.이 루트는 요청 주체로부터 웹form 정보를 검색하여 이전 정의된 서명 패키지 설정에 없는 필드에 이 데이터를 채우고 서명 패키지를 만듭니다.우리는 되돌아오는
eid
로 만든 서명 패키지를 식별할 수 있다.폼을 제출한 후 사용자는 프로그램 프로세스의 두 번째 페이지에 로그인해야 하기 때문에 루트 함수의 끝에
res.redirect()
호출/onboarding/sign/:signaturePacketEid
을 추가합니다.서버측:
import {
signaturePacketVariables as variables
} from '../variables'
router.post('/api/packet/create', async (req, res) => {
// Extract the data submitted from the webform
const {
firstName, lastName, email, date, ssn, address,
} = req.body
// Fill in signer details
variables.signers[0].name = firstName + lastName
variables.signers[0].email = email
// Enter the prefill data for the NDA
variables.data.payloads.uploadedNDA.data = {
diclosingPartyName: firstName + lastName,
diclosingPartyEmail: email,
effectiveDate: date,
}
// Enter the prefill data for the W4
variables.data.payloads.templateW4.data = {
firstName,
lastName,
address,
ssn,
}
// Create the signature packet on the server
const {
statusCode, data, errors
} = await anvilClient.createEtchPacket({ variables })
// Pass the signature packet EID to the client-side
// for new hire to sign the packet
const signaturePacketEid = data.data.createEtchPacket.eid
const signingPageURL = `/onboarding/sign/${signaturePacketEid}`
return res.redirect(signingPageURL)
})
신입사원이 첫 페이지에 웹폼을 제출하면 서버에 서명 패키지가 생성되고 신입사원 노조가 두 번째 페이지에 로그인한다.서류에 서명할 준비가 되었다.서명 패키지 상세 정보 검색 및 서명 URL 생성
프로그램의
/onboarding/sign/:eid
페이지에 서명 프레임워크를 끼워 넣으려면 서명 URL이 필요합니다. node-anvil
클라이언트를 사용하여 이 URL을 생성합니다.페이지를 표시할 때 이 동작을 실행할 것입니다.
this.state = { signURL: null }
async componentDidMount () {
const response = await fetch('/api/packet/sign', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
// clientUserId should be the signer’s ID in your system
clientUserId: 5,
signaturePacketEid: req.params.signaturePacketEid,
}),
})
const responseText = await response.text()
const { url } = JSON.parse(responseText)
this.setState({ signURL: url })
}
저희 서버는 저희 서명 패키지의 상세한 정보를 얻고 신입 사원을 위한 서명 URL을 생성합니다.router.post('/api/packet/sign', async (req, res) => {
const { signaturePacketEid, clientUserId } = req.body
const { data } = await anvilClient.getEtchPacket({
variables: { eid: signaturePacketEid },
})
// We only have 1 signer for this signature packet
const signers = data.data.etchPacket.documentGroup.signers
const signerEid = signers[0].eid
// The signing URL generated here is used to
// embed the signing page into our app
const { url } = await anvilClient.generateEtchSignUrl({
variables: { signerEid, clientUserId }
})
return res.jsonp({ url })
})
참고: clientUserId
가 시스템의 사용자 ID로 설정되어 있는지 확인합니다.이것은 저희 시스템에서 귀하의 시스템으로 사용자의 트레이스 가능성을 제공하는 데 도움이 됩니다.중요한 구성 요소는 전자 서명이 지정한 사용자와 연결되어 있고, 그 사용자만 서명을 사용할 수 있다는 것이다.프로그램이 특정 사용자만 서명할 수 있도록 검증하고 권한을 부여할 수 있도록 적절한 조치를 취해야 합니다.서명 페이지 포함
서명 URL을 사용하면 Anvil React component library 서명 페이지를 계속 삽입할 수 있습니다.
모루 / 반응 사용자 인터페이스
Anvil의 React UI 구성 요소
우리는 프레임이나 모형을 선택할 수 있다.이 예에서 우리는
SignatureFrame
구성 요소를 사용할 것이다.구성 요소를 설치합니다.
yarn add @anvilco/react-signature-frame
# or
npm install @anvilco/react-signature-frame
구성 요소를 서명 페이지에 보여 줍니다.import SignatureFrame from '@anvilco/react-signature-frame'
class SigningPage extends React.Component {
state = { signURL: null }
async componentDidMount () {
const response = await fetch('/api/packet/sign', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
// clientUserId should be the signer’s ID in your system
clientUserId: 5,
signaturePacketEid: req.params.signaturePacketEid,
}),
})
const responseText = await response.text()
const { url } = JSON.parse(responseText)
this.setState({ signURL: url })
}
render () {
return (
<>
<p>
Please review the documents and sign to complete
the onboarding process.
</p>
<SignatureFrame
signURL={this.state.signURL}
onFinish={
(redirectURL) => window.location.assign(redirectURL)
}
/>
</>
)
}
}
서명 후
onFinish
함수를 호출합니다. 이 예에서 이 함수는 사용자를 redirectURL
로 연결합니다.서명 패키지를 만들 때 서명자의 redirectURL
부터 /onboarding/finish
까지 지정했기 때문에 서명자는 서명한 후에 입사 완료 페이지로 연결됩니다.주: 본 예는
SignatureFrame
를 사용하지만 과정은 SignatureModal
와 같다.요약
Anvil의 삽입식 서명 프로세스를 React 프로그램에 통합하는 모든 절차를 마쳤습니다. Anvil Node-client 서명 패키지 생성부터 사용 Anvil React component library 서명 페이지 삽입까지.나는 이 블로그를 통해 네가 이 과정이 어떻게 작동하는지 더욱 잘 이해할 수 있기를 바란다. 그러면 너는 이 도구를 너의 응용 프로그램에 통합시킬 수 있을 것이다.
추가 자원
Reference
이 문제에 관하여(응용 프로그램에 전자 서명 포함), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/useanvil/embedding-e-signatures-into-your-app-9mp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)