get '/envelope-sample' do
haml :envelope_sample
end
GET request
get '/envelope-sample' do
haml :envelope_sample
end
POST request to handle callback when document was signed
post '/envelope-sample/sign' do
Content Type of callback is application/json
data = JSON.parse(request.body.read)
begin
raise 'Empty params!' if data.empty?
create empty file and write data as "key: value" to it
out_file = File.new('signed', 'w')
data.each do |key, value|
out_file.write("#{key}: #{value} \n")
end
out_file.close
rescue Exception => e
err = e.message
end
end
POST request to handle callback and download envelop when document was signed
post '/envelope-sample/sign-and-download' do
data = JSON.parse(request.body.read)
begin
raise 'Empty params!' if data.empty?
GroupDocs.configure do |groupdocs|
groupdocs.client_id = '' # Your client Client ID here
groupdocs.private_key = '' # Your API Key here
groupdocs.api_server = 'https://api.groupdocs.com'
end
data.each do |key, value|
if key == 'SourceId'
Create envelop with id and name as SourceId parameter from callback
envelope = GroupDocs::Signature::Envelope.new id: value,
name: value
download signed documents as archive
envelope.signed_documents! '.'
end
end
rescue Exception => e
err = e.message
end
end
GET request to check if envelop was signed
get '/envelope-sample/check' do
if File.exist?('signed')
File.readlines('signed').each do |line|
end
else
'Have not signed yet'
end
end
POST request
post '/envelope-sample' do
set :client_id, params[:client_id]
set :private_key, params[:private_key]
begin
raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty?
GroupDocs.configure do |groupdocs|
groupdocs.client_id = params[:client_id]
groupdocs.private_key = params[:private_key]
groupdocs.api_server = 'https://stage-api.groupdocs.com'
end
upload document
filepath = "#{Dir.tmpdir}/#{params[:file][:filename]}"
File.open(filepath, 'wb') { |f| f.write(params[:file][:tempfile].read) }
file = GroupDocs::Storage::File.upload!(filepath, {}, client_id: settings.client_id, private_key: settings.private_key)
document = file.to_document
create envelope
envelope = GroupDocs::Signature::Envelope.new
envelope.name = 'Envelope'
envelope.email_subject = 'Sing this!'
envelope.create!
add document to envelope
envelope.add_document! document
update document object after it's created
document = envelope.documents!.first
add new recipient to envelope
roles = GroupDocs::Signature::Role.get!
recipient = GroupDocs::Signature::Recipient.new
recipient.email = 'john@smith.com'
recipient.first_name = 'John'
recipient.last_name = 'Smith'
recipient.role_id = roles.detect { |role| role.name == 'Signer' }.id
envelope.add_recipient! recipient
update recipient object after it's created
recipient = envelope.recipients!.first
You can add fields manually.
add city field to envelope field = GroupDocs::Signature::Field.get!.detect { |f| f.type == :single_line } field.name = 'City' field.location = { location_x: 0.3, location_y: 0.2, page: 1 } envelope.add_field! field, document, recipient
add signature field to envelope field = GroupDocs::Signature::Field.get!.detect { |f| f.type == :signature } field.location = { location_x: 0.3, location_y: 0.3, page: 1 } envelope.add_field! field, document, recipient
URL for callback webhook = 'http://groupdocs-ruby-samples.herokuapp.com/envelope-sample/sign'
webhook = 'http://77.81.243.48/?q=groupdocs_signature/signature_callback'
send envelope
envelope.send! webhook
construct embedded signature url
url = "https://stage-apps.groupdocs.com/signature/signembed/#{envelope.id}/#{recipient.id}"
iframe = "<iframe src='#{url}' frameborder='0' width='720' height='600'></iframe>"
rescue Exception => e
err = e.message
end
haml :envelope_sample, :locals => {:client_id => settings.client_id, :private_key => settings.private_key, :err => err, :iframe => iframe}
end