2017-12-07 3 views
0

今日の私の問題は、私が実行する高速チェックアウトのWebアプリケーションがあることです。 クライアントのサーバーアーキテクチャを使用してセキュリティの問題を回避しました。 だから私のクライアントコードは以下の通りです: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のウィンドウが開き、私はテストの支払いを実行するためにすべての私のデータを挿入することができます。 私は支払いを確認し、PayPalサービスが私の "onAuthorize"メソッドを呼び出すはずです。代わりにメロン "onError"が発生します...

何が問題なのですか? URLをリダイレクトしますか? アクションの流れを確実にするためにpaypal.configure()を.then()で実行する必要があるという事実は?

私は本当にペイパルのサービスを

EDIT使用しようとして爆発しています: cloudno.de支払いが正しく実行されるの私のコードを押すが、それはローカルでは動作しません実行している...私はありません何を言うべきか知っている

+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 –

関連する問題