Sono leggermente frainteso dall'evento di flusso Paypal dopo aver letto https://developer.paypal.com/docs/api/. Mi piacerebbe integrare il pagamento express e i pagamenti con carta di credito sul mio sito. Sto usando Flask
e paypalrestsdk
senza alcuna estensione Flask.Integrazione Paypal all'applicazione Flask
Ecco estratti dalla mia app:
@app.route('/', methods=['GET'])
def index():
# Page with but form, price/quantity/name values
# are stored in hidden fields, "Buy now" acts as submit
return render_template('index.html')
@app.route('/payment/paypal', methods=['POST'])
def payment_paypal():
# Here I am creating dict with required params
payment_template = {
'intent': 'sale',
'payer': {'payment_method': 'paypal'},
'redirect_urls': {
'return_url': url_for('payment_paypal_execute'),
'cancel_url': url_for('payment_paypal_error')
},
......
}
payment = paypalrestsdk.Payment(payment)
if payment.create():
print('Payment "{}" created successfully'.format(payment.id))
for link in payment.links:
if link.method == "REDIRECT":
redirect_url = str(link.href)
print('Redirect for approval: {}'.format(redirect_url))
return redirect(redirect_urls)
@app.route('/payment/paypal/execute', methods=['GET'])
def payment_paypal_execute():
payer_id = request.args.get('payerId')
payment_id = request.args.get('paymentId')
token = request.args.get('token')
pending_payment = PayPalPayment.query.filter_by(token=token).filter_by(state='created').first_or_404()
try:
payment = paypalrestsdk.Payment.find(pending_payment.payment_id)
except paypalrestsdk.exceptions.ResourceNotFound as ex:
print('Paypal resource not found: {}'.format(ex))
abort(404)
if payment.execute({"payer_id": payer_id}):
pending_payment.state = payment.state
pending_payment.updated_at = datetime.strptime(payment.update_time, "%Y-%m-%dT%H:%M:%SZ")
db.session.commit()
return render_template('payment/success.html', payment_id=payment.id, state=payment.state)
return render_template('payment/error.html', payment_error=payment.error, step='Finallizing payment')
E 'funziona bene, dopo aver fatto clic sul pulsante payment
creato con successo (con lo stato created
) utente reindirizzati alla pagina di approvazione. Lì fa clic su "Conferma" ... E non sono mai tornato alla mia domanda, evento quando ho specificato return_url! Cioè l'applicazione non può mai essere informata del fatto che l'acquirente ha approvato il pagamento e dovrebbe essere aggiornato nel mio database e la nuova licenza dovrebbe essere inviata a quella persona.
Problemi:
non riesco a trovare modo per definire alcuni callback utilizzando
pyhtonrestsdk
. Come farlo?Anche se aggiungo la richiamata (ho provato a incorporare Express Checkout utilizzando puro codice pulsante Javascript) con
data-callback
la mia applicazione non è stata chiamata. Sospetto che il server remoto non possa chiamarehttp://127.0.0.1/payment/paypal/success
L'utente potrebbe chiudere la finestra con conferma PayPal immediatamente dopo aver fatto clic su "Conferma", quindi non potevo fidarmi del reindirizzamento del browser in seguito.
Infine, ho il sospetto che io non capisco il flusso di lavoro PayPal chiaro, ma non sono riuscito a trovare ulteriori informazioni su di esso evento sul portale sviluppatori.
Errore di CORS durante il tentativo di reindirizzamento. "Impossibile caricare paypal.sandbox.com nessuna intestazione 'Access-Control-Allow-Origin-Allow-Origin' presente sulla risorsa richiesta." – shell