2017-07-18 10 views
0

私は自分のサイトで支払いを実行しようとしているのですが、Paypalにはほとんど何もありません。Paypal - サーバーからの送金額

私のアプリでは、翻訳したい動画をアップロードできます。 各ビデオは複数の言語に翻訳できます。 合計金額は、ユーザーが選択した動画の期間と要求された言語から計算されます。最も簡単な方法で

可能、私は私のサーバーにし、支払い後にreturnurlを構成し

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
 
     <input type="hidden" name="cmd" value="_xclick"> 
 
     <input type="hidden" name="business" value="myFakeBusinees"> 
 
     <input type="hidden" name="item_name" [value]="transactionId"> 
 
     <input type="hidden" name="currency_code" value="USD"> 
 
     <input type="hidden" name="amount" [value]="totalPrice"> 
 
     <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" (click)="submit()"> 
 
     <input type="submit" value="Paypal"/> 
 
    </form>

ペイパルで

自分のサイトにこのコードを追加し、私は要約をユーザに表示します。

このアプローチの問題は、ユーザーがクライアントから隠されたフィールドの量を変更できることです。 returnUrlを呼び出した後に私のサーバーで支払った金額を確認することはできますが、私はこの状況を有効にしたくありません。

私はサーバのapiを読み込もうとしましたが、私はそれが私の望むことをしているのか分かりません。 私は以下の流れを考えました。それが正しいのか、そしてpaypalがこれをサポートしているのか疑問に思います。

流れ:

  • ユーザークライアントでの順序を作成します。各注文にはtransactionIdがあります
  • ユーザーが有料ボタンをクリックすると、クライアントはtransactionIdを使用してサーバーにリクエストを送信します。
  • サーバーはtotalPriceを計算し、paypelを送信してこの金額のトークンを作成します。サーバーはトークンをクライアントに返します。
  • クライアントはトークンを受け取り、paypalにナビゲートしています。
  • paypalサイトでは、ユーザーが支払い方法を選択して支払います。 Paypalサーバーはmyserverにこのトークンの確認を返します。
  • 私のサーバーは、transactionIdに対してトークンをチェックし、すべてがOKであれば、「注文が作成されました」ページを表示します。

本当にありがとうございます。ドキュメンタリーからの流れを理解するのは少し難しかったです。

答えて

1

基本的にはあなたが何をしたいのかが時にユーザーがクリック有料ボタン(以下nodejsコードを参照してください)バックエンドでcreateOrder APIを呼び出し、window.locationの、たとえばを使用して、フロントエンドからreturn_urlcancel_url を得ることです:window.locationの.origin + '/ success-url'ので、ローカルサーバー上でテスト中に問題がないように、 ステージとプロダクション。その後、ユーザーがhttps://example.com/success-urlにリダイレクトされた場合、paymentIdPayerIDは paypalがURL自体に渡され、そのページからexecuteOrderをバックエンドに呼び出すことができます。

exports.createOrder = (data, callback) => { 
    /* First step when user clicks 'Pay with paypal' on place-order screen */ 
    var create_payment_json = { 
    "intent": "sale", 
    "payer": { 
     "payment_method": "paypal" 
    }, 
    "redirect_urls": { 
     "return_url": data.return_url, 
     "cancel_url": data.cancel_url 
    }, 
    "transactions": [{ 
     "amount": { 
     "total": getAmountFromNoOFVideos(), 
     "currency": "USD" 
     }, 
     "description": "Video Translation" 
    }] 
    }; 

    paypal.payment.create(create_payment_json, function (error, payment) { 
    if (error) { 
     callback(error); 
    } else { 
     if(payment.payer.payment_method === 'paypal') { 
     for(var i=0; i < payment.links.length; i++) { 
      var link = payment.links[i]; 
      if (link.method === 'REDIRECT') { 
      redirectUrl = link.href; 
      } 
     } 
     } 
     callback(null, redirectUrl, payment.id) 
    } 
    }); 
} 

exports.executeOrder = (data, callback) => { 
    /* Second and final step in place-order screen */ 
    let paymentId = data.paymentId; 
    let PayerID = data.PayerID; 

    var details = { "payer_id": PayerID }; 
    paypal.payment.execute(paymentId, details, function (error, payment) { 
    if (error) { 
     console.log("\x1b[31m", "PAYPAL ERROR: ", error) 
     callback(error); 
    } else { 
     callback(null, true); 
    } 
    }); 
} 

ペイパルの流れ:ここ

は以下documentation

へのリンクはサンプルnodejsコードである - あなたのウェブサイトのリンクがwww.videotranslate.com

  1. ユーザーペイをクリックしていると仮定しますあなたのウェブサイトのボタンwww.videotranslate.com
  2. あなたは、バックエンドでcreateOrder関数からredirectUrl を取得呼び出すAJAXの成功機能では(あなたのデザインに応じて)あなたの角度成分/サービスからAPI www.videotranslate.com/api/createOrder へのAJAX呼び出し
  3. を作ります。
  4. ユーザーはPayPalを通して支払いをした場合は、正常ペイパル あなたはペイパルでのお支払いをキャンセルした場合の利用者、PayPalの意志で
  5. 角度からAPI www.videotranslate.com/api/executeOrderへのAJAX呼び出しを行い、このページに今すぐwww.videotranslate.com/success-callback
  6. にユーザーをリダイレクトしますユーザーを www.videotranslate.com/cancel-callbackにリダイレクトすると、ここにエラー のエラーが表示され、ユーザーにもう一度お支払いを求めることができます。
+0

まずはご協力いただきありがとうございます。 いくつかの質問で私を助けてください: 1. createOrderを呼び出す人はいますか?私のクライアントまたはpaypal 2.whatは要求の流れです - who(クライアント、サーバ、paypal)がそれぞれの関数を呼び出していますか? 3.実行オーダーが支払いトランザクションを行う場合、なぜcreateOrderを使用する必要がありますか? –

+0

1.クライアントは 'createOrder'を呼び出します。 2フローを示すためにansを編集する – Dhyey

関連する問題