2017-04-06 30 views
5

私の目標は、SaaSの支払い方法として「paypal」を使用して定期的に6ヶ月間および12ヶ月間の定期購読を設定することです。私は残りのAPIを使用しています。私が見つけることができない1つは、PayPalの残りのAPIを使用して、1回の販売をして、自分のコードを定期支払いに再加工する方法の実装です。今できる)。PayPalのエクスプレスチェックアウトREST APIによる定期支払い

私はPaypalのExpress Checkout REST APIで支払いを行うためにadvanced server integrationを手に入れました。

私は上記のリンクで説明したコード例とpaypalのthis exampleに記載されているコード例に従って、ワンタイムセールを作成しました。私は、2つのステップのプロセスを切り替えて、代わりに課金契約の作成と実行呼び出しを含めるようにしましたが、ユーザーがpaypalにサインインするように開くライトウィンドウは、「ものは見えません。現時点では作業中です。後でもう一度お試しください。ここに私のjavascriptコードがあります。これは実際の例とほぼ同じですが、異なるルートを使用しています。

paypal.Button.render({ 

    // Set your environment 

    env: 'sandbox', // sandbox | production 

    // Wait for the PayPal button to be clicked 
    payment: function(resolve, reject) { 

    // Make a call to the merchant server to set up the payment 
     console.log("button clicked") 
     return paypal.request.post('/payment/paypal/subscription', {amount: '0.02'}) 
      .then(function(res) { 
       resolve(res.payToken); #--WHERE I'M GOING WRONG 
      }) 
      .catch(function(err) { reject(err); }); 
    }, 

    // Wait for the payment to be authorized by the customer 
    onAuthorize: function(data) { 

     // Make a call to the merchant server to execute the payment 
     return paypal.request.post('/payment/paypal/execute', { 
      data: data, 
      paymentID: data.paymentID, 
      payerID: data.payerID 
     }).then(function (res) { 
      if (res.state == "active") { 
       document.querySelector('#paypal-button-container-server').innerText = 'Payment Complete!'; 
      } else { 
       console.log(res); 
       alert("Payment could not be approved, please try again.") 
      } 
     }); 
    } 

}, '#paypal-button-container-server'); 

私はすなわちresolve(res.payToken)との行に、決済機能に間違ったつもりだことを伝えることができます。私はこの機能に渡す必要があるv1/payments/billing-agreementsレスポンスのデータを知りませんが、profile_idapproval_url(実際のhref - "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXXXXXXXX")の両方を試しました。

どこが間違っていますか?これが可能であれば、私はこの仕事をすることから離れた実践的な一例だと思っていますが、私がそれをやっているようにそれができないかどうかを知りたいのです(この場合、Payflow ?)。

注:私は、請求契約と請求プロファイルを完全に理解しており、問題はREST APIにはありません。ワンタイム販売の実装に加えて、必要なすべての請求プロファイル/契約(郵便配達員を通じて確認)を行うことができます。

以下は、誰でもその内部の正しいデータを指摘できるイベントで、v1/payments/billing-agreementsサンドボックスコールからの応答です。

{ 
    "name": "Magazine Subscription", 
    "description": "Monthly subscription with a regular monthly payment definition and two-month trial payment definition.", 
    "plan": { 
    "id": "P-XXXXXXXXXXXXXXXXXXX", 
    "state": "ACTIVE", 
    "name": "1 Month Recurring", 
    "description": "A recurring payment plan for customers who sign a 1-month contract", 
"type": "FIXED", 
"payment_definitions": [ 
    { 
    "id": "PD-924GIUJ3MWQ32E22348G0018", 
    "name": "Regular Payment Definition", 
    "type": "REGULAR", 
    "frequency": "Month", 
    "amount": { 
     "currency": "USD", 
     "value": "150" 
    }, 
    "cycles": "1", 
    "charge_models": [ 
     { 
     "id": "CHM-940183BIUJ3MWQ5VK14226VH", 
     "type": "TAX", 
     "amount": { 
      "currency": "USD", 
      "value": "10" 
     } 
     } 
    ], 
    "frequency_interval": "1" 
    }, 
    { 
    "id": "PD-5604RIUJ3MWQ4Y4221782C61", 
    "name": "Trial Payment Definition", 
    "type": "TRIAL", 
    "frequency": "Month", 
    "amount": { 
     "currency": "USD", 
     "value": "120" 
    }, 
    "cycles": "1", 
    "charge_models": [ 
     { 
     "id": "CHM-640401IUJ3MWQ64W07759LB2", 
     "type": "TAX", 
     "amount": { 
      "currency": "USD", 
      "value": "10" 
     } 
     } 
    ], 
    "frequency_interval": "1" 
    } 
], 
"merchant_preferences": { 
    "setup_fee": { 
    "currency": "USD", 
    "value": "0" 
    }, 
    "max_fail_attempts": "3", 
    "return_url": "http://localhost:8000/payment/success", 
    "cancel_url": "http://localhost:8000/payment/new", 
    "auto_bill_amount": "NO", 
    "initial_fail_amount_action": "CONTINUE" 
} 
    }, 
    "links": [ 
{ 
    "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXXXXXXXXX", 
    "rel": "approval_url", 
    "method": "REDIRECT" 
}, 
{ 
    "href": "https://api.sandbox.paypal.com/v1/payments/billing-agreements/EC-XXXXXXXXXXXXX/agreement-execute", 
    "rel": "execute", 
    "method": "POST" 
} 
    ], 
    "start_date": "2017-12-22T09:13:49Z" 
} 
+0

こんにちは@DNestoffは、私は、私もこれを行うにしようとしています、それ –

+0

@KoredeLawrenceOluwafemiを解決するあなたができたか、同じ問題を持っています。誰でもそれを把握していますか? – kspearrin

答えて

0

REST APIのまだエクスプレスチェックアウトのURLのが、あなたは承認URL内で見つかったトークンをバック渡す必要がcheckout.jsフロントエンド統合とそれを使用するためにバックパス。解決方法を呼び出す前に、このURLを解析してサーバー上のトークンセクションを取得して戻したり、渡したりすることができます。

すなわち

approval_url = { 
    "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXXXXXXXX" 
} 

var token = "EC-XXXXXXXXXXXXX"; 
resolve(token); 
関連する問題