2017-12-07 9 views
0

오늘 제 문제는 제가 실행할 빠른 체크 아웃이있는 웹 어플리케이션이 있다는 것입니다. 보안 문제를 피하기 위해 클라이언트 - 서버 아키텍처를 사용했습니다.Paypal이 갑자기 체크 아웃 중에 "onAuthorize"메소드를 호출하지 않습니다.

paypal.Button.render({ 

     env : 'sandbox', 
     commit: true, 
     style: { 
      size: 'medium', 
      color: 'gold', 
      shape: 'pill', 
      label: 'checkout' 
     }, 
     locale: 'en_US', 
     payment: function() { 
      nickname = $("#nickname").val(); 
      amount = $("#amount").val(); 
      description = $("#description").val(); 
      data = { 
       "nickname" : nickname, 
       "amount" : amount, 
       "description" : description 
      }; 
      return new paypal.Promise(function(resolve, reject) { 

       // Call your server side to get the Payment ID from step 3, then pass it to the resolve callback 
       jQuery.post("/newPayment", data).done(function(data){ 
        console.log("HEI I GOT THE PAYMENT JSON = " + data); 
        parsed_data = JSON.parse(data); 
        resolve(parsed_data['id']); 
       }); 
      }); 
     }, 

     onAuthorize: function(data, actions) { 
      console.log("JSON = " + JSON.stringify(actions.payment.getTransactions()[0])); 
      console.log("TRANSACTION = " + actions.payment.getTransactions()[0]) 
      console.log("PAYMENT SUCCESSFUL"); 
      return actions.payment.execute(); 
     }, 
     onError: function(data, actions){ 
      console.log("ERRORRRRRR"); 
      $("#warning").show(); 
     } 

    }, '#paypal-button'); 

내 서버 측 코드 :

app.post("/newPayment",function(req,res){ 
    console.log("RECEIVING POST WITH AMOUNT = " + req.body.amount); 

      //CONFIGURE PAYMENY - PAYPAL PHASE 1 
    var first_config = { 
     'mode': 'sandbox', 
     'client_id': '<MY CLIENT ID>', 
     'client_secret': '<MY SECRET>' 
    }; 

    paypal.configure(first_config); 

    console.log("AMOUNT AUTHORIZED = " + req.body.amount); 

    //CREATING PAYMENT 
    PAYMENT = { 
     "intent": "sale", 
     "payer": { 
      "payment_method": "paypal" 
     }, 
     "redirect_urls": { 
      "return_url": "http://return.url", 
      "cancel_url": "http://cancel.url" 
     }, 
     "transactions": [{ 
      "amount": { 
       "currency": "EUR", 
       "total": req.body.amount 
      }, 
      "description": "This is the payment description." 
     }] 
    }; 


    //CREATING PAYMENT AND SENDING IT TO THE CLIENT 
    paypal.payment.create(PAYMENT, function (error, payment) { 
     if (error) { 
      throw error; 
     } else { 
      console.log("Create Payment Response"); 
      res.send(JSON.stringify(payment)); 
     } 
    }); 

지금, 페이팔 창이 열리고 내가 테스트 지불을 실행하기 위해 내 모든 데이터를 삽입 할 수 있습니다 그래서 내 클라이언트 코드는 다음과 같습니다. 그러나 지불을 확인하고 PayPal 서비스가 "onAuthorize"메소드를 호출해야합니다. 대신 메톤 "onError"가 발생합니다 ...

무슨 문제입니까? URL 리디렉션? 사실 나는 액션의 흐름을 보장하기 위해 .then()을 사용하여 paypal.configure()를 실행해야만 하는가?

정말 페이팔 서비스를

편집 사용하려고 폭발 해요 : cloudno.de 지불이 제대로 실행에 내 코드를 누르면하지만 로컬로 작동하지 않는 실행 ... 내가하지 무슨 말을 해야할지 ahah

+1

부수적으로, 변조를 방지 할 수있는 방법이 있습니까? E.G 사용자가 콘솔에서 지불 금액을 변경하고 양식을 제출하는 것을 멈추게하는 것은 무엇입니까? – ProEvilz

+0

관심을 가져 주셔서 감사합니다! 실제로 이것은 완전한 코드가 아니며, 사용자가 권한이있는 경우에만 지불을 수행하기 위해 서버 측에서 수행 한 일부 점검이 있습니다.) –

답변

0

actions.payment.getTransactions는 기능이 아닙니다. 전화해야합니다 actions.payment.get().then(function(result) { ... })

+0

해답을 가져 주셔서 감사합니다! 하지만 문제는 onAuthorize 함수가 전혀 실행되지 않는다는 것입니다. –

+0

전화를 걸 었는지 여부를 어떻게 확인하고 있습니까? – bluepnume

+0

이 질문에 많은 감사를드립니다. 이로 인해 나를 보안 문제로 몰아 넣었습니다. 여기에 전체 질문 링크가 있습니다. 내 문제를 설명하려면 여기를 클릭하십시오. https://stackoverflow.com/questions/47799594/paypal-express-checkout-is-it-secure-to-store-data- in-db-in-the-onauthorize-fun –