2017-04-06 4 views
5

Mein Ziel ist es, wiederkehrende 6- und 12-Monats-Abonnements einzurichten, die "paypal" als Zahlungsmethode für unseren SaaS verwenden. Ich benutze die Rest-API, und die eine Sache, die ich nicht finden kann, ist eine funktionierende Implementierung für einen einmaligen Verkauf und die erneute Bearbeitung meines Codes in eine wiederkehrende Zahlung mit der Rest-API von PayPal (die ich gelesen habe) jetzt möglich). Hier sind, wo wir sind:Wiederkehrende Zahlungen über die Express Checkout-REST-API von Paypal

Ich habe eine funktionierende advanced server integration für Zahlungen mit Paypal Express Checkout REST API.

Ich habe den einmaligen Verkauf erstellt, indem ich die Codebeispiele, wie oben auf dem Link erklärt, sowie das, was in this example von Paypal gezeigt wird, befolge. Ich habe versucht, den zweistufigen Prozess zu deaktivieren, um stattdessen die Erstellungs- und Ausführungsaufrufe für die Fakturierungsvereinbarung einzuschließen, aber das Lichtfenster, das sich öffnet, um sich bei paypal anzumelden, hört mit der Fehlermeldung "Dinge scheinen nicht auf im Moment arbeiten. Bitte versuche es später noch einmal ". Hier ist mein JavaScript-Code, der fast genau dem Arbeitsbeispiel entspricht, aber mit verschiedenen Routen.

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'); 

Ich kann sagen, dass ich falsch in der Zahlungsfunktion werde, und zwar auf der Linie mit resolve(res.payToken). Ich weiß nicht, welche Daten von der v1/Zahlungen/Abrechnungsvereinbarungen Antwort ich an diese Funktion übergeben sollte, aber sowohl die profile_id als auch die approval_url (die tatsächliche href - "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXXXXXXXX") versucht haben.

Wohin gehe ich falsch? Wenn das möglich ist, habe ich das Gefühl, dass ich ein Arbeitsbeispiel dafür bin, aber ich würde gerne wissen, ob es nicht so funktioniert, wie ich es tue (in diesem Fall müsste es möglicherweise über Payflow geschehen) ?).

Hinweis: Ich verstehe Rechnungsvereinbarungen und Abrechnungsprofile vollständig und meine Probleme sind nicht mit der REST-API. Zusätzlich zu der Ausführung des einmaligen Verkaufs kann ich alle notwendigen Abrechnungsprofile/Vereinbarungen (verifiziert durch Postman) machen.

Unten ist die Antwort von einem v1/payments/billing-agreements Sandbox-Aufruf für den Fall, dass jeder den richtigen Teil der Daten darauf hinweisen kann.

{ 
    "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

Hallo @DNestoff, ich habe das gleiche Problem, wie Sie in der Lage waren zu lösen es –

+0

@KoredeLawrenceOluwafemi ich auch, dies zu tun versuchen. Wer kann es herausfinden? – kspearrin

Antwort

0

Die die Kasse URL des REST API übergibt zurück noch die ausdrücklichen aber um es mit der checkout.js Front-End-Integration Sie das Token in der Genehmigung URL gefunden zurücklaufen müssen zu verwenden. Sie können diese URL entweder analysieren und den Token-Abschnitt auf dem Server abrufen und zurückgeben oder übergeben, bevor Sie die Auflösungsmethode aufrufen.

heißt

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

var token = "EC-XXXXXXXXXXXXX"; 
resolve(token); 
Verwandte Themen