2014-09-16 9 views
8

Come posso iniziare a addebitare all'utente l'utente immediatamente per un contratto di fatturazione PayPal?Accordi di fatturazione PayPal API REST: come iniziare immediatamente

Ecco cosa ho ottenuto finora.

  1. Creare un piano di fatturazione (POST .../pagamenti/fatturazione-piani /)
  2. renderlo attivo (PATCH .../pagamenti/fatturazione-piani /)
  3. Creare un Accordo per fatturazione (POST .../pagamenti/fatturazione-accordi /)
  4. Invia all'utente di approval_url, l'utente approva, reindirizzati a tornare url
  5. Esegui accordo (POST .../pagamenti/fatturazione-accordi // accordo-esecuzione)

Sembra tutto funzionante, ma voglio caricare l'utente in questo momento e ogni mese in futuro. Se imposto start_date nel passaggio 3, viene visualizzato un errore, deve essere in futuro. Se lo imposto in futuro, all'utente non viene addebitato alcun costo.

Devo "Impostare gli importi dei contratti in sospeso", quindi "Fatturare gli importi dei contratti in sospeso" per il pagamento iniziale?

Inoltre, per quanto riguarda i pagamenti mensili, richiedono qualche azione o si verificano semplicemente come specificato nel piano di fatturazione?


Aggiornamento

sto testando questo intorno 2014-09-16T20:06:30+0000

Se invio start_date come il tempo UTC corrente si ottiene un errore in fase 2 mi dice che deve essere in futuro.

Se invio la data corrente +30 secondi o +2 ore avrò finito al punto 5, che restituisce una risposta 400: UNKNOWN_ERROR "Si è verificato un errore sconosciuto"

Se invio la data corrente +4 ore tutto funziona. L'ora UTC corrente è 20:00, quindi l'aggiunta di 4 ore significa che lo start_date è domani.

Ciò significa che non posso caricare l'utente oggi? Il start_date deve essere il giorno successivo o anche il giorno successivo business?

risposta

6

Ho parlato con un rappresentante di PayPal e ha scoperto che start_date deve essere domani o più tardi. Stanno per aggiungere questo ai documenti.

Se si desidera iniziare immediatamente la fatturazione mensile, è possibile farlo impostando la data di inizio in un mese e addebitando una tariffa di installazione per coprire il primo mese. Non ho provato questo perché non è quello che voglio.

+1

Ora ho testato l'opzione della tassa di installazione: non addebita immediatamente l'utente! Sembra che non ci sia modo di farlo affatto. – Jake

+0

Sono un tale casino. Ho anche ricevuto una risposta ufficiale, hanno detto 5 minuti in PST (contrariamente a quello che ti hanno detto). Mi hanno fornito informazioni miste che coprono più chiamate su quasi tutti gli argomenti con cui li ho colpiti. – lefnire

+1

Vedo che dalla California, addebita immediatamente se passo una carica prima delle 16:00 (inverno), il che significa che l'UTC è ancora lo stesso giorno. Dopo le 16:00, l'UTC è il giorno successivo e l'addebito non viene eseguito immediatamente. Sarà entro 8 ore, suppongo (PST è UTC - 8). Quindi PayPal ha un enorme problema di tempo con i loro piani. –

2

Il primo pagamento per gli accordi verrà fatturato direttamente nello start_date specificato. Gli importi successivi sono anche presi automaticamente da PP. È necessario lavorare con le chiamate BillOutstandingAmount solo se PP non è riuscito a prelevare il pagamento alla data di rinnovo.

Il problema che ho dovuto affrontare durante lo sviluppo con RestAPI era la definizione di un fuso orario errato. Forse è lo stesso per te. Assicurarsi che il fuso orario corretto è specificato nel vostro start_date (con tutte le date di cui al PP di fatto)

date devono essere in questo formato: YYYY-MM-AAAAThh: mm: ssZ

es.start_date = 2014-09-16T09: 20: 00 -0400

Se si desidera assicurarsi che Paypal accetti la data come valida, è sufficiente aggiungere alcuni secondi ad essa.

Diciamo che siete in Java, si può fare qualcosa di simile:

private String getPaypalDate() 
{ 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 

    // Add 30 seconds to make sure Paypal accept the agreement date 
    Date rightNow = new Date(new Date().getTime() + 30000); 

    return df.format(rightNow); 
} 
+1

Funziona se aggiungo 1 giorno a 'start_date'. Alcuni secondi non funzionano, anche poche ore non funzionano. Non c'è modo di fatturare immediatamente? – Jake

+0

Sei sicuro di utilizzare il fuso orario corretto? Dubito che avrebbe funzionato per me e non per te. Se si specifica l'ora corrente, nel momento in cui l'utente accetta l'accordo verrà emessa immediatamente al momento dell'esecuzione. – Ethorsen

+0

Strano, ho fatto qualche altro test. Si prega di consultare l'aggiornamento nella domanda. – Jake

0

Non riesco a replicare, in realtà. Mi sono imbattuto in questo thread quando ho ricevuto l'errore dovuto all'impostazione su moment.now(). Ma impostarlo su anche 5 secondi in futuro funziona a-ok. Sto usando JavaScript, "start_date": moment().add({seconds:5}).format() e questo è perfetto. Moment.js imposterà TZ in UTC durante la formattazione in quanto tale, quindi deve essere una cosa del fuso orario sulla tua parte?

+0

Ho lottato anche con questo. Quando l'ho impostato qualche secondo in avanti, viene visualizzato e viene visualizzato come "Attivo" nell'account, ma in realtà non carica nulla ...In alternativa, se imposto un costo iniziale, passa ma imposta lo stato su "In sospeso". Sono sicuro al 100% che il mio fuso orario sia impostato correttamente. – Guy

+0

Ho ricevuto una risposta ufficiale: "La soluzione migliore per rendere il pagamento ricorrente come immediato è aggiungendo 5 minuti prima dall'ora corrente. Se si utilizza qualche secondo, potrebbe verificarsi in seguito se un'interruzione della rete sul server o sul lato client Inoltre assicurati di utilizzare PST come il tempo perché il sistema PayPal sta salvando qualsiasi tentativo nel fuso orario PST. " – lefnire

+0

Dobbiamo usare PST o GMT? Perché paypal dice di usare il formato ISO 8601. – viper

0

Sembra che i pagamenti vengano elaborati solo in base alla data precedente o successiva alle 07:00 UTC della data corrente.

Ad esempio. L'ora corrente è 2017-05-04T04: 50: 00.00Z Ho impostato la data di inizio come ora corrente UTC più 30 secondi. Poiché la data del contratto è impostata su un valore maggiore della data corrente, l'API non genera un errore, ma NON imposta il tuo tempo per essere quello che hai specificato. Invece lo imposta su 2017-05-04T07: 00: 00Z.

Ora, se si ha la stessa data di ora del 2017-05-04T04: 50: 00.00Z e invece di aggiungere 30 secondi si aggiungono 24 ore, si penserebbe che il tempo sarà quindi impostato su 2017-05- 05T04: 50: 00.00Z. Ma no, il tempo sarà impostato per 2017-05-05T07: 00: 00Z.

Quindi sembra che questi procedano tutti i giorni alle 07:00 UTC e non è possibile specificare altro che la data.