CINXE.COM
<!DOCTYPE html><html lang="en-US"><head><title data-react-helmet="true">Sign a request and verify the signature | APIs | Alipay Docs</title> <meta charset="utf-8"> <meta name="description" content="stub"> <meta name="keywords" content=""> <meta name="robots" content="noarchive"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, viewport-fit=cover"> <meta property="og:title" content="Sign a request and verify the signature | APIs | Alipay Docs"> <meta property="og:description" content="stub"> <meta property="og:type" content="website"> <meta property="og:url" content="https://global.alipay.com/docs/ac/ams/digital_signature"> <meta property="og:image" content="https://cdn.nlark.com/yuque/0/2021/png/12884741/1627633137997-d0f84b86-8056-49a7-a4aa-d1297022f5ca.png?x-oss-process=image%2Fresize%2Cw_1500"> <link type="image/x-icon" rel="shortcut icon" href="https://mdn.alipayobjects.com/huamei_eng2uq/afts/img/A*bZceRJ5Wl24AAAAAAAAAAAAADk-uAQ/original"> <script> (function () { try { window.__context__ = window.IDOCS_THEME_CONTEXT = JSON.parse( decodeURIComponent("%7B%22timing%22%3A%7B%22backendStart%22%3A1732265013791%2C%22getSlugEnd%22%3A1732265013834%2C%22controllerStart%22%3A1732265013843%2C%22serviceFetchStart%22%3A1732265013935%2C%22getDbPageStart%22%3A1732265013961%2C%22getDbPageEnd%22%3A1732265013974%2C%22fetchCmsContentStart%22%3A1732265013974%2C%22handleYuqueDomStart%22%3A1732265013991%2C%22handleYuqueDomEnd%22%3A1732265014089%2C%22fetchCmsContentEnd%22%3A1732265014090%2C%22getDbRepoStart%22%3A1732265014090%2C%22getDbRepoEnd%22%3A1732265014223%2C%22pickTocStart%22%3A1732265014223%2C%22pickTocEnd%22%3A1732265014341%2C%22serviceFetchEnd%22%3A1732265014342%2C%22ssrComplete%22%3A1732265015378%7D%2C%22env%22%3A%22prod%22%2C%22portal%22%3A%7B%22id%22%3A%225d9ea1f9-d27e-4986-ab53-4cb22ba1a537%22%2C%22identifier%22%3A%22ac%22%2C%22home%22%3A%22https%3A%2F%2Fglobal.alipay.com%2Fdocs%2F%22%2C%22manageBySelf%22%3Atrue%2C%22siteTitle%22%3A%22Alipay%2C%20China's%20leading%20third-party%20online%20payment%20solution%22%2C%22pageTitleSuffix%22%3A%22Alipay%20Docs%22%2C%22logoUrl%22%3A%22https%3A%2F%2Fcdn.marmot-cloud.com%2Fstorage%2F2024%2F07%2F05%2Fb736168a-2196-49e3-b9b6-cc2fcaa56715.svg%22%2C%22logoUrlDark%22%3A%22https%3A%2F%2Fac.alipay.com%2Fstorage%2F2024%2F3%2F26%2Fd66c43c0-440d-4c97-9976-f2028a2c8c5e.svg%22%2C%22logoSize%22%3A%22width%3A%20auto%3B%20height%3A%2026px%3B%22%2C%22logoLink%22%3A%22%2Fdocs%2F%22%2C%22logoRightText%22%3A%22%22%2C%22copyrightMode%22%3A%22text%22%2C%22copyright%22%3A%22%3Cp%3E%C2%A9%202024%20Antom%3C%2Fp%3E%5Cn%3Cp%3E%3Ca%20href%3D%5C%22https%3A%2F%2Fglobal.alipay.com%2Fdocs%2Fac%2Fplatform%2Fmembership%5C%22%20target%3D%5C%22_blank%5C%22%3ELegal%20Information%3C%2Fa%3E%26nbsp%3B%3C%2Fp%3E%5Cn%3Cp%3E%3Ca%20href%3D%5C%22https%3A%2F%2Fwww.antom.com%2Fcontact-us%3Fsecondary%3DAntom_Docs%5C%22%20target%3D%5C%22_blank%5C%22%3EContact%20Sales%3C%2Fa%3E%26nbsp%3B%3C%2Fp%3E%5Cn%3Cp%3E%3Ca%20href%3D%5C%22https%3A%2F%2Fwww.antom.com%2F%3Fsecondary%3DAntom_Docs%5C%22%20target%3D%5C%22_blank%5C%22%3EAntom%20Portal%3C%2Fa%3E%26nbsp%3B%3C%2Fp%3E%5Cn%22%2C%22copyrightLogo%22%3A%22https%3A%2F%2Fmdn.alipayobjects.com%2Fhuamei_omsogl%2Fafts%2Fimg%2FA*ej6rQZPMv48AAAAAAAAAAAAADvW4AQ%2Foriginal%22%2C%22copyrightLogoDark%22%3A%22https%3A%2F%2Fmdn.alipayobjects.com%2Fhuamei_omsogl%2Fafts%2Fimg%2FA*DHRPR4pj66EAAAAAAAAAAAAADvW4AQ%2Foriginal%22%2C%22noHome%22%3Afalse%2C%22noFeedback%22%3Afalse%2C%22noHelpCenterFeedback%22%3Afalse%2C%22noDefaultSpmLog%22%3Afalse%2C%22searchInRepo%22%3Afalse%2C%22darkTheme%22%3Afalse%2C%22quickLinks%22%3A%5B%5D%2C%22quickLinksWording%22%3A%22%22%2C%22mdxLibList%22%3A%5B%7B%22name%22%3A%22%22%2C%22version%22%3A%22%22%2C%22url%22%3A%22https%3A%2F%2Fgw.alipayobjects.com%2Frender%2Fp%2Fyuyan_npm%2F%40alipay_mdx-lib-common%2F1.2.9%2Fdist%2Findex.umd.js%22%2C%22type%22%3A%22Script%22%7D%2C%7B%22name%22%3A%22%22%2C%22version%22%3A%22%22%2C%22url%22%3A%22https%3A%2F%2Fgw.alipayobjects.com%2Frender%2Fp%2Fyuyan_npm%2F%40alipay_mdx-lib-common%2F1.2.9%2Fdist%2Findex.umd.css%22%2C%22type%22%3A%22Css%22%7D%5D%2C%22isAdvancedNavigation%22%3Afalse%2C%22isStandardNavigation%22%3Afalse%2C%22hideTimestamp%22%3Afalse%2C%22theme%22%3A%7B%22id%22%3A%2225ef463c-d598-41e9-80d1-d416a2f5a8c5%22%2C%22gmtCreate%22%3A%222024-08-19T02%3A38%3A55.506Z%22%2C%22gmtModified%22%3A%222024-08-19T02%3A38%3A55.506Z%22%2C%22deleted%22%3A0%2C%22description%22%3A%22r20240819%22%2C%22version%22%3A62%2C%22status%22%3A%22PUBLISHED%22%2C%22themeBaseId%22%3A%227b577a2c-b180-4ff7-b9ac-46ae4ed7b257%22%2C%22commitId%22%3A%22d03893cccdf152cc2244459825acf245fa38da30%22%2C%22themeBase%22%3A%7B%22id%22%3A%227b577a2c-b180-4ff7-b9ac-46ae4ed7b257%22%2C%22gmtCreate%22%3A%222022-09-07T06%3A05%3A48.246Z%22%2C%22gmtModified%22%3A%222022-09-07T06%3A05%3A48.246Z%22%2C%22name%22%3A%22System%20default%20theme%22%2C%22description%22%3A%22%E7%B3%BB%E7%BB%9F%E9%BB%98%E8%AE%A4%E4%B8%BB%E9%A2%98%22%2C%22deleted%22%3A0%2C%22gitBase%22%3A%22https%3A%2F%2Fcode.alipay.com%2Fidocs%2Fidocs-theme-template%22%2C%22previewImg%22%3A%22https%3A%2F%2Fcdn.marmot-cloud.com%2Fstorage%2Fidocs87c36dc8dac653c1%2F2022%2F09%2F07%2Fa19fb1e2-31d9-49b6-bf2c-702e8d8dbb62.png%22%2C%22disableSystemCss%22%3Anull%2C%22disableSystemJs%22%3Anull%7D%7D%2C%22showWaterMark%22%3Afalse%2C%22hideSubscriptionTip%22%3Afalse%2C%22auth%22%3A%7B%22loginUrl%22%3A%22https%3A%2F%2Fdashboard.alipay.com%2Fglobal-payments%2Faccount%2Flogin%3Ffrom%3Ddocs%26goto%3Dhttps%253A%252F%252Fglobal.alipay.com%252Fdocs%252Fac%252Fams%252Fdigital_signature%22%2C%22isLogin%22%3Afalse%2C%22showLoginButton%22%3Atrue%2C%22loginText%22%3A%22Log%20In%22%2C%22logoutText%22%3A%22Log%20Out%22%2C%22repoBaseNeedLogin%22%3Afalse%7D%7D%2C%22apiOrigin%22%3A%22https%3A%2F%2Fidocs.alipay.com%22%2C%22user%22%3A%7B%7D%2C%22traceId%22%3A%222191316f17322650136664550ec48e%22%2C%22locale%22%3A%22en-US%22%2C%22isFramePage%22%3Afalse%2C%22region%22%3A%22sg%22%2C%22isBrowser%22%3Atrue%2C%22spaceTranslateConfig%22%3A%7B%22list%22%3A%5B%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22dfb064c7-cb72-4985-b550-4b926938a03b%22%2C%22slug%22%3A%22plugins%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Afalse%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%221509b6b5-1db5-4f88-8a00-ec70fb08560d%22%2C%22slug%22%3A%22ams%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%2C%7B%22locale%22%3A%22ja-jp%22%2C%22show%22%3Afalse%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22f03a9abf-cfb9-4421-ab3d-e12771ca9661%22%2C%22slug%22%3A%22ye0jvyfg%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Afalse%7D%5D%2C%22showLanguageSwitcher%22%3Afalse%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%221c79592b-c031-46d5-8997-99577bfe8620%22%2C%22slug%22%3A%22scantopay%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%224c3e8728-36c4-4a10-850d-985ae9fbbc04%22%2C%22slug%22%3A%22cashierpay%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%223d8ef452-3404-4912-8005-9ec8364be31f%22%2C%22slug%22%3A%22dispute%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%226f6485b6-846e-4b5f-9682-2c6bebeca36d%22%2C%22slug%22%3A%22reconcile%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%228a1ab57c-5c68-47a6-8f34-147ca688e8d8%22%2C%22slug%22%3A%22apo%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22138061c0-4449-49b2-a54d-39f152422512%22%2C%22slug%22%3A%22easypay%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%221c1dc029-e021-4cf2-a63a-5af0faf60986%22%2C%22slug%22%3A%22auto_debit%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%221c0f3044-e02b-4bbf-b5c9-c1246bf30922%22%2C%22slug%22%3A%22subscriptionpay%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%2218a75eef-0c63-4174-87ca-a0aac07ac21a%22%2C%22slug%22%3A%22sdks%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22abd87471-ffad-494d-911e-22e76dd39409%22%2C%22slug%22%3A%22merchant_service%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22546a3d9f-b19c-47ca-b1d0-1d2efbf83f4b%22%2C%22slug%22%3A%22ref%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%2295914c3c-0fed-474a-9942-cdbee513d4a0%22%2C%22slug%22%3A%22pm%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22ea7c715f-5c50-410a-9072-d6e2c0287859%22%2C%22slug%22%3A%22antomad%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22c148db6f-bba1-4128-9ec7-22baeac7d333%22%2C%22slug%22%3A%22revenuebooster%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%229404a9a6-fcc4-4676-a6fd-c55f073e6e8e%22%2C%22slug%22%3A%22combinedpay%22%7D%2C%7B%22repoBaseId%22%3A%220d917b9b-db16-486d-a5d1-7c3f7ff6242c%22%2C%22slug%22%3A%22flexiblesettlement%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22662136e6-e25c-40dc-8dd6-98d2f6d40efa%22%2C%22slug%22%3A%22payment_discrepancies%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22ac511cb8-5c78-4ec9-831b-f8e829a6c0b7%22%2C%22slug%22%3A%22support%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%2296a3f33d-70a8-45a2-a03b-5e48516074cc%22%2C%22slug%22%3A%22airpay%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%227c4b0b64-63b8-45a3-9b4a-392702b6c6e9%22%2C%22slug%22%3A%22antomop%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22f009e2a1-9c62-40f8-b04d-be78f9d39b1c%22%2C%22slug%22%3A%22risk_control%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%2C%7B%22sourceLocale%22%3A%22en-us%22%2C%22sourceRepoBaseList%22%3A%5B%7B%22repoBaseId%22%3A%22a728c5a8-5fbd-404a-a72a-5e6ec23429b4%22%2C%22slug%22%3A%22questions%22%7D%5D%2C%22targetLocales%22%3A%5B%7B%22locale%22%3A%22zh-cn%22%2C%22show%22%3Atrue%7D%5D%2C%22showLanguageSwitcher%22%3Atrue%7D%5D%7D%7D") ); } catch (e) {} })(); </script> <script> (function (spmAPos) { if (!spmAPos) return; window._idocs_tracert_config = { spma: spmAPos, debug: false, }; !(function () { var e = window; function n(n) { if (e.g_monitor && e.g_monitor.events) { var t = e.g_monitor.events; t.length < 20 && t.push(n); } } e.g_monitor = e.g_monitor || { listener: {}, events: [] }; var r = e.g_monitor.listener; function t(t, n) { try { e.addEventListener ? e.addEventListener(t, n, !0) : e.attachEvent ? e.attachEvent("on" + t, n) : (e[t] = n), (r[t] = n); } catch (n) { console.warn("Failed to register Tracert monitor event:" + t, n); } } r.error || t("error", n), r.unhandledrejection || t("unhandledrejection", n); })(); !(function (t, e, a, r, c) { (t.TracertCmdCache = t.TracertCmdCache || []), (t[c] = window[c] || { _isRenderInit: !0, call: function () { t.TracertCmdCache.push(arguments); }, start: function (t) { this.call("start", t); }, }), (t[c].l = new Date()); var n = e.createElement(a), s = e.getElementsByTagName(a)[0]; (n.async = !0), (n.src = r), s.parentNode.insertBefore(n, s); n.onerror = function () { console.warn( decodeURI( "Tracert%20%E8%84%9A%E6%9C%AC%E6%9C%AA%E6%88%90%E5%8A%9F%E5%8A%A0%E8%BD%BD,%20%E8%AF%B7%E6%A3%80%E6%9F%A5%E7%BD%91%E7%BB%9C%E4%BB%A5%E5%8F%8A%20A%20%E4%BD%8D%E6%98%AF%E5%90%A6%E5%9C%A8%E4%B9%9D%E8%89%B2%E9%B9%BF%E5%BB%BA%E7%AB%8B%E6%B4%9E%E5%AF%9F" ) ); var fallback = function () { console.warn( decodeURI( "Tracert%20%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E5%A4%B1%E8%B4%A5%EF%BC%8C%E8%AF%B7%E6%A3%80%E6%9F%A5%20JS%20%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%E5%BC%95%E5%85%A5" ) ); }; for ( var fnlist = [ "call", "start", "config", "logPv", "info", "err", "click", "expo", "pageName", "pageState", "time", "timeEnd", "parse", "checkExpo", "stringify", "report", "set", "before", ], i = 0; i < fnlist.length; i++ ) { t[c][fnlist[i]] = fallback; } }; })( window, document, "script", "https://ur.alipay.com/tracert_" + spmAPos + ".js", "Tracert" ); })("a1794"); </script> <!-- icem --> <script> window.cemClient=window.cemClient||function(){(cemClient.q=cemClient.q||[]).push(arguments)}; (function(i,c,e,m){ m=c.getElementsByTagName('head')[0]; var r=c.createElement('script');r.async=1; r.src=e+"034b2be1-2fbd-4acc-9623-f7eb20ecdbc1.js?q=2023.10.20"; m.appendChild(r); try { // 清除旧的环境变量 localStorage.removeItem('_CEM_ENV') } catch (e) {} /* remove language detection var language = 'default'; var userSettingLanguage = navigator.languages && navigator.languages[0]; var uiLanguage = navigator.language; if ( userSettingLanguage.indexOf('zh') !== -1 || userSettingLanguage.indexOf('cn') !== -1 || uiLanguage.indexOf('zh') !== -1 || uiLanguage.indexOf('cn') !== -1 ) { language = 'zh-CN'; } cemClient('setEnv', { language: language, }); */ })(window,document,'https://cdn.marmot-cloud.com/storage/cem-prod/sites/'); </script> <script>try{ window.__CEM_FEEDBACK_ID = 'eab518a8-83df-4e15-b065-d1ba7e8f9892' }catch(e){}</script> <style>.idocs-global-sider{z-index:100!important} .lake-image-mask{display:none!important}</style> <script src="https://gw.alipayobjects.com/render/p/yuyan_npm/@alipay_ams-chatbot/1.0.3/dist/idocs-chatbot-umd.js" async></script> <style> html[data-theme=light] .lake-codeblock-content pre { background: #f3f6f9!important; } </style> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WCCVNXQ3');</script> <!-- End Google Tag Manager --> <style>.idocs-global-mdx-container footer {display: none} .idocs-global-mdx-container div[class^='index_releaseNote__'] {display:none} </style> <style> div[class^="styles-module_themeSwitch__"] { display: none } div[class^="docBody___"] > h1 { font-size: 36px!important; } .idocs-mdx-right-pane { height: calc(100vh - 150px); overflow-y: auto; } .idocs-mdx-right-pane .ant-anchor-wrapper { height: 100%; max-height: 100% !important; } .idocs-mdx-yuque-content pre[class*=language-] { background-color: #263e52 !important; } .idocs-mdx-yuque .ant-table table { margin: 0 0 16px !important; border: none !important; border-bottom: 1px solid #f0f0f0 !important; } .idocs-mdx-yuque .ant-table .ant-table-header table { margin-bottom: 0 !important; border-bottom: none !important; } .idocs-mdx-yuque .ant-table table td, .idocs-mdx-yuque .ant-table table th { border: none !important; border-right: 1px solid #f0f0f0 !important; border-top: 1px solid #f0f0f0 !important; } .idocs-mdx-yuque .ant-table table th { background: #fafafa !important; white-space: normal!important; padding: 0!important; } .idocs-mdx-document-zh .idocs-mdx-paragraph{ font-size: 14px; } pre[class*=language-].line-numbers { padding-top: 5px!important; padding-bottom: 5px!important; } </style> <script> try { // close dark mode localStorage.setItem("IDOCS_THEME", "light"); }catch(e) {} </script> <link rel="stylesheet" href="https://gw.alipayobjects.com/a/idocs/umi.9b7cee85.css"> <script> window.routerBase = "/"; </script> <script> window.publicPath = window.resourceBaseUrl || "https://gw.alipayobjects.com/a/idocs/"; </script> <script> //! umi version: 3.5.43 </script> <script src="https://gw.alipayobjects.com/os/lib/react/16.14.0/umd/react.production.min.js"></script> <script src="https://gw.alipayobjects.com/os/lib/react-dom/16.14.0/umd/react-dom.production.min.js"></script> <script src="https://gw.alipayobjects.com/os/lib/moment/2.29.2/moment.js"></script> <script src="https://gw.alipayobjects.com/os/lib/antd/4.24.16/dist/antd.min.js"></script> <script src="https://gw.alipayobjects.com/render/p/yuyan_npm/@alipay_bailingual-sdk-glue/7.2.0/dist/index-umd.js"></script> </head> <body> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WCCVNXQ3" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <script> try { var theme = localStorage.getItem("IDOCS_THEME"); if (theme === "dark" || theme === "light") { window.document.documentElement.setAttribute("data-theme", theme); } // safari vh is full browser APP window, limit it to the inner container function calVH() { var vh = window.innerHeight * 0.01; document.documentElement.style.setProperty("--vh", vh + "px"); } calVH(); window.addEventListener("resize", calVH); } catch (e) { console.error(e); } </script> <div id="root"><link rel="stylesheet" href="https://cdn.marmot-cloud.com/idocs-theme/idocs-theme-template/2024/8/19/6054f3d9-68f9-4f59-8d14-249583451de6/index.css"/><div class="index_height100__VMS4z"><div style="top:0"><header style="top:0;border:0" class="index_headerWrapper__t0z6- idocs-global-header"><div class="index_header__J7j94 idocs-global-header-inner"><div class="index_logo__DZAZU"><a href="/docs/"><img src="https://ac.alipay.com/storage/2024/3/26/d66c43c0-440d-4c97-9976-f2028a2c8c5e.svg" class="index_logoImgDark__xlFyN" alt="Alipay, China's leading third-party online payment solution" style="width:auto;height:26px"/><img src="https://cdn.marmot-cloud.com/storage/2024/07/05/b736168a-2196-49e3-b9b6-cc2fcaa56715.svg" class="index_logoImgLight__5NKEJ" alt="Alipay, China's leading third-party online payment solution" style="width:auto;height:26px"/></a></div></div></header></div><div class="undefined index_height100__VMS4z"><div class="index_container__TJvnT idocs-global-container idocs-global-normal-container"><div class="index_center__ehSWF idocs-global-index-center " style="max-width:none"><aside class="index_aside__CJ4HW "><div class="index_collapse-btn__a5OuO"><span role="img" aria-label="caret-left" class="anticon anticon-caret-left"><svg viewBox="0 0 1024 1024" focusable="false" data-icon="caret-left" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M689 165.1L308.2 493.5c-10.9 9.4-10.9 27.5 0 37L689 858.9c14.2 12.2 35 1.2 35-18.5V183.6c0-19.7-20.8-30.7-35-18.5z"></path></svg></span></div><div class="index_asideInner__TJCMW idocs-global-aside"><div class="index_home__VZiM1"><a href="../../"><svg class="icon icon-arrow-back" viewBox="0 0 6 10" width="6px" height="10px"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-11.000000, -95.000000)" fill="currentColor"><g transform="translate(0.000000, 65.000000)"><g transform="translate(0.000000, 24.000000)"><g transform="translate(8.000000, 0.000000)"><g transform="translate(0.000000, 5.000000)"><path d="M7.5001875,10.5001875 C7.3081875,10.5001875 7.1161875,10.4266875 6.9699375,10.2804375 L3.2199375,6.5304375 C2.9266875,6.2371875 2.9266875,5.7631875 3.2199375,5.4699375 L6.9699375,1.7199375 C7.2631875,1.4266875 7.7371875,1.4266875 8.0304375,1.7199375 C8.3236875,2.0131875 8.3236875,2.4871875 8.0304375,2.7804375 L4.8106875,6.0001875 L8.0304375,9.2199375 C8.3236875,9.5131875 8.3236875,9.9871875 8.0304375,10.2804375 C7.8841875,10.4266875 7.6921875,10.5001875 7.5001875,10.5001875"></path></g></g></g></g></g></g></svg>Go to Homepage</a></div><div class="index_repoName__1VoMo index_withLine__cMLcO" title="APIs"><span class="index_withLineInner__bV2ld">APIs</span></div><div class=" style_dir-item__munV5 style_dir-level-0__gx1cN "><b class="style_triangle__W-q2X style_triangle-down__zq4cM" style="left:14px"></b><span class=""><a href="/docs/ac/ams/api" class="index_itemWrap__g-0ND" data-id="3b9037c9-a5b2-41ea-87ff-e264fa04a2f1"><span class="index_tipsNode__prVPQ "><span class="index_linkNode__pEBfL">Antom APIs</span></span></a></span></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC " style="background-color:var(--aside-bg-collapse-color)"><span class=""><a href="/docs/ac/ams/api_fund" class="index_itemWrap__g-0ND" data-id="32b75f63-3ed1-49bd-b619-411e1dc45881"><span class="index_tipsNode__prVPQ "><span class="index_linkNode__pEBfL">Overview</span></span></a></span></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC " style="background-color:var(--aside-bg-collapse-color)"><span class=""><a href="/docs/ac/ams/idempotency" class="index_itemWrap__g-0ND" data-id="08ddfee8-fbb3-432c-a113-a974ba54711e"><span class="index_tipsNode__prVPQ "><span class="index_linkNode__pEBfL">Idempotency</span></span></a></span></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC " style="background-color:var(--aside-bg-collapse-color)"><span class=""><a href="/docs/ac/ams/me" class="index_itemWrap__g-0ND" data-id="b7e49af3-93a7-47dc-8754-0941acc9698a"><span class="index_tipsNode__prVPQ "><span class="index_linkNode__pEBfL">Message encoding</span></span></a></span></div><div class=" style_dir-item__munV5 style_dir-item-selected__DCeRu style_dir-level-1__NvUIC style_dir-item-collapse__TNneF "><span class=""><a href="/docs/ac/ams/digital_signature" class="index_itemWrap__g-0ND" data-id="4edbcd65-adbb-4f17-a0e8-95909bcea77e"><span class="index_tipsNode__prVPQ "><span class="index_linkNode__pEBfL">Sign a request and verify the signature</span></span></a></span></div><div class=" style_dir-item__munV5 style_dir-level-0__gx1cN style_dir-item-bold__YE6fV "><b class="style_triangle__W-q2X style_triangle-right__44M3U" style="left:14px"></b><span class=""><span class="index_itemWrap__g-0ND">Online payments</span></span></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-0__gx1cN style_dir-item-bold__YE6fV "><b class="style_triangle__W-q2X style_triangle-right__44M3U" style="left:14px"></b><span class=""><span class="index_itemWrap__g-0ND">In-store payments</span></span></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-1__NvUIC style_dir-item-bold__YE6fV "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div><div class=" style_dir-item__munV5 style_dir-level-2__y5WEA "></div></div></aside><main class="index_main__pHUcM index_hasRightNav__4ra7c idocs-global-main-with-toc" style="padding-left:264px;width:0"><article class="index_content__erxKk index_hasCopyRight__CySpq idocs-global-content"><div class="index_contentInner__-mCVX idocs-global-content-inner"><div class="docBody___3IKTH"><h1 class="title___1XlO5 anchored___1cJEP "><span class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span><span>Sign a request and verify the signature</span></span></h1><div class="updateDate___sDIFL"><time style="color:var(--page-bg-color)" dateTime="2024-07-12T03:58:03.000Z">2024-07-12 03:58</time></div><div class="content___JoaoD yuqueContent___1-m6i"><div><div></div><div><div class="lake-content-editor-core lake-engine lake-typography-traditional" data-lake-element="root" data-selection-undefined="%7B%22path%22%3A%5B%5B21%2C0%2C1%2C0%5D%2C%5B21%2C0%2C1%2C2%5D%5D%2C%22active%22%3Atrue%7D"><p data-lake-id="43c26b2beaa8b57ea860ebcd9790d42a" id="u645ffa10" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>To ensure the authenticity and integrity of data after transmission, Antom requires all requests to be signed and the signatures to be verified:</span></p><ul data-lake-id="e336f46e93ca780125628a8e725cc592" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="c8d9d13eb3efe2abcf87b7963a9d352b" style="text-align:left"><span>When calling an API, you must sign the request sent to Antom and verify the Antom response signature accordingly.</span></li><li data-lake-id="7c8232f63a2e7c4f5963d08a24956ac5" style="text-align:left"><span>When receiving a notification, you must verify </span>the signature of the received notification<span>. However, you do not need to sign the response for the notification.</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px"><br/></span></li></ul><p data-lake-id="04d7c7f19c4740a3923d51295ceec791" id="uc445bb2c" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">Using Antom libraries </span><span class="lake-fontsize-11" style="color:rgba(0, 0, 0, 0.82);font-size:14px" data-mce-style="font-size: 11px">for request signing and signature verification</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px"> can </span><span class="lake-fontsize-11" style="color:rgba(0, 0, 0, 0.82);font-size:14px" data-mce-style="font-size: 11px">significantly streamline your programming tasks</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px"> and </span><span class="lake-fontsize-11" style="color:rgba(0, 0, 0, 0.82);font-size:14px" data-mce-style="font-size: 11px">expedite the process of adding and validating API signatures</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">. For more details about using Antom libraries for signing and signature verification, see </span><a href="#fFobR"><span>Use Antom libraries</span></a><span class="lake-fontsize-11" style="color:rgba(0, 0, 0, 0.82);font-size:14px" data-mce-style="font-size: 11px">.</span></p><p data-lake-id="17b775aa394dbbe4aaaca0f25bc7b6b3" id="u5c7303cd" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span class="lake-fontsize-11" style="color:rgba(0, 0, 0, 0.82);font-size:14px" data-mce-style="font-size: 11px">If you prefer not to use Antom </span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">libraries</span><span class="lake-fontsize-11" style="color:rgba(0, 0, 0, 0.82);font-size:14px" data-mce-style="font-size: 11px">, you can </span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">sign a request and verify the signature by customized coding, see </span><a href="#nHS7r"><span>Customized coding</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">.</span></p><h1 data-lake-id="65800518eaab34281fa84bd88c4cb9e7" id="fFobR" style="padding:0px;font-weight:700;font-size:32px;line-height:44px;margin:32px 0px 16px" class="anchored___1cJEP h1 "><span data-id="fFobR" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Use Antom </span>libraries<span style="color:rgba(0, 0, 0, 0.82)"><br/></span></h1><p data-lake-id="d4782f86396eda0dd532e2b8160f7cdf" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span style="color:rgba(0, 0, 0, 0.82)">This section guides you on using Antom libraries to sign a request and verify the signature when calling an API and receiving a notification from Antom. </span><span style="color:rgba(0, 0, 0, 0.82)">All available Antom libraries can be found in</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px"> </span><a href="https://global.alipay.com/docs/sdks" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">SDKs</span></a><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">.</span></p><h2 data-lake-id="5033f7debedf00f83de2fc1a54a71de4" id="M0MNp" style="padding:0px;font-weight:700;font-size:28px;line-height:38px;margin:32px 0px 16px" class="anchored___1cJEP h2 "><span data-id="M0MNp" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span style="color:rgba(4, 15, 36, 0.85)">Call an API</span></h2><p data-lake-id="c621eb3a8d82872b176276358aba344c" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>Before calling an API, ensure that you have generated </span><span style="color:rgba(0, 0, 0, 0.82)">a pair of asymmetric public and private keys on the</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px"> </span><a href="https://dashboard.alipay.com/global-payments/developers/quickStart" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Antom Dashboard</span></a><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">. </span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">For more information, see</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px"> </span><a href="https://global.alipay.com/docs/dashboard_en#D584U" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Generate keys</span></a><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">.</span></p><h3 id="xL0ny" data-lake-id="397a4eea521433dd004287251c52ee8f" style="padding:0px;font-weight:700;font-size:24px;line-height:33px;margin:32px 0px 16px" class="anchored___1cJEP h3 "><span data-id="xL0ny" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span style="color:#000000">Send Request & Handle Response</span></h3><p data-lake-id="b1d2a3df7bab10e7886a833f5c8f3c0d" id="u5310f9f2" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">If you make an API call using Antom libraries, the signing and verification process will be done automatically. Taking Java as an example, follow these steps to use Antom libraries:</span></p><ol data-lake-id="9a73d6556d0c8bd2b0146b3050f14dbf" start="1" lake-indent="0" style="list-style-type:decimal;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="cc463f0c8926fdccf0efae5b58b140d0">Add Maven dependency</li><li data-lake-id="5a7c95fe9b37ec3a42ffa606b06b6251">Send a request and verify the signature</li></ol><h4 data-lake-id="35a3a7614e66e368bdcdf5b9ff532ce7" id="3Omfk" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="3Omfk" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span>1. Add maven dependency:</h4><blockquote style="line-height:1.74;margin-top:5px;margin-bottom:5px;padding-left:1em;margin-left:0px;border-left:3px solid rgb(238, 238, 238);opacity:0.6"><p data-lake-id="b5d85dd161e760f2f18a6b27ef56a836" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px">You can find the latest version on <a href="https://github.com/alipay/global-open-sdk-java" target="_blank">GitHub</a>.<br/></p></blockquote><div data-card-type="block" data-lake-card="codeblock" id="O4aby" class="lake-card-margin-top lake-card-margin-bottom" data-language="xml" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code><span class="hljs-tag"><<span style="color:#e45649">dependency</span>></span> <span class="hljs-tag"><<span style="color:#e45649">groupId</span>></span>com.alipay.global.sdk<span class="hljs-tag"></<span style="color:#e45649">groupId</span>></span> <span class="hljs-tag"><<span style="color:#e45649">artifactId</span>></span>global-open-sdk-java<span class="hljs-tag"></<span style="color:#e45649">artifactId</span>></span> <span class="hljs-tag"><<span style="color:#e45649">version</span>></span>{latest_version}<span class="hljs-tag"></<span style="color:#e45649">version</span>></span> <span class="hljs-tag"></<span style="color:#e45649">dependency</span>></span></code></pre></div></div></div></div><h4 data-lake-id="9d6711b588f4fd52a02d45cf06a430b1" id="MU9In" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="MU9In" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span>2. Send a request and verify the signature</h4><p data-lake-id="324e702b8d652d55b78377ce2da01617" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px">The following code sample shows how to use Java to send a request and verify the signature:</p><div data-card-type="block" data-lake-card="codeblock" id="N5ezD" class="lake-card-margin-top lake-card-margin-bottom" data-language="java" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code><span style="color:#a626a4">import</span> java.util.UUID; <span style="color:#a626a4">import</span> org.springframework.web.bind.annotation.RequestMapping; <span style="color:#a626a4">import</span> org.springframework.web.bind.annotation.RestController; <span style="color:#a626a4">import</span> com.alipay.global.api.AlipayClient; <span style="color:#a626a4">import</span> com.alipay.global.api.DefaultAlipayClient; <span style="color:#a626a4">import</span> com.alipay.global.api.exception.AlipayApiException; <span style="color:#a626a4">import</span> com.alipay.global.api.model.ams.*; <span style="color:#a626a4">import</span> com.alipay.global.api.model.constants.EndPointConstants; <span style="color:#a626a4">import</span> com.alipay.global.api.request.ams.pay.AlipayPayRequest; <span style="color:#a626a4">import</span> com.alipay.global.api.response.ams.pay.AlipayPayResponse; <span style="color:#4078f2">@RestController</span> <span style="color:#a626a4">public</span> <span class="hljs-class"><span style="color:#a626a4">class</span> <span style="color:#4078f2">PaymentByAntomLibrary</span> </span>{ <span style="color:#a0a1a7;font-style:italic">/** * replace with your client id * find your client id here: <a href="https://dashboard.alipay.com/global-payments/developers/quickStart">quickStart</a> */</span> <span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">final</span> String CLIENT_ID = <span style="color:#50a14f">""</span>; <span style="color:#a0a1a7;font-style:italic">/** * replace with your antom public key (used to verify signature) * find your antom public key here: <a href="https://dashboard.alipay.com/global-payments/developers/quickStart">quickStart</a> */</span> <span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">final</span> String ANTOM_PUBLIC_KEY = <span style="color:#50a14f">""</span>; <span style="color:#a0a1a7;font-style:italic">/** * replace with your private key (used to sign) * please ensure the secure storage of your private key to prevent leakage */</span> <span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">final</span> String MERCHANT_PRIVATE_KEY = <span style="color:#50a14f">""</span>; <span style="color:#a626a4">private</span> <span style="color:#a626a4">final</span> <span style="color:#a626a4">static</span> AlipayClient CLIENT = <span style="color:#a626a4">new</span> DefaultAlipayClient( EndPointConstants.SG, MERCHANT_PRIVATE_KEY, ANTOM_PUBLIC_KEY, CLIENT_ID); <span style="color:#4078f2">@RequestMapping</span>(<span style="color:#50a14f">"/pay"</span>) <span class="hljs-function"><span style="color:#a626a4">public</span> Object <span style="color:#4078f2">pay</span><span class="hljs-params">()</span> </span>{ AlipayPayRequest alipayPayRequest = composePayRequest(); AlipayPayResponse alipayPayResponse = <span style="color:#a626a4">null</span>; <span style="color:#a626a4">try</span> { <span style="color:#a0a1a7;font-style:italic">// automatically sign and verify</span> alipayPayResponse = CLIENT.execute(alipayPayRequest); } <span style="color:#a626a4">catch</span> (AlipayApiException e) { String errorMsg = e.getMessage(); <span style="color:#a0a1a7;font-style:italic">// handle error condition</span> } <span style="color:#a626a4">return</span> alipayPayResponse; } <span class="hljs-function"><span style="color:#a626a4">private</span> AlipayPayRequest <span style="color:#4078f2">composePayRequest</span><span class="hljs-params">()</span> </span>{ AlipayPayRequest alipayPayRequest = <span style="color:#a626a4">new</span> AlipayPayRequest(); alipayPayRequest.setProductCode(ProductCodeType.CASHIER_PAYMENT); <span style="color:#a0a1a7;font-style:italic">// replace with your paymentRequestId</span> String paymentRequestId = UUID.randomUUID().toString(); alipayPayRequest.setPaymentRequestId(paymentRequestId); <span style="color:#a0a1a7;font-style:italic">// set amount</span> Amount amount = Amount.builder().currency(<span style="color:#50a14f">"SGD"</span>).value(<span style="color:#50a14f">"4200"</span>).build(); alipayPayRequest.setPaymentAmount(amount); <span style="color:#a0a1a7;font-style:italic">// set paymentMethod</span> PaymentMethod paymentMethod = PaymentMethod.builder().paymentMethodType(<span style="color:#50a14f">"PAYNOW"</span>).build(); alipayPayRequest.setPaymentMethod(paymentMethod); <span style="color:#a0a1a7;font-style:italic">// replace with your orderId</span> String orderId = UUID.randomUUID().toString(); <span style="color:#a0a1a7;font-style:italic">// set buyer info</span> Buyer buyer = Buyer.builder().referenceBuyerId(<span style="color:#50a14f">"yourBuyerId"</span>).build(); <span style="color:#a0a1a7;font-style:italic">// set order info</span> Order order = Order.builder().referenceOrderId(orderId) .orderDescription(<span style="color:#50a14f">"antom testing order"</span>).orderAmount(amount).buyer(buyer).build(); alipayPayRequest.setOrder(order); <span style="color:#a0a1a7;font-style:italic">// set env info</span> Env env = Env.builder().terminalType(TerminalType.WEB).build(); alipayPayRequest.setEnv(env); <span style="color:#a0a1a7;font-style:italic">// replace with your notify url</span> alipayPayRequest.setPaymentNotifyUrl(<span style="color:#50a14f">"https://www.yourNotifyUrl.com"</span>); <span style="color:#a0a1a7;font-style:italic">// replace with your redirect url</span> alipayPayRequest.setPaymentRedirectUrl(<span style="color:#50a14f">"https://www.yourMerchantWeb.com"</span>); <span style="color:#a626a4">return</span> alipayPayRequest; } }</code></pre></div></div></div></div><h2 data-lake-id="300284f1229a298f4b2f6b3eb5670c7f" id="tQ2qu" style="padding:0px;font-weight:700;font-size:28px;line-height:38px;margin:32px 0px 16px" class="anchored___1cJEP h2 "><span data-id="tQ2qu" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span style="color:rgba(4, 15, 36, 0.85)">Receive a notification</span></h2><p data-lake-id="38ddf95f1cb4158b009075f678879e4a" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">After receiving a notification from Antom, verify the signature of the request. The process of verifying the request signature is similar to the process introduced in the </span><a href="#xL0ny">Send Request & Handle Response</a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> section. </span>Follow these steps <span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">to verify the signature:</span></p><ol data-lake-id="9f5c260226ba04e6596347f483847c6f" lake-indent="0" style="list-style-type:decimal;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="c90660c8932196f66521570d672ae28e"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Obtain the Antom public key for the request </span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">to verify the signature.</span></li><li data-lake-id="0a19b4e297216c57f719f0d5f2c9afd4"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Get the </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">request-time</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">、</span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">client-id</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">、</span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">signature</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> from the request header.</span></li><li data-lake-id="42d123947bf63e6a73c222ae2225d4f5"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Verify the signature.</span></li></ol><p data-lake-id="6d9da842a83534041ba32976fedeab29" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">The following code sample shows how to use Java to </span>verify the signature<span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">:</span></p><div data-card-type="block" data-lake-card="codeblock" id="x45DU" class="lake-card-margin-top lake-card-margin-bottom" data-language="java" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code><span style="color:#a626a4">import</span> javax.servlet.http.HttpServletRequest; <span style="color:#a626a4">import</span> org.springframework.http.ResponseEntity; <span style="color:#a626a4">import</span> org.springframework.web.bind.annotation.PostMapping; <span style="color:#a626a4">import</span> org.springframework.web.bind.annotation.RequestBody; <span style="color:#a626a4">import</span> org.springframework.web.bind.annotation.RestController; <span style="color:#a626a4">import</span> com.alipay.global.api.model.Result; <span style="color:#a626a4">import</span> com.alipay.global.api.model.ResultStatusType; <span style="color:#a626a4">import</span> com.alipay.global.api.response.AlipayResponse; <span style="color:#a626a4">import</span> com.alipay.global.api.tools.WebhookTool; <span style="color:#4078f2">@RestController</span> <span style="color:#a626a4">public</span> <span class="hljs-class"><span style="color:#a626a4">class</span> <span style="color:#4078f2">PaymentNotifyHandleByAntomLibrary</span> </span>{ <span style="color:#a0a1a7;font-style:italic">/** * replace with your antom public key (used to verify signature) * find your antom public key here: <a href="https://dashboard.alipay.com/global-payments/developers/quickStart">quickStart</a> */</span> <span style="color:#a626a4">private</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">final</span> String SERVER_PUBLIC_KEY = <span style="color:#50a14f">"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtERCOmPp2N/lIqamK/FqSzHOaPhzWamQhacIfnj+auDp10xhGESQDUsrUFnWBC6LVdJVhfsJVeyHKr6ciaAATEHhicCoNAzZw5Vp8lrIUXXtArqAHZJu7ow7rVNXJ64WD/gYQANCtlnvOMIlv5bA7pX6ORepjtc4TTZStskA/ffRShconhILjYUxdzadU6FCER88i7eVJpDAHdhtN5Nwwlh/zfJGGyEbav1DpwatexxkwqB6Qj0nYJ2Iv+8OOhZMZqdFv5AHyj4u+c4T4d+8y7lySkmCIIIzhwMM7ykglAwXiHOenLA23OGjG5nqxtzRQ9cfdhdJx9Ih2XvG3yOJdQIDAQAB"</span>; <span style="color:#a0a1a7;font-style:italic">/** * payment result notify processor * using <a href="https://spring.io">Spring Framework</a> * * <span style="color:#a626a4">@param</span> request HttpServletRequest * <span style="color:#a626a4">@param</span> notifyBody notify body * <span style="color:#a626a4">@return</span> */</span> <span style="color:#4078f2">@PostMapping</span>(<span style="color:#50a14f">"/pay/notify/antom"</span>) <span class="hljs-function"><span style="color:#a626a4">public</span> Object <span style="color:#4078f2">payNotifyHandler</span><span class="hljs-params">(HttpServletRequest request, @RequestBody String notifyBody)</span> </span>{ <span style="color:#a0a1a7;font-style:italic">// retrieve the required parameters from http request.</span> String requestUri = request.getRequestURI(); String requestMethod = request.getMethod(); <span style="color:#a0a1a7;font-style:italic">// retrieve the required parameters from request header.</span> String requestTime = request.getHeader(<span style="color:#50a14f">"request-time"</span>); String clientId = request.getHeader(<span style="color:#50a14f">"client-id"</span>); String signature = request.getHeader(<span style="color:#50a14f">"signature"</span>); Result result; AlipayResponse response = <span style="color:#a626a4">new</span> AlipayResponse(); <span style="color:#a626a4">try</span> { <span style="color:#a0a1a7;font-style:italic">// verify the signature of notification</span> <span style="color:#a626a4">boolean</span> verifyResult = WebhookTool.checkSignature(requestUri, requestMethod, clientId, requestTime, signature, notifyBody, SERVER_PUBLIC_KEY); <span style="color:#a626a4">if</span> (!verifyResult) { <span style="color:#a626a4">throw</span> <span style="color:#a626a4">new</span> RuntimeException(<span style="color:#50a14f">"Invalid notify signature"</span>); } <span style="color:#a0a1a7;font-style:italic">// deserialize the notification body</span> <span style="color:#a0a1a7;font-style:italic">// update the record status with notify result</span> <span style="color:#a0a1a7;font-style:italic">// respond the server that the notification is received</span> result = <span style="color:#a626a4">new</span> Result(<span style="color:#50a14f">"SUCCESS"</span>, ResultStatusType.S, <span style="color:#50a14f">"success"</span>); } <span style="color:#a626a4">catch</span> (Exception e) { String errorMsg = e.getMessage(); <span style="color:#a0a1a7;font-style:italic">// handle error condition</span> result = <span style="color:#a626a4">new</span> Result(<span style="color:#50a14f">"ERROR"</span>, ResultStatusType.F, errorMsg); } response.setResult(result); <span style="color:#a626a4">return</span> ResponseEntity.ok().body(response); } }</code></pre></div></div></div></div><h1 data-lake-id="3ad9fd1ba910332defc8cdf9fc64938a" id="nHS7r" style="padding:0px;font-weight:700;font-size:32px;line-height:44px;margin:32px 0px 16px" class="anchored___1cJEP h1 "><span data-id="nHS7r" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span>C<span>ustomized coding</span></h1><p data-lake-id="da2b4e0083dd19674faa0350dbd82e61" id="u1b9eb1f1" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>Before you begin, gain a basic understanding of the </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#tLLkc" target="_blank"><span>Antom message structure</span></a><span>.</span></p><h2 data-lake-id="5dd1ac3681f5ef5e36011df453692be2" id="dc20x" style="padding:0px;font-weight:700;font-size:28px;line-height:38px;margin:32px 0px 16px" class="anchored___1cJEP h2 "><span data-id="dc20x" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Call an API</span></h2><p data-lake-id="5a170b86df7ce569ec6a36cf92a167b0" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>Before calling an API, ensure that you have generated </span><span style="color:rgba(0, 0, 0, 0.82)">a pair of asymmetric public and private keys on the</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px"> </span><a href="https://dashboard.alipay.com/global-payments/developers/quickStart" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Antom Dashboard</span></a><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">. </span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">For more information, see</span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px"> </span><a href="https://global.alipay.com/docs/dashboard_en#D584U" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Generate keys</span></a><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">.</span></p><h3 data-lake-id="1ad2c78f58fc26acbbcb9441b25634c2" id="dwyM8" style="padding:0px;font-weight:700;font-size:24px;line-height:33px;margin:32px 0px 16px" class="anchored___1cJEP h3 "><span data-id="dwyM8" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Sign a request</span></h3><p id="751914246324e4caaebb786be69a7273" data-lake-id="d578d9ef2d711b4993d35310ea8b02f5" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The following figure shows how to sign a request:</span></p><p data-lake-id="f00fa9aca398d7ad8c0459bbf4ca28aa" style="text-align:center;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span data-card-type="inline" data-lake-card="image" style="display:block"><img alt="image.png" data-role="image" src="https://ac.alipay.com/storage/2020/5/11/793a3d8d-5270-405b-9362-e6a670b9c842.png" data-raw-src="" title="image.png" data-height="296px" style="visibility:visible;width:585px;border:1px solid rgb(229, 229, 229)" class="docs-image" data-src="https://idocs-assets.marmot-cloud.com/storage/idocs87c36dc8dac653c1/1664440939174-81dee3b9-1fe5-426c-ae5f-1ef47e716c00.png" loading="lazy"/></span></p><p id="ucb5ddb23" data-lake-id="6e3ac75fc6656619204795816eeeb600" style="text-align:center;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>Figure 1. How to sign a request</span></p><h4 data-lake-id="faa4553827e2bd8f10fd62f3c3bb0c76" id="6FZpR" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="6FZpR" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Step 1: Construct the content to be signed</span></h4><p id="9caeb69353db9686d7be2a430b35db83" data-lake-id="2652893b1168888d9de3e32b429b8f83" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The syntax of </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>content_to_be_signed</span></code><span> is as follows:</span></p><div data-card-type="block" data-lake-card="codeblock" id="buGaI" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code><http-method> <http-uri> <client-id>.<request-time>.<request-body></code></pre></div></div></div></div><blockquote class="lake-alert lake-alert-info" style="line-height:1.74;margin:0px;padding:10px;border:1px solid rgb(171, 210, 218);opacity:1;border-radius:3px;color:rgb(38, 38, 38);background-color:rgb(232, 247, 255)"><p data-lake-id="e63273a8ae754ffbb589fbd8c1b87540" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><strong>Note</strong>: <span>A space </span><span class="lake-fontsize-11" style="color:rgba(4, 15, 36, 0.85);font-size:14px" data-mce-style="font-size: 11px">character is needed between</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> <http-method> and <http-uri>.</span></p></blockquote><ul data-lake-id="7767eb44b59832c0efbe039497a61d4b" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="2911cbed12a8a5d95b0eef010ebdb3b6" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>http-method</span></code><span>: </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#dMgcH" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">HTTP Request Method</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">. </span><span>The value is</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> always </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">POST</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">.</span></li><li data-lake-id="68b7f228369276b3a12e4fe882697c77" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>http-uri</span></code><span>: i</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">ncluding </span><a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL#path_to_resource" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Path to Resource</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> and </span><a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL#parameters" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Parameters</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> (If have). </span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">For example, if the HTTP URL is </span><a href="https://open-na-global.alipay.com/ams/api/v1/payments/pay" target="_blank"><span>https://open-na-global.alipay.com</span><span>/ams/api/v1/payments/pay</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">, this field is </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">/ams/api/v1/payments/pay</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">.</span></li><li data-lake-id="f4e27f616f15bbb380420328e1ce4d58" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>client-id</span></code><span>: t</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">his param is required in </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#ML5ur" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Request Header</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> and is used to identify a client. </span><span class="lake-fontsize-11" style="color:rgb(51, 51, 51);font-size:14px" data-mce-style="font-size: 11px">An example value is </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">SANDBOX_5X00000000000000</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">.</span></li><li data-lake-id="02b005bb88889065f1ad4d7cdfcd01e0" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>request-time</span></code><span style="color:#333333">: t</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">his param is required in </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#ML5ur" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Request Header</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> and it specifies the timestamp of when a request is sent. The value of this field must be accurate to milliseconds. </span><span class="lake-fontsize-11" style="color:rgb(51, 51, 51);font-size:14px" data-mce-style="font-size: 11px">An example value is </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">1685599933871</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">. </span></li><li data-lake-id="85fc26f170b33dd5e0c8f6a96c3e21d6" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>request-body</span></code><span>: </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#oNtxc" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">HTTP Request Body.</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> See the example code below:</span></li></ul><div data-card-type="block" data-lake-card="codeblock" id="Ul4H4" class="lake-card-margin" data-language="json" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>{ <span style="color:#986801">"env"</span>: { <span style="color:#986801">"terminalType"</span>: <span style="color:#50a14f">"WEB"</span> }, <span style="color:#986801">"order"</span>: { <span style="color:#986801">"orderAmount"</span>: { <span style="color:#986801">"currency"</span>: <span style="color:#50a14f">"CNY"</span>, <span style="color:#986801">"value"</span>: <span style="color:#50a14f">"100"</span> }, <span style="color:#986801">"orderDescription"</span>: <span style="color:#50a14f">"Testing order"</span>, <span style="color:#986801">"referenceOrderId"</span>: <span style="color:#50a14f">"ORDER_ID_1685599933871"</span> }, <span style="color:#986801">"paymentAmount"</span>: { <span style="color:#986801">"currency"</span>: <span style="color:#50a14f">"CNY"</span>, <span style="color:#986801">"value"</span>: <span style="color:#50a14f">"100"</span> }, <span style="color:#986801">"paymentMethod"</span>: { <span style="color:#986801">"paymentMethodType"</span>: <span style="color:#50a14f">"ALIPAY_CN"</span> }, <span style="color:#986801">"paymentRedirectUrl"</span>: <span style="color:#50a14f">"https://www.example.com"</span>, <span style="color:#986801">"paymentRequestId"</span>: <span style="color:#50a14f">"REQUEST_ID_1685599933871"</span>, <span style="color:#986801">"productCode"</span>: <span style="color:#50a14f">"CASHIER_PAYMENT"</span> }</code></pre></div></div></div></div><p id="aeeee4ea82ee6396712f06406776b931" data-lake-id="456660eac8ea113401f2b62651220878" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span style="color:#313131">B</span><span>y complying with the syntax of</span> <code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>content_to_be_signed</span></code><span>, the request body above is constructed as follows:</span></p><div data-card-type="block" data-lake-card="codeblock" id="jAoI0" class="lake-card-margin" data-language="json" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>POST /ams/api/v<span style="color:#986801">1</span>/payments/pay SANDBOX_<span style="color:#986801">5</span>X<span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">.1685599933871</span>.{ <span style="color:#986801">"env"</span>: { <span style="color:#986801">"terminalType"</span>: <span style="color:#50a14f">"WEB"</span> }, <span style="color:#986801">"order"</span>: { <span style="color:#986801">"orderAmount"</span>: { <span style="color:#986801">"currency"</span>: <span style="color:#50a14f">"CNY"</span>, <span style="color:#986801">"value"</span>: <span style="color:#50a14f">"100"</span> }, <span style="color:#986801">"orderDescription"</span>: <span style="color:#50a14f">"Testing order"</span>, <span style="color:#986801">"referenceOrderId"</span>: <span style="color:#50a14f">"ORDER_ID_1685599933871"</span> }, <span style="color:#986801">"paymentAmount"</span>: { <span style="color:#986801">"currency"</span>: <span style="color:#50a14f">"CNY"</span>, <span style="color:#986801">"value"</span>: <span style="color:#50a14f">"100"</span> }, <span style="color:#986801">"paymentMethod"</span>: { <span style="color:#986801">"paymentMethodType"</span>: <span style="color:#50a14f">"ALIPAY_CN"</span> }, <span style="color:#986801">"paymentRedirectUrl"</span>: <span style="color:#50a14f">"https://www.example.com"</span>, <span style="color:#986801">"paymentRequestId"</span>: <span style="color:#50a14f">"REQUEST_ID_1685599933871"</span>, <span style="color:#986801">"productCode"</span>: <span style="color:#50a14f">"CASHIER_PAYMENT"</span> }</code></pre></div></div></div></div><h4 data-lake-id="0e34df0c9c32afb0d837b608d69a959e" id="BRlDN" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="BRlDN" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Step 2: Generate the signature </span></h4><p id="u5ed12dfa" data-lake-id="68dd52ea220a291b43267511cc173fbc" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The syntax of generating the signature is as follows: </span></p><div data-card-type="block" data-lake-card="codeblock" id="yeq0J" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>generated_signature=urlEncode(base64Encode(sha256withRSA(<content_to_be_signed>, <privateKey>)))</code></pre></div></div></div></div><ul data-lake-id="68330ea3a64e61bafd6032c47d4e9696" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="8b9f1f2f2153297e2886a83eb1750617"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">generated_signature</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the </span><span>generated </span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">signature string.</span></li><li data-lake-id="bf050dbff7a7b40a82856207cee2f400"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">urlEncode</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the method to encode the base64 encoded digital signature.</span></li><li data-lake-id="c93bffc9a4dccfa74448427db04f0899"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>base64Encode</span></code><span>: the method to encode the generated digital signature.</span></li><li data-lake-id="ed6b4bc46b4d939de7df233e71d2acc8"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>sha256withrsa</span></code><span>: the method to generate a digital signature for the provided content.</span></li><li data-lake-id="05b793fd5a8755215b11f26c16180c8c"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>content_to_be_signed</span></code><span>: the content obtained from </span><a href="#6FZpR"><span>Step 1</span></a>.</li><li data-lake-id="096b58c5d9458a149779f368089133e6"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>privateKey</span></code><span>: the private key value</span>.</li></ul><p id="beb7e9cd5b26a1839611b9642a435a80" data-lake-id="4fa1122cb10441bc1757a1dc0d4f955c" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>An example of a generated signature is as follows:</span></p><div data-card-type="block" data-lake-card="codeblock" id="37oip" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>SVCvBbh5Eviwaj13ouTDy%2FAqFcNDNLXtoIgxFurTgnYjfBJ6h7jl4GKr%2Bkw8easQv9EHK7CXT9QZOMrkYNOUuqRs%2FDtT4vROCiRcnqNOKVjU3zHt%2Br%2Fxal%2FYRV4dc%2FNtu1ppyWJ6a2xNFCa63Y2YKNn%2FW%2B9eABmU2oohVXwBNoCnaLDoTIJV2RKb3E%2FiUp0aIWUz0Ntv4kVR8ZqMe6DUmf7pHRq9hm2av4wwBpJbHC%2B6R%2BMBQPv%2F0ZUFBW02ie%2FTpXBrPasb15s%2FjcmRpAnmED%2FFIec4TGzDIHr%2BO3QFtIRu72vg4zHWC3FuL4i8zfMXWNi3kp7hBFUIBpYroTZH5Q%3D%3D</code></pre></div></div></div></div><p id="ub944cae5" data-lake-id="93cf1d7e4b539ee7e7abdebb7a3abd0d" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The following code sample shows how to use Java to sign a request:</span></p><div data-card-type="block" data-lake-card="codeblock" id="iwZke" class="lake-card-margin" data-language="java" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code><span style="color:#a626a4">import</span> java.net.URLEncoder; <span style="color:#a626a4">import</span> java.nio.charset.StandardCharsets; <span style="color:#a626a4">import</span> java.security.KeyFactory; <span style="color:#a626a4">import</span> java.security.PrivateKey; <span style="color:#a626a4">import</span> java.security.spec.PKCS8EncodedKeySpec; <span style="color:#a626a4">import</span> java.util.Base64; <span style="color:#a626a4">public</span> <span class="hljs-class"><span style="color:#a626a4">class</span> <span style="color:#4078f2">SignatureSampleCode</span> </span>{ <span style="color:#a0a1a7;font-style:italic">/** * your private key, used to sign * please ensure the secure storage of your private keys to prevent leakage */</span> <span style="color:#a626a4">private</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">final</span> String CLIENT_PRIVATE_KEY = <span style="color:#50a14f">""</span>; <span style="color:#a0a1a7;font-style:italic">/** * you clientId */</span> <span style="color:#a626a4">private</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">final</span> String CLIENT_ID = <span style="color:#50a14f">""</span>; <span style="color:#a0a1a7;font-style:italic">/** * <span style="color:#a626a4">@param</span> requestURI domain part excluded, sample: /ams/api/v1/payments/pay * <span style="color:#a626a4">@param</span> clientId your clientId, sample: SANDBOX_5X00000000000000 * <span style="color:#a626a4">@param</span> requestTime timestamp in milliseconds, sample: 1685599933871 * <span style="color:#a626a4">@param</span> privateKey your private key * <span style="color:#a626a4">@param</span> requestBody request body * <span style="color:#a626a4">@return</span> */</span> <span class="hljs-function"><span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> String <span style="color:#4078f2">sign</span><span class="hljs-params">(String requestURI, String clientId, String requestTime, String privateKey, String requestBody)</span> </span>{ <span style="color:#a0a1a7;font-style:italic">// content_to_be_signed</span> String contentToBeSigned = String.format(<span style="color:#50a14f">"POST %s\n%s.%s.%s"</span>, requestURI, clientId, requestTime, requestBody); <span style="color:#a626a4">try</span> { <span style="color:#a0a1a7;font-style:italic">// sha256withRSA</span> java.security.Signature signature = java.security.Signature.getInstance(<span style="color:#50a14f">"SHA256withRSA"</span>); <span style="color:#a0a1a7;font-style:italic">// privateKey</span> PrivateKey priKey = KeyFactory.getInstance(<span style="color:#50a14f">"RSA"</span>).generatePrivate( <span style="color:#a626a4">new</span> PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey.getBytes(StandardCharsets.UTF_8)))); signature.initSign(priKey); signature.update(contentToBeSigned.getBytes(StandardCharsets.UTF_8)); <span style="color:#a0a1a7;font-style:italic">// sign</span> <span style="color:#a626a4">byte</span>[] signed = signature.sign(); <span style="color:#a0a1a7;font-style:italic">// base64Encode</span> String base64EncodedSignature = <span style="color:#a626a4">new</span> String(Base64.getEncoder().encode(signed), StandardCharsets.UTF_8); <span style="color:#a0a1a7;font-style:italic">// urlEncode</span> <span style="color:#a626a4">return</span> URLEncoder.encode(base64EncodedSignature, StandardCharsets.UTF_8.displayName()); } <span style="color:#a626a4">catch</span> (Exception e) { <span style="color:#a626a4">throw</span> <span style="color:#a626a4">new</span> RuntimeException(e); } } <span class="hljs-function"><span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">void</span> <span style="color:#4078f2">main</span><span class="hljs-params">(String[] args)</span> </span>{ System.out.println(sign(<span style="color:#50a14f">"/ams/api/v1/payments/pay"</span>, CLIENT_ID, <span style="color:#50a14f">"1685599933871"</span>, CLIENT_PRIVATE_KEY, <span style="color:#50a14f">"{\n"</span> + <span style="color:#50a14f">" \"env\": {\n"</span> + <span style="color:#50a14f">" \"terminalType\": \"WEB\"\n"</span> + <span style="color:#50a14f">" },\n"</span> + <span style="color:#50a14f">" \"order\": {\n"</span> + <span style="color:#50a14f">" \"orderAmount\": {\n"</span> + <span style="color:#50a14f">" \"currency\": \"CNY\",\n"</span> + <span style="color:#50a14f">" \"value\": \"100\"\n"</span> + <span style="color:#50a14f">" },\n"</span> + <span style="color:#50a14f">" \"orderDescription\": \"Testing order\",\n"</span> + <span style="color:#50a14f">" \"referenceOrderId\": \"ORDER_ID_1685599933871\"\n"</span> + <span style="color:#50a14f">" },\n"</span> + <span style="color:#50a14f">" \"paymentAmount\": {\n"</span> + <span style="color:#50a14f">" \"currency\": \"CNY\",\n"</span> + <span style="color:#50a14f">" \"value\": \"100\"\n"</span> + <span style="color:#50a14f">" },\n"</span> + <span style="color:#50a14f">" \"paymentMethod\": {\n"</span> + <span style="color:#50a14f">" \"paymentMethodType\": \"ALIPAY_CN\"\n"</span> + <span style="color:#50a14f">" },\n"</span> + <span style="color:#50a14f">" \"paymentRedirectUrl\": \"https://www.example.com\",\n"</span> + <span style="color:#50a14f">" \"paymentRequestId\": \"REQUEST_ID_1685599933871\",\n"</span> + <span style="color:#50a14f">" \"productCode\": \"CASHIER_PAYMENT\"\n"</span> + <span style="color:#50a14f">"}"</span>)); } } </code></pre></div></div></div></div><h4 data-lake-id="24e9d91bf4baeb026b960b2074f9f81e" id="uocnP" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="uocnP" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Step 3: Add the generated signature to the request header</span></h4><ol data-lake-id="92d3c149385010fb6e4e63a139722d9d" start="1" lake-indent="0" style="list-style-type:decimal;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="d9c56291b3218da2c153e2eee73266e5"><span>Assemble a signature string based on the following syntax:</span></li></ol><div data-card-type="block" data-lake-card="codeblock" id="KLtBM" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>'Signature: algorithm=<algorithm>, keyVersion=<key-version>, signature=<generatedSignature>'</code></pre></div></div></div></div><ul data-lake-id="86b5286bea6c2b2c4fcbc795000b3b91" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="1b60ca252ba69d310706023b4f70aae6" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>algorithm</span></code><span>: specifies the digital signature algorithm that is used to generate the signature.</span> RSA256 is supported.</li><li data-lake-id="7a4b641a2efeea32591fb1f90fd97ffa"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>keyVersion</span></code><span>: specifies the key version that is used to generate or validate the signature. By default, the value is the latest version of the key associated with </span><em><span>Client-Id</span></em><span>. </span></li><li data-lake-id="84fed9f28578ba82b4e72d69c635ca84" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>generatedSignature</span></code><span>: the signature generated in </span><a href="#BRlDN"><span>Step 2</span></a><span>.</span></li></ul><p id="7ab75fa99943df1c47013b306ed59837" data-lake-id="f049ad2e057c5bfe291affb0895d9573" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>For example:</span></p><div data-card-type="block" data-lake-card="codeblock" id="UHVFz" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>'Signature: algorithm=RSA256, keyVersion=1, signature=SVCvBbh5Eviwaj13ouTDy%2FAqFcNDNLXtoIgxFurTgnYjfBJ6h7jl4GKr%2Bkw8easQv9EHK7CXT9QZOMrkYNOUuqRs%2FDtT4vROCiRcnqNOKVjU3zHt%2Br%2Fxal%2FYRV4dc%2FNtu1ppyWJ6a2xNFCa63Y2YKNn%2FW%2B9eABmU2oohVXwBNoCnaLDoTIJV2RKb3E%2FiUp0aIWUz0Ntv4kVR8ZqMe6DUmf7pHRq9hm2av4wwBpJbHC%2B6R%2BMBQPv%2F0ZUFBW02ie%2FTpXBrPasb15s%2FjcmRpAnmED%2FFIec4TGzDIHr%2BO3QFtIRu72vg4zHWC3FuL4i8zfMXWNi3kp7hBFUIBpYroTZH5Q%3D%3D'</code></pre></div></div></div></div><ol start="2" data-lake-id="d901c9d7ed8041f060e20f08436caf00" lake-indent="0" style="list-style-type:decimal;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="ede2fbd135cc0520a17965d15998fbf2" style="text-align:left"><span>Add the signature string to the request header. For details about the request header, see the </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#ML5ur" target="_blank"><span>Message structure</span></a><span> chapter. </span></li></ol><h3 data-lake-id="4f0d221cc1aabbe6250e54a04e48d36c" id="dVy40" style="padding:0px;font-weight:700;font-size:24px;line-height:33px;margin:32px 0px 16px" class="anchored___1cJEP h3 "><span data-id="dVy40" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Send a request</span></h3><p id="4506187f1c5d47b180b3453552008e98" data-lake-id="7cee74101b30d3e294795f5e14a369ba" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>Construct a request by adding the </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>Client-Id</span></code><span>, </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>Request-Time</span></code><span>, and </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>Signature</span></code><span> properties to the request header. After a request is constructed, you can use common tools, such as cURL or Postman to send the request. In the following example, cURL is used:</span></p><div data-card-type="block" data-lake-card="codeblock" id="V6qRO" class="lake-card-margin" data-language="json" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>curl -X POST \ https://open-na-global.alipay.com/ams/api/v<span style="color:#986801">1</span>/payments/pay \ -H 'Content-Type: application/json' \ -H 'Client-Id: SANDBOX_<span style="color:#986801">5</span>X<span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span>' \ -H 'Request-Time: <span style="color:#986801">1685599933871</span>' \ -H 'Signature: algorithm=RSA<span style="color:#986801">2</span><span style="color:#986801">5</span><span style="color:#986801">6</span>, keyVersion=<span style="color:#986801">1</span>, signature=SVCvBbh<span style="color:#986801">5</span>Eviwaj<span style="color:#986801">1</span><span style="color:#986801">3</span>ouTDy%<span style="color:#986801">2</span>FAqFcNDNLXtoIgxFurTgnYjfBJ<span style="color:#986801">6</span>h<span style="color:#986801">7</span>jl<span style="color:#986801">4</span>GKr%<span style="color:#986801">2</span>Bkw<span style="color:#986801">8</span>easQv<span style="color:#986801">9</span>EHK<span style="color:#986801">7</span>CXT<span style="color:#986801">9</span>QZOMrkYNOUuqRs%<span style="color:#986801">2</span>FDtT<span style="color:#986801">4</span>vROCiRcnqNOKVjU<span style="color:#986801">3</span>zHt%<span style="color:#986801">2</span>Br%<span style="color:#986801">2</span>Fxal%<span style="color:#986801">2</span>FYRV<span style="color:#986801">4</span>dc%<span style="color:#986801">2</span>FNtu<span style="color:#986801">1</span>ppyWJ<span style="color:#986801">6</span>a<span style="color:#986801">2</span>xNFCa<span style="color:#986801">6</span><span style="color:#986801">3</span>Y<span style="color:#986801">2</span>YKNn%<span style="color:#986801">2</span>FW%<span style="color:#986801">2</span>B<span style="color:#986801">9</span>eABmU<span style="color:#986801">2</span>oohVXwBNoCnaLDoTIJV<span style="color:#986801">2</span>RKb<span style="color:#986801">3</span>E%<span style="color:#986801">2</span>FiUp<span style="color:#986801">0</span>aIWUz<span style="color:#986801">0</span>Ntv<span style="color:#986801">4</span>kVR<span style="color:#986801">8</span>ZqMe<span style="color:#986801">6</span>DUmf<span style="color:#986801">7</span>pHRq<span style="color:#986801">9</span>hm<span style="color:#986801">2</span>av<span style="color:#986801">4</span>wwBpJbHC%<span style="color:#986801">2</span>B<span style="color:#986801">6</span>R%<span style="color:#986801">2</span>BMBQPv%<span style="color:#986801">2</span>F<span style="color:#986801">0</span>ZUFBW<span style="color:#986801">0</span><span style="color:#986801">2</span>ie%<span style="color:#986801">2</span>FTpXBrPasb<span style="color:#986801">1</span><span style="color:#986801">5</span>s%<span style="color:#986801">2</span>FjcmRpAnmED%<span style="color:#986801">2</span>FFIec<span style="color:#986801">4</span>TGzDIHr%<span style="color:#986801">2</span>BO<span style="color:#986801">3</span>QFtIRu<span style="color:#986801">7</span><span style="color:#986801">2</span>vg<span style="color:#986801">4</span>zHWC<span style="color:#986801">3</span>FuL<span style="color:#986801">4</span>i<span style="color:#986801">8</span>zfMXWNi<span style="color:#986801">3</span>kp<span style="color:#986801">7</span>hBFUIBpYroTZH<span style="color:#986801">5</span>Q%<span style="color:#986801">3</span>D%<span style="color:#986801">3</span>D' \ -d '{ <span style="color:#986801">"env"</span>: { <span style="color:#986801">"terminalType"</span>: <span style="color:#50a14f">"WEB"</span> }, <span style="color:#986801">"order"</span>: { <span style="color:#986801">"orderAmount"</span>: { <span style="color:#986801">"currency"</span>: <span style="color:#50a14f">"CNY"</span>, <span style="color:#986801">"value"</span>: <span style="color:#50a14f">"100"</span> }, <span style="color:#986801">"orderDescription"</span>: <span style="color:#50a14f">"Testing order"</span>, <span style="color:#986801">"referenceOrderId"</span>: <span style="color:#50a14f">"ORDER_ID_1685599933871"</span> }, <span style="color:#986801">"paymentAmount"</span>: { <span style="color:#986801">"currency"</span>: <span style="color:#50a14f">"CNY"</span>, <span style="color:#986801">"value"</span>: <span style="color:#50a14f">"100"</span> }, <span style="color:#986801">"paymentMethod"</span>: { <span style="color:#986801">"paymentMethodType"</span>: <span style="color:#50a14f">"ALIPAY_CN"</span> }, <span style="color:#986801">"paymentRedirectUrl"</span>: <span style="color:#50a14f">"https://www.example.com"</span>, <span style="color:#986801">"paymentRequestId"</span>: <span style="color:#50a14f">"REQUEST_ID_1685599933871"</span>, <span style="color:#986801">"productCode"</span>: <span style="color:#50a14f">"CASHIER_PAYMENT"</span> }'</code></pre></div></div></div></div><h3 data-lake-id="70de41a739d5b12e22da875413c33f4b" id="cEKt3" style="padding:0px;font-weight:700;font-size:24px;line-height:33px;margin:32px 0px 16px" class="anchored___1cJEP h3 "><span data-id="cEKt3" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Handle a response</span></h3><p id="46ffd53d596f4e4fa554ae1927f67960" data-lake-id="798673c4095100bd0c9f85e0312418cb" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>After receiving a response from Antom, </span><span>verify the signature of the response. The following figure shows how to verify a signature: </span></p><p data-lake-id="f137c8a59b4d7880f3fdd3f4494ca4dd" style="text-align:center;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span data-card-type="inline" data-lake-card="image" style="display:block"><img alt="image.png" data-role="image" src="https://ac.alipay.com/storage/2020/5/11/793a3d8d-5270-405b-9362-e6a670b9c842.png" data-raw-src="" title="image.png" data-height="252px" style="visibility:visible;width:653px;border:1px solid rgb(229, 229, 229)" class="docs-image" data-src="https://idocs-assets.marmot-cloud.com/storage/idocs87c36dc8dac653c1/1664441017739-e31cc973-7ae2-4028-b819-d90c8df65bd8.png" loading="lazy"/></span></p><p id="ubfe1b974" data-lake-id="b11f2681fa7542c9056b886a9cd2a29d" style="text-align:center;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>Figure 2. How to verify a signature</span></p><p id="ue0540965" data-lake-id="36116a8ed54976e07920c433ab8c43ad" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>A response consists of the response header and the response body. </span><span>The following codes show samples of the response header and body.</span></p><ul data-lake-id="9dd36459d319401b04d33ca735e6b02a" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="dd5339f9561f80a0dc2f80d48b41f280" style="text-align:left"><span> Code sample of the response header:</span></li></ul><div data-card-type="block" data-lake-card="codeblock" id="SEBEb" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>Client-Id: SANDBOX_5X00000000000000 Response-Time: 2019-05-28T12:12:14+08:00 algorithm=RSA256,keyVersion=1,signature=d1jdwMNkno7eOFqbsmCl2lfnmAUlK40VyHi3%2FlIrto%2FdV%2F1Ds730bfNJc9YrqNzjfb3ly66bhF0vlxgaPPwYqsWmc3FSXqSQGdSZ42VOzoZXBA2sjI0e%2F8e7IIa%2FGlrzbpNwrOiMuJxaUw6lIK7vxxyvr8vxpfQ0Pml0mKnQO2NP4yY%2BvMMJCdvmM3Bl7mNYL%2BVCLDMNespD763EY252vqMU8fbC9CUf2zCckN78TaWOuK%2FOiMlVYN8VUYIKeoyutiNUv%2B0vIiqfq7IcXCS0pom33MltFukhiyHIso3B%2FD1KN9fi0B9eJbXPB5ox%2FLsChGS48rQECRiqo2mC%2FHXzyQ%3D%3D</code></pre></div></div></div></div><ul data-lake-id="31821dae5b0d52b6928ed1e08e11f248" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="343d2738f59653bb3c4eedc55ed8657b" style="text-align:left"><span>Code sample of the response body:</span></li></ul><div data-card-type="block" data-lake-card="codeblock" id="Oy4q6" class="lake-card-margin" data-language="json" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>{ <span style="color:#986801">"result"</span>: { <span style="color:#986801">"resultCode"</span>: <span style="color:#50a14f">"SUCCESS"</span>, <span style="color:#986801">"resultStatus"</span>: <span style="color:#50a14f">"S"</span>, <span style="color:#986801">"resultMessage"</span>: <span style="color:#50a14f">"success"</span> } }</code></pre></div></div></div></div><p id="ub3bf2639" data-lake-id="7a1623104ee77a86485679e8902451c2" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The following steps demonstrate how to handle a response from Antom by using the examples above. </span></p><h4 data-lake-id="0cc1961cd3db1e0300dba976ecb96a64" id="gapzm" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="gapzm" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Step 1: Obtain Antom public key </span></h4><p id="9f163c4e9b10f824c247ee34931ae6ed" data-lake-id="4c1ec25387a42a3a135e4f547f5dc499" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>Obtain the Antom public key through</span><span style="color:rgba(4, 15, 36, 0.85)"> </span><a href="https://global.alipay.com/docs/dashboard_en" target="_blank">Antom Dashboard</a> > <strong>Developer</strong> > <strong>Quick start</strong> > <strong>Integration resources and tools</strong> > <strong>Integration resources</strong>.</p><blockquote class="lake-alert lake-alert-info" style="line-height:1.74;margin:0px;padding:10px;border:1px solid rgb(171, 210, 218);opacity:1;border-radius:3px;color:rgb(38, 38, 38);background-color:rgb(232, 247, 255)"><p id="u81bb7aba" data-lake-id="4ae012fce0e1f4c775e87283f40108d6" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><strong><span>Note: </span></strong><span>Only when you upload your asymmetric public key to</span><span style="color:rgba(4, 15, 36, 0.85)"> </span>Antom Dashboard<span>, can you obtain the Antom public key used to verify the corresponding response from Antom. </span></p></blockquote><h4 data-lake-id="7e362eb759b14fa4c419635c4d1a2fa6" id="Yyrxm" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="Yyrxm" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Step 2: Construct the content to be verified</span></h4><p id="u5292aff4" data-lake-id="ee60e10504fb3e4492542b0576491256" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The syntax of </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>content_to_be_validated</span></code><span> is as follows: </span></p><div data-card-type="block" data-lake-card="codeblock" id="CdN2O" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code><http-method> <http-uri> <client-id>.<response-time>.<response-body></code></pre></div></div></div></div><ul data-lake-id="10556a0a6263459e359fb36438049c19" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="93e5a3b25c4d6601d26240c5f6af8614" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">http-method</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#dMgcH" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">HTTP Request Method</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">. The value is always </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">POST</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">.</span></li><li data-lake-id="7e7099ebd14102f075be8407beca6a51" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">http-uri</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: including </span><a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL#path_to_resource" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Path to Resource</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> and </span><a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL#parameters" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Parameters</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> (If have). </span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">For example, if the HTTP URL is </span><a href="https://open-na-global.alipay.com/ams/api/v1/payments/pay" target="_blank"><span>https://open-na-global.alipay.com</span><span>/ams/api/v1/payments/pay</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">, this field is </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">/ams/api/v1/payments/pay</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">.</span></li><li data-lake-id="0a86682bf8264954ad6271e8d8c503a3" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">client-id</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: this param is returned in </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#WWH90" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Response Header</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> and is used to identify a client. </span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">An example value is </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">SANDBOX_5X00000000000000</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">. </span></li><li data-lake-id="0775ca73ab7eb252183c4c8284c94323" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">response-time</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: </span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">this param is returned in </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#WWH90" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">Response Header</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> and it s</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">pecifies the time when a response is returned. The format of this param is as defined by </span><a href="https://www.iso.org/iso-8601-date-and-time-format.html" target="_blank"><span>ISO 8601</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">. An example value is </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">2019-05-28T12:12:14+08:00</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">. </span></li><li data-lake-id="699745ca2e1d3b4614035e9b77d0b496" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">response-body</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#eNUbf" target="_blank"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">HTTP Response Body</span></a><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">. </span></li></ul><p id="f07b5147f0f632a7eb6d010fdf3cc643" data-lake-id="eb553e59e14f60bcdf929a5ecfc33d34" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span style="color:#313131">B</span><span>y complying with the syntax of </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>content_to_be_validated</span></code><span>, construct the response given above as follows:</span></p><div data-card-type="block" data-lake-card="codeblock" id="73Ypd" class="lake-card-margin" data-language="json" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>POST /ams/api/v<span style="color:#986801">1</span>/payments/pay SANDBOX_<span style="color:#986801">5</span>X<span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">0</span><span style="color:#986801">.2019</span><span style="color:#986801">-05</span><span style="color:#986801">-28</span>T<span style="color:#986801">1</span><span style="color:#986801">2</span>:<span style="color:#986801">12</span>:<span style="color:#986801">14</span>+<span style="color:#986801">08</span>:<span style="color:#986801">00.</span>{ <span style="color:#986801">"result"</span>: { <span style="color:#986801">"resultCode"</span>:<span style="color:#50a14f">"SUCCESS"</span>, <span style="color:#986801">"resultStatus"</span>:<span style="color:#50a14f">"S"</span>, <span style="color:#986801">"resultMessage"</span>:<span style="color:#50a14f">"success"</span> } }</code></pre></div></div></div></div><h4 data-lake-id="8bf7541f3f728a9df5a18f56962857ae" id="dROrq" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="dROrq" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Step 3: </span><span>Get </span><span>the signature from the response header</span></h4><p id="f7006bae4397be336da5f65a749fc688" data-lake-id="6af956e8ff74edfddf356fa7165a2c5e" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The target signature string (</span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>target_signature</span></code><span>) can be extracted from the </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>Signature</span></code><span> header in the response header. For details about the response header, see </span><a href="https://global.alipay.com/docs/ac/ams/api_fund#WWH90" target="_blank"><span>Message structure</span></a><span>.</span></p><p id="4213aa11401c5e5cfdab3eab08088f6a" data-lake-id="fbd907f0879407b889466f910c80ff1a" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>Code sample of </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>Signature</span></code><span>: </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>Signature: algorithm=RSA256,keyVersion=1,signature=<target_signature></span></code></p><h4 data-lake-id="b8413982c86d936236f52d669a2dc070" id="y51XG" style="padding:0px;font-weight:700;font-size:20px;line-height:28px;margin:32px 0px 16px" class="anchored___1cJEP h4 "><span data-id="y51XG" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Step 4: Verify the signature</span></h4><p id="u80fe1712" data-lake-id="0244eb3572bd4e56dcecb0e786ae6ffd" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The syntax of validating the signature is as follows: </span></p><div data-card-type="block" data-lake-card="codeblock" id="DrM0M" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code>is_signature_validate=sha256withRSA_verify(base64Decode(urlDecode(<target_signature>), <content_to_be_validated>, <serverPublicKey>))</code></pre></div></div></div></div><ul data-lake-id="e1e775ec3fd3f7239b35809b1d92d843" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="c238cceee92c4a2c135cfbc0803d7cd4" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">is_signature_validate</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: a Boolean value that specifies whether the signature is valid.</span></li></ul><ul data-lake-id="b03c1dd25dd20d312c4cac95152a939b" lake-indent="1" style="list-style-type:none;padding-left:23px;margin:-16px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><ul data-lake-id="171f7ca2bce6d93df4db9d03898b36ee" lake-indent="0" style="list-style-type:circle;padding-left:23px;margin:0px;line-height:1.74"><li data-lake-id="b26a4604d3517a76ba706b3c79aac543" style="text-align:left"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">true</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the signature is valid.</span></li><li data-lake-id="d2d021494a552b14adedf3d30c391ae4" style="text-align:left"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">false: the signature is not valid. The cause can be a mismatch between the private key and public key, or </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">content_to_be_validated</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> is not correctly constructed.</span></li></ul></ul><ul data-lake-id="c33a8a45c45a150525f2ed32317e593d" lake-indent="0" style="list-style-type:disc;padding-left:23px;margin:-16px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="51bcd992678bda1ed510e402734e651f" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">sha256withRSA_verify</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the method to verify the signature.</span></li><li data-lake-id="8d382f1454f251e1398a02c8e6cab6ff" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">base64Decode</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the method to decode the digital signature.</span></li><li data-lake-id="d66094b8f29c4f84dc803530b416aab0" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">urlDecode</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the method to decode the base64 decoded digital signature.</span></li><li data-lake-id="c12f8d84b5e90daafa849da693a9e023" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">target_signature</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the target signature obtained from</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> </span><a href="#dROrq"><span>step 3</span></a>.</li><li data-lake-id="14309c16ec09f867e06c67209294c5d8" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">content_to_be_validated</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the content to be verified, created from</span><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px"> </span><a href="#Yyrxm"><span>step 2</span></a>.</li><li data-lake-id="9b687cf7e1853e3267c84816b002df04" style="text-align:left"><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">serverPublicKey</span></code><span class="lake-fontsize-11" data-mce-style="font-size: 11px" style="font-size:14px">: the Antom public key obtained from </span><a href="#gapzm"><span>step 1</span></a>.</li></ul><p id="u482ddff6" data-lake-id="d3a858d653b1d926a4adad063453341a" style="text-align:left;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>The following sample code shows how to use Java to verify the signature:</span></p><div data-card-type="block" data-lake-card="codeblock" id="PD6oc" class="lake-card-margin" data-language="java" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code><span style="color:#a626a4">import</span> java.net.URLDecoder; <span style="color:#a626a4">import</span> java.nio.charset.StandardCharsets; <span style="color:#a626a4">import</span> java.security.KeyFactory; <span style="color:#a626a4">import</span> java.security.PublicKey; <span style="color:#a626a4">import</span> java.security.spec.X509EncodedKeySpec; <span style="color:#a626a4">import</span> java.util.Base64; <span style="color:#a626a4">import</span> org.apache.commons.lang3.StringUtils; <span style="color:#a626a4">public</span> <span class="hljs-class"><span style="color:#a626a4">class</span> <span style="color:#4078f2">SignatureSampleCode</span> </span>{ <span style="color:#a0a1a7;font-style:italic">/** * alipay public key, used to verify signature */</span> <span style="color:#a626a4">private</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">final</span> String SERVER_PUBLIC_KEY = <span style="color:#50a14f">""</span>; <span style="color:#a0a1a7;font-style:italic">/** * you clientId */</span> <span style="color:#a626a4">private</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">final</span> String CLIENT_ID = <span style="color:#50a14f">""</span>; <span style="color:#a0a1a7;font-style:italic">/** * <span style="color:#a626a4">@param</span> requestURI domain part excluded, sample: /ams/api/v1/payments/pay * <span style="color:#a626a4">@param</span> clientId your clientId, sample: SANDBOX_5X00000000000000 * <span style="color:#a626a4">@param</span> responseTime formated time as defined by ISO 8601, sample: 2019-05-28T12:12:14+08:00 * <span style="color:#a626a4">@param</span> alipayPublicKey alipay public key * <span style="color:#a626a4">@param</span> responseBody response body * <span style="color:#a626a4">@param</span> targetSignature signature to be verified * <span style="color:#a626a4">@return</span> */</span> <span class="hljs-function"><span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">boolean</span> <span style="color:#4078f2">verify</span><span class="hljs-params">(String requestURI, String clientId, String responseTime, String alipayPublicKey, String responseBody, String targetSignature)</span> </span>{ <span style="color:#a0a1a7;font-style:italic">// targetSignature would not be present in the response when AMS returns a SIGNATURE_INVALID</span> <span style="color:#a626a4">if</span> (StringUtils.isBlank(targetSignature)) { <span style="color:#a626a4">return</span> <span style="color:#a626a4">false</span>; } <span style="color:#a0a1a7;font-style:italic">// content_to_be_validated</span> String contentToBeValidated = String.format(<span style="color:#50a14f">"POST %s\n%s.%s.%s"</span>, requestURI, clientId, responseTime, responseBody); <span style="color:#a626a4">try</span> { <span style="color:#a0a1a7;font-style:italic">// sha256withRSA</span> java.security.Signature signature = java.security.Signature.getInstance(<span style="color:#50a14f">"SHA256withRSA"</span>); <span style="color:#a0a1a7;font-style:italic">// alipay public key</span> PublicKey pubKey = KeyFactory.getInstance(<span style="color:#50a14f">"RSA"</span>).generatePublic( <span style="color:#a626a4">new</span> X509EncodedKeySpec(Base64.getDecoder().decode(alipayPublicKey.getBytes(StandardCharsets.UTF_8)))); signature.initVerify(pubKey); signature.update(contentToBeValidated.getBytes(StandardCharsets.UTF_8)); <span style="color:#a0a1a7;font-style:italic">// urlDecode</span> String urlDecodedSignature = URLDecoder.decode(targetSignature, StandardCharsets.UTF_8.displayName()); <span style="color:#a0a1a7;font-style:italic">// base64Decode</span> <span style="color:#a626a4">byte</span>[] signatureToBeVerified = Base64.getDecoder().decode(urlDecodedSignature); <span style="color:#a0a1a7;font-style:italic">// verify</span> <span style="color:#a626a4">return</span> signature.verify(signatureToBeVerified); } <span style="color:#a626a4">catch</span> (Exception e) { <span style="color:#a626a4">throw</span> <span style="color:#a626a4">new</span> RuntimeException(e); } } <span class="hljs-function"><span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">void</span> <span style="color:#4078f2">main</span><span class="hljs-params">(String[] args)</span> </span>{ System.out.println(verify(<span style="color:#50a14f">"/ams/api/v1/payments/pay"</span>, CLIENT_ID, <span style="color:#50a14f">"2019-05-28T12:12:14+08:00"</span>, SERVER_PUBLIC_KEY, <span style="color:#50a14f">"{\"result\":{\"resultStatus\":\"S\",\"resultCode\":\"SUCCESS\",\"resultMessage\":\"success.\"}}"</span>, <span style="color:#50a14f">"d1jdwMNkno7eOFqbsmCl2lfnmAUlK40VyHi3%2FlIrto%2FdV%2F1Ds730bfNJc9YrqNzjfb3ly66bhF0vlxgaPPwYqsWmc3FSXqSQGdSZ42VOzoZXBA2sjI0e%2F8e7IIa%2FGlrzbpNwrOiMuJxaUw6lIK7vxxyvr8vxpfQ0Pml0mKnQO2NP4yY%2BvMMJCdvmM3Bl7mNYL%2BVCLDMNespD763EY252vqMU8fbC9CUf2zCckN78TaWOuK%2FOiMlVYN8VUYIKeoyutiNUv%2B0vIiqfq7IcXCS0pom33MltFukhiyHIso3B%2FD1KN9fi0B9eJbXPB5ox%2FLsChGS48rQECRiqo2mC%2FHXzyQ%3D%3D"</span>)); } }</code></pre></div></div></div></div><h2 data-lake-id="5cf21efb0a438a94b3c6929551c5d1e1" id="P4hko" style="padding:0px;font-weight:700;font-size:28px;line-height:38px;margin:32px 0px 16px" class="anchored___1cJEP h2 "><span data-id="P4hko" class="anchor___lLHe_ anchorLink___1O6jb"><span role="img" aria-label="link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></span></span><span>Receive a notification</span></h2><p id="ua2419c39" data-lake-id="605306922cbda4032beaf3ce0b1ff732" style="font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word;margin-top:0px;margin-bottom:16px"><span>After receiving a notification from Antom, verify the signature of the request. The process of verifying the request signature is similar to the process introduced in the </span><a href="#cEKt3"><span>Handle a response</span></a><span> section. To verify the signature, follow these steps:</span></p><ol data-lake-id="4e7c323fc9e3a1c1734cf5257525f5cd" lake-indent="0" style="list-style-type:decimal;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="27ef1eb997e2dd673dbb8fb7d7e5fecd"><span>Obtain the Antom public key for the request to verify the signature. </span></li><li data-lake-id="bc83476d327aab65d9b1165f14f42bc6"><span>Construct the request to be verified </span><span style="color:#313131">b</span><span>y complying with the syntax of </span><code style="font-family:monospace;font-size:inherit;background-color:rgba(0, 0, 0, 0.06);padding:0px 2px;border:1px solid rgba(0, 0, 0, 0.08);border-radius:2px;line-height:inherit;overflow-wrap:break-word;text-indent:0px"><span>content_to_be_validated</span></code><span>:</span></li></ol><div data-card-type="block" data-lake-card="codeblock" id="iT5JY" class="lake-card-margin" data-language="plain" style="line-height:1.74;margin-top:0px;margin-bottom:16px"><div class="lake-codeblock-content" style="border:1px solid rgb(232, 232, 232);max-width:750px;color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:rgb(249, 249, 249)"><div class="CodeMirror-sizer" style="color:rgba(0, 0, 0, 0.85);margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0)"><div class="code-box"><div class="copyButton___pa7iO"><svg class="icon icon-copy" viewBox="64 64 896 896" width="1em" height="1em" fill="#ccc" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg>copy</div><pre style="display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa;transition:background var(--transition-delay)"><code><http-method> <http-uri> <client-id>.<response-time>.<response-body></code></pre></div></div></div></div><ol start="3" data-lake-id="0bf197e4d0ae6ed23c8631c2fb19fb16" lake-indent="0" style="list-style-type:decimal;padding-left:23px;margin:0px 0px 16px;font-size:14px;color:rgb(38, 38, 38);line-height:1.74;letter-spacing:0.05em;outline-style:none;overflow-wrap:break-word"><li data-lake-id="091082f736d4cc38685fbc66ce1962cb"><span>Get the signature from the request header. </span></li><li data-lake-id="558898098f3f8034d8fdb44a738e1469"><span>Verify the signature. </span></li></ol></div></div></div></div></div><div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"><div class="pswp__bg"></div><div class="pswp__scroll-wrap"><div class="pswp__container"><div class="pswp__item"></div><div class="pswp__item"></div><div class="pswp__item"></div></div><div class="pswp__ui pswp__ui--hidden"><div class="pswp__top-bar"><div class="pswp__counter"></div><button class="pswp__button pswp__button--close" title="Close (Esc)"></button><button class="pswp__button pswp__button--share" title="Share"></button><button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button><button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button><div class="pswp__preloader"><div class="pswp__preloader__icn"><div class="pswp__preloader__cut"><div class="pswp__preloader__donut"></div></div></div></div></div><div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap"><div class="pswp__share-tooltip"></div></div><button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button><button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button><div class="pswp__caption"><div class="pswp__caption__center"></div></div></div></div></div></div><footer class="index_footer__P2lDX "><img src="https://mdn.alipayobjects.com/huamei_omsogl/afts/img/A*ej6rQZPMv48AAAAAAAAAAAAADvW4AQ/original" class="index_copyrightLogoLight__w3ZcS"/><img src="https://mdn.alipayobjects.com/huamei_omsogl/afts/img/A*DHRPR4pj66EAAAAAAAAAAAAADvW4AQ/original" class="index_copyrightLogoDark__ukGwD"/><div><p>© 2024 Antom</p> <p><a href="https://global.alipay.com/docs/ac/platform/membership" target="_blank">Legal Information</a> </p> <p><a href="https://www.antom.com/contact-us?secondary=Antom_Docs" target="_blank">Contact Sales</a> </p> <p><a href="https://www.antom.com/?secondary=Antom_Docs" target="_blank">Antom Portal</a> </p> </div></footer></article><nav style="left:-272px" class="index_sider__fYohS idocs-global-sider"><div style="margin-bottom:32px"><div style="display:flex"></div></div><div class="index_anchorWrapper__PT3Wi"><h4>On this page</h4><div class="index_siderInner__lNEhl"><div style="height:100%"><div class="ant-anchor-wrapper index_anchorTree__6CgAt" style="max-height:100vh"><div class="ant-anchor"><div class="ant-anchor-ink"><span class="ant-anchor-ink-ball"></span></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#fFobR" title="Use Antom libraries">Use Antom libraries</a><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#M0MNp" title="Call an API">Call an API</a><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#xL0ny" title="Send Request & Handle Response">Send Request & Handle Response</a><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#3Omfk" title="1. Add maven dependency:">1. Add maven dependency:</a></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#MU9In" title="2. Send a request and verify the signature">2. Send a request and verify the signature</a></div></div></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#tQ2qu" title="Receive a notification">Receive a notification</a></div></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#nHS7r" title="Customized coding">Customized coding</a><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#dc20x" title="Call an API">Call an API</a><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#dwyM8" title="Sign a request">Sign a request</a><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#6FZpR" title="Step 1: Construct the content to be signed">Step 1: Construct the content to be signed</a></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#BRlDN" title="Step 2: Generate the signature">Step 2: Generate the signature</a></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#uocnP" title="Step 3: Add the generated signature to the request header">Step 3: Add the generated signature to the request header</a></div></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#dVy40" title="Send a request">Send a request</a></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#cEKt3" title="Handle a response">Handle a response</a><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#gapzm" title="Step 1: Obtain Antom public key">Step 1: Obtain Antom public key</a></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#Yyrxm" title="Step 2: Construct the content to be verified">Step 2: Construct the content to be verified</a></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#dROrq" title="Step 3: Get the signature from the response header">Step 3: Get the signature from the response header</a></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#y51XG" title="Step 4: Verify the signature">Step 4: Verify the signature</a></div></div></div><div class="ant-anchor-link"><a class="ant-anchor-link-title" href="#P4hko" title="Receive a notification">Receive a notification</a></div></div></div></div></div></div></div><span title="Back to top" class="index_gotoTop__UpQoX" style="opacity:0;cursor:default"><svg class="icon icon-back-top" viewBox="0 0 1024 1024" width="22px" height="22px"><path fill="rgba(0, 0, 0, 0.65)" d="M544.29 264.94A40.13 40.13 0 00512 248.55a40.16 40.16 0 00-32.29 16.39l-179.4 245.34a8 8 0 006.46 12.72h59.46a8 8 0 006.46-3.28L475 379.81V891a8 8 0 008 8h56a8 8 0 008-8V377.07l104.31 142.65a8 8 0 006.46 3.28h59.46a8 8 0 006.46-12.72zM168 122h688q8 0 8 8v56q0 8-8 8H168q-8 0-8-8v-56q0-8 8-8z"></path></svg></span></nav></main></div></div></div></div></div> <script> window.g_useSSR = true; window.g_initialProps = {"ssrLocals":"eJxVj8lOwzAQhl\u002FFisqNxEvTLJUQQlRIFRckyrma2G5q4djBdmjD8u44RUHiNMv\u002Fzzczn8mih1buVNBykayTZ9UaBMjJt0H6gMAI9C6dOowoHCXyUYUwOIm+0N3T1k9Bqx5GtLHcJ9e\u002FsI303Kk+KGsmpA9DM0uPcjxZJ3zsm0Hr2DV2a4Q8T8bZ9OL0VB5D6P0a41bbBnQGl0UZtx0WcRkGjqHzWKhWBdD7v9Nmyu44dI0B9Y\u002FFhcmMBvd64YxD\u002FBITzAijuDctpqyq8jKnmBasLJZLuizrukwFOVR5UxVpRVZFmtdQppADpIKyuiSMHVYcsjh\u002Fe06t92nvLJfe36gunnHFHpz06iMm96c9XRGSfP8AsRx4lQ==","ssrAdvancedToc":undefined,"ssrStandardToc":undefined,"ssrNormalPortalToc":undefined,"ssrLegacyCategoryToc":undefined,"ssrSlugs":"eJyVlcFu4zYQhl9FENBbaJMUJVICiiINsECAbBs03j20WCxG5MgmVpZUSk7Wu\u002FCpKNBjb4u+wQJ9gD5Ru+hbdOTUdjYx2uRC2MMhNfP\u002F30jv474Di3HxPvYuLuIc08RqUCwDaZlKM87A8JJVPEFAy22FJj6J58vhLCAMdDCWXHLGBZN8JkQheJHKiTHp97dpz1vnK49ulygE49mMqyI1BTcTzvmY2MByvOrPnz9++vWnT7\u002F\u002FRiGHvQ2+G3zb0M7pWfT3h49\u002F\u002FfIH7XRtGKCmIFj6V1MV\u002FXBVr+b7JmyWJDbLNEvQaqYSlbFcgmHWokbtktRaeXjo9pYBwhyH80dLsNmcxAG79mvoD+KJlOdlVqZMOFpUZQwzwDmjKnhVckNXuaPipUyKGdcFF4XMJsLoo+IpxjUTJJ4pZFok+p54p5fn\u002FQPdKLA1+PGdncQL7\u002FC0pyUu+ElsqdB5G9Zx0azqmvRuLdTj87BhL67G+xGCXUA5BgW5A3N86Xs\u002FXMKwuAxY+be7o9B1ob2G+lnd3mwLGk83vutulb9N6m3bYR8XP\u002FwrapnnLslRs7wUJVMytcyoqmJW57m2kpeo+UNR1QialDPOi0QVKtlpdUTU44k7c8+fYmxoV92+sbGP0ZaLi3jzat\u002FoXsaH2CqLkCismDYKmTJVyUBkGbPUvqENRJfcwXbZf87to4ocuR0d+ozbSnItKpsw5TjQvBjFSguOydRVpVKQ8up\u002FuJVFQrOcHB\u002F6W275mChNIbJ73F75eRNBFPDHFSkSQeOiawy+WkfDAqOedmFYBXyA9qyN5isI0AyIlApD5GCAaAHXGDXtQPlvcH3TBtfv0XrqJIwQEMlE\u002F1NRGDWerbcAfPPtd89PL0avcNmNth9YL6FpMLwI9S4wLFbLsgFfb2PxYhi6vphOrWsmTQ3hzcS2y+l6RUpN+ZSkFdOumU+FNEZpJaYik5refSIZZ4M5XhlVmowZnmZM5aAZKADmhMw1l7JKLUzo\u002FFdvWdv3jGbTYt9\u002F6ZdU+xfyWcDev6MfZzevqelxxpzvqYH1zI++3ZvWV4f+\u002FgPxrLSGV1YxhVbQIlIqydJXwUkNANxoiwcynJ97etO\u002FvsvAHeAfhe1ms\u002FkHGQUKog==","ssrRepoPageResponse":"eJzsvYly28byL\u002FwquEklxz5HFIHBLjuuv1ZLtrVYi5fc3FINZgYkLBCgAZAUfSpV93vW70VuD8BVJCXZjiiAasWhKKzdPd2\u002FXmb77y9t2hC\u002FbPz3l4wmDZEd8F82fjEE9xi3zBrlnlczfM2uUVU4Ndd0Vddjgtq2+GXtl4i24M5fzoJGpFAlEV87Is0UGnGlK5LA7ytZUygpnKVZJ5E3NFrZYcwDPxDyLUQlRk21axo5V\u002FUN09lQ9XVVVf+EC72Y9+GKl82sFb562RSUv3pZL37JU69e8qCrsJCm6R9\u002F\u002FRLSK1FjcZSJKKsJHmRxAn8mQslPiKgRRIPvWb8dNxLabvZrWULhyiCOaPjXLwqnGa0Vl4eiBc+BxyZxnA1PpXCYyatrnYgLHx7I4Yrf7K3fCGnTrAm\u002FftM3fzO34B\u002FRfiPbKvxf\u002FDZ34NfNw0QeLs4QQuHJXVE8Iks64jd7569fXr1sT1AVyNcZOiOWRzxBqeOZtqCOpQpoJ9d2VW4QCsTm13Usw\u002FR9qqlwIM36oYBjmbjOajSEtthQQuFnLxQfBFZLg29iQ9GM9vULhcVhnGwoScN7pjtrSvH\u002F8xdKCNzWmiJoNDO4dN024JDIMpHU0jZlQdTYUNR11RStF0rcyfKr87duKFEcCTgIyuCHca\u002FWA8lvKF4i6FWtFyf8hdIClQuiWhbDcVXSMDjgxVkWt+BtFhyUsoA3Ra\u002FOY0VEKWhSrle0A59RFrAg6+c6F4ACNBL5V+znolOoD1Qq0NJR2grSFJpvTdmM4Mm5rgaJSBUahkPFTZUsVrxCYQXPHzmlv8PzuW6DBm+8rOdkvay3X73shDdbS+i65RuWcHVGbUfViGkRhzrCJiZjpkugcYqLQaFyfZtsrjBIs0KKUmdBlDxI2QulTTkHgddkC24oRB+LLJdf\u002Fn8uszK0rmy3MLgpFuZwl2u68HThC0I95ju2Z7uWTl2um8S7TWdHmvARWl5h0HZAHzSUsnlysKb0447S6gAAyRbLm26ISCkIWDZe0fY38GmoEGk7jtKJ5lYoAxCR4g7766OmDoN5TNnMITrxgQkibGb4JvDDVYcSwzUtysz7M5UIJoJuzhYIOANFYzTLFXfE3oD2AUlTKio1v2BcPgWUePIRxVvWlf24J+AZxRN5LK9RIgEXg4QmRDeQhx8n+YHJJ43EIT+nYVjqnVS7mqZNMD1WPvrMWFM0E5TPWgPFcszns7o6BN0WG+gaPGHyGq19LYXmJa+mmqXeCeeApmpwm9m+5jLDNlSqu0TnpkZckwnBbFcbgSYzDNPzCJsguwRG9H0Q+VhtcZFKjS0sKQy8hCYBwOXPaIkKFBX\u002F1h3yw3RJ5R2BAKh2ARd8wmAKMB8YSAm0GlAtKoHgcmFJuURZ2If3gEK2pNpKzEiUdiKjqFZLijOj6VVaCsnJhn18yYnrtgxBixgFBMVEmkpYLjx34XwA\u002FuFJucmcHEwEGGUQ47qyB0bTkuEzFxkNQoiRPAAtpTPXxqWF3W1Za+CCxahxqNJMhA9v\u002F9Xfi73TkQO8SMXN548Anj5mm65PRnozHkaD+MU2KbgWA7IlYVBKGVV9YnrM9ixPH3kYk9m6qjP+lDzMP9MAB34erLRBbSCglwELxCqdkbrc127uftPChgEiZpTy8eRRxG7f4yp+jvX0fhm+4vUVBiFq3IK7OeiyhLxFth\u002Ftn9nJyPa3b972PZb\u002Fc8xNWXdTu2nelumoqqk5kHV7ukEczaeO4XHHYQbzXGEPzXuAZaM3DXK1gU3l7+0N7NdW1amW14m8ZMrEDWMyt5MXjJO7OYA5YGGsornI7qGANwPppjYH4bhhO8R3LN21BKcq56ZOBPEczVJ9m3G\u002F0oB2PyGdN4MUFDmvASmNTsDB90kbhL\u002FmO8ZhMnUPq+nNZrP5xYtyQcVP4FX5C9enAeB+vGyGoUK74NqpF8543BxVPJn3dfKaShlikln0aGZZO92o1xth7NFwHQKqNu2vs7hV5zFL6ym\u002FSuHRRUUTLr\u002F0Qhpd3ceH\u002FRyUnO28\u002FemQ5R8L5KZgjdy0aVPVdd\u002FmwhPcV1Xf0bkgPtOoaVBb48IYwtqhenjU\u002FjFYI84MrOnO3bB2P6nA1duyeFfYyxi\u002FyBz8YhbRhKdThzvEsYmn2RaxLd10qEd1w6h0yv9qS\u002FgyWL9ZDRtVSmmWA1WTdoXSEJFIaCb4j8AGVdo0SPJcJu23WiJLAqa0O14IvyRctZOgC89WrkQ\u002FlbgIIFdu8OA0bXoxTfgkfhSIUoM\u002FZTdAWueiK8K4LZK0\u002FrUTsKszAJXsMbClwOmdIc2lgZmfyrn\u002FKSpGOWsQgTW0xklnGYj7bvc1UsxLEf26YzrGxWMo3OsBWOQGXRp1m\u002FJqeuGjrt+pUX+qFy8\u002FrLs2NYSgJtEMXedcVQ0J\u002F6bGTCKE4\u002F+gVzNmvZr+\u002FV7tVzX\u002FyaMGAeh5OogSf6et9gtlHwAVYrPTQRV+7N70Oe7N0zihOvdtj3qaKmzHsagD3t1kjq8zlY8LELqm+q5PquzvHkvxBiWIFrx1GKNLlzs\u002F+l8bRfijmt9ENWxUFuwF8ACItTlISPZnxhK45FP768o5vZL3voFAHfytfKW4BtUIxRowEIIg5Stkf1Um2ul0OWRExlQPZTzTQ+lSW+eWaVpcZY7HiadqhuXpqqn6msG9wj7A28ka13f2VgoWtGi4Gh2WzLB0HyTkEsvnjPmq8KkwPdPxNEPlqnTNnCuHEF9FwHhbSAmx\u002FqKuQpPazDV94Xq6LZhODeL71FItD\u002F5ZgE1DPLg7bxz0esVygIQxg30m1altaYawLKFb0LyQp5ue6\u002FuQu7Nx1UI\u002FbvlXPwiE6gwQktvDe21dkaJq3RAVqGnTePXSC2N29bUTZ2JCsWbaehIszDlgkR+bVjtN6sLgsuJITrkHbQ5aUxwBzVTSOAx4rnBEatvwA3QulpqV9aVmWS\u002Fmjs3wTO6YnGuWJmxL9YmvOdTyiC18U4KxVVHI\u002FTwoM\u002FrBYDRECAFB0Qcth1PIMH9OVBNkzY6XhzNFZDMMqiGMjmqQm9e+AKrNDWleB9l+x5NRxnpRlgLgqo8Voxj3k4ueQXiUo40Uvrxgyv\u002FLs7kjgAR3cDJvpmODejJSmB46JB81logyc7CQyvgFUaNDG\u002FLF161wCgZv1dZbXduc8UwD0ocjmyZeVGgu3H1DaYnU1+LjuXzVda0X8KwJpmuq04o2nd+Zz6dQeWQ\u002FQ0Oh7KqRyHpQoaTEcOEdg4\u002FnM+RvA+WHQZLESa7lyT0q4d9BgFRtRf1N\u002FqvnPhNwsi0gyU1ZAn5xZPpefD20cPn1xisLqtsybx5QzVq1tMYB2jthVl6KZyMg4KEbiF5NKl9V6a5FnZYnksLwwhYk3xxgGfLumlpelhYmlkPObrPgkvEyxQRYQkYbCvyCMJJdifLS\u002FXuYvZjbDgULpaV7MkpcSH0lGqAxaoC\u002FRj0FdxoGQhVC1Y\u002FyoiiVtZWKgpV8ZPuArw5SQV4yrLgO6q+QklSWL9CqOqpVCdQKHWB5WUIHWALKq+oAaZIFPmXZKoHVvIJcZdmqqgtcRcVCL1heltALloDyqnrBQY\u002FP6iDVf4uurMsBY39XlqWqur+V0yj0feVlaYV8X2UtpapAtYrdNTd\u002FgRnAJw+605+zA4tcbtma5pmO4xs+NwlVCTdM5qsWNXTVG82nP7xwD6JlDSwi68q9B03JoUYzw3d0YghbJZ7DLZNw0\u002FRsR7dtJginqmZpdkWH75w3xWC0oBxLKCFOSfNBhErajHup0pTDCIuhg\u002FlAQzlp6X5y3MiH5vzkaJwjU3zb+edG4wxGFeFwHByOU4pAqap0Lw7w7jOrGQO8fzzAuxJ9ifulJThoteMkGzTBbGWmS5NATjUtLf159bugfr161HeyIKwu9RcXBzsD6l88+QQa8XUZvKCalZelFVIzdONLpj9OGtX1g2k7gSv9hLYEKMlVdRnpCa+6xHtBxKtLPY2iOJtcyrCCPAzmQR\u002FSdjsYrQKFkSG6bHTZ6LLLRTy67DIQjy77sXk4BX+9Dcgu7xMJumx02VjMQTVbLTXDyHDJ9LO4VV2PWEwvrC79xfSQ6tJP20F1id\u002FMlWc7DAAPMZhCL4deDr1cKYlHL4de7oeJ3ynG9qGzQ2dXiuZBZ4fODp1deemvtLMT10y0q13kLxz1ZjvYvcELumt01+iu0V2Xi3h01+iuf5j4FoBilWXfShcSL3cyollc3lmA\u002F8awAldTwLACw4pSEo9hBYYVTzWsACRPMxpli4OL0rOwG\u002FGTOIjkaMUpVjDYwGADgw0MNspFPAYbGGz8MPGDBZyqy8BtVYzSE19puy26ek5o\u002F3RKhzBIwiAJgyQMkspFPAZJGCT9RJA0tb96BTnAKKkEUdKUEmGYhGHSMnhBNSsvSyukZjPA3BIZLS21\u002FzN3LQI0lfKytMqmUvbEtd3xwoAtTFzLTn5O6kLqufBLSzlEjS3Q5K3+ZpTFrXeBl9BkGAor\u002F0W4Ki9LKwRXqGblZWmF1ExR5mzWx+JWq8xE1\u002F\u002F9b4wd0UqWayXVM5N\u002Fy1tDyoTSC7Km0o87CZAv53IrAUcDQgNCA7rLgPwg4jcMR2mKRGwocr88qjQT4QPZzSxrpxv1Oqdp04tpwteLjq914LA+2M27XWQVaZ1LvZMzPdL6107Ars4ymoAM5PZv47\u002Fz7fgobl+JhoqGeg9DraOVoJU8ctZU9oJcxeuJqVyIubrkQyQxGkgyS73cnLO0pJ9lciX1Ie2Dn+oNCdh+d7B7dH452tBMmfip3kzcPxbqUpo3V2kJ\u002F+uXv37BwRjorrGWjmq2WmpWydQJa+loJVhh+KFaOpXDA5QirVIg\u002F1CedVLBFXhNVySB31fSoBHRrJOI52hiaGJoYvevts+YFhbd0V7RXktFNRbd0UoePb0qe9kXi+6PST4W3R+bjc2j8+PDy5OLrXcH25dvdz9PMoRFdyy6o7teVXeNalZellZIzSqZOmHRHa0EKww\u002FVHRvJ0GXZmK63i4L7VhjR4tCi7rTotqhoKlQRJR2EqFkTaGkgsmvKSRetCGU2J81NHilbCE5AB5uv4LL0NjQ2NDYsECOVlIeXrBAjgVyLJBXrEB+uHu6vb95dH55cnrwYfN8d7JIjgVyLJCju15Vd41qVl6WVkjNqhkVFsWHFY2ryk79HUFt6WOqYvHf7XzFhupyUcxXnDNZccWGTpTdGiLRq64S7QifdsJsjkU8w\u002FijvCytWPxRzdR80X6EFVwO\u002F+z1gPa1CrbDLSWSKrKzYEhkFVm5uaTCc6ydoFPB2gmq2Yqo2dy4pexbLOS7Ah7SdnvcPfKseuX4OuQro5L8c7T38rK06vZe9vrEHT3ope7EPfa+CFbhGt14j7Rnz3FrCEQprKjcozA\u002Fs3dxBTmh9+WkwoX50jcCi1vtOBUzrfAM6xAIxViHQDVbFTVbCY8\u002FtQ9vBVmh92alwj4fyG6VluyoEw4H1aCDR+R9VOQte1Uowy0r0VYex1YqOVmvXjygJUc+0jAsFm9VaMQHi7niVD40pZKYEkbKZYiUS98KU+OHKzhmTVwL1hnNAZjtwi49AwtqxFicRCeyVCfyd\u002FWyF0Yz1hxCbwVNvyh7bbaD3Wsm2lkQR9X1I0MExg5uBK4SRL+lHs8yvShBBW09SeLkMF3MAQbsDw+0FYzVGyI7FGk6XhgMu+DRWZTAWVSg6tikEQ+FkiOvAsLmwUS4iDZUXpZW0Ib+Rn0rL0srqG+Vq0skIuskFc7lF1XmMVhDw1+W4aOTQV3DsbmoZiuiZpWMY+5aX630gczqzCRaPIkF+1sQwh43HSu98awODDyFCYVl94qVXulvgSlgRwx6EfQiP4S9FeyHTUV2ksS8w7Jt0JvqDp2cYOK8365wx\u002Fj25tn+we7p5cnm58PxaFzEZMRkrIGhmq2KmlV5\u002FEUyu8Uo7UuiB8HAAcexGGhLJbAlHPj6kAXx+Ta\u002FUuWX0jfCxcVoJekKhvoJjXjcmuDh2fMKcpHFU6aM5SP0e1g+ekrlo\u002FmOsII1pAUuHQENAQ1rL6hmq6JmVa69gL9RaAuenGGNBW2mBDZT+qBmc9JaKkg\u002FvZ1+rK4sSXUqmJx4nSCE81UurrBOkoiI9RcmVaXflufs9c54V54KtkCXhp3F4yJKL36DqGql5Z8bMdYWMd7DeO\u002FJ1hanApEKFhanYljEMMQwLCeimq2KmlW9nDjo9TkUWTPGkVtoOmUwndJHNCdzjKaCbMyzfawxPrYiVTBXWYFS45QtTMyhqWDR62Tz89HxRyx7lY8tDEgwIMGy1z3LXlNOsYJlr3nRFUIZQhlWv1DNVkXNqlz9mp3ImN+C8xfRhEphQjh\u002F8QHpnzZ1LHotk3Sctvj4XOC0RXR3mJigmq2qmlU5MZHd8l6nD9oTRH6M2QjaTQnspvQRzZa0mOoGxd6t5GM6shzFqWAkvwJ974nwhZznI\u002FKmuGUNhdJ3vcsy4oAJ7H8vH1sYfJQ6+EA1Ky9LK6RmVc8N84swN0S7KYvdlD6cOU54lXPD+FbyMTdcjuJUNYxfkdzweKrHtoLjAae7nJ+j0y4vSyvotOVPBc0\u002FP7sj4MagnQVxVN3SEI2yuKVkIs3gliKGr3SJKD+7WksTVLAVJrsNKij\u002FSfKrKX6sk6JPx0T83ni7SvOUJpPDCmLvZFUBoQuhC7t4UM1WRc2q3sUjoi528KDVlMVqSh\u002FL7Ebd6nYyiFuIx86dZShNBfOPFejayUTSCiIa3rraTum5OJ\u002FlooJt8XF3C8twZWMLwyUMl7AMd1cZbuzGK+g9xrEfwhbCFpbgUM1WRc2qXIKbXRooirPA7yudJMSSHFpRCayo9JHNSsWYgyUpj3IUuBiBQAWHoTWzrJ1u1Ou9Xm9dItuIpXXA5fGANAxGEd8wGEU1WxE1W61gNBE8SATLMBxFOyqJHZU+iFvFcPR0gAMrFZAeioQ1aZR9FB6GpIhxJcK4K9Hvwa2lJTwRWScZ2sjqQDTaPdr9suz+b9S18rK0QrqGalZellZIzf6+oWV1YAE+edCd\u002FmwShdOM1nI2Aw586KpKHMPXCHEpcR3f8IhvebrwTMtWme0Dy\u002Fl12XvytTPB\u002FzRbPsin1hNBo5ltKLaqDo6kwTexoRBHXpKrSXNwiZ4fGspJJ+1r+RxFs+DwSNvmidpYUzRzTdGtobDh6lPBRNAVCi067wJGJyaQv6w3yauX7Rm2Hc591\u002FQ15hma6Xiq6qq26Vu249iuMOgEpxOcaIYke0zPM90BWvL\u002Fn9\u002FgUFu3DTgksgyaDShhhbDWVVO0XihxJ8uvzt9RaAIc7IrED+NerZfQ9obiJYJe1WQgOpRULYvbA4EPDnhxlsWtjRuCm1JmSb6kvqZpwFQuhhYbvPkGd1r7+ha+4fGbPnADWirlDfzckLjiJ3FL2ZTT39cU4EX2o2ZNoaRBI6IQsQol9vMDSRH2rSvn8Ec7iZlIU3muuEc+eOKqiduDFP5oBSFNFDCWbOLmIMqSmHeY4PA1PzNsfqo0E+EDO79ev1OjvtzRQkRcGUSeyu+01X6h7NOIhwIOpu04SsXLOn1oSSoppPMgs\u002FUhoXtg8XFPkp6CxDLRTpUHJgFEOK+RNsYY8uplHN40HNc3GbFUQiyPqoawTNfSDds3HN0xbGZJvCgujjgAJtww6QDCIM0KYvNNTzYULljQouEIJcFp+GA8RJ+EB3USHZQSmKM0tDC4KRnmqpalMsfVieZavmWZRDNtlVs2oYI44uHN89jL6ED9cytU2h0vDJgC+SyILZmyqsXebwk6tj7SsTCYJ0qVaq5nCOLaRLOYafu25voqN33CXOpz4+FF+VpkUzAiQ4Hp630KSNTfUFpxFEuFElOqGURN4DubdPi1BSGDaj2fjhIUkkcKuccHiuBAGocBn71RavkgMEgoDzrpRnHrlOaPKLnFvWTiOhtYbOFfHl7AAz2sZUFLjLRBSvmhX\u002Fz\u002F\u002F9\u002F\u002FDxv1gWTLwgDeBjaMLboiLTqC7KW2aBFJTrqrpqAgv7v8hkG4RnTXsD3f0oVFbZ0RIr0vISY3fPPh5fXhTm9Xj8M5+YjFXU4dg1BHN3VDNTSP6uD+LF9wQT3iYj4yT9oyf\u002FDzwFkmDYXxQ0APoXzajHup0pQRdax0IKR+Q7tUfh+0xbyo5IGJnQqsIRsvHsdowvNgGG7Kaw3D9+Tvl2fzDHhQiBhm49eGuXMBf0wRmz9q3DLKzMGidcYviBod2pAv\u002FgLCmQrTZxTn3g0uGZum6pYiylzwfEZ0sqYMP\u002FJyynWtF\u002FCsuaHYpjqt8T9cfMlfZLjwjsHH8xnyt4HywyBJ4iRvyfJOzX3ZhuR4siu4xoVPO2F561VPrgyqlZelFSqDVq4nN2i14ySrbk+udBzXVR5hk3QhJKouA3JMTXWp3wfqz4omwJEA6C+wdxbVbCXVDMOSpa942aiuV0zbciCvn9CWACW5qi4j1Q5Ohp3Bu1EWZH0MTNBjoMdAj1FK4lfGY\u002FSEV13ivSDi1aWeRlGcTQ6cqyAPJ3GaHdJ2Gy5Hf43+Gv01+utSEo\u002F+ugzEo79+bB4GRf+tmGN+jf4a\u002FTX663ISj\u002F66DMSjv35sHk7BWW\u002FHcqpVGI52JECXjS4b++pRzVZEzTAyXDL9LG5V1yMWK9lUl\u002F5GGHs0rC79tB1Ul\u002FgWgGKFZQ\u002FRYCfEEZvontE9o3suJ\u002FHontE9P233fJbRrJNObFmIjhpXJENHjY66XMSjo0ZH\u002FRPLIQ+XbasqB5u5+p9O84GeGj01emr01OUiHj01euofJj6L4zCtLvkfhdeM46tz4AJ9NPpoHPyAarZaajYDyS2R0dJS+z9zx6OhqZSXpVU2lbJnTcVa4AuzprKTn5O6kHou\u002FNJSPrWldLHTwFY\u002FX5\u002F9XeAlNBkmU8p\u002FEbrKy9IKQReqWXlZWiE1q+Y2zP\u002F+N8aRaCXLtZLqmcm\u002F5a03NiunN7ecedZJBVfGW8CMFlp\u002FjiaGJoYmdpeJ+UHEF5hWUyRiQ\u002Fk9zF6M9jcbbq\u002FNadr0Yprw9aKrRu6tXS96PUDz8lQkrXOpfnFbJGn9aydgV2cZTUAUvzeyF+O\u002F5ePrVB5De0V7RXu9w17raCVoJY+cXpW9itdOgi7NRGWrkKmcwl\u002FdIipEFKOxD7PUy12ISkv6WSbX4KjuoJ+z3dMPu6eXJxdb7w62L9\u002Fufl7IigzLaBaXd7uhPxaSnuaNVFrC\u002F\u002Frl8OBg6+DL5tFW4+pr8yp47fbUrc33u3ubm8fbm++dTXl+u\u002FEWvu9uZrun28etkzY5qocHX2nrbX3v69m3\u002FWN60vz2kbbeNyk78KMv\u002F6GdnbamXjdf756937lIk4u96OPWtvXuA3\u002Fzoemnbz6I\u002Fv7bxGIB3dw8391vBmw7Ptr89mfP\u002FNB2wuTg4tOnbDP5urn\u002F55uOHffs5MPRpzeW8XGn3vj8fvNoOwuj7vHhQdg1vU27\u002Fck6PhXtLxkzzs\u002F\u002FPMvSq82675+eNcFdNQ\u002Feffl8cc2\u002FUX5h7W3vnjpOYIsPb9o7m\u002Fu8mR2ZR71e2Kx\u002F89+8ft3f9WhX22n3AI2vr696X7es91\u002FU6PMbctD9j3N83Pzz8M+vfK9rbu73vxid\u002F8DrDP4fp2+H\u002FbOr1vbBwcG3Zu\u002Fw0O5fNcLN3qdg\u002F1hE7zaJfvz6y2sz+nqdfTt97zKfN\u002Fmba\u002FegST51X+v94zf8\u002FcHO5vvNrb9+wQE0GC1hnweq2WqpWSUzV+zzQCvBAs89CrKD8ik8Qk6thWfLER1KO4mZSNMYB6ChEaER3WlEnRQund91UayzuR7ERU\u002FEWf6nsjdcdxP7I9DS0NLubWloJGgkaCR3uaP\u002FaVPwL\u002FCEfCl6ycTCXWnRksrLElpSWSypyIrkng7DBMkb7++AJlReltCEHt+EEpF1kgiNBY0FjQWHW6GVlIeXuUZS7unRs9thPqveiI16m\u002FbrRSBZz4dBj4YOPEfLLy9Lq275ZR\u002Fpd8ds71IP9Tv2vghW4fW9ALEmJ3snC8G39JwsLIVVsFWSKQbWqubMZ\u002FfKrJhVV30A77iuNYw\u002FcMEGjEBw8CKq2aqomTL4qVwtqF6He8G9gK4oWVPknXlBIriS90iITCSp4idxS5EDTYZdfetYP0LjKoFxYdD28EH\u002FRRIs5KHC062qIv7qrvjbGCW+F6cHwzz+OU5aQp+BPmPFfcahyJoxR7eBbuOH3MaU+qDLQJeBpSJUs5VRs9UvFQ0HhDcFhedhsQjNqwzmhYH\u002Fw4ed50Fr8QJVGPZj2H9b2L+fu4vqDrcbtEEtAyMYj7TD7AX9Hvq9VfV7LAxAKQ6w1oVO72k6vcIAagFHj4ceDz3e6nu80U4U6PLQ5T1JlzeyAHR56PKwiwrVbOXUbGFkVXr3cpovL1ll\u002Fz5BP3oVNHc099so38y36QKjb8dRujgjKT0fyV0cVDinKvt070j0qqs4cw0Ah8yh58B8BNVsZdRsYYBSdt+SJaMVB3DCO9rKMm2lqkNMBxteywGmo0KrEvvFgqgBo1kQ4yKPaFFlsahS9zV6cRwKGlU3vSnA4I6iXoVz49I3wEfhNeP46hwUqbp9jqwp2NXZjX7rCi4pNjMjf85KXFVhYmqOXxX5uDHybw2DkfKytKLBSDVr9rNTRapo\u002FjeHQVWRh5ll+arIxKLNwbEGjoj8+Olh2QuUgT\u002FMTWbj4dLnVf9rrhpVAbTm5LW4JCoCVklCyLKDVtZM4sV99mWnvtLjDU47kZzeunvNRHuiEl\u002FBUdwHUZeGAVcGG63hoG7E4xLg8d+oc+VlaYV0DtWsvCytkJpVfTACFylkahAnfCuWvJochKDg3qxoTojaqGYrp2ZVR+1Om9NsuEYhg8uBVMjtUqUXZM1hwjc10woNq7wsrZBhoZqVl6UVUrOq43cxG44XY4BF0gVVyprwsJkIPEglwIugKzgCOVpYSSys9EX8ZGXH02Lfz0P2\u002FUyqTQV7fM4utrd3z85GHTxVHO1UtMFZns6c99vD0WcVHJR9trgVSq9JaYcxkabYVYhxByaQqGYrp2aj3ujqRViQGbLm4jGNpXeLN0fWVDBGGQYlOKIR8aoE6XipZ+hWfTVgkSRxcpgu5qDCxYTyC7+62V++y2Oa0gauWYXOokTOogK9I00a8VAoOfIqIGwe4JIoaEMlsqHSOx\u002Fs\u002F8D+jyfY\u002F7F7enp8ir0fpeBkr8KtcCPnw8Adg47lVqVR38rL0grqW\u002FUQ+sZy8hX0j6nI7gi3Ss\u002FCVJaBThJB63FBq+ypYSKyTlLhXs\u002FhHgy7URZk\u002Feoib3w1qshXkPqJOZnVdBmTfhudBjqNpTkNzKpQ13AII6rZiqjZ3ze0rA4swCcPutOfTU3hNKO1nM2AAx865a7PNY+6mqrrhAufOYz7rs8sw9UdCizn10X7Z\u002FZkH9E0Wz7Ip9YTQaOZbSi2qg6OpME3saHoRF6Sq0lzcIlhyENDOckL5HMUzYLDwM523iivOmkWt+ARXIGWGA8cellvaq9etm9ywinxDKGqjs655lq24VOq6qbKPe4QYWlDTjqa5wpP87UJbiao1XLSxs37THfWlOL\u002F5ze40NZtAw6JLIOmAdJYIZB11RStF0rcyfKr83cUrQ0HuyLxw7hX6yW0vaF4iaBXNZmpDKVRy+L2QKiDA16cgRg2RsIpZLMl\u002FDgRSj\u002FuKJ6Ay9aUBg0ihYKGpQFTQMFEkmY0knKTG4rI2YRD+VGlmQgf2G5mWTvdqNcbYezRcJ3m26uts7hV5zFL65TVaQt+tYNLHx74a\u002Fbu3RUDqWVAmMjg\u002FksvpNHViKbNCAhVWsVIF5Bt0mETawa\u002FrNPBdetjNQWVJDcb0oT2o0y3HM03BfzTLVXTuG+YuuUST5BhQ3JG1OsfU0nizKik7tyqkgXl2xTsEuBi8+RgrIxkjjKaVLNVz7G4bzNhWq5gFtUt5ruEapbtqaugewyEIbWrkMeaIqJU7l6TT16VetmkXaE0RCT7l8GGp\u002FD2LhglOaxRwMAgkepL036rJbIEVLvd8UL4BaqttJOgK9c+gGw\u002FVeJIKvliVJdylmKuadoCHDfWFM0EYVsjJL\u002FZNnBj3tAtNpDtjfbT2tcywFxoaJymTS+mCZ+0tcL6wGf25WCctM6l45Td8mn9aydgV2dgb9lis7uNy7uJXaiG8PjCnneGNN+048cS77pShkbeixOlJc0giMAaWvkU7TUlFSXXwAVQP1LMSxH9umM6xsVjKNzrAVjkBl0adZvyVvpNpNcoJ8x2fNPxGbEo8zzmuYahecS0dIONvVWvf+j8oLcyZr2Vfg9vJTeBgYhgsAXB2GHp0mHlRNmm5moGMSydGMJglArPsx3LE5ZLbWLrQwlNRFmm7XBX+ITbmuYZrqtz3dQ1VVDHU4lvTnCYieusBorWAApD4WezDVB+V3cOYZMPwXjck57ODxrSw6XNuJcq8KFAzJ5OCXljUllmogJfVX3qUkZ11+E25Q5TDdP1PB9ETxxKFwiPgVsQSQXFV\u002FDPAFbyeQnAVhAN0tyxZORpeaYFQaO8MWg1irOQBInxCSVN2ASOBRK2agAIIkvXgYZWnNVYGHd4jmmQOCRwV3GVY0MwyZnDKbNMnWl1zbIMw1Bd3dVso+ZoXAjdc2uaL8yaQSxWo8L0a5rwDVvYmsVUdb2dj3UqyKK9GtAygqOcviLz5fDS2pBeGmbDs4PbsyAbczT5yKKp4AxxrSmM7AZp4AVhkPU3lPx7CK3TC3jW3FBMx8wzyjwzBMGD+aexXONXqgMh7poy\u002FJhKdwvFLDIh5kGs7ZE5Zm4JnTLbhCzQMi1Lc4lq2K7paJYQwrNUddU09dVeYdraurI\u002Fz66nfIAxY9eUGqapO8QWBLJNX1N9bhFfZ7rnqcy2hj7A2vuzffqDPkCd8QHkPhnLWSbairahbMdRkZDlmeCgniH59IqdJ8U4vGsaIw1xGXgEywWE555rQTpjQ\u002F5FDV31dJN7zhzFIZZJHFf3NM1y4Ie7XOhCh8ycuJ7j53esmn9I+1FGr2WWMhShLBxNxzk+bQUhGHErjmJJophiNoiaIgmyyfJQbUFmpFrPp2tKClmIAtM3SrkNykgJ5UEn3VBmCzMjSm6RUN5uQcRBgQoRjaQxUKvLLL70xOUNtZJCGVwnlzKi6cCxplM+kwfdWa+RF+HmOY1RhW5oYV7nNT2AP6ZixfxRRTOOHxI1OoDC0ghDmh8fttcc3bq3Tkjqp199SwlxAXLrBEB78JEXE69rA8S3TXXaKH649Ji\u002FyJDeYfDxfIb8baD8MJCDH3MlLe\u002F48JdtWYuYGJlc48KnnbC81VrsBCgPSyvUCfB7mL2Q4XGtle82+XsDYHx0rJME8gD2R5WXpRVTxWLLUIgKpd6tyyODWLom91SZOSjHssiD9+zJyuXwtRNnYlpWNBRJpoy\u002F1mR57j7e\u002FaZ4NHVxdqXZGnhNTZUfMqyKZdApczRtJsTSbwtj54Z7gwjAsOHDNAcu7maYLSyd2Dp1qLBNw\u002Fc9z3RcH1IPpnkOHKlu\u002F0KWxFHj1RG0K2hA8ceGMuheUvLIuRTVX9akCWUgGxnKRkJwwSGTynpCRPcl7+dKpco8tJd9IjcRf6p8WR+bzauXnfCmVtm2ZQvPMDzTdXTCVOF7QtVdw7WppXHDA5KKi\u002FPgH25QpywLrDj\u002FIw\u002FbNxQepGxkUDWZ4UHGMVW3VCdT1jJkf1IFw2Amp3U1jXmCawQMzuSu6alC+KqmCo97umfdltPKJz7VdHBCPedlgRs\u002F3SHNDxts\u002FzE6KvbPz0+U08JzKYfTHN6ju+LnXj7d\u002F5WXILo07AiAoiVhDw17tJ8+9XLHwwn45PjsfI7FPKBKjd4WBvMQ0HI82yfEkSMwbMvTqUaE4QvHIZZrM9tGBLwFAcERz4e\u002FYDnmGrGwkw8DWjwsYTjiYL0VfwvCkK7HSaMuotrFWQG87wRNovp23ILmusxRL4ijtP5ReJctAbFQFMBFH5s0uwzSS3p5cfru1zbNmrIQmIg07iRMPAZMnwANssZ9OqBheRidh2JLlndCwdeKJH0cSQ\u002FfvkQZPzvw80FGz+8\u002FIuTn3ijHfIhr2mqHYk0JikF1eSgADSATgYUNDm0d1SJam41rBvFMvavVRwOA4Msto+zufOZUdLDoBctrpjUQE8jGD0TIJ4X0RH3Cwwn6zqYuQyThG4LYvqVZvmZ6nqc7qkFUnThCY8LgpoORxIKutWE1bX4okS0HAKUh546m2IzkaydIBBh19NOZ3OE7s5M8huMaJnH7gkLzLTlAACF2UhAghCiBbHO5UxdViqb+mVGOz0xtTSn+\u002F+EK12Y0dHWj7BKh+6G04WzzaGfr+NOl+Umd+ikVdKvEU1UAbTmuw1Ut09coN7jNuM+4qolFY4KePHRPdnvMa9Ab9vurnv\u002FI+xHXK4rrmZK2BQsg5k3zJEE2fZoBmspRQr2mmBhZJiWe5ng\u002FLuTl83VGMXOrA1d5QqGMdfLR0eAuwG7CIBVyQcwUPUXpbP7h9EuzHNN0XVfXHVtbrntQ7vAPjilHwPty4pOuc24KlTm+RV2L6YJoHLtJ7vAPE6s5\u002FMP9JPFRdn3LxL0l9ZNsAX\u002FrS0TiM1HsijsEp1y\u002FPAHNszGlyfVO+NPjDi9CY9\u002F4vnGHX9IYhx3isMPSjJmqKt2Lx3otGgRSApZWaKwXbnuDerasZXsWLEOtwLd2IjvUsn5p6f\u002FrFxF1RwtSb+B2UWg3j7tGYqVsJxNJK4hoeJ7vbzUyouqtS\u002F9xd2tEPyJAeVlaMQT4ew2VrbwsrZiyVdvV5OcxUEPLwUDtR61nswVPztCG0IbKtFVbpeyIdZJERKxf6WRn++jzeAsuhIDysoQQUDo+\u002FvolH01RafvX5EpRWOxA81+++WPBA9e6wLTt+9K2HQG3Bm052azSbudcTpiT655PVXIQEBAQEBDua0OJ8IVMQMWxvPCAVxoQjk93dk8vD3Yup4bPYmiKwID9cKhsK6ts1fZAgznM2JeAFoRxHPYjYBqH5o\u002Fmj30IaPrlZGnFTB8TNVQ2TNS+J1Er1kHFRA0tCCO1n7Wiyk9z2Xx3cLL5+XL7CGM3BAOM3VDZVlbZVsLrnAoeJIJlF0lYabczXBin1+utD9Z9kcviYPEQgQGB4ceAIV+8qeLjP05331\u002Fsnp0vHgGCuIC4gLhwL1xIYt5hmVynq9KQsL15tn+we3oJWerh7tE5pqkIBMvk5e8bWrZon8PBRtxUwI8hqEOEsHTXsjXiq5ahWrZtea4+Wi1xvBqnYVqWpQrKHEE1TTdUzSeeRSxTI0R17FsX2i\u002FDVmzftxH37CLKmvxPnt+a2g+jD6xAVtCXgNsL5PYwkzt4Dy5VnuxapPfdwXstl9twCWO5cqlCPXijXPuXDbeaF\u002FyBdvn+shkfqLja5h1oleBqm+X1v1WlG6c3lql5wBK6NAmoF5ZXoSY2M5xNE2S6Q7O4vMBTn6s8VZA7bc3fDhSl\u002FqBSb8\u002Ff1RGl\u002FpCUdzUU+tIpH+4xh6J\u002FDNFjuQrDTgw7F1N815ZqNxkqFKy07KzP2\u002FhnHUdYovljt9V9untw7X20GxyZjGvvYz8vIgAOR0ZlW1llq7arwbX30XIwUMO199GGqmtD1bcjXDOnrGwhBCAELMV6cN2cMnKFg9orYf5Y8ECFw7Tt+9I2XHsfAQEBAQEB195HYCgLSysGDBiWorJhP9y9QBvX3kcLemwLqr4VYT9CWdlC80fzxz4E7ENA0y8bL5ioobJhova9iRquvY8WhJEarr2Pa+8jGGDshsr2RJRtJbwOrr2PwPDoLCEwlIZ+XHsfcaE0LCEulIZ+XHsfgQCB4B\u002Fg5b5r7zeNm4vqq0I3uK8yl+mE+p7KHd32LNXhlktd0xXDBcq3TsOdown+p9nK143vDRYft1V1aiV5kl8ytT45ceShoZx00r6Wz5leAP\u002FVWSbaCtlQXotILrsoioXtg0ZEs04ilBGvTWO0qUDHFFwj3KezuwdYDucmEZQQlRJX8wydWLapaYxptu57bLV2D3h1PrkJgNIoRCj9wrQQg3RyQfuxTH9+Rfu++Kq++b4V7dshDXBJe1zSfkkU32ZsvWaQidxmwTSBrfwSOAwna\u002Fl1koykRcMnuTA+OvVl8DIAbcEvR3j9RycJdyPJwjOPpsIyBn+kTUpMS+7+cnq2+ez3MHsxb9uT3xvZizVFnm0nQRee\u002FFb05bHnz5\u002FfM37ohLNuVddVQXVqGcLSPOpzS9UJM2xuCNdyLZBucXG+N4sMOKYAPs0K\u002F5f7lw2FBykbSbcmfS\u002FECvpkrKBOhgpl8MtS6cLgplgcz\u002FU1n\u002FhEM3Xi2oI4jkUdXXgauA5Ls+VdT3RHnmmzlPxJ9mraaMenFhsIfyiWQQMD1RO6c7Pp5xvMnJ1+Hu79G3lwNbU504gkZTEy\u002FZMkjCO7ImVeHwkgDObpqeerpso937ep7RkqdYhjWkS1mRDEN+RYOdTTf7yRRiD+CNrZygcEKOCXRE5CfrDwJYMjHFC4EWQ0HKcJd2kRc3VQIeZSgzPmU9swDMcgNvdUw1cd133CWvRq0k\u002FP23fslmYZg8d3t4jglmd4zIBP7uouFzb3ia4LW+OEMuY85RYZB0tJSu\u002FTJMN2UOhsQ4CAkvzydhJ3A2k9g8jrrhZSTc92dZ+b1LFNE+IET4OAwWKapTkqc9hTbqH77tlXNNTgaiX2Mgo0cMVP4tbI31KlmQgf5Pertfdn+3S6ujTaZKVOX60vbCnX8kyHmdw1TIdqhmvbrq9bDiCbBiZlPeWWGicSi9tncI1yJfpKPoFguNZ\u002FIfB6JxzV7zzh2cJl3PSIRTVHdy1N81zLINTQwVDU2bKe4VNNI4R5mmoYmscgvrapxpnKDd81zVUr621GymAggizr0QkXsaim9w+W9HQ7DtpY0sOSHpb0Ssk9lvTKXtI7+7Dd3fKa5m436NEvmh53znf6v5G9za977Gjn6N2nLD5oXO91kvNG9PmLv\u002FXGatpfQuP12+Q3snXVcwRN33fd3f239vanc\u002Ff9n8eHydXno+OLztfTFB6zk50b3dPj7eCURV+Pjt9++HKhf9vP4F64f++ahvD5+fQDZGnw5SjraO12\u002F+Mbi5Lro71taumfyee3RxGc+wi3uGJzq3VB4rj54VNv6yjejui7nfj84M0HcvrW03fhsuCirdKDjxff1KOsa1x9OHX+\u002FHoorJ2Llm+390+\u002Fus0WoV2j19tqv\u002FH2t+Gh1il8HG69P+nC7eqfF3tbH1USCPjjvP1pKzmhqaeZkpUvrHXa3oxauzvwx96BYMb56287B\u002FtSEMf6+73s4LRjk27D+Lb\u002FcVvf67wzAuebf\u002Fjp41GgX7Xt5tbexcFW+3MSn\u002F+5b77\u002FTd+Bf\u002Fcscg77Ej3XMBgV5mzQ4erM17gtDM\u002FUXSFsYVMPVNCzqQ5fVL5iQYfsSyzCiXxgSR7qFjFI2oQQQ4EPmSZ1UqG8oV0qv8toBMKTwXba\u002F2QQEvT+vBLfF4R8AaIwBsEYpCxeuKp041rEZWoesATIqCWel5bgoNWOk2zQBLOj+kq\u002F46J0HKNiReWoj0RWXeIvTt8VNfNkwMOLJz+UEkEWQRZBtmTUR0FcXeJZkyZplb3EWUYjDrnfdsFIir4CfQX6CvQV5aQ+FayTBFm\u002Fuhy8Ff09yrI46SPSItIi0iLSlpP66iPtyc2BNYi0iLSItIi0JaO++kibtgWrLvUnb7fPnKJSzsFZnI2ZQYeBDgMdBjqMklHfyYKwutRv5bN5EGERYZfIC6pZeVlaITWrnCNvd7wwYAsdednJz0ldSD0XfmkpPxvONTrLhwFvj6e24ir9CFboE5ehZjhhZxm8zF1hk8WtVpmJrv\u002F737j8JFrJcq2kembyb6Ufd5LJ6elrcg4TH85fQhtCG0IbusuGIP6nqVBElMq1B\u002FLVRWWXkFwNI05oI1+n4KadpdLEZBPJZTvg\u002Fiu4Dq0NrQ2t7Q5rq6OVoJU8cvZT9rLawM9UtiyYZjSrcFXTDyIaLqQ+y3ciLCnpZ\u002FmSmdXtGN5+d7B7dH55cnrwYfN89\u002FLt7ueFvMiNQSgEaKXl5Y+FpJd+L5DR5h\u002FYP4xuGmvhqGYromaVTJmwFo5WgpWF+9XCgeAAiDzgaDFoMWgxWItDKykPL1iLw1oc1uKqVos72MESHJbg0DuvundGNSsvSyukZpXMlLAEh1aCBYV7lOD+p00T2houmn9xeqAoPG7RIILHJJkirlnY4YKvDVbf31DqtJXWaTuod7V6m\u002FYle6n8guaG5obmdk9zGxa9JRf5QNXhgbGdnW0e7Wwdf7o0P6lTP2hnaGdoZ9\u002Fn1s6DllAy+EgzsC4FnFsrCMMgFSB+no5tTrMc03RdV9cdW0NDQ0NDQ7unoY335FRmZl6gIaEhoSF9n8fainl\u002F+B3u5WhEaERoRHcbUSKyToKzaNFY0FhwLBFaSYl4qeZYomqv9nXHUCIcjPOQsh+v5vEMJb9M+sd9WQMe1lD1l7zI4NSQfhT\u002Fo+i\u002FLHpjCzzmEOTxRirYAI9iAlvjwtlzXCUUE53llQPgB9WtvCytoLpVrgBVrysD2V5m8aUnLmXGJHAeKFpPGawHw7OHTBALrTiPt8TZpNGv1ISl6mhQBffE8eOkRbOF9bXSTxY7OT47V35L\u002F\u002For+i1dz\u002F+Npo\u002FNyRVL3xz3KbmVnom7y1alZ+FepZ+qcDGZveOcSowHl4LMqGalZWmF1Gxh2lH2HuUsGUIy1lPRVpZqK1UtcqVNSkyrF2TN07NNrG6h6ZTEdEqfBlR7z+Hqb1I\u002F2nGxuoXG9E4WKlxgLL300YDLZcAVZKEhsoMozWjERHWLvWf7m+MIcFTnxZoWRoFY00I1WxU1q3qePjNoE+2mvCw9FbspfYB2ctNqKsgDWP5t9GOK+HCkg9z3KAPhVjjNWokcZSozqWQjRNJKxcnU6u\u002FP0IeXl6UV9eGV7duNRK+6juTk7faZsxtJleHgVM7agi0E49Izs0VTYRmV9og7QjZFMmyDKroUnrNQXS2aSWgr2AagSVv9TKTVbYUzCAw5Tfh2kyapyNLqtsXF+d6lMwwR4Qfr1xhcYf0a1WxF1KzadbibIx0q6F+CKMjObls1p\u002FQcTBUS0T8icCFwPQXg6rT5RMmxevQvmo5bwabAfLE8nEzni+gN0RtitohqtiJqVvXRThPLk6LFlJelp2IxpV4sxeuPovv\u002F\u002FX8qmmKt5ho7lRB9xbPbyYWsMYpHZ4FRPKrZqqhZ1aN4Lx8oVAx7wmgeLackllPqaL7qi2dO2jy\u002Fe45+haP7Kg+YrY4JVLCPZAXGxxb2W+nxsSKq9vjYqbLI8youlLmifYVYZMAYFosMqGYromZVLzJ0khArDGg2pTKbsqeGU\u002FuQVzCyvDh9N52hVDCmrHp+cmuhB9OVsqQrFSSfB2k7pP0jOtom4hkO0ES\u002Fvly\u002F\u002Fnf1vDqjGWsOnXoFPcruNRPtLIgrHJgMAQv3c0W8wjzk7v06mkm8uJOq7NRXekWa006UBS1xE3Mr6DYEFuYRch8lRER9Ky9LK6ZvqGuoa9jpiGq2ImpWyWyl3fHCgFU2XUkzmt1CfqmHBHbjYPEMsdJnKC0aLM6vSi33qaGYlZxdCC9MsSiH7u1RMsTqmctZP81Eq7p9h3Enqy7xbQDbLKxwKS69bX280m8yUKettE7bQb2r1du0Lwe+pfLLaOeBKo5q2H53sHt0fnmws5iH0jeMZjmm6bqurju2tgqtcXJ68GHzfPfy7e7nCjfLf\u002F\u002F6Kxq1RgWndv0HR4xiUPg4PbVzg8PSG7yk+q+\u002F\u002FvpFRF35a0NBBCgXP4gAiAAPjgBDFMhE0goiGp7LAlYOB\u002FLz4+6W\u002FIXAUCp+EBgQGB4cGP5eQ6svFT9o9Wj1S0kI8uswJSgjP4gBiAFLSwnyazdb8JYM0aCM\u002FCAaIBosBQ2GiMA6SSIi1h8XCLaPPstfmCuUix9EBkSGpSJDl4adibqhpqpYNywdP4gKiApLQQWsHZaMH7R8tPzl1g12BDwmyCcjj8OCc5Fm8EhlVGFEnCgXP4gTiBNLw4lE+EKWE8SxvOmAj3Hi+HRn9\u002FTyYOdyeqwoZhRl4wfxAvECRyKg1aPVl4iX1bB66e0H83awDxKxALHgCWPBEA+w\u002FxFRAVEBUWEaFbDvEREBEQERASsFpeMHrR6tfpmVgkORNWOOlYIy8oNYgFiwtJxgCg+m5zRvvjs42fx8uX2EWULp+EGMQIzALAGtHq2+RLyshtVPRAWnggeJYNlFEo7DgmaWtdONer3X662La9pqh2KdxS3sXSgfP4gXiBfLxYuvHZFmkyMUT3ffX+yenc8do4hwUS5+EC4QLpYDF0nMOyzbBtFPjFDYPNs\u002F2D29PNn8fLh7dI5Fh9Lxg\u002FiA+PCg+PD3yNpx52u0muVZDW4zh7q2FIRDNSstSyukZrNwVgcm4JMH3enPpqFwmtFazmjAgRNiCJe7mucbHhWeSizPtVSPqLbhu76jSZ3Mr+vELDqZkMA0Yz5IqNYTQaOZbSi2qg6OpME3saGQ\u002FJJcUZqDS4gjDw0lpZP2tXyOollweKhvr84y0Vb0DWWTcyVrCqUhIpkACK7IDVho1kmEAmKTp5KiEKE0BQVBjaTQNF69jMObLLuE60wzXN0xVU31PUsYwtKpprs2IdwttrajSQaXavC9uDHioAFwZFKjwyAFHuUf+fZmGwoXLGjRcNTsYAW+5Faf5FadZHZSTpohD4xV65nurCnF\u002F89vyE9btw04JLIM1AKYZUVTrKumaL1Q4k6WX52TVmgaHOyKxA\u002FjXq2X0PaG4iWCXtXkTn65wMPgppS4y0yLgGboRHM4JUwzdUGEELZOLEuYo2baTFPR8kKh0Il2KUJPUPgUmiuO8kbyQa3jnjyc9qOMXm+M2ikM4CMOX70EJS3oYDThuVCBktwIQexjAuXZ3AoHFjpU0rfvsq1D+GPKnvNHFcIfPyRqdGgj1+OQ5sfHbToj5uLeWha3B9o+OODFWRa3NsZaK6mffvUtEFLYNNwNqpDGYcDzJic6WVOGHzmYXNd6Ac+aYFamOq0fPww9+YsMF94x+Hg+Q75M1Q+DJImTXDnLm3O\u002FBKSbynlqXPi0E5YUrW8xQ6XXDDKRWzMYLbCVXwKH4WQtv06SkUh8udsll5N7DCXKHkr862wI4RsKDRtxEmTN1h+\u002Fh9mL0V+\u002FN7IXa8qV6H8QSRrEUX4W\u002Fqx1i7+L8yNXkJ8eue7R4+VV\u002F7pn1NKZceGO5ZkEPgS1GPEIM3zmMds1VVX1dM\u002F9XrcdpGwlfLbmWSqjxCQetVyua6qtWirRPcO3VUqFNSGETFxnNRpCc2wokuP8iVJPR1fkXPq0FYT9DaUVR3GOTFPcB1FTgE5MamNtgT6r1vNpFVZIrsbzvOD0jVKQA61NKA866UZx65RwR5Tcgq85y4VGFEY0CmFGuj3SRCmJwckNJW1DXOcHIs3DGB40goyGE8HO6HY4D1YXpEpHhj1gh0O9z28c3bA+LHGfnm0S0\u002Fo98tL2C7gr7bTbcQJWsl6ERLMNbFPDswyNEuELQXViuprvab6r+ty1fZ8+5UYcI9J9WhGuVgaAtbjV4kTpgo3w2RZUtvrKINBYy0\u002Flc63kQ+QfIdwA2cjw+bE\u002FeiU4h5gFeRLTA40pmn5Ir2gNiN0OA+CvdsBHnIxOrU\u002FfskBPHMMX3PWJY9qORx3iGcIm3HKZpZuMOgYCwXwdmvVT83VpShkmEtMgUoY3UKWZCB\u002FE9+vWabhzNJ3VktFj6bBdp5OhDiRDbWVg855t+tR1XUPnvsYMW9V0T1ctwU3X0e2pzCi\u002Fw1cNl3IiVNNmpucLyOKo73uq45rcNW39ttYvg3O7f8aVi2wPzHQwMGmcUrZ\u002FOpm82P+w9w2TSUwmMZksJfeYTFYzmSyC3qkMUpvMF88+bHe3vKa52w169Iumx53znf5vZG\u002Fz6x472jl69ymLDxrXe53kvBF9\u002FuJvvbGa9pfQeP02+Y1sXfUcQdP3XXd3\u002F629\u002Fencff\u002Fn8WFy9fno+KLz9TSFx+xk50b39Hg7OGXR16Pjtx++XOjf9jO4F+7fu6YhfH4+\u002FWBwBl+Oso7Wbvc\u002FvrEouT7a26aW\u002Fpl8fnsUwbmPcIsrNrdaFySOmx8+9baO4u2IvtuJzw\u002FefCCnbz19Fy4LLtoqPfh48U09yrrG1YdT58+vh8LauWj5dnv\u002F9KvbbBHaNXq9rfYbb38bHmqdwsfh1vuTLtyu\u002Fnmxt\u002FVRJYGAP87bn7aSE5p6milZ+cJap+3NqLW7A3\u002FsHQhmnL\u002F+tnOwLwVxrL\u002Ffyw5OOzbpNoxv+x+39b3OOyNwvvmHnz4eBfpV225u7V0cbLU\u002FJ\u002FH5n\u002Fvm+9\u002F0Hfh335w8DkdFcjIbgXBX1ZjLbcEd1dB8yEIFUX3VMXSLUV9Vn25ZXXBBfI9rEIcz1SQq1WzXMrlmuq7jez65KzIvSu6DHpGZevvc7pB1RUZIXGQ0CFOFesDHnKvABEWR5cxEsMMR4I0w9mi4DiS1aV+OAa\u002FzmKV1yoZbyl\u002F6ACG\u002FHr4zO9LHg3o0hGzcSw9ipKsR9YciTSFekjR32FSMPQyGFdak7UxSPttF0NRvitTwVU6IxphGqecJi5iqMA2qGsJwOCjcMKDjH\u002FrGpJ59TxeWMZNo6FPat6gLS0RcoUNJj\u002Ful9FF0b5iqpTk2xPUmN2xPc1RPN0zdBNVQHeE6s7ZlMyFsQ1M1yAG4DsG9YbumbwrNoLrlenTFovvtOCoUZSxHxYNEOm+7KX19qknrbLVgIldde\u002FLiGQxSr50HrbnZ\u002FJpCwUifupRuLXhAAiEH32Z58Wy+i9n0ARsmTDRIAVoGliv4mtKPOwqDkLaTQoYVt1qy7BbHYQpup8OaCoXLL07fyYrbSZxmLSpPg0eK+OTb1pWDm13Jg8R\u002Frbh9UMT7J8sAH6yvp8ffVwb4ksZYBcAqQGny4KrSvTh\u002F18rL0grl7zMDyrs0CagXllehWCcJqzt\u002FpDZXeaog908LhV560k+Oz86H1P\u002F115MfsYvIupxJCNUzlLwKNGiEjRnyZUxfZonX6wD\u002FUS2itdkq1qB6Ve9q9cHE5lR+ATjACX2ICo+KChizPBjl+wtjlpLPm\u002FzXdqHHtfO8d4S222HAqNxQri4rD\u002F\u002FCaAZxC3ELcatshP9r1FGxoZxtHu1sHX+6ND+pUz8IXgheCF4IXqUj\u002FF+T3Yiyg2ZibSsELQQtBC0ErdIRjgMwqzsAE50JOhN0JqvnTHhlncl\u002FsTcEYWmZsFTFJQ1F1B0taii3WkJbKS1LK2Yrt9iLAt8GQ3j7peVBTldIWkFEw3xborERVQ8EPu5ujeh\u002F8giAcy2XhQB\u002Fr6GylZelFVO26qFyfh6DM7QWDM5+1Ho2W\u002FDkDG0IbegR9zqoth2xTpKIiPUrneBsH30e0Y9BJ0IAQsD3WE++VmCl7V+TS7hggQPNf\u002Fnmj0UOVDhM274vbdsRcGvQllNEKu12zkWaSdFPV3IQEBAQEBDua0OJ8IVMQMWxvPCAVxoQjk93dk9n9xrG0BSBAfveUNlWVdmqB9SDdRWw\u002FwCtBmM37DvA1A3NH80f+w3Q9MvJ0oqZPiZnqGyYnN2VnB2KrBlzTM7QajA6+1krqvwUls13Byebny+3jzBeQzDAeA2VbWWVrXrYPPA0p4IHiWDZRRJW2tUMtxfr9Xrrg+1c5LLMWCREMEAwuD8Y5MvTVXw8x+nu+4vds\u002FPFIzoQCxALEAsWYkES8w7L5E5blYaB7c2z\u002FYPd00vIQA93j84xBUXjXyYvf1fNYmY2bR78WrB38+wWurbKhaFRW3e56WlEEMKpY5uGpjNd9w3vr8FmiGz3baZPiGGauwfZQnefRjwU+c6SaTuO0vEGlZO76Fq+z02dm67lG8LwqWkaVGgusX3Ldi1pNjc5dh3L1pmhuqamqh5Xmes7plB1jRiaw7wJJldhF91ie07IFkXQlSXVsTgVP4lbymYEN433is0\u002F4d2B37+x0XTsDzbkLO5eV86ntuP0g0a+HXUz7qUKfMhdPAfPoeOnbIz3dW7LNrzRNr6m28yhpusZ3HYc1dd9zkENDddg1OB8QdswwBSRVLB1ZrcnDaKB\u002F5rZnzRo0YaQNwatRnEWwEKMTyhpwv4Y59SB3KG7BjgmsnQdaGjFWY2FcYfnGx+lWZzAXcVVjs10izOHU2aZOtPqmmUZhtxo2gZcqAldY8y19ZpNBakZKnFqnqO5Ne6qcI9vmR531ts5SBZk0V4NaBmhaE5f4dI4vLQ2pJeG2fDs4PYsyMYcTT6yaCo4Q0zAigkt6AZp4AVhkPU3lPx7CK0z2OMUeMmRN0fQmb1RidytdPAx5ccKxczVseP5QvNc25hFEU\u002FTfGI5mk8BLAlzVdPyHMeiLuOEEnflNPXVXmHfZF3ZX2Tc8yQoVBOQ1jJnJahbmmZRR3DTcG1LqLZLVGboOvUc+EUXSbCyODzGXbk9cpBm6U1IHWypnO9KPXXci3l\u002FfRqip8FXRlhpjr1KmpfRbn12\u002FrjJxuqENxvHBdi1DNPluuYaquapBtd1BmGCKSxPJXKr+eLifEdpuGEyPg2BuUKKOaptKDxI2SggqskWhKhgKgRQJyOAMrSubLcwuCkWDqGG7vquaWm+o1KVMwK\u002FueF4BsCBo96msyNNULbzncbzdlrQTONtrMMAPjrhT29mfba7tStDm6kA\u002FfbNrNshDXA36xnycTfrh6H4NqjtNYNM5DYNpgts5ZfAYThZy6+TZCQtGt4jxy4n91gbKHtt4B57WGGVqrwsrZAmng6ChcGORESFZEw1a8Q518iG\u002FGf8R3U2UB1RHZfCy8z+MlPby4x3l+HaF947PLqKYlsc73310tZ2SEI\u002Fam1ehG8N9UN\u002FP9B\u002FI3vhQZLF8Jt\u002FgA9tJ7V11fOP3jD3c\u002FL16NsX39PDvmV5zT21G1436MlJ7\u002FPX9GOL6Xtnn76evX\u002FNz\u002F40yIfjb\u002FGfn7Y2SfrlQJX7tzjCPjig8OV1mHzz2ke95Dg47Ly5phc9Kzx4a3evr\u002FvdxOlet\u002F336kkrVFtvo\u002FfH5OjE6H\u002F+jWx1Dw\u002FfbPNu61DfCu3W0ed3cOzD9rudwyOwxR3b0nc\u002FE5N0vx5eOL637W5f+OTbNrs6sp1z+vG48xZeDO8LP3w+cj5cfD54K+J+JwuOLrrwHLV7EHz1v9oH7NP2mdqOW7p+GGZ7natm0N8\u002FSGN9S+6do709cv1A3XLFG+\u002FTyZYZX8PRd+l28\u002FWZ4STvd7dPg68xaW3D0f1P3\u002FqDPWXuWReeTQB1zSEap8L0VG4Sz3IJZOqaUB0hCx+G80QTQN3QObF1xzddy9Q9T2eGEJyZpuCOZdq3Fo9HCeBt+Z\u002FMzf\u002F57O+4b3y1vi\u002F7kxsKY\u002FKHyR8mfxjjYIyDE2JQzx559FFFJsNAJJN7GZxLhqaDc8l+0HwqP47v7GJ7e\u002FfsDEfvIgggCPwgCJxlNOuk1YYBBAAEAASAHwSAQ5Gm+VC5CiNA2mEM2MCB\u002FAgDy4aBv1HXysvSCuna3\u002FfsZBsNKtY9n1i6O2dqAtUsomuqIYRtU8cyHNOyXeG4KjFMjZEJEZSgh+w7B8BOj1hNM9FOFS5acQQ+jGZiOGegeXPWx8Q0BcXrK51U3i77zAYzxlOFekDk+tTMgqZxU7YqY5praYzr3NOEqqsq96gceMw816KWMewqa9D2t9YPTnRRZya6EOceE13OQBaKtqEcexkNogGr7Y4XBky5Ev0xY01jpEWur1my89H1NNV3iMGIYQuhG66uUWEJPqtcBtMEI6bu2NQgVKeabgrDNw3bNzkzXHfFxlsPhCkVZUagWRNQoNGcAqF52GKsKZoJjFlDdJGeZXgXVZqJ8P8Yz7hohLFHw3WQW5v281kWcnJFndO06cU04ZdCdqhmQLSQHeaXXkijK3hiQd7O8LKXdfpK+b0BQn8JlhFHjVc7EsxlzAqvLo5Mn3\u002FfCdgVMECTbMEVB4CgDbCyII6kXcWdhEm7kePM4zhMv+eu0bXruaHlEP21E2diGsZpCCG2Mv5aCyI\u002Fvk9\u002F8k3k1tTFkzg0W1tTiKbKD6l8sVQxORVEG95RSygPOimY3m1KO3YMtYlLiu5mw4YP0xx0qg4g3NE8z6YenWNlVKga8ZlQheYbzLZN4djE0X1D1VSHWytkZYUaFNZ2BAowMbdr6txxFPaVXlNESj\u002FuKJ12GFMuvyYKTfutloAUhk1ZZ\u002FxThnnTnIryg8Jo8f74FlzopIJPTG2R17A4KRyR1MZ5Pmna79TH9jDPCdlCt4jwbBNg2\u002FCpwQzwSbrJDK5R4lNr6IQ+95Prx3BCZEPZzh1yh2UD9vPYSwrFE4VcAsHnOaSOSVxCfX\u002FOXCkhLLAG1VQN39OFYbjENIinmrZluBoxrcqHNWk\u002Fyui1HMszlAzLh\u002FhMMuXTVhACNEHAE+djGaZaLYiaINtsARRNRbmq9Xw6sFXIQoScvjGHumlYJDPKMqLkFgnlyFWM\u002FCpENJLGQF8us\u002FjSE5ddQDfQhQmFkXIZToMJwAOlg5AwnZ4Y+pPDnbb5ETnGyS443qm0451wpFKpWFqhasTvYfZCZiS1Vr4caR7Qj451kkAewMJYeVlaMVVkxaypIFfEdXlkGEPXsqAlZo\u002FKAdDy6A+PXIdA07SoSi1i6YbpCt10Iey0DN1RDZdp7hMdue7qwqS6R2SyYVmqxolFDJWZvkV9x9KMu0auP9GIdtoGJX+SvZqmDWPIFhs0zI3sRZtap+KmWsDjJ0B6Tnj8cO\u002Fd+O4KFmV12oJf7eDSh2b8lR822P7cUtYDk75\u002Ffn6iDNY7VA6nRUcf+uXFgjf5Tix56hL2aD996gnfw4n75PjsfKl2MV4RQ866mQVQW9iq6wqPa4amEl+1TU84hmp7glGLmhoC6GMAKES0S0bPIGJhJ68GLsRRPizYr7fib0EY0vU4adRFVLs4KxD1naBJVN+OW9D0lzmcBRD81D8K77IlWJNGAVz0sUmzyyC9pJcXp+9+bdOsKcsqw0L8Y+DvCdAgS4GnAxqWB755X8WS5Z1Q8M4iSR9H0sO3L1HGzw58pUm74vn0WkMP98a9OBn24q4pQTETMvfx0ADSxy5scGjrqBbR2mzAMghU6l2tPlgfOZVfFrfhqzufObXu0qIXLK+Z1kBMIBs\u002FECGfFBL6l39Y0Hc2dRmiEpU6luUQz3eIZbimQblFbE043GGmqlMdo5Ila82o4LHksCQHhdxpSVBIRNZJIgEAEf10uvfx476rPoYTHK5zouzni6ItOdoAKQ77gwOpQMVih0XzLstBbkZD\u002FzhOPBHvH0jYi1Z1Wi7eK3cBvm2bciFG6tnCIybRHJ0ZzCGOwVxDJwj4y1abqXr2I1XyHvY96Fr+adeSKelymq4tmByxk+aplVTQYiDWxOjaiRYdLumdtGhWLEwz2e5UDtf1A9nyXn9xy8u9nII0zjNw+F1zLFWryUEgNeA8t5Fa8Yb1ZtYKb8nLDs6OFXnzMiu86G+XCJwL160rl8O1XNc2wOUSoXHdMyzNUHVTuJ5tc9Uz3FtHdKLDfUiHK7uKK9Z1Jo4uPP8Ru84GoL81Kbkl4OrsgmaDUaO+anumZti+6ls6oRDSWlzVVJ\u002F7OmOWoc8ZTOqZpi5MV2iGb6ke475LXGoK5jNd5\u002Fqt\u002Fdhl6J3\u002Fzg0ibozs+FXX5H\u002Fy\u002FNZUXbIPrIDf6st+iV4gy\u002FQ4LvXHxqWu5evzj4dAjyKlRtCVoZOcbDQ5cPUfHLdq65\u002Fb\u002FPvGreIyfThsFZfpwxGHOOJwtnnAnro0CagXllehJoa5zK7uILu0aRaXF77qc5WnCnKHqHwR7Sj1h5N6O0CpL53yroZCXzrlwxEDKPrHED2uNoRhJ4adiym+q6\u002F7JkOFgpWWnXXZl1BZpK1VVOqqiSJfMt3EqaxXPtfIcB3Dqkm9wpQblTXR\u002F1TURFWnqsqiqsPRxrhmPwbOS1mmcxWW6cW9LtBucJuYf2Cfi+qtbo3bXKD9o\u002F3\u002Fc1tcVBAB0PbR9tH2f8D2Z3a3qJ7x4+YWiACPgwC4twWq2jJ4ue\u002FeFrNLXTueb5uG5uu+TRzqct+kmuOblmsRx7SpGI555qfHydcJ\u002FqfZyoeiP8hS1\u002Fr07MlXr0U2fSAfQB80IohQk8GC31PDwZvTMwcnlsL2gVDLo8LQXdsTum5xavqWSW3D9ZnlOLOTGizqu6YlHN+3DcF9zn3dtHxqa3AXYeak+a7ApIZ8zexiBsyEhAchzLOnPlWhEMzlSDDz5ig8z5ez9+QeKFlCWSb4WEGfuvzObhPcwGqVwQ4AN4x5XZErEnGR0SDMt5XpZPMuW1NSIR567vOrQXysFFNRJvkZTNiaWBumPcIeg2g6pZpmqBrghsl8Tj1dUE91VMfxrTk7Vvged1XbVx3blavZOY5rWJbvaipzVN\u002FX6Iphz3ZuFsUcX5wYdbu1bKB4huLZUGjYiOFBzdYfp2ebxLTWrkT\u002Fg0jSII7+0NZGcP2HXM34JoZPLWhcCHj+LlWeY2i66xDmWNzVLaJbvkm4ZbmUcKba6jBq6pvap9ePEDUZG8qH8eYosz5qckMQgA+h2RqZhRyVGIbwdNMmHjeEaXEmmKcK27GosHyfrxjkTG8RMph8GAx2MRsHQA+3H8ZOcqgeft+8QtwPAycW4sRCrINgHSTnJUjHznw0ffyPtEkhEJDT7SEkuCx2DXvm0VRYxo6QzD3rJOHg26Kw4Plavj3Hggnq8origlQk8IKTfLOytyLfIuH58x\u002FeJEFoQm5Nx3SfywKN7oI3dlTX07hLuJOvu\u002FAUN0lgRHcYE0K4hBmUME2HDMpjkDzp3GYcN0lY9lovc+1uyWu+UGUrjkMBLynWhMqaEkJGK2v1mgLiuGQ2mMvJnV6\u002FNV\u002F6ZNYaPVVnGufEhP9VrmugfIwy19RMQl2wzRlr1G6zxkL1b7PGmjTD8tnjnL1cbM23GSUeEzIf4r7BPZeruuM6nm4J8X0wxYKEhXeIZjY5ytmcDxcesahhqQbXTc2mtuVRW7U8ndkupcw07lyL8WE1N0s6YrEP\u002FqdXn71b+WflxwlXiWa4BjVN4mkG5YL7OtdVprsaFXfC7cNy5dMwFXNYi+JswF6+Xh6jnVQM67FUaQVpi2asCX9lPSGKOmM7Cbpyj2u5yahcAHC85+iaEidPvcrygIsx33vZnwdc8XGgMvlOsiwL++P1hcQ897DARzBdpw41TGaYVDNVk5g+EVwnumYLE6Dxn47YSuojZkHE1DzGXZdYtuNxqgluaqowVGLrhrBMzceYbclGNy8rWvpi6EIptta6sZ3zCMjvck0O1x3ia4Zp+MTUhCzKUpUwR1iMepaPWrVsrZpMqx9Vm3hOQn6QB40go+H9tUruvOcanuMTlxm+Y3AGmaWpq56hWZR6KmrVkrVqVJ8pi0oVaj44wr9fw5hGfIc7hmcKV+WU+tQxXE4tV6euUHF5+KVr2D2Gczy0os0MtYm9jOYLectBI8tJEWeHS\u002Fw6GPk16CRL80FZE2Mc1hepuGboqss0SzDV9R3LFqrFLJuoLnGN\u002F9fetzTJcWXn\u002FZUOOEYxlJjEfT+g0ch4kdN8ABg8OKQ0DMR9oous7mpWVQNoKrjw1httHAqvvPDCXspbh\u002F1zLIV+hr+T1d317k5QElmFSQ7ZA1RXZp577nl837nn3kw6u97E\u002FwRZ1szSLyShmAoy3uK+QckfHiQoaPpL2\u002FvX5+O3x8v2LrrYu4\u002FG2VRt4U7LIkF0klOOm8iYyJX1RemfneAsL8X8AnZ+92Q6Ol6oIi1H9A229yqc\u002FrBie3zd9hZP5j5TTuRcq1lv38gyOO2y0bJdLzJBhRwyo9dtS6neu46x2UsxqCuDejYuWsdmTnU0ejM5wA8KOFQF\u002FDS8DtsY57\u002FlQdFPHphRereGjm8hWt\u002FP0fdz9P0cu93PwXd3SO9RP8faXkMkUTLAnRV4cHw6Gk+3nhS986d\u002FUfq5kP6j\u002FZP+pEz3V\u002FgXTz+f1bguNyv95Z\u002F85sE+yPZBtg+yOyb9yWC0v8KnozCe7HOWeDYNJxkM8v5sIJM+V\u002FS5os8Vfa7YTeknJZ2NB9Pz\u002FR3BZ+X845Cmo\u002FF5H2n7SNtH2j7S7qb0+x9pVxfq+kDbB9o+0PaBdsek3\u002F9AS3vi9lf6rzTzD0\u002FatkvkimfzsfT5os8Xfb7o88WOSX82HQz3V\u002Fp7bZ97H2H7CPszjqU3s90d0ntkZn0i\u002F5nlH41f7W8mDKchHZX9lT+Njo9HJ5P9HQA1Scv9Ff9Ze27yC6DBfs2+z3M9nOrP3nvPzGzv4NRsX9ZWOLXr4reibpU+l7qzkl+d1vys3aR1f76vv38zZx+s+pzYm9n7YmYbXwJHTGyXhb7953\u002Fevyit95Kf10v2z03+\u002FGD26pilUyLPJmXxLLPV42R6h9rdIfUO9Us71O3eS3ov+YXB2a6z\u002Fosjive2ajGZhukeF13q4CQMt0pPB8TsrOizBYj9XT189vDplw+fvnzy4t7nh\u002Fdffvbw661DoTdrh+lod0+J+autou\u002F8u7SvXqLdr171Wbqv1PVm9p6Y2V4ypr5S13tJX1joUKk7H51B4AGEPMy9x\u002FQe03tMX4rrvWR3xtKX4vpSXF+K25tS3P3PDx8+ev7y8EFfgutLcH12ft+zc29muzuk98jM9pIp9SW43kv6gkKHEtx\u002FPA3jcIw7fH9WJtMXTw\u002FbgRzk0XEYnOBW4+lBeZuGZ5leBDV7e8udg9vheHI7nA5uv+a3T8M5DXFCf+hdrne53uU6utxl4fvg4p\u002Fz0dn46sO5rz27++jBvcdfvdRfsaV\u002Fel\u002Frfa33tc7pbXI6OpmU54PjQiOp9IYkeqXhlD4Ik4NcavsCuHh+cPjs8YEzjM9dUDDuG6Yb4Z5zcYf+VX\u002FB3J3eB3sf7H2wsw\u002FOtmVcHSe7vk2j96bem3pveseMdm+Uz2kkl3\u002FHDXLvSb0n9Z7U1ZNm73e\u002FOvxg4UXv06X3YPdO1TtV71Q3OtW4wHdOemfpnaV3lr6br\u002FeS3RnLfnbz7fdpYDc08+10O1wcjYYlnGwVfuf74WanfVzI\u002F+v9Uv6+9yLOF5QvxvDhnln\u002Fvk\u002FAyr6aXv0\u002Ft\u002F3PV5z6KfhljgZfXnDoZ+EXdYR787p0PwU\u002Fr\u002FwrFc6LgXzQn+raE8++Ub03s\u002FfFzC4b6fauEHj79toi1JvR2TDjGVNagcJUTCD\u002FweDkYHpU5ku9b47KycHdL54dzGruk4Nw8Ozwk0d3n794+vDl4aMv735+tRWsd8HdHdKfggvuep1uUC\u002Fh3XqdaOfx3fo7bPbwRTyDyb1hOPlua7Vu5wewBWX3MLsPvj9v8N3LALzUNrAufpiOjndW9hqGk0t\u002F7zd\u002F987+czr7j7297e6Q3iN7681sd4f0HpnZPtdwLnT7cjp6GcvL12E4yLTHrK\u002FA9A60Aw7Ur7D9ezZbzKzi+ehe+XLF79+rQ7j2x4j2sAI225S8tQC28wegPXn87PnBryZ\u002F\u002FOPJryYftf9eHYm2YcV\u002F56ejSwfbzg\u002Fi5i6wnR9Ct06qvRnGQh\u002FMB32xqAeFPXnvzew9MbO9XXyYji9Dcr9Y1\u002FvKL79YtwfFrslRENq8GUyPnj6725e4etfZEdfZeR7wbXgd9rdGMSnpbDyYnu\u002FvCFYbdPbQhFZfX\u002F5elRh3Xvu9A++WA+\u002FhEF6V6eHJZBpOUtnfcu+z392dI8CrSm9f0+pRYF\u002FT6s3sfTGzfefp\u002FSmrvfvsqvvsPE5bPTtgD4cAx79O\u002Fp4o\u002FvuJDr1\u002FHBKUu8dk671gKkv8ZC8n4YS8tDxZPAvt130G390hvacZfG8XeE\u002FKm\u002F3NI19p5h+ekMVkpJRnpyVtDcU7P5Z7YVKM2ut8+KDQVIwv52AfE0puh7C\u002FVrT5ZK89nAiY073zaZns71Q8AzbMYZzvH4XxpEz3+ACCF88\u002Ffumudu1\u002F0Beye4DVF7J7M3tfzGy\u002FK3GrLQ97mF8GJ4Ppl9efSL3zY1iqJvYZsg9dfej6UwhdZ6e0o3V\u002Fw9Y123P3cDZ60rg7I1kmjX1C7BNiTxl7M3tPzGzfe5\u002FOxsMHi5Xu3m12d0h\u002FKm6zPyeo7CHVunL4fPMun77z6d8RFT\u002F9fHmVdA+R\u002Fb6vkW4+jnofT055P9niHoqfB5PTYTh\u002FFK4O4vl1z3l7VNVz3t7M3hsz23fOG9sGu5729p6zU56z07Q3nl8tbv3tN3sIkK9WGNsFLmoxGLyfx8\u002Fu\u002FEz07c27MIp9p+7by1g92+qTec+2ejN7X8xs39nW68V+zt5ndndIfyo+s+sbMW94zd\u002FOQ7P3oJnz9Z73oF\u002FHdnt83AfhHh\u002F3Zva+mNllnv9x\u002FzJ9CtN0dJno9zDNPHybyul0MNpjsHJVNerfatDHq56b3NgxdTQebT8mZtel3+sjbp6enUwHx2U15u5h2ugr9X3I\u002FWUgYm9vuzuk98zeelvrba2vsvRm9p6Y2V6yldPFw2D3T\u002FzJNEyvEX+n+wVfjwbb2+t2nqEch8F2frXTel\u002FanriXnZp44KQvyvXp7RdhiPvnLs\u002FOJ9NyvL9L7aOz6f4Kf4pgOx3ucSnuhkaHnX9twe1wPLkdTge3X\u002FPbp+GceuEm9Ierdxns42be+58fPnz0\u002FOXhg+1j2PmJEYz7hulGuOdc3KF\u002F1V8wd4exvZ6ZZw+ffvnw6csnL+59fnj\u002F5WcPv97jGfq7P\u002F7xj7fGZXI2nNKf7iz8\u002FRmIx9mk\u002FZR+PKMfH85\u002FfR9pff7LF\u002FfvP3y2+pUvymQSXs2\u002FNTlLCR99RH\u002F+8cfrbGDn9Zb5t\u002FnNF4++OxnZ8vjj7+Pk+P5QDOvJ8d0Xw88U+\u002FL8dwP5K\u002FHx8HA8HeH\u002F85f4wR9MrGSxPvo0+a\u002FH3z\u002F64dsa5fDcmHj0MXs9fPsqPHny5uvvJ384TvLjZ199\u002F+z3n+Rnf6PEl49\u002FGP3NV\u002Ffuism3h6zgRq7Yw8OAP3wyHP8QTx+9GT8efHH26dvw4o0ZHn5mX799e\u002F567F6\u002FPa2\u002FZ0+Oh+z4s5PfPxaPnqjzr38l7r3+4otP7+fXx1\u002FIe0N7\u002FOjrz\u002FHZl\u002Fc\u002Ff\u002FDFozI5fWCNfPi10OL191+8cDXe9\u002FdfVPHD\u002FfTdI+uehz88PvsMD8bzhl9+\u002Fch9+eLrw8\u002FK6PxsOnj04jXuw14fDr6v39vD9NX9Z+x0dCzlF8Ppx2ffHQ3Of3c4Gcl7uPoB\u002F+yRrwN2z5dP41dP7unRW3z6+eT+0SfPlBv\u002F\u002FuH9p4PvR+L4Pj793Vc\u002FnP\u002F+V\u002FIB\u002Fp2\u002FmqZfM+oZQV\u002FD723tvbK13sx2d0jvkZn9uGJltzEE\u002FMyD18s\u002Fj8RBDtPQtMMcZIxDpyp4qZEFJV3wKspkvPBa86QzLxxDbr\u002F3RB19N1oY\u002F\u002FKwKvTTvCmDV0fTOweWsYtPJoMfyp0D4egrrZkcXXxFth9d6kmK07d0nwNu8PGltf32aUll8LocBGhqOqiDFBaaY35z+0j89jenM+HOglDcJ+kh4Mr4DNOSYUQixRwUkyKWUGUqLPJarRQLQ1oQmSuSbz7Hv5buw4PZfx+sDIV\u002FZBU+KtMp5geipZlWPmK6HP\u002Flwehs2n67fcZsyvEhuHkdjt40b8bh9M5BHJfwXUPrFZcqaaaj0wvNXnwQR9Pp6PjOiobuVjwUVkN6wmNXNHVQx6Pjg7snuPDDi71aB9OjcnC1heBgVNsPxuX7szKZfnTwHH85HY8Iz9PvZtfQjRe+tXD5YIK\u002FHA+GYXwA450uXDw4mY5H+SyVjD+2v7mctnBwNC4V2v4P6eFnU3k1lN+FkzykuQbLOB2dTMrVPIeLbxxMSqJhQczRxuF8CKMbQq306QSfT8vp5M7cI377m9Fw1TpUsUkKWZMvMvDErVSpaqEt\u002Fqs60QLS7MsnGe6PCxbD2XAwmc4mtl04uHOQSxoch+GVzyMEVliIkIvGzhZt\u002FWAHbI6mYDhY1YywpfISvbdF5GyszDGCOdhsi66FNHMxLY\u002FjNFzMcWtqCy9bxujGS6Yz3TxxH11Zx+3hYJMwMTmprMlS2BCi0dlHzo2uXFUlYjJXwtyH5UzHZ2m6+thYZk8ewCKXAv9KPP8PktP\u002F2nMxFr\u002F323PMzPHpsPWGN4Pp0WwE5yfT8JZc5fK7lDKWA0oN8JDzOwfHo5MRTVVZmvTByRHEmi4mhmZLamHmg+VsciDajNJmBtgEPpiMhoO8fiHZz0UCGYc8OJvcmV26ZFNXklwTnabl7fTCF2bh6UrxFwny5XT0MpaXr1eOmf\u002FNbdLLxVfvLE327dHwt79BbppNeQrj3DoTTTpl3qWATr9tp+oiLV\u002FmpsFz\u002FenX+MtSEm9vNXO6+U1OXp2FV236Gob287kvr7lX51BM0i8\u002F+hrcsHG6fi2k+PDg8keLIN42bwZ5eoRsqtlyXPjJeKN9kPJ4xsWPD9bEp\u002FrPF4PxeDRu7XN3T0n5DQDOUm2pyaUGKnjtrMQ98t+ZIb1HyP\u002FPhtO\u002FPJpOT5vjMj0a5T97hQh+9dnZeEAf9CR0d4f0npliGg4gIlAb2d1H9Mklnm9oi8P6p3GUz+nTjgQWEH4yDWOC4nKd7LFYOQCryiwUU7KQyRnJk6iRe\u002Fxn\u002FnThPPOcOQHCa7JKSTrjdAVwNqlwb8CNr4DcJ2W6QhJbFrkIp49KgBncCNq1ds475l2V1TGpsqs5KhWsdIUr468e+eXNlKBFiZdknzNfM8tiff615aZaob0MTDmVmEpO8CzwSC+NKftK9uN4RmAvPIF8hgog0+Phb299eCsX+Oqg3Tl0686tyfQs4sOLDsjJrTsnZ8Phh7eOBrk8H6Vbd2oYTsqHt06Bg5\u002FDzHHFo8dPv7j7+a3ZZ3SG22HGp1Uwy2uSDXlTo6RTTUyIqELnStOoWc24JoaTkzJ+MR5ePmh6hCh8EgbD9rNblIcmd27fTvnko5NhGH\u002F3EXjU7fMzmNJtdlswwW+fnry6zYVzyip+mxthjQQHs6CeTWbVqehM45g2jfLBNkGF0GQuvGVCgKOHj3D9X79tRpNJc1F++Cu47StaU0OUwQz\u002FStx\u002F85Jrxm79+OEtRLfRrTt\u002Fd2t2QPhspN4oGI1ocDvbwEBF41WRTckmVsm1VEpipCfhmLR198nhZE3pCbM6LU9mbQrPIAKVX\u002F7p7\u002F\u002FzaTg\u002F+PX9o5K+g20cXPz+g3\u002F+h\u002F\u002F1T\u002F\u002F9v30yGr0a0jX\u002F\u002FF\u002F+8f\u002F9n\u002F\u002F6z\u002F\u002Fwv\u002F\u002Fp\u002F\u002F79h\u002F\u002Fyj\u002F\u002FjX\u002F7nf7rUGqbwu3B6+lE4mVLAPkXkSh+lk9v47LaVjCkh\u002FG2w7OPbNWeuhFOZ3x6AA4eTVG7DyRRGAorsmfJZegUmz4tCdIyaW\u002FnXJ8gth\u002FmvDh9wK4RmhmnmrcXoYMbfYVghXXZh0EwPfoCnTmYD5h+xjwRrxukjaUk5UzKtv\u002F27WwNSqHt1983x49\u002Fl0wf0m5mRPbn7yUP621ztElJJm3wTdBSN4iU0ztbaFGFUhf8GUTmumJRhSaCST8L0CI+4VXgpMUndYFi4jKXaBC5V4wvigqrW12RwWae7fzOf1bZ0cTG3k+HZq9XRr\u002FpPOhoM87ictKNeHmOrA6ZiVjKpJtSA51uVmkjmmw0mrVaHkKjmRvUYQYKy\u002FYqGRLS6GtnIkjmsP+YmGu4xGl54TgoBdpOGQhbJqQAeqjOcpqo6E6JYD4U4CRdzpKEud\u002F9mgzZeViCHW0sq+GZVQT9+eGELNkYnI0cYSRZPyfiTLyk2OTqlTS7GFrk8auZyrqW4psaIy6RImGBcFrxVMWhlId9cc4e5HJ+OgIvS+ZqxrSpGCFMS17EJhqdGOVPh6DI3uvAQ4CyYFxpXJwHWFDNYEORq9CyWrDnniFoVFiuNbryA36hsbCw+GKv08ugj4IsPFVqSsBZlc4LdatXAtnlIyRvvwnz0F80YB3jqiCDKjSpIPpSk4DPWwkCU1bJBhvRQAQJCFMVyRtPRSYo1FUCkq5EXJwNuoBvMf4auWWycNqrJqors4X4+rYxclRxThoZCjhFmyxHrGWbBa898TCVYuzDvdDZkWy2eYZJwkjeWFm9USMc010m4NYXkwavBNAxfzsX5Ed8ZIlVMpk8wb\u002Fim1kqVmG3DJRkbk9B54lAWlxlRQprEaqvVi2E8OHz68P7zx0+\u002Fvgw0hTEeFCbIC\u002FwAyopNtDE0mke4ceWcsQWDeXxCCOXgsqHu1uZAtvaQyKoxELRhBf6ikocPeQbLcN7WRJFX1oUUeQYqOh780K5CrD6ivV\u002FVDPHFu4Y5Q37hYF8JdiILs84lXazKy9ZBj\u002FF4XCMRlyCBaK+oTRKOpaJizW3Yv5BgYz7+9V2iNw9KHEw\u002FuNEuImPGYFxNlBYT7nJBrNC+sYhbcFtWbCX77STWml1MZhK9JL6VSZ7FBDMdn83DJ+PWa8WR3mqujTIKii86I6A7YN2kRJZqWVFFaY0YxxqmdevhpQHkRui1BRgL8oqSFhQFEnY2nN6oDh4AH3TwjZMExIJQsNBSGpt9dcJzkRWhzk4PX88psJdLQa5GnpCoEHIQhVklVFbgE95xylHZMyT1oFcCCOhNNbX4pmiDR6oIH0XUalyuErHdxZTcfOTtStn5qqneYBSkhMh4I1OB2SqTZwlEVIgkuWLMU8TpJMiaFmYCkS7W4MaC\u002Fy9iDGA5GAMCdJLklVLhERwW6C3XIhRRgpRbvPLg\u002Fnzi5xoMJXiHzNB47yE4B3zyvsK4WQkwQmmqKJsAhyoWGEI3FRaJ8UrTeCikYbnkFKsJSZPJdbr7mlraOsjobLJoJFuxx5LvaCGdzUw00SWE9ohch\u002FQdm5QyUGCRkRWxPH5dgpEJs4r5JG8mRxPGNIlbxiOYLDLnXKEA4cPz56Pvys2GUyCB80grjllFFAN\u002FEgG0JlVg7ggqo0mUTs9fd5+2AXNKgkCkW1uMxXE8G4ivYbImSukAJQ6PysxqE6SSTC7kibvtPQ\u002Fa0R3cxUAv1pRXAGqRcFMd4JQVBohohPiA2a\u002FIXkYXKROLG7SB4Ml8UqrBk4GFHDJq5MY3NRgXGWBWyYwAape7b7eXZa10MxkrQ1Eh+iaBNmGeYKfAKqnRlcggd1oUvxJuK7JvNUDXWSBAk3wBuL+Bp2sF6y6Y3LlaIRsEujnaAjSWqGQjDIHmioAaAmKf8LVgGjN8h8yl07M3RluS42JCaexLyriwF+QuBZRXGsCQFrDCqWFDDRB7gjFCNS2AW9bqDcNyDjIp28TMYIIBKCXGhOBolYcjJAu0QuATGbRkPJTQC3IenDcyFxoLXylGZ+XsBvC5GCcWhrcl\u002FD1d\u002FMYi\u002FO7y7B\u002FX6M7yPbqApSuT++TbiTr9\u002Fp45inNZvwxLOXkRjl3LQ9sbcgQbbVnG4zUmTksMwcK7WNQJMFWrHOvyoCtMHHiiNtkhaSGPMMRvk5rsU3aI3tzbBeFm2KoVEYzjAlzdaNLMOyNC5AhtiMOqQimxOA2c7XKEOYEhkDl1EmVt7l9fCPPyAljNtWsMroPaG7BeKEPUghyApOx4CjwIaWJZwU+SISwaZ0hpyBqW8nbwsuHCaWlzls7luTLaJ1\u002FgzC\u002FaFZgbNaGrCzkE1iDuVaoMgIVWQYEmW+24V8W0BYwucmzWxMvjS0mWqIaUMRSfqYRGaVqCZQSE1oZzMHERHOBCmGuuwgGiwK+d8RRcBPyfa43I6KnyZI01K9nTArdLBOwG0AfWDoAG2QHqEcRqTdC6igsQfQZ3Ls3oRq0FFTKsGimcaaRGLkTjAK4BsZA1dPQwDRpwJxm2QK+Xl2Y0VwIgnUZijMg55MogVo0rRTa15lAhRMBMLCshIVMLAQYgdISSNRUTDXSXkXCZZ4L6i+ZKGJx8fzYYl85aAFkIVoOogjXCPQzD8LwvjWZcFcDjUiohvk5CrFcwZsIsqOGbpaEtRKrrCKlmVGTJSNYm00x5AFIFWi1i0ioqwkELla8L39nIEuEW3z95+9VZqdfVERmIeiL0yXwAU7MEyi0IPbIm+JiyMAy2yQ2N0VyBtGkDr1IBEMM7lZsIXkrhSWDGqRjU5e7frPKpDUXftbriGuOJTiDpCiSbBJSqsqDiocesKWRbGRwwSFw1Ns4F4SIOTgTzJOAdkLxE4La4YkC3xBrX2yzbDcQHAD2b6pDIMohPAOeIsogGMUpEV1iwQbR210GeNbtLF+KskuBlcDGnxFQuAGXArcExVKLqmskRlBPuHRWvCE0rSd3nyARQpkuCeFJBsNUAH\u002FAZYRS0rpncpKYwORqUcXctWVmAGwtBWiRdVRlDtALBUQlwIKkoZFt47STOmpZejU6Ppfj2bUctCW6stUiwqZIXCqLunFdkP2W05IiF3K0gWfD5rLxuEGY9zTH06kEVkkLy9Z4x6f0GLb1TUYVGrpDrqkUQVZoYkEKeD9krnwtDsm6rCF0kWTejmURtUWVrPSX6yjzdS6uZO0MC52LDk2RJIkKFvJrVPFKtDrIJjFJAIWEQRRsBhFeAxr1ZXB3avOBzo2JUdRoAhYpHycBxAjABkZ5sSs2qZOirzW5dZFlHxjMpXqaZPa\u002FCgk43nZPqEJH7PDgHo8UFQ+gF4KSRWQUB1VrjVhTIXHWuAvTBFRjV+hylZOg9cOQDV6jV\u002FF+tQITHooQCWpLEnC2iVAiVuH4Ahi8qxhbCdpJlnTHFALG22tSzydS9GHz2SXh7XZqKLOXMoGZjAy23SABAl0NTvHYhFg5GazalKQkqB04C6uuRyh0QGFK5Ap71Hl4tSjKUHTvd\u002FZsb6qM356zLwuUWU+okxTxEFa6QVhKyHC8wJVACL5CLfcwwRRt8qWVZh8ZE2qDAG44kAGgBYAfQYxsDdpZ48YGpxRDVeZA3RC1lZZUFCCbFQmiqNfncVO2qkgZkuKWtnYTbYlttMf6KSW2pTZRgmAACDdaTumAJzrrUWJGsojWVGlc8T3iRKlADsIuHZ\u002FuEfGQhG9UfFS8Idkul4HDa9nv8BA2B0wYGT2uyblF3hR96ICWRMuPaOC8Lgd5O8qzH9Zlcc7sJYD8JLLFJmdbrhaVFNWDiKJT00oAgsRWcJDJYIC11Rp8Q9TkVZNtJ0oAnJkaO\u002F18NQe+a\u002FL0PurTWzBWkMsHBkGE0IcWgra+gJeSonURZ08G39SRG+fbVVuNQKSspEcl0sjAOrwGPoioN0LfFk4DQ8oovdbxiGab\u002FBL0khFQblaKSMCIz+C6eE0HruRcyWPCxRM\u002FpJM7Wos96itusJs4108JEZC9a7bNUhaBCZIJIknnHU2UragI8U8H7RlfyumJKg7gUwKER4orAbcpCSfgnoSIZjbKaSrGB1nhqhUkYR+ulEpCxWOXadYtOkqxp6G0a1zevmslWlZSiQQmR0IOLtEAfAUJEprJf8VFKgMi0Ela4FlBfsk1BWAQ804iHQE4NCLFlTJeCpLviTe+iDqsRNLwESITnQB1gEg5G0VhgxmwSfCeSwXSSYisWCq\u002FGpbTEc45sktERGLSxHL6rqvBN+1doGp4dY7V5pfYL9FitDyDXtB6s2mINUcUsohaZ6VzNjWuSD8Pk\u002FFmo9PnNqgHFsTUiulqtEkIGWI9Ham2SkNkWAbQsKKB3kms9zrbyLSejlwXiEfa50tKTgR66P\u002FDHr6\u002Ft7XHF55rhw8hXiPQ5E2oB2CoM0F4BgLGNvT209ssNbDqXCMVbREgHwtBkbkK0hSaBnK3T3b+5zgJXyj\u002FDII8nr482+ciGlZRaEtO+CipgJgLrksrYlWKK1jGrrJneEDmvk2A1js3N89p1iyWdQw0BycY3wlE+ocXq6CTyETMgELXY5DfVQZBKA\u002FyIFqTwZVBQpCyBu2jvZQysGMcpm3a6+5x+ahYBU5iDzQVae4MTU09JY5IzACwCD0wrReiSPLiHQ8SHAYDpQSInXWNTotoHY8wsYLtZxW5ePLqBXmUL7Im8IhLNWNAcIUUjubBsHUOIia1rdxJhW0gZn7wctc0Vc18Bn4gO1tBwcsG2ASpSrucpReNLlsGvLGGzzKJwViKKURkhgwP7YFljkRA8oIECqlpVwv2fjtt4lQYaAJsINPeeAgUAe5MdJtghmtjg2hpYB6m2FVXX4BuIGqttsw0tACkOrkvAuUH6ygW0vJqyUpmoRhkYjm886BuMCUQoOMSzJBEBtTbImPqnmkYA7UNSZUDzVVEDRwaYhDQmWunBZwpslUyjiwhrKuAjXr892hxYWl1I2rTMJLVKeENoEHjEw+IYl0G46mnFaWV5otsVS7p4Wl6X8SQMb7aHYLWsiGzFyDqDGLEWOEtRRYLBeKfapYkuMmyzh\u002FFcmC7BNjtEHTI7jmAEk5FIedaJRhseDWfFepfWg+3T9qiig0cLu6Fvirlz\u002F70h5K4lrZAA5ZOAVVA2KtQalg0ZdXXCOBty2xuVYGnMK3hNTG3tC8EFGbwBZxFZFueKa2s3i+XdLpdc2ZJXQnJqToE9UyDHNHpdeSOFcFwJD0C0gl90ThwQE07POWw\u002FKyAtSrxccYmwaJAH+OpaRWfHAnj02iaAE0crqZTGXRRA3qoaz+Bnrq1Nd5Jha8wdrMVcnUEXqNrJLC19xKIbmK1ohGljPefMrvSbaial4PB7o8maLfw7Zlq+AJhimuGP2f1kLegsTOBwFY+0B64qQHyixMwEJkNlHqGDitWdZFjTwvno7dvR2PCOruSdBL9UtWmb3UGxOKHH1AA8Spt40imJra50OBv3suq8LbRM6IkstJVsWD3mC5wX+UQYgfCwqV9IeOFc0FSEdQgzuVD3NiF8QCmgBodJJ5\u002FudPebKOHcRLp2gKRcbIZECZxIKQNiRP0XJmVYI0womBX7USLDdKnaYwhcqEAZBAwteiCoGkWIZnH1nDrzb47EldmECy2cORHExbBjhGmYqlIpltvZwmOnZ2\u002FznrTmPIEJYTQtFNL6nUqIHojrpUGmM0p5MHSzEkI6XvFugzfW22pYbGiJHqMili6Ka4RmxXvAhqhpOjs9e53mfP\u002F26E06+66j0zgOI5QIIMzRMiGUCtgPXpJ0QXDSMofo1p3mfjvQYafEkzrmnUXiaTOvIO3IgqlQTcU1IWrTsBKc9hbRNapNZbpoRQ7FNIH6KlUE0nUCCmPeaVcB+HLbYd3p7t\u002Fc0ATTaRX4yvAeg86lh\u002Fm+\u002FXiuy2dncb7F5if2wtCCt7Oc4D4cWUkeZsVmB0ArQ4nwsZX1+2KQLhWghhAEcCrG7YjmZaQxwBCvzGI\u002F14wzd\u002FDmypMnM46COh89bWhCFkjCOuIBrmTCVZ2evYW3v5ycxQWMjRjGqJfdZBBTFQLNea1NCFFYbalUaVaKOhZRr+2U4Ap5s4AKhKwAcHFdtpZT9+4qrtw8Q1uXkE1NVFRJFrQQBgD+rODeSI7IQtYirpHNdpJjG7Zc0kEyHvg0F2reo0orAgitVtPCdZHMCK08X5l7oauNsBFNBFgJTXgLuMWHwItmNZYQVnXQmWeYggxGXqBNu0CFSC0Vb\u002FmzdjobpilQdhLhmuFfxJSFkB5E4bS6HGhHC6woI3+KAsPwtHss077QldpNTYan4BpJSwyAYZiBimAMNzIhFK5kXPSAo3Dy6mYPiDli8JgMBB3CHjRyj0gUdcxCKaAfQart9OwNDQQkw4oHBHDvYC20TP1mAWAwaEQioHJIYKlEtNr8q0HwOVWmNa20mQi4Qd3UkiuC8rbgRu+cyhxtq6H9HJX2wqjUroixRLs9dInAYVYSOOj07A0rIyTDbNzLzGEhnl5p5LO3j\u002FWp++Lkk0\u002Fno3gwmJyeLQawdwuv1ZWSGZSsKu0momZV76m7DlOaZAxituaxSF8zGHVwoAGervAE5yLUk7jTbR8X1wsuRj28p9M1IbfBhlIYa6F\u002FoAI5y6JxVPYERkiBxeqBpom9dhFhY5P16YJfnXz++R9eTB49+er0ujqolbpoXQPgAi1++ChotUc3RRRvrS3EZzcFCytScVlT5zOsBtkBTABWAyCMcRTkYd+2A3S5+7wOOjmjhvUHpZaTSXkwSmcXgWtlibf91ktAlFxgXgv8ErjKJx1w+xaVUaEQkRr2rEUBLorRrlSzAJ2UZgj5VrTkh\u002FbQGWBasGLtiuFG6YUlpjx6czIchXwx3Q8vBbgxsgKye4olzCRyMYQ556lR0VRjrWcymzaxdBFmfQfXhVALaYVOyNPFN9xTYHEg\u002FuD9qQFnKQjPtL9wpWRjWbApFqqPVIbZpM4fuEcDhIoclzjPfK2o19Xmaf8Pl1SRjVJRpzg108CYORiltwEcO1Ja6STCtrSSL2RZiTEL8WQedb9\u002F\u002Ft1nf\u002FN6uth29rRc7Bf9ad3MtmovPW3cZYJgA6YtStnkYqS1SOOOrXR7mVxdFBgct9RWQIjdS0BAX6VxWbKk4wKSGa9Ity22JKiZwXCK4CDoihoFFQg0YhxYc2RJtm0vnZ69pueZDGtszKRgK5e8Ec4QHEyqcQQZEtChEjHYyFYsjQoHIIeVykSJVhJr410JYCxSAYs7P9uP8W5DDy6oFLWlTfHUc4q0FF1MtPpRlTc2uRYRd3r2+tBDehtfH4etFVKmMh4LkhJkRp6BMwM4aNqw6qEEx5hlKylG8FoTk8igiQSRCUk\u002FYTZamBE4eHG2G4YJqqCMI4ZiEdSUwQyH0K6yeYNcAuTebjDsdPdv1gqwF5reUhHdOA9bNlTrUonlIiO0iILWYBxxuqiAaUS01eqVlf7EgDApTql24djXAphRLG17LgiBUO7iSv9FgWvVa7f5BXVWcdzbSU4VY0mFPARZqZKiCl+SLcjuJMJ6Q\u002FJ4vbxX6ACREBDsqXeSNujQUkojY0y5GkZ9QytwNhtEZcyr554QNYMpsYSpSwp50mo40XqRs+PoYQdGM3p8UAGWYlgTKyBexVCFAOoObemnkwhro\u002FfD86NvOft2q2tAo4jqQMdahbYPhprTE2uMAuRPJYBxregiZ\u002FiMtAzTQwtStN7jIgJMsgKqKwJseY3gdFQFnZjJTJaNMe3IMNcA7ABfrubAa9Bck592kmBNFa5+d5SOv9vYG7VpzcBjWpQEUpGRag+RrE0hYzsFvl2tWEq4W5zzskqzHJzfcW1AcSrsFt5wQQsqifgMYlbDg0wKUBPUjhROJ5446kORlk5KAFCFOxuF7CKZFpzQYF1ZG+h0yUrGXsjO8yY8A7rpYZZUL0PY40B1xeeGKYQ1SZWatMIPAzzdMVruIdAFXm3hgqo2BqlPex6APNabzm+0n6SkY6ATQChwD5U03dWCLlcvEPRNVm3U7vTwTQXPy+7gq3nc4lP1\u002FPfuqfjd43sLJKmkYRiHf1UdKuQAO8hNZbSZjhM1YcKBLUVgaCVNjiuuypEvhRe14RQ4FIGfoKRorDKAmBbhwyy4am5F7ECRjLImIZFqE0h9ldrVEL+SN0JADDoambByl4evY+ULIeYAhkXEAeublFhbe4hUSw+NdoCjiIjKrdYeZKZVqhSpZkOMhra7Azk0MtH2cQELF2wtWC\u002FMz9PZcRCTm80t5Qjkj3EhR0E0XWBHgTW2FiFqVniabLliB3m2bKQ5v9LHshcumNh122ho2ahS1dImKl0CBzegGbSpEPjesKAhx1wVtLsRbG6+1rkBSSMpSdqNYelEGCUBojwDhjGO+4y8KaRY5W88yVChn2qpFmfa1j1lG+mIXEoF5r80G4Ppmhg39I1GERSAVUO7z4iWAHNlyKVyTgaGVjgnp+8kx8Z9ri9JqI5Zwzjri1alKZE6EJkDxOd05olAYNGVGcbdNoUfHOI5g+vL\u002FYvyvFMSCd7nRK3HnuU2iQBZF2dpi2QNkTYCCkpfPFhvafeJUO0aIuhCLPA2EYuu0gMUzFDG4gR3uWTeKYiv2uhcY9oDg6hSBcmIEpiiETCEXw1i3umsIm2e4gTeeSgE3oERnK1ZgKyWtIA8Z+e3vKMJRdBD4HRq7aFGo4DUEDKBj8IyC8ybWctYJ0k2m1ArVkcbCkDDyiGqSk3nmvhMkEyzpnjqMuEAu9VutaH2HLyN++xBtyyztPLPyTsEBoloJRuLpA06EqF9uSnIAYsaimqRyp9KCKCPRO0JKhpEZnOBgzrd\u002Fdr91lc66rLCaiJ14CaEM0knIcHqGqeDhtGJKGlzo40r7duWfiUAbpiTVGsUcAWhK81l5C5Dt8qsZYUXkzI+PKmjGy0Irq1AKViLIWi1EZw1G9kgBAWfBfUl09A6CbGmpTNIMYAUEKqjCRURGW1\u002FAqWhxXFHxX9ubWO8rpkz5eDx88HSKA9omOPjy0C0YZ1eg4BTY3xTBVXfqb8i0Hk1Av4B\u002F8kIb5v2nlhpirewBNZunkaKAM0DbrAA6kICNqr2uJNOd99qP8saus6Arl0S7ZQu5zBPInGYypqEoEWlYjoMA7RfYzaVUwC9q8ik4xUX03K\u002F27pgccxoi4AkJMVfVegsOzwjZ6KOlmtAJFJwl2dvWRfcinTfjqdvPzvX9g\u002FfL1KhV4PJtBPUXdt6eLneJIpTkA6MzmJIOkpkUTrUio7tVwxgPq30T1RN65NIQtno9pg4OiGOmnvhd7JaZBy2dILGJhG3uXbMIYoC+FYq9bYbWvkF+YwenDMUThvxcVknCTZU7eaS3EQrqquRK6BH27oI9bNEwsQeZpmZFSBbaTXmcRMDgHdp98poHZsIgt1kH5jhDhbtN1D1uUSzF\u002F11oO02Ig\u002FQ1nCqHzvwKYK+pKYKGg0c1i5LdpJmvX48ntykGITeinwgGynbBMTa4894Yzg+VZixuNq0ZiuVBA1tClAwMFZpIzCYBedGJqtTrmqdIvwEzTAkRZWRygnl0zENmo7syY2WMqTAi8ltpamTOBsqWzdqBgHWiIQ0ySgjqSxxY6ganp+C5gWELa4eRQMshF\u002FCjD1tW5DEjS0SK3dSiuqlVT5fq5lO6RLhFTActJCL9hBFwZuoQGVtsEXS9h7eLml1EmaDXgbb9LKMXBei13UkCtSNW+qJNJzK9qw9+5EOzGIB8JZpJ\u002FXCWsCzMp0Oy3UH4y0mauEsQ17xDYy2XXqpdDYF8naSDpEFzFBuvPfB4bQcT1ZqKiooTad70Ck48C\u002FqiEPybAyCRDZOM1029e4rhDFD+1dFJu+JGGMk3pJo0AwcSQoKtp3uvuGQukuJByRw5za6DaqKxflIqSBU6mZLqT09jjfOwOMNQ5BdXPVdUNWzs+PjsIpmVHG5CjDXGfugA9BChN\u002FB4GQ1VYaSN3U\u002FISmpVBnhWtqgl6EsDyNtTBBMOMXhqe02qy53v0ZZk5nI\u002Fxp1AYgi2irg0Ha7gsxt3YT6l2S0lRuTFw9SeT4OJ5OQZuhv3bQkELyi\u002FnovOaN1DegemKEJMuBmIfmQN2E\u002F7g2TAICNzcQdaOdH1J5qqEzCulms7dmzne6+pq3pXOR3sK1r8V8nT7+hZ63TUZrXhhukhkxFIteesMNZJZbJkfUNT5HhrosnEB6eNJPpaPzup3FaBNKcwQlSErRTjfapUG8Nr3RUiI3JlPUNSBtrQhQlrOeqydWQwBK4pGjRGOMEMjMIz+p5Z6ZImCBMIgk6vUjTsSmKjsk0SqpsXeFpgeG2W6+Io9DrDCaQouSDL+gVSd231RawCk99PEEQ9qUeeMd9Q6\u002FpcsVUFVu22EmsdXZ2erztuLxsQH3b844sLb4yihZkWeCoOTuutFvc23e1yeumsS5s9WHJtYvJpT2JotBR0bQyVLJ3BiHI5HZFeQ2WsFwqaAOd5uGoSgUbDVk23FtGm+QQZwlJdrr7dk4GvXQj85Ruagq1sYbcjqoIgQ7tqlLHkmSwYbUbIsRSwdVSw9sjGJKh3a7IoiUY8J3kXair52k8ptdOHNx\u002FJ7sBFWTF0MlhRlCJirbrcUNniBjoycSIIE+psYs0a3oapa1mE0NxlkqViZpRKgeUrrq2FU1HLxyUi22UV2azZYQL1mLpnFlpG1uolE5b9TAE3VjtQ2Sw98I35TzawZc87Y91dJ5h1nToTKQ9IdYWHaPNbfDvdPet1jJKHY3FZ0Obd4E+pKXD3SoQUzWAtOC2MYZIFfiVwhedle5jaQyL7QYbavGGTnkRFjfh1EH6b2AsvHKK0KXJgXYatCeFRmpyKpU6g0Kc9fR0kmb9SLbxZHj62r7ZivSNlADJoKVGCDo4ItFeOCsaOCnVC01SYfWobK9EdHSKt6R+Yuqw9gz512XhqH00F8dX1PLwZDo+f0e1eHpzB+BZAy3QeA01z8YIhkb7F4UWTLedH12kWVNL2epDYJPGCo9U7hmd+wn3CdR6UzOSaMq0+2yTD20Z4UIJB5xD0kat5NsmSyQ7eDlm03gnijO0KWVThVlInsFWgBupSFOBMSK9SYAhwCHZVB3bgzA73X2rD5XOPiSM5gEoVtNpN4pQADynNMImoZwTJoSVylXOHPNEgUjp9vgSEFk6nbLiAg0KILL4yRtrdWYagURT1S3R6jGnygmG70uqlbZMtOWDTiJs31i7zVBY8DyUUpHkqGUHoAhU1JP3eC2Zg08u9mtfvzdw0U6cxhwC8oPBeVq2pE4m\u002FFXr0q6T1dgeTr5mJ1ZmWtlEimG0xgtvaQu3XsPBmUM+VO1Wry53v3FX00lHc0kIIpUzqlqLQI03ALcBcyAF0C31gPOwshFAe8oQCG0IalR3oGaVZEyjJaeXrkR66chaFaGrvRQTuBAJg8\u002FUvlMyBs+QeB23MA1X8AxK\u002Fp1k2L4pcJu9wHWsChWBVtKZ5K4gzeVAh5VXWRKLzocNG\u002Fev2wAHf6PNGxoogw7JdKDitD8JzgmM7qrzqV1TXQNxHE+L7WpnkKSGRJ3Knt5hAvG05oCulG+63P3mDXAdTUXLLCSdjw3gzKk3iaicNQ3XpmqSV5qVyAKqDEqYDPJhlrOzbKKgndFR0JKSEE4u7EXuuvPNI8pH2IR1kV49QQeTUSNRkClkBzoW2\u002FaSTs\u002FeuvNta0ThkRVEcTgn7UYt1FdHr8GoOlTYLTJBkusWsrLba+nwuGqZhdM5XI7BIDA4OmkSugT2CiX6uqn\u002FW8HOU4YEjoFMqsioDwY0hM4C064Cv1ZSbKe732QfNyWe6ylzJyp6ZWKHX9VP9bPvTvS3i2sO\u002F5r24CAleGFiFxu8DJkvba+i1xvpQqdZqJU16WhZDsrZRlLfmWIRWUma3LAQqLpSoxBLyw3dut+oCu7AgIxtj7ugsJ+oa18XWTV4dWoPE+307C3twQtberJL3AGeOkEbvekU4cCgeFMBq+k8xRJWFhOS5gX+EIBUaeNfYHSqb7sLC6GPSSO4l2sxvWPjH73KRhWJkVhqkaFFSwwRoDhw5hzBx7aE0EmEDfXgbZ4KekLR0VJLtKa6AB2ynVyTqwyVcxC+xVNm52NZPK64VMNEQealHSyQgo4oMU1GGkAoZNy3\u002FR5rkKcwG2hbhqiZlnIcfDMK4jSRV1eYAl4n3+xy962+eWV2N3jmwnAWfGu+hgDzs2C8lF9hb1TVgpn5BqG0ulykQzRZrUp4KyvwWVBUqS0YACxKY9ZsRUAR2S4eCdC1ua8oRncRlMhoJzdiOvgopzdP1YAQgoDG26JFh4df09y3lWE9+fRTOzkd3X0qb\u002F2Utc5rog8gL9hPY7SiZTEwaB8DcK0s3gQL7u1WymftEZNaOwQo2k7svSBC7pG2PNhe5Fo6deunLXZWWrgrUiD2VuqxhmGGJDwdlyFpLcDqFt10kuDaxc65feX2vZrgqwDhdNCU0RT9qfJqwEy8CEKsVH8y8IwAf2mkI5BhNZ0USLtTc4CL1GRk3HB8yTsv3rniaqFjXHjwFB2MbDztdLbWgrHRxnDfdiN3kWbTsubCdiBWvQ8Jcw6kTZEfVwtEh+wA5BPFiLLSjs98pe3QtJxXaFsHknukF7UVQBZrgAwRDTcE43fWQaUj4RJoNPfUZxM4YW1azQgha6mSdYKAVCdxNi1gznUgk6FqLL3hgMontLXX84w7Wuu8KJUKASvIscYiMhJXpmpHe4xMZIhOjF4YA+GCTpua8t9xqRIjCLIgnhRl6BVCMHrHaptuK3WaG962vXQSZtNS5Wpn50KYuW6VAIk+W0Fnt9GbCFQBYvDUFpyROZzMMXm74APvtihpZbDMe0fvGmpf\u002FiDpTWIFnJS2oeoaQ\u002FCb7r1xUZJnQKhaG0PbTVpyHzK9tAd5zYF4u9l+yrWqkY6G+mKh6\u002FYQWKebWHAtAoNKzoak28J2p7vftCh5M7XZoCOlWEI2Ibha40z\u002FgQ6tRQzLKdkCOMM36mjjaqRLdHALVQHbjQ+OTimh91RRpxQLtIRiN2038qQHRjsfVPtqEJUID9EhC74omieb2968Lne\u002FeTXyJ+lJVECVCnaVEp2v4VVpyDbp+BjNdEhIzQt2esMyJGIK2Bq9O09ToIhkoknRScE5hxowxDYir7cweoAoOm66RczcBCAH2mTmLWeGyvqKwmunu9+4DPkOTGj9SI4uTj3vBzIJ+IcjV7ugCTQLqqwqOh4OcVrj37BCWzpesXyW782Fb2TD4BnhLE1vKiuBTkuKAGacWSahuXbXRaeHr6n36O2rs+Hkh+M1WHY9pey0iPrjNz\u002FO3uX7aOmtvPTJ1RuMuQbsMRH4MUdai3EwigCOXJJlNTIwRgZW9f8B1A0WuQ==","ssrPortalPageResponse":undefined,"ssrUrlPrefix":"eJxTyigpKSi20tdPz8lPSszRS8zJLEis1EvOz9VPyU8u1lcCAMgTC6M=","initialTocCurrentId":"4edbcd65-adbb-4f17-a0e8-95909bcea77e","isServer":true,"isFramePage":false,"initialPageApiPath":"\u002Fac\u002Fac\u002Fams\u002Fdigital_signature\u002Fcontent","darkTheme":false,"repoFakeReleaseTime":undefined,"homePageBaseId":"ddca4041-ca99-4bf1-9ccc-bbf40aadcab9","homePageSlug":"documentation","hideTimestamp":undefined,"pageId":"4edbcd65-adbb-4f17-a0e8-95909bcea77e","repoName":"APIs","repoBaseId":"1509b6b5-1db5-4f88-8a00-ec70fb08560d","ssrRepoEncryptSharingConfig":undefined,"ssrCustomRoutes":"","customModule":{"css":"","cssUrl":"https:\u002F\u002Fcdn.marmot-cloud.com\u002Fidocs-theme\u002Fidocs-theme-template\u002F2024\u002F8\u002F19\u002F6054f3d9-68f9-4f59-8d14-249583451de6\u002Findex.css","jsUrl":"https:\u002F\u002Fcdn.marmot-cloud.com\u002Fidocs-theme\u002Fidocs-theme-template\u002F2024\u002F8\u002F19\u002F6054f3d9-68f9-4f59-8d14-249583451de6\u002Findex.js","componentFn":function anonymous(){return null;},"dynamicInFrontEnd":true},"realVisitPathname":"\u002Fac\u002Fac\u002Fams\u002Fdigital_signature"}; </script> <script> (function() { var script = document.createElement('script') script.src = 'https://cdn.marmot-cloud.com/idocs-theme/idocs-theme-template/2024/8/19/6054f3d9-68f9-4f59-8d14-249583451de6/index.js' script.crossOrigin = 'anonymous' script.async = false document.body.appendChild(script) })() </script> <script> try { // for template dark theme var theme = localStorage.getItem("IDOCS_THEME"); if (theme === "dark" || theme === "light") { const doms = document.body.querySelectorAll("[data-theme]"); for (var i = 0; i < doms.length; i++) { var dom = doms[i]; dom.setAttribute("data-theme", theme); } } } catch (e) { console.error(e); } try { // soft hide shared content var searchParams = new URLSearchParams(window.location.search); var paramSignature = searchParams.get("signature"); var paramExpiry = searchParams.get("expiry"); var paramShare = searchParams.get("share"); const isSharedRepoLink = !!(paramSignature && paramExpiry) && paramShare === "repo"; if (isSharedRepoLink) { document.getElementById("root").style.filter = "blur(2px)"; } } catch (e) { console.error(e); } </script> <script> window.onload = function () { var context = window.IDOCS_THEME_CONTEXT; try { var _window$performance$t = (window.performance && window.performance.timing) || {}, navigationStart = _window$performance$t.navigationStart, fetchStart = _window$performance$t.fetchStart, domContentLoadedEventStart = _window$performance$t.domContentLoadedEventStart, requestStart = _window$performance$t.requestStart, responseStart = _window$performance$t.responseStart, responseEnd = _window$performance$t.responseEnd; var t = context && context.timing; var env = context && context.env; var toFixed = function toFixed(a, b) { return a && b ? parseFloat((a - b + 0.00001).toFixed(2)) : "nil"; }; t.nginxProxy = toFixed(t.backendStart, requestStart); t.serviceFetch = toFixed(t.serviceFetchEnd, t.serviceFetchStart); t.ssr = toFixed(t.ssrComplete, t.controllerStart); t.ttfb = toFixed(responseStart, requestStart); t.startRequestCost = toFixed(requestStart, navigationStart); t.responseDataTransferCost = toFixed(responseEnd, responseStart); t.pageParserAndLoaderCost = toFixed( domContentLoadedEventStart, responseStart ); t.domReady = toFixed(domContentLoadedEventStart, fetchStart); t.getPageContent = toFixed( t.fetchCmsContentEnd, t.fetchCmsContentStart ); t.pickToc = toFixed(t.pickTocEnd, t.pickTocStart); t.getDbPage = toFixed(t.getDbPageEnd, t.getDbPageStart); t.getDbRepo = toFixed(t.getDbRepoEnd, t.getDbRepoStart); t.getSlug = toFixed(t.getSlugEnd, t.backendStart); t.expandCategory = toFixed( t.expandCategoryEnd, t.expandCategoryStart ); t.handleYuqueDom = toFixed( t.handleYuqueDomEnd, t.handleYuqueDomStart ); var portalId = context && context.portal && context.portal.identifier; var isNginxCacheHit = requestStart - t.ssrComplete > 0; var pathArr = location.pathname.split("/"); var isHome = pathArr.length <= 3; var msg = portalId + (isHome ? "-home" : "-page") + (isNginxCacheHit ? "-cache" : ""); var space = pathArr[2] || ""; // nginx cache no need fire log if (!isNginxCacheHit) { // ssr perf window.Tracert && window.Tracert.call("log", { code: 11, msg: msg, m1: t.domReady, m2: t.ssr, m3: t.serviceFetch, m4: t.getPageContent, m5: t.pickToc, m6: t.ttfb, m7: t.nginxProxy, m8: t.getSlug, m9: t.getDbPage, m10: t.expandCategory, m11: t.getDbRepo, m12: 0, m13: t.handleYuqueDom, m14: t.startRequestCost, m15: t.responseDataTransferCost, m16: t.pageParserAndLoaderCost, d1: env, c1: portalId, c2: space, }); } else { // log cache perf window.Tracert && window.Tracert.call("log", { code: 11, msg: msg, m1: t.domReady, m2: 1, m3: 1, m4: 1, m5: 1, m6: t.ttfb, m7: 1, m8: 1, m9: 1, m10: 1, m11: 1, m12: 1, m13: 1, m14: t.startRequestCost, m15: t.responseDataTransferCost, m16: t.pageParserAndLoaderCost, d1: env, c1: portalId, c2: space, }); } } catch (e) {} }; </script> <script> // solved css variables in IE if ( window && window.navigator && window.navigator.userAgent.indexOf("Trident") !== -1 ) { var cssVarsScript = document.createElement("script"); cssVarsScript.src = "https://gw.alipayobjects.com/os/lib/css-vars-ponyfill/2.3.1/dist/css-vars-ponyfill.min.js"; cssVarsScript.onload = function () { cssVars(); }; document.head.appendChild(cssVarsScript); } </script> <script>window.g_initialData = window.g_initialProps</script> <script> (function() { var script = document.createElement('script') script.src = 'https://gw.alipayobjects.com/a/idocs/umi.21f58489.js' script.async = false document.body.appendChild(script) })() </script> </body></html>