首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Klarna结账-使用React & Node

Klarna结账-使用React & Node
EN

Stack Overflow用户
提问于 2022-01-23 06:50:15
回答 1查看 512关注 0票数 0

我正在努力实现Klarna结账以接受付款。

在创建订单(结帐的第一步)时,您会收到来自Klarnas的"html_snippet“响应(在我的例子中是用来表示后端的)。它要求这个片段显示在前端(在我的例子中是react)。

在阅读了Klarnas文档之后,我仍然想不出如何在react中显示这个html片段。甚至复制粘贴准确的片段也会给我41个错误警告。

代码片段如下所示:

代码语言:javascript
复制
 html_snippet: '<div id="klarna-checkout-container" style="overflow: hidden;">\n' +
      '  <div id="klarna-unsupported-page">\n' +
      '  <style type="text/css">\n' +
      '  @-webkit-keyframes klarnaFadeIn{from{opacity:0}to{opacity:1}}@-moz-keyframes klarnaFadeIn{from{opacity:0}to{opacity:1}}@keyframes klarnaFadeIn{from{opacity:0}to{opacity:1}}#klarna-unsupported-page{opacity:0;opacity:1\\9;-webkit-animation:klarnaFadeIn ease-in 1;-moz-animation:klarnaFadeIn ease-in 1;animation:klarnaFadeIn ease-in 1;-webkit-animation-fill-mode:forwards;-moz-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.1s;-moz-animation-duration:.1s;animation-duration:.1s;-webkit-animation-delay:5s;-moz-animation-delay:5s;animation-delay:5s;text-align:center;padding-top:64px}#klarna-unsupported-page .heading{font-family: "Klarna Headline", Helvetica, Arial, sans-serif;color: rgb(23, 23, 23);font-size: 36px;letter-spacing: -0.2px;-webkit-font-smoothing: antialiased;}#klarna-unsupported-page .subheading{font-family: "Klarna Text", "Klarna Sans", Helvetica, Arial, sans-serif;color: rgb(23, 23, 23);-webkit-font-smoothing: antialiased;line-height: 28px;font-weight: 400;font-size: 19px;max-width: 640px;margin: 20px auto;}#klarna-unsupported-page .reload {cursor: pointer;outline: none;-webkit-tap-highlight-color: rgba(255, 255, 255, 0);border-width: 1px;background-color: rgb(38, 37, 37);border-color: rgb(38, 37, 37);padding: 15px 24px;margin-top: 15px;color: rgb(255, 255, 255);font-family: "Klarna Text", "Klarna Sans", Helvetica, Arial, sans-serif;font-weight: 500;text-rendering: geometricprecision;font-size: 100%;}\n' +
      '  </style>\n' +
      '  <h1 class="heading">Something went wrong</h1>\n' +
      '  <p class="subheading">Sorry for any inconvenience, please try reloading the checkout page or try again later.</p>\n' +
      '  <p class="subheading">If the problem persists it maybe be because you are using an old version of the web browser which is not safe nor compatible with modern web sites. For a smoother checkout experience, please install a newer browser.</p>\n' +     
      '  <button class="reload" onclick="reloadCheckoutHandler && reloadCheckoutHandler()">Reload checkout</button>\n' +
      '  </div>\n' +
      '  <script id="klarna-checkout-context" type="text/javascript">\n' +
      '  /* <![CDATA[ */\n' +
      '  var reloadCheckoutHandler;\n' +
      '  (function(w,k,i,d,n,c,l){\n' +
      '    w[k]=w[k]||function(){(w[k].q=w[k].q||[]).push(arguments)};\n' +
      '    l=w[k].config={\n' +
      '      container:w.document.getElementById(i),\n' +
      "      ORDER_URL:'https://js.playground.klarna.com/eu/kco/checkout/orders/dae844ba-c44a-6e55-b5ad-9afe9055e1f4',\n" +
      "      AUTH_HEADER:'KlarnaCheckout 4mpla37op0i19pv6g054',\n" +
      "      LOCALE:'en-GB',\n" +
      "      ORDER_STATUS:'checkout_incomplete',\n" +
      "      MERCHANT_NAME:'Your business name',\n" +
      '      GUI_OPTIONS:[],\n' +
      '      ALLOW_SEPARATE_SHIPPING_ADDRESS:false,\n' +
      "      PURCHASE_COUNTRY:'gbr',\n" +
      "      PURCHASE_CURRENCY:'GBP',\n" +
      '      TESTDRIVE:true,\n' +
      "      BOOTSTRAP_SRC:'https://js.playground.klarna.com/kcoc/220119-c2c224d/checkout.bootstrap.js',\n" +
      "      FE_EVENTS_DISABLED:'false',\n" +
      "      DEVICE_RECOGNITION_URL:'https://js.playground.klarna.com/eu/kco/checkout/orders/dae844ba-c44a-6e55-b5ad-9afe9055e1f4/device_recognition',\n" +
      '      DEVICE_RECOGNITION_TYPE1:true,\n' +
      "      DEVICE_RECOGNITION_TYPE3_ORG_ID:'87rxrdob',\n" +
      "      DEVICE_RECOGNITION_TYPE3_REF:'KLRNA_87rxrdob_dae844ba-c44a-6e55-b5ad-9afe9055e1f4',\n" +
      "      CLIENT_EVENT_HOST:'https://eu.playground.klarnaevt.com'\n" +
      '    };\n' +
      "    n=d.createElement('script');\n" +
      '    c=d.getElementById(i);\n' +
      '    n.async=!0;\n' +
      '    n.src=l.BOOTSTRAP_SRC;\n' +
      '    c.appendChild(n);\n' +
      '    try{\n' +
      "      ((w.Image && (new w.Image))||(d.createElement && d.createElement('img'))||{}).src =\n" +
      "        l.CLIENT_EVENT_HOST + '/v1/checkout/snippet/load' +\n" +
      "        '?sid=' + l.ORDER_URL.split('/').slice(-1) +\n" +
      "        '&order_status=' + w.encodeURIComponent(l.ORDER_STATUS) +\n" +
      "        '&timestamp=' + (new Date).getTime();\n" +
      '    }catch(e){}\n' +
      '    reloadCheckoutHandler = function () {\n' +
      '        try{\n' +
      "            ((w.Image && (new w.Image))||(d.createElement && d.createElement('img'))||{}).src =\n" +
      "            l.CLIENT_EVENT_HOST+'/v1/checkout/snippet/reload?sid='+l.ORDER_URL.split('/').slice(-1)+\n" +
      "            '&order_status='+w.encodeURIComponent(l.ORDER_STATUS)+'&timestamp='+(new Date()).getTime();\n" +
      '            window.location.reload();\n' +
      '        }catch(e){}\n' +
      '    }\n' +
      "  })(this,'_klarnaCheckout','klarna-checkout-container',document);\n" +
      '  /* ]]> */\n' +
      '  </script>\n' +
      '  <noscript>\n' +
      'Please <a href="http://enable-javascript.com">enable JavaScript</a>.\n' +
      '  </noscript>\n' +
      '</div>'

有人经历过这段旅程吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-13 11:36:53

您可能已经解决了这个问题,但是我使用Iframe来呈现代码片段。创建一个包含接收到的片段的HTML页面,并使用它作为您的Iframe的源。

代码语言:javascript
复制
<iframe
      title='klarnaCheckout'
       className='iframe'
       srcDoc={klarnaHtml(klarna.html_snippet)}
       frameBorder='0'
 ></iframe>
代码语言:javascript
复制
export const klarnaHtml = (snippet) => {
   return `
      <html>
      <head> </head>
   
      <body>
      <textarea style="display: none" id="KCO">
               ${snippet}
       </textarea
         >
   
         <div id="my-checkout-container"></div>
   
         <!-- START - Dont edit -->
         <script type="text/javascript">
            var checkoutContainer = document.getElementById(
               "my-checkout-container"
            );
            checkoutContainer.innerHTML = document
               .getElementById("KCO")
               .value.replace(/\\"/g, '"')
               .replace(/\\n/g, "");
            var scriptsTags = checkoutContainer.getElementsByTagName("script");
            for (var i = 0; i < scriptsTags.length; i++) {
               var parentNode = scriptsTags[i].parentNode;
               var newScriptTag = document.createElement("script");
               newScriptTag.type = "text/javascript";
               newScriptTag.text = scriptsTags[i].text;
               parentNode.removeChild(scriptsTags[i]);
               parentNode.appendChild(newScriptTag);
            }
         </script>
         <!-- END -->
      </body>
   </html>
   
      `;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70819801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档