React Native WebView의 Paypal

React Native는 가장 널리 사용되고 널리 사용되는 Javascript 크로스 플랫폼 모바일 개발 프레임워크 중 하나입니다. ReactJS를 기반으로 하므로 이미 ReactJS에 능숙한 개발자가 쉽게 탐구할 수 있습니다. React Native에 대한 자세한 내용은 여기를 확인하세요.

과정
저는 최근에 Paypal 통합이 필요한 프로젝트를 진행 중이었고 안정적인 오픈 소스 React Native 모듈을 찾을 수 없었기 때문에 WebView 기반 구현을 생각해 냈습니다.

구현 전 완료 단계
  • 아직 계정이 없는 경우 Paypal 계정을 만드십시오
  • .
  • 개발자로 로그인하여 샌드박스 계정을 생성합니다
  • .
  • 기존 샌드박스 계정으로 앱을 만들고 클라이언트 ID를 얻습니다
  • .



    React Native 부분 설정

    이 시점에서 앱의 대부분이 작동하고 흐름 프로세스를 완료하려면 결제 부분이 필요할 수 있다고 가정합니다.
    우리는 WebView를 사용하고 있기 때문에 앱 사용자 인터페이스에 맞게 디자인할 HTML 파일과 WebView와 앞뒤로 통신하는 구성 요소가 있을 것입니다.
    PayPal.js


    일부 기능 및 변수에 대한 간략한 설명



    const patchPostMessageFunction는 여기에 설명된 문제를 해결합니다.



    handleMessage 함수는 paypal.html 내에서 Javascript에서 내보낸 데이터를 수신합니다.



    passValues 함수는 반응 네이티브에서 paypal.html로 데이터를 보냅니다.



    sent 상태의 키는 반응 네이티브에서 WebView로 데이터가 전달된 시기를 표시하는 데 사용됩니다.



    paypal.html



    <!DOCTYPE html>
    <html lang="">
      <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>Paypal</title>
        <script src="https://www.paypal.com/sdk/js?client-id={clientID}"></script>
    
        <style>
            html, body{
                width: 100%;
                height: 100%;
                margin: 0;
                padding: 0;
                font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
                background: linear-gradient(180deg, #3D40AD 0%, #6B6ED7 100%);
            }
            .container{
                height: 100%;
                display: flex;
                margin-left: 20px;
                margin-right: 20px;
                overflow-y: scroll;
                justify-content: center;
                align-items: center;
            }
            p{
                color: white;
                font-size: 16px;
                text-align: justify;
                margin-bottom: 50px;
            }
            #preloaderSpinner{
              display: none;
            }
        </style>
      </head>
      <body>
          <div class="container">
                <div style="justify-content: center; text-align: center">
                    <img width="80px" height="80px" src="logo.png"/>
                    <p>
                    </p>
                    <div id="paypal-button-container"></div>
                </div>
          </div>
    
    
        <script>
          function payWithPayPal(amount, orderID) {
            paypal
              .Buttons({
    
                createOrder: function(data, actions) {
                    return new Promise(function(resolve, reject){
                      resolve(orderID);
                  });
                },
                onApprove: function(data, actions) {
                  window.postMessage(JSON.stringify({
                        reference: data.orderID, 
                        message: 'Transaction Successful',
                        status: 'success'
                    }));
                }
              })
              .render("#paypal-button-container");
          }
          document.addEventListener("message", function(data) {
            var details = JSON.parse(data.data);
            document.querySelector('p').innerText = "You are about to fund your wallet with USD "+details.amount+" on XYZ. Click on any of the payment options to proceed. Your account will be credited instantly after payment."
            payWithPayPal(details.amount, details.orderID);
          })
    
        </script>
      </body>
    </html>
    


    document.addEventListener("message", function(data)) 부분은 반응 네이티브에서 내보낸 메시지를 수신하고 전송된 데이터를 수신합니다. 그런 다음 이 데이터는 JSON으로 다시 구문 분석되어 표시 메시지를 준비하고 PayPal SDK도 설정하는 데 사용됩니다.



    트랜잭션은 API 호출을 통해 서버 측에서 시작되고 PayPal의 orderID가 포함된 페이로드가 반환됩니다.



    백엔드에서 거래를 시작하려면 PayPal SDK가 매우 유용하며 여기에서 다양한 언어로 찾을 수 있습니다.



    결론



    React Native WebView는 복잡한 애니메이션 그래프를 그릴 뿐만 아니라 이와 같은 상황에 유용합니다. 귀하의 의견을 듣고 더 많은 정보를 얻고 싶습니다.

    좋은 웹페이지 즐겨찾기