[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"schema-global-basic:en-US":3,"developer-center-document-stjk6a2euo5bb9rnu5xidl9y-en-US":209},{"@graph":4,"@context":208},[5,102,172],{"@id":6,"url":7,"logo":8,"name":11,"@type":12,"brand":13,"sameAs":15,"slogan":18,"address":19,"audience":23,"areaServed":29,"knowsAbout":49,"makesOffer":69,"description":82,"serviceType":83,"contactPoint":84,"foundingDate":95,"alternateName":96,"hasCredential":97},"https://www.esign.ai/#org","https://www.esign.ai/",{"url":9,"@type":10},"https://www.esign.ai/cn/logo_black.svg","ImageObject","eSign.AI","Organization",{"name":11,"@type":14},"Brand",[16,17],"https://www.linkedin.com/company/esignai","https://www.youtube.com/@eSignAI","AI-powered contract execution and compliance platform for global business",{"@type":20,"addressCountry":21,"addressLocality":22},"PostalAddress","HK","Hong Kong",{"@type":24,"audienceType":25},"Audience",[26,27,28],"Business","Enterprise","SMB",[30,32,34,36,38,40,42,44,47],{"name":22,"@type":31},"Country",{"name":33,"@type":31},"Singapore",{"name":35,"@type":31},"Malaysia",{"name":37,"@type":31},"Indonesia",{"name":39,"@type":31},"Vietnam",{"name":41,"@type":31},"Philippines",{"name":43,"@type":31},"China",{"name":45,"@type":46},"Asia-Pacific","Place",{"name":48,"@type":46},"Global",[50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68],"AI Contract Execution","Electronic Signature","Digital Contract Management","Workflow Automation","eIDAS Regulation (EU)","ESIGN Act (US)","UETA (US)","China Electronic Signature Law","Hong Kong Electronic Transactions Ordinance","Singapore Electronic Transactions Act","Malaysia Digital Signature Act","Indonesia ITE Law","Vietnam Law on E-Transactions","Philippines Electronic Commerce Act","GDPR","Cross-border Data Compliance","Data Security and Encryption","Enterprise eSignature Solutions","APAC eSignature Laws",{"url":70,"name":71,"@type":72,"itemListElement":73},"https://www.esign.ai/pricing","Pricing Plans","OfferCatalog",[74,79],{"name":75,"@type":76,"price":77,"priceCurrency":78},"Essential Plan","Offer","199","USD",{"name":80,"@type":76,"price":81,"priceCurrency":78},"Professional Plan","Contact Sales","eSign.AI is an AI-powered contract execution platform that automates document workflows, ensures global compliance, and delivers legally binding e-signatures across 180+ countries.",[50,51,52,53],[85],{"@type":86,"email":87,"telephone":88,"areaServed":48,"contactType":89,"availableLanguage":90},"ContactPoint","sales@esign.ai","+852-46749867","customer support",[91,92,93,94],"en","zh-CN","zh-HK","zh-TW","2016","eSignGlobal",{"url":98,"name":99,"@type":100,"description":101},"https://www.esign.ai/eSignature-Legality","AI Contract Legality & Compliance Guide","CreativeWork","eSign.AI uses AI to ensure contract execution complies with ESIGN Act, UETA, eIDAS, China Electronic Signature Law, and APAC cross-border regulations.",{"@id":103,"url":104,"name":105,"@type":106,"hasPart":107,"publisher":156,"inLanguage":157,"description":166,"alternateName":167,"potentialAction":168,"mainEntityOfPage":7},"https://www.esign.ai/#website","https://www.esign.ai","eSign.AI Official Website","WebSite",[108,114,120,125,128,132,136,141,146,151],{"@id":109,"url":110,"name":111,"@type":112,"description":113},"https://www.esign.ai/customer-story#list","https://www.esign.ai/customer-story","Customer Stories","WebPage","See how enterprises use AI contract execution to accelerate digital signing and improve compliance across finance, manufacturing and technology.",{"@id":115,"url":116,"name":117,"@type":112,"isPartOf":118,"description":119},"https://www.esign.ai/integrations#overview","https://www.esign.ai/integrations","Integrations",{"@id":103},"Connect eSign.AI with Salesforce, Google Drive, Microsoft 365 and more to automate contract workflows with AI.",{"@id":121,"url":122,"name":123,"@type":112,"description":124},"https://www.esign.ai/features#overview","https://www.esign.ai/features","Features","Discover AI-powered contract execution, identity verification, workflow automation, templates and API.",{"@id":126,"url":70,"name":71,"@type":112,"description":127},"https://www.esign.ai/pricing#catalog","Compare eSign.AI pricing plans for teams and enterprises, and find the right AI contract execution package.",{"@id":129,"url":98,"name":130,"@type":112,"description":131},"https://www.esign.ai/eSignature-Legality#guide","Legality & Compliance","Review AI-driven compliance guides for e-signatures across regions (eIDAS, ESIGN, UETA, China, APAC).",{"@id":133,"url":134,"name":81,"@type":112,"description":135},"https://www.esign.ai/contact-sales#contact","https://www.esign.ai/contact-sales","Contact the eSign.AI team to discuss enterprise AI contract execution requirements.",{"@id":137,"url":138,"name":139,"@type":112,"description":140},"https://www.esign.ai/developers#overview","https://www.esign.ai/developers","Developers & API","Access developer documentation, SDKs and API references to integrate AI contract execution into your apps.",{"@id":142,"url":143,"name":144,"@type":112,"description":145},"https://www.esign.ai/resources#hub","https://www.esign.ai/resources","Resources Center","Browse product guides, case studies, whitepapers and best practices for AI contract execution.",{"@id":147,"url":148,"name":149,"@type":112,"description":150},"https://www.esign.ai/news#center","https://www.esign.ai/news","News & Press","Read the latest announcements, product updates and media coverage from eSign.AI.",{"@id":152,"url":153,"name":154,"@type":112,"description":155},"https://www.esign.ai/blog#hub","https://www.esign.ai/blog","Blog","Insights and articles on AI contract execution, compliance, and workflow automation.",{"@id":6},[91,92,158,159,160,161,162,163,164,165],"zh-Hant","id-ID","vi-VN","ja-JP","ko-KR","es-MX","fr-FR","ru-RU","Official site of eSign.AI — AI-powered contract execution platform providing secure, compliant, and legally recognized e-signatures for global enterprises.","eSign.AI AI Contract Execution Platform",{"@type":169,"target":170,"query-input":171},"SearchAction","https://www.esign.ai/search?q={query}","required name=query",{"@id":173,"name":174,"@type":175,"itemListElement":176},"https://www.esign.ai/#pages","Primary Site Sections","ItemList",[177,181,184,187,190,193,196,199,202,205],{"item":178,"@type":179,"position":180},{"@id":109},"ListItem",1,{"item":182,"@type":179,"position":183},{"@id":115},2,{"item":185,"@type":179,"position":186},{"@id":121},3,{"item":188,"@type":179,"position":189},{"@id":126},4,{"item":191,"@type":179,"position":192},{"@id":129},5,{"item":194,"@type":179,"position":195},{"@id":133},6,{"item":197,"@type":179,"position":198},{"@id":137},7,{"item":200,"@type":179,"position":201},{"@id":142},8,{"item":203,"@type":179,"position":204},{"@id":147},9,{"item":206,"@type":179,"position":207},{"@id":152},10,"https://schema.org",{"apiTree":210,"documentTree":513,"securityTree":598,"detail":599},[211],{"id":212,"documentId":213,"title":214,"sort":180,"parent_id":215,"only_as_menu":216,"type":217,"nodeId":213,"routeId":213,"children":218},854,"o4686obgtwjoscs5s6xooyi1","API Reference","0",true,"api",[219,230,293,334,359,376,406,432,448,508],{"id":220,"documentId":221,"title":222,"sort":180,"parent_id":213,"only_as_menu":216,"type":217,"nodeId":221,"routeId":221,"children":223},3371,"b1jzh5soo88eektjgjg0z9cj","oAuth2",[224],{"id":225,"documentId":226,"title":227,"sort":180,"parent_id":221,"only_as_menu":228,"type":217,"nodeId":226,"routeId":226,"children":229},1143,"mmcjntoocjtwl1frc6khk3k4","oAuth Authorization",false,[],{"id":231,"documentId":232,"title":233,"sort":207,"parent_id":213,"only_as_menu":216,"type":217,"nodeId":232,"routeId":232,"children":234},3499,"emn5khbfwir61or7uzo7mrde","Envelope Management",[235,240,245,251,257,263,269,275,281,287],{"id":236,"documentId":237,"title":238,"sort":180,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":237,"routeId":237,"children":239},3287,"q9infiuohmf1fui6dj083hxj","Quick Envelope Initiation",[],{"id":241,"documentId":242,"title":243,"sort":207,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":242,"routeId":242,"children":244},1347,"xlp3m1z044jtkeopyh7ccm5e","Create Envelope",[],{"id":246,"documentId":247,"title":248,"sort":249,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":247,"routeId":247,"children":250},1153,"ewmccs9nc11erxmwmg7ye609","Start Envelope",20,[],{"id":252,"documentId":253,"title":254,"sort":255,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":253,"routeId":253,"children":256},1149,"k1tcxkpirnvc17wubklucx6d","Finish Envelope",40,[],{"id":258,"documentId":259,"title":260,"sort":261,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":259,"routeId":259,"children":262},1150,"xup11xm3pvlk7lkvejly03t4","Get Signing Url",50,[],{"id":264,"documentId":265,"title":266,"sort":267,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":265,"routeId":265,"children":268},3156,"pgwry228y585ip83zux1m7ky","Query Envelope Details",60,[],{"id":270,"documentId":271,"title":272,"sort":273,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":271,"routeId":271,"children":274},1285,"n383yqr1z4cw0g2tncva1i9l","Cancel Envelope",70,[],{"id":276,"documentId":277,"title":278,"sort":279,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":277,"routeId":277,"children":280},1152,"kfn3jzvf0coqrmgsyal5s3h7","Resend Envelope",80,[],{"id":282,"documentId":283,"title":284,"sort":285,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":283,"routeId":283,"children":286},1151,"fsagl9dy4ybdzgef0sfek43a","Preview Envelope",90,[],{"id":288,"documentId":289,"title":290,"sort":291,"parent_id":232,"only_as_menu":228,"type":217,"nodeId":289,"routeId":289,"children":292},1266,"yohj3fn3f4ydc19bda85u0au","Create an Envelope Sender View",100,[],{"id":294,"documentId":295,"title":296,"sort":249,"parent_id":213,"only_as_menu":216,"type":217,"nodeId":295,"routeId":295,"children":297},458,"ouy9r6x8lqhj09nuza6s28kq","Document Management",[298,303,308,313,319,324,329],{"id":299,"documentId":300,"title":301,"sort":180,"parent_id":295,"only_as_menu":228,"type":217,"nodeId":300,"routeId":300,"children":302},1154,"uklome95b6imdx8l1s4kvpne","Upload Documents",[],{"id":304,"documentId":305,"title":306,"sort":207,"parent_id":295,"only_as_menu":228,"type":217,"nodeId":305,"routeId":305,"children":307},1160,"r3sk47rnpk5laxqcvasszzj7","Get Coordinates With Keywords",[],{"id":309,"documentId":310,"title":311,"sort":249,"parent_id":295,"only_as_menu":228,"type":217,"nodeId":310,"routeId":310,"children":312},3451,"dygf6h69qejdsxxzzi1zzetb","Download File",[],{"id":314,"documentId":315,"title":316,"sort":317,"parent_id":295,"only_as_menu":228,"type":217,"nodeId":315,"routeId":315,"children":318},3355,"b0uxzdvf2umyejj9td3go60x","Add Documents",30,[],{"id":320,"documentId":321,"title":322,"sort":255,"parent_id":295,"only_as_menu":228,"type":217,"nodeId":321,"routeId":321,"children":323},3387,"c2s5iyao8xl60jnu9fyld71b","Delete Documents",[],{"id":325,"documentId":326,"title":327,"sort":261,"parent_id":295,"only_as_menu":228,"type":217,"nodeId":326,"routeId":326,"children":328},1155,"mq2v1gptzmgbxdnpt2naew0z","Add Attachments",[],{"id":330,"documentId":331,"title":332,"sort":267,"parent_id":295,"only_as_menu":228,"type":217,"nodeId":331,"routeId":331,"children":333},1157,"pd7zcrwaudxp9n5nhmax66th","Delete Attachments",[],{"id":335,"documentId":336,"title":337,"sort":317,"parent_id":213,"only_as_menu":216,"type":217,"nodeId":336,"routeId":336,"children":338},459,"v8y4g3ok61tys8mwr0fjmq5g","Recipient Management",[339,344,349,354],{"id":340,"documentId":341,"title":342,"sort":180,"parent_id":336,"only_as_menu":228,"type":217,"nodeId":341,"routeId":341,"children":343},3307,"maun35qmz3kx9haku23zhmme","Add Signer",[],{"id":345,"documentId":346,"title":347,"sort":207,"parent_id":336,"only_as_menu":228,"type":217,"nodeId":346,"routeId":346,"children":348},1164,"xp595dh8tlzle8lt9bo3lyyt","Delete Signers",[],{"id":350,"documentId":351,"title":352,"sort":249,"parent_id":336,"only_as_menu":228,"type":217,"nodeId":351,"routeId":351,"children":353},2859,"h434ytbkhv0177b778achv7u","Add CC",[],{"id":355,"documentId":356,"title":357,"sort":317,"parent_id":336,"only_as_menu":228,"type":217,"nodeId":356,"routeId":356,"children":358},1163,"jw2f0dtk7ddfpbrwn2oo9rmc","Delete Cc Recipients",[],{"id":360,"documentId":361,"title":362,"sort":363,"parent_id":213,"only_as_menu":216,"type":217,"nodeId":361,"routeId":361,"children":364},3086,"qx2bl5kl3s0bwzvdkmzp71zh","Envelope Template",35,[365,371],{"id":366,"documentId":367,"title":368,"sort":369,"parent_id":361,"only_as_menu":228,"type":217,"nodeId":367,"routeId":367,"children":370},3093,"m53jxnuxwkayx1b7mnk3adca","View Envelope Template Details",0,[],{"id":372,"documentId":373,"title":374,"sort":207,"parent_id":361,"only_as_menu":228,"type":217,"nodeId":373,"routeId":373,"children":375},3120,"smkcnczbyllcva0e51xbud5p","Initiate Signing Using an Envelope Template",[],{"id":377,"documentId":378,"title":379,"sort":255,"parent_id":213,"only_as_menu":216,"type":217,"nodeId":378,"routeId":378,"children":380},3323,"ais40oqq7r11n67gc0vrbd3v","Template Management",[381,386,391,396,401],{"id":382,"documentId":383,"title":384,"sort":180,"parent_id":378,"only_as_menu":228,"type":217,"nodeId":383,"routeId":383,"children":385},3189,"s7f24t0vc3oh7xjc1vd54min","Get Signer Fields Detail",[],{"id":387,"documentId":388,"title":389,"sort":183,"parent_id":378,"only_as_menu":228,"type":217,"nodeId":388,"routeId":388,"children":390},1327,"pqznounxwcdqpjjlo427cp2v","Get Template Details",[],{"id":392,"documentId":393,"title":394,"sort":207,"parent_id":378,"only_as_menu":228,"type":217,"nodeId":393,"routeId":393,"children":395},1166,"nlabl9lmcchamxb4xb2sotgf","Generate Document By Template",[],{"id":397,"documentId":398,"title":399,"sort":249,"parent_id":378,"only_as_menu":228,"type":217,"nodeId":398,"routeId":398,"children":400},1169,"h6u1p3mm2q9jh22drwhx7w3x","Get Template List",[],{"id":402,"documentId":403,"title":404,"sort":317,"parent_id":378,"only_as_menu":228,"type":217,"nodeId":403,"routeId":403,"children":405},1167,"upq57humugxijzhzsfl01e2r","Get Document Generation Details",[],{"id":407,"documentId":408,"title":409,"sort":410,"parent_id":213,"only_as_menu":216,"type":217,"nodeId":408,"routeId":408,"children":411},1057,"r6a999am8z6ay9r6q78m9szt","Stamp Management",45,[412,417,422,427],{"id":413,"documentId":414,"title":415,"sort":180,"parent_id":408,"only_as_menu":228,"type":217,"nodeId":414,"routeId":414,"children":416},3339,"ap2udsj6jmd3f7nq1t2wtb6n","Create Stamps",[],{"id":418,"documentId":419,"title":420,"sort":183,"parent_id":408,"only_as_menu":228,"type":217,"nodeId":419,"routeId":419,"children":421},3467,"e27cq9n53oiassrm9dusczah","Edit Stamps",[],{"id":423,"documentId":424,"title":425,"sort":186,"parent_id":408,"only_as_menu":228,"type":217,"nodeId":424,"routeId":424,"children":426},1171,"nhodhim2gs6b0fnmhai68jl2","Delete Stamps",[],{"id":428,"documentId":429,"title":430,"sort":189,"parent_id":408,"only_as_menu":228,"type":217,"nodeId":429,"routeId":429,"children":431},1173,"za70ia3hau1jmhh1odey7648","Get Stamps List",[],{"id":433,"documentId":434,"title":435,"sort":436,"parent_id":213,"only_as_menu":216,"type":217,"nodeId":434,"routeId":434,"children":437},1307,"vjgy9wyqpueas3ifwl4sqtxo","Contract Compare",49,[438,443],{"id":439,"documentId":440,"title":441,"sort":180,"parent_id":434,"only_as_menu":228,"type":217,"nodeId":440,"routeId":440,"children":442},1315,"ncci0s4sdebcqnpez9hta140","Access the Contract Comparison Results Page",[],{"id":444,"documentId":445,"title":446,"sort":192,"parent_id":434,"only_as_menu":228,"type":217,"nodeId":445,"routeId":445,"children":447},3419,"czpws8dh6ef4ynxxwmgu796b","Query contract comparison details",[],{"id":449,"documentId":450,"title":451,"sort":261,"parent_id":213,"only_as_menu":228,"type":217,"nodeId":450,"routeId":450,"children":452},3483,"e3esec8grw834hdls3c5uket","Callback Events",[453,458,463,468,473,478,483,488,493,498,503],{"id":454,"documentId":455,"title":456,"sort":180,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":455,"routeId":455,"children":457},1235,"oqef89swtse7xva7ihxd4eah","Envelope Started",[],{"id":459,"documentId":460,"title":461,"sort":207,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":460,"routeId":460,"children":462},1036,"m2b3cny59zr2019zx101vlq6","Signer Signed",[],{"id":464,"documentId":465,"title":466,"sort":249,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":465,"routeId":465,"children":467},1033,"ktoxlvvrj5777zxi5oqoebun","All Signatories Signed",[],{"id":469,"documentId":470,"title":471,"sort":317,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":470,"routeId":470,"children":472},3403,"c4g7knax4y890stvlk89zrgl","Envelope Completed",[],{"id":474,"documentId":475,"title":476,"sort":363,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":475,"routeId":475,"children":477},1274,"z5a7ce3eu1vayhclx05l4boz","Envelope Signer Viewed",[],{"id":479,"documentId":480,"title":481,"sort":255,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":480,"routeId":480,"children":482},1039,"f6udt0g3kk1ty67u8o9dn0s3","Envelope Canceled",[],{"id":484,"documentId":485,"title":486,"sort":261,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":485,"routeId":485,"children":487},1042,"xn1qw8wfeosuql9e4qd983gx","Envelope Expired",[],{"id":489,"documentId":490,"title":491,"sort":267,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":490,"routeId":490,"children":492},1054,"hzf0ipligf96y2hsh4yrz8q7","Signing Interrupted",[],{"id":494,"documentId":495,"title":496,"sort":273,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":495,"routeId":495,"children":497},3435,"dkyp87hoikayfcnpi7misr3z","Document Generation Result",[],{"id":499,"documentId":500,"title":501,"sort":279,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":500,"routeId":500,"children":502},1325,"zcv1ch0olb5ecpzo2u7jfw0e","Contract Comparison Result",[],{"id":504,"documentId":505,"title":506,"sort":279,"parent_id":450,"only_as_menu":228,"type":217,"nodeId":505,"routeId":505,"children":507},1337,"il87aup17m7ydala24kjkhev","Envelope Delivery Failed",[],{"id":509,"documentId":510,"title":511,"sort":267,"parent_id":213,"only_as_menu":228,"type":217,"nodeId":510,"routeId":510,"children":512},704,"lqqpn7hfhf3xzgf2d9vz9h7u","Error Code",[],[514],{"id":515,"documentId":516,"title":517,"sort":180,"parent_id":215,"only_as_menu":216,"type":518,"nodeId":516,"routeId":516,"children":519},47,"kmxyx6s30cspdrb6lpq2vlmw","Developer Guide","document",[520,525,542,547],{"id":521,"documentId":522,"title":523,"sort":180,"parent_id":516,"only_as_menu":228,"type":518,"nodeId":522,"routeId":522,"children":524},796,"nqxvj8fpudh1phhwzjxyrqie","Getting Started",[],{"id":526,"documentId":527,"title":528,"sort":189,"parent_id":516,"only_as_menu":228,"type":518,"nodeId":527,"routeId":527,"children":529},797,"rwuzqa9wdd8ifr9d2psn2oll","ISV Ecosystem Partner Integration Guide",[530,536],{"id":531,"documentId":532,"title":533,"sort":534,"parent_id":527,"only_as_menu":228,"type":518,"nodeId":532,"routeId":532,"children":535},802,"stjk6a2euo5bb9rnu5xidl9y","OAuth 2.0 Authorization Code Flow Integration Guide",41,[],{"id":537,"documentId":538,"title":539,"sort":540,"parent_id":527,"only_as_menu":228,"type":518,"nodeId":538,"routeId":538,"children":541},803,"i640wop6allavqk5recnkqal","ISV Ecosystem Application API Scope Description",42,[],{"id":543,"documentId":544,"title":545,"sort":192,"parent_id":516,"only_as_menu":228,"type":518,"nodeId":544,"routeId":544,"children":546},808,"pu5by7nny465eng8uuhqfau6","Precautions",[],{"id":548,"documentId":549,"title":550,"sort":207,"parent_id":516,"only_as_menu":228,"type":518,"nodeId":549,"routeId":549,"children":551},809,"vfj16znziy18o17n4sc5y7ng","Webhook Events",[552,558,564,570,576,582,587,593],{"id":553,"documentId":554,"title":555,"sort":556,"parent_id":549,"only_as_menu":228,"type":518,"nodeId":554,"routeId":554,"children":557},202,"zf1p4cqkhirgzmjqq9pk0a3i","Envelope Start",11,[],{"id":559,"documentId":560,"title":561,"sort":562,"parent_id":549,"only_as_menu":228,"type":518,"nodeId":560,"routeId":560,"children":563},203,"fznrramnzm5xmc8xs34bqck1","Envelope Signer Signed",12,[],{"id":565,"documentId":566,"title":567,"sort":568,"parent_id":549,"only_as_menu":228,"type":518,"nodeId":566,"routeId":566,"children":569},208,"yiz759dqo68gqbyhvq2zfquk","All Signers Signed",13,[],{"id":571,"documentId":572,"title":573,"sort":574,"parent_id":549,"only_as_menu":228,"type":518,"nodeId":572,"routeId":572,"children":575},192,"caadherlspjkiayulikfh1og","Envelope Finish",14,[],{"id":577,"documentId":578,"title":579,"sort":580,"parent_id":549,"only_as_menu":228,"type":518,"nodeId":578,"routeId":578,"children":581},195,"wxwcvoo5k3tx99cf3at6iiwm","Envelope Cancel",15,[],{"id":583,"documentId":584,"title":486,"sort":585,"parent_id":549,"only_as_menu":228,"type":518,"nodeId":584,"routeId":584,"children":586},196,"anv65ys13nincm1kmfp7v512",16,[],{"id":588,"documentId":589,"title":590,"sort":591,"parent_id":549,"only_as_menu":228,"type":518,"nodeId":589,"routeId":589,"children":592},174,"fjy4rotdw8b6r66mkflvur4c","Signer Declined",110,[],{"id":594,"documentId":595,"title":506,"sort":596,"parent_id":549,"only_as_menu":228,"type":518,"nodeId":595,"routeId":595,"children":597},210,"gcgzjrnf215vhmixw7obvrtd",120,[],[],{"id":531,"documentId":532,"title":533,"content":600,"sort":534,"is_visible":216,"parent_id":527,"only_as_menu":228,"createdAt":601,"updatedAt":602,"publishedAt":603,"locale":91,"seo":604},"\u003Carticle class=\"4ever-article\" style=\"-webkit-text-stroke-width:0px;caret-color:rgb(0, 0, 0);color:rgb(0, 0, 0);font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-thickness:auto;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;\">\u003Ch2 style=\"font-size:18pt;line-height:20.4px;margin-bottom:9px;margin-left:0px;margin-top:21.333333px;text-align:left;text-indent:0px;\">\u003Cspan style=\"font-size:16pt;\">\u003Cspan data-type=\"text\">\u003Cstrong>Call Sequence\u003C/strong>\u003C/span>\u003C/span>\u003C/h2>\u003Cfigure class=\"image\">\u003Cimg src=\"https://static.esignglobal.com/image_4047164e07.png\" alt=\"image.png\" srcset=\"https://static.esignglobal.com/thumbnail_image_4047164e07.png 245w, https://static.esignglobal.com/small_image_4047164e07.png 500w, https://static.esignglobal.com/medium_image_4047164e07.png 750w\" sizes=\"100vw\" width=\"750\">\u003C/figure>\u003Ch2 style=\"font-size:18pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Overview\u003C/span>\u003C/h2>\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">OAuth 2.0 is a widely used authorization protocol that allows third-party applications to access user resources with user consent without exposing their credentials. In the OAuth 2.0 Authorization Code flow, the client must direct the user to the authorization server's Authorization Endpoint to obtain user authorization.\u003C/span>\u003C/p>\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">This document aims to detail how to construct and use the authorization URL according to the OAuth 2.0 protocol, providing practical examples and important notes.\u003C/span>\u003C/p>\u003Chr>\u003Ch2 style=\"font-size:18pt;line-height:20.4px;margin-bottom:9px;margin-left:0px;margin-top:21.333333px;text-align:left;text-indent:0px;\">\u003Cspan style=\"font-size:16pt;\">\u003Cspan data-type=\"text\">\u003Cstrong>1. Constructing the URL to Obtain an Authorization Code\u003C/strong>\u003C/span>\u003C/span>\u003C/h2>\u003Ch2 style=\"font-size:18pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Basic Structure of the Authorization URL\u003C/span>\u003C/h2>\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">The authorization URL is the URL used by the client to initiate a request to the authorization server. It consists of the following parts:\u003C/span>\u003C/p>\u003Cpre>\u003Ccode class=\"language-plaintext\" data-syntax=\"plaintext\" data-theme=\"default\">https://&lt;authorization-server-domain&gt;/oauth?\n    response_type=&lt;response_type&gt;&amp;\n    clientId=&lt;client_id&gt;&amp;\n    redirectUri=&lt;redirect_uri&gt;&amp;\n    scope=&lt;scope&gt;&amp;\n    state=&lt;state&gt;\u003C/code>\u003C/pre>\u003Ch3 style=\"font-size:14.5pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Parameter Description\u003C/span>\u003C/h3>\u003Cfigure class=\"table\" style=\"width:731px;\">\u003Ctable class=\"ck-table-resized\" style=\"border-collapse:collapse;table-layout:fixed;\">\u003Ccolgroup>\u003Ccol style=\"width:33.33%;\" width=\"216\">\u003Ccol style=\"width:33.33%;\" width=\"114\">\u003Ccol style=\"width:33.34%;\" width=\"401\">\u003C/colgroup>\u003Ctbody>\u003Ctr>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Parameter Name\u003C/span>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Required?\u003C/span>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Description\u003C/span>\u003C/p>\u003C/td>\u003C/tr>\u003Ctr>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">response_type\u003C/span>\u003C/code>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Required\u003C/span>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Authorization type, typically \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">code\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">(indicating the authorization code flow)\u003C/span>\u003C/p>\u003C/td>\u003C/tr>\u003Ctr style=\"height:41px;\">\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">clientId\u003C/span>\u003C/code>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Required\u003C/span>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Unique identifier of the client,\u003C/span>\u003Cspan style=\"color:rgb(0,0,0);font-size:12pt;\">\u003Cspan data-type=\"text\">i.e.&nbsp;APP ID\u003C/span>\u003C/span>\u003C/p>\u003C/td>\u003C/tr>\u003Ctr>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">redirectUri\u003C/span>\u003C/code>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Required\u003C/span>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Target URL for redirection after authorization, must match the callback URL registered during client registration.\u003C/span>\u003C/p>\u003C/td>\u003C/tr>\u003Ctr style=\"height:65px;\">\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">scope\u003C/span>\u003C/code>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Required\u003C/span>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Requested permission scope, currently supports\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">signature\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">、\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">stamp\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">、\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">comparisons\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">, after authorization, you can request existing eSign.AI openapis. Multiple scopes can be separated by spaces.\u003C/span>\u003C/p>\u003C/td>\u003C/tr>\u003Ctr>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">state\u003C/span>\u003C/code>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Optional\u003C/span>\u003C/p>\u003C/td>\u003Ctd style=\"border-color:rgb(0, 0, 0);overflow-wrap:break-word;overflow:hidden;padding:4px 8px;vertical-align:top;\" colspan=\"1\" rowspan=\"1\">\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Random string used to prevent CSRF attacks, generated by the client and verified for consistency during the callback.\u003C/span>\u003C/p>\u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/figure>\u003Chr>\u003Ch2 style=\"font-size:18pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Steps to construct the authorization URL\u003C/span>\u003C/h2>\u003Col style=\"list-style-type:decimal;\">\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Determine the authorization server address\u003C/strong> Sandbox environment: https://account-sml.esignglobal.com/oauth\u003C/span>\u003C/div>\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Production environment: https://account.esignglobal.com/oauth\u003C/span>\u003C/p>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Set parameter values\u003C/strong> Set the values of each parameter according to actual needs. The following is an example:\u003C/span>\u003C/div>\u003Cul style=\"list-style-type:circle;\">\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">response_type\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">: \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">code\u003C/span>\u003C/code>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">clientId\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">: \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">your-client-id-12345\u003C/span>\u003C/code>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">redirectUri\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">: \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">https://your-app.com/callback\u003C/span>\u003C/code>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">scope\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">: \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">signature\u003C/span>\u003C/code>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">state\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">: \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">random-state-value\u003C/span>\u003C/code>\u003C/div>\u003C/li>\u003C/ul>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Concatenate Query Parameters\u003C/strong> After appending the above parameters as key-value pairs to the authorization server address, use \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">&amp;\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> to join each parameter. Note that parameter values must be URL-encoded.\u003C/span>\u003C/div>\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Example concatenated result:\u003C/span>\u003C/p>\u003Cpre>\u003Ccode class=\"language-plaintext\" data-syntax=\"plaintext\" data-theme=\"default\">https://account-sml.esignglobal.com/oauth?\n    response_type=code&amp;\n    clientId=your-client-id-12345&amp;\n    redirectUri=https%3A%2F%2Fyour-app.com%2Fcallback&amp;\n    scope=signature&amp;\n    state=random-state-value\u003C/code>\u003C/pre>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Verify the concatenated result\u003C/strong> Ensure the concatenated address meets the following requirements:\u003C/span>\u003C/div>\u003Cul style=\"list-style-type:circle;\">\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Parameters can be in any order\u003C/span>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Parameter values are correctly URL-encoded\u003C/span>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">All required parameters are included\u003C/span>\u003C/div>\u003C/li>\u003C/ul>\u003C/li>\u003C/ol>\u003Cfigure class=\"image\">\u003Cimg src=\"https://static.esignglobal.com/2_4d2f50b136.png\" alt=\"2.png\" srcset=\"https://static.esignglobal.com/thumbnail_2_4d2f50b136.png 245w, https://static.esignglobal.com/small_2_4d2f50b136.png 500w, https://static.esignglobal.com/medium_2_4d2f50b136.png 750w, https://static.esignglobal.com/large_2_4d2f50b136.png 1000w\" sizes=\"100vw\" width=\"1000\">\u003C/figure>\u003Chr>\u003Ch2 style=\"font-size:18pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Example Code\u003C/span>\u003C/h2>\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Below are example codes for concatenating the authorization address in several common programming languages:\u003C/span>\u003C/p>\u003Ch3 style=\"font-size:14.5pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Python Example\u003C/span>\u003C/h3>\u003Cpre>\u003Ccode class=\"language-plaintext\" data-syntax=\"python\" data-theme=\"default\">import urllib.parse\n\n# 定义参数\nbase_url = \"https://account-sml.esignglobal.com/oauth\"\nparams = {\n    \"response_type\": \"code\",\n    \"clientId\": \"your-client-id-12345\",\n    \"redirectUri\": \"https://your-app.com/callback\",\n    \"scope\": \"signature\",\n    \"state\": \"random-state-value\"\n}\n\n# 拼接地址\nquery_string = urllib.parse.urlencode(params)\nauthorization_url = f\"{base_url}?{query_string}\"\nprint(authorization_url)\u003C/code>\u003C/pre>\u003Ch3 style=\"font-size:14.5pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">JavaScript Example\u003C/span>\u003C/h3>\u003Cpre>\u003Ccode class=\"language-plaintext\" data-syntax=\"javascript\" data-theme=\"default\">// 定义参数\nconst baseUrl = \"https://account-sml.esignglobal.com/oauth\";\nconst params = new URLSearchParams({\n    response_type: \"code\",\n    clientId: \"your-client-id-12345\",\n    redirectUri: \"https://your-app.com/callback\",\n    scope: \"signature\",\n    state: \"random-state-value\"\n});\n\n// 拼接地址\nconst authorizationUrl = `${baseUrl}?${params.toString()}`;\nconsole.log(authorizationUrl);\u003C/code>\u003C/pre>\u003Ch3 style=\"font-size:14.5pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Java Example\u003C/span>\u003C/h3>\u003Cpre>\u003Ccode class=\"language-plaintext\" data-syntax=\"java\" data-theme=\"default\">import java.net.URLEncoder;\nimport java.nio.charset.StandardCharsets;\n\npublic class OAuthUrlBuilder {\n\n    public static void main(String[ ] args) throws Exception {\n\n        // 定义参数\n        String baseUrl = \"https://account-sml.esignglobal.com/oauth\";\n        String responseType = \"code\";\n        String clientId = \"your-client-id-12345\";\n        String redirectUri = \"https://your-app.com/callback\";\n        String scope = \"signature\";\n        String state = \"random-state-value\";\n\n        // 拼接查询参数\n        String queryString = String.format(\n            \"response_type=%s&amp;clientId=%s&amp;redirectUri=%s&amp;scope=%s&amp;state=%s\",\n            URLEncoder.encode(responseType, StandardCharsets.UTF_8),\n            URLEncoder.encode(clientId, StandardCharsets.UTF_8),\n            URLEncoder.encode(redirectUri, StandardCharsets.UTF_8),\n            URLEncoder.encode(scope, StandardCharsets.UTF_8),\n            URLEncoder.encode(state, StandardCharsets.UTF_8)\n        );\n\n        // 生成完整的授权地址\n        String authorizationUrl = baseUrl + \"?\" + queryString;\n        System.out.println(authorizationUrl);\n    }\n}\u003C/code>\u003C/pre>\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">&nbsp;\u003C/p>\u003Chr>\u003Ch2 style=\"font-size:18pt;line-height:1.4;margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">Notes\u003C/span>\u003C/h2>\u003Cp style=\"margin-bottom:0px;margin-left:0px;margin-top:0px;text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">When constructing and using the authorization URL, please note the following points:\u003C/span>\u003C/p>\u003Col style=\"list-style-type:decimal;\">\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Correctness of URL Encoding\u003C/strong> All parameter values must be URL-encoded (\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">percent-encoding\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">), to ensure that special characters (such as \"\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">:\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">、\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">/\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">、\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">?\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> etc.) do not break the URL structure. For example,\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">https://your-app.com/callback\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> should be encoded as \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">https%3A%2F%2Fyour-app.com%2Fcallback\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">。\u003C/span>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Consistency of the Callback Address\u003C/strong>\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">redirect_uri\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> The parameter value must exactly match the callback address registered by the client on the authorization server, including the protocol (\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">http\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> or \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">https\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> ), hostname, port, and path. Otherwise, the authorization server will reject the request.\u003C/span>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">\u003Cstrong>state\u003C/strong>\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">\u003Cstrong> Security of the Parameter\u003C/strong>\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">state\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> The parameter is used to prevent Cross-Site Request Forgery (CSRF) attacks. The client should generate a random and unpredictable string, and after the user completes authorization, verify that the \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">state\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> value in the callback matches the originally sent value.\u003C/span>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Reasonableness of the Scope\u003C/strong>\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">scope\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> The parameter defines the permission scope requested by the client. A minimal scope should be selected based on actual needs to avoid over-requesting user resources, thereby enhancing user trust.\u003C/span>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Environment Separation\u003C/strong> During the development and testing phases, a sandbox environment is typically used (e.g., \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">account-sml.esignglobal.com\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">), after going live, you need to switch to the production environment (e.g., \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">account.esignglobal.com\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">), ensuring that the correct authorization server address is used in different environments.\u003C/span>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Processing Information After Successful Authorization\u003C/strong> After authorization is completed, the eSign.AI authorization service will use \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">redirect_uri\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">concatenate and return\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">code\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">and\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">baseUrl\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">, through\u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">baseUrl\u003C/span>\u003C/code>\u003Cspan data-type=\"text\">the data center where the authorizer's data resides can be identified. When executing OpenAPI requests, requests must be initiated based on the corresponding data center.\u003C/span>\u003C/div>\u003C/li>\u003Cli>\u003Cdiv style=\"text-align:left;text-indent:0px;\">\u003Cspan data-type=\"text\">\u003Cstrong>Error Handling\u003C/strong> If the user denies authorization or another error occurs, the authorization server will return via \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">redirect_uri\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> error information (such as \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">error\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> and \u003C/span>\u003Ccode data-type=\"inlineCode\">\u003Cspan data-type=\"text\">error_description\u003C/span>\u003C/code>\u003Cspan data-type=\"text\"> parameters), the client should properly handle these errors and provide clear feedback to the user.\u003C/span>\u003C/div>\u003C/li>\u003C/ol>\u003C/article>","2026-04-30T10:35:17.313Z","2026-05-22T02:50:34.831Z","2026-05-22T02:50:34.906Z",null]