पर पेपैल एकीकरण मैं https://developer.paypal.com/docs/api/ पढ़ने के बाद पेपैल प्रवाह घटना को थोड़ा गलत समझ रहा हूं। मैं अपनी साइट पर एक्सप्रेस चेकआउट और क्रेडिट कार्ड भुगतान को एकीकृत करना चाहता हूं। मैं बिना किसी फ्लास्क एक्सटेंशन के Flask
और paypalrestsdk
का उपयोग कर रहा हूं। मेरे ऐप सेफ्लास्क एप्लिकेशन
यहाँ है कुछ अंश:
@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')
यह है ठीक काम करता है, बटन payment
उपयोगकर्ता अनुमोदन पृष्ठ पर पुनः निर्देशित (राज्य created
के साथ) को सफलतापूर्वक बना लिया पर क्लिक करने के बाद। वहां वह "पुष्टि करें" पर क्लिक करें ... और जब मैं return_url निर्दिष्ट करता हूं, तो मैं कभी भी अपने आवेदन पर वापस नहीं आया, घटना! अर्थात। आवेदन को कभी सूचित नहीं किया जा सकता था कि खरीदार ने अनुमोदित भुगतान किया है और इसे अपने डेटाबेस में अपडेट किया जाना चाहिए और उस व्यक्ति को नया लाइसेंस भेजा जाना चाहिए।
समस्याएं:
मैं कुछ
pyhtonrestsdk
का उपयोग कर कॉलबैक परिभाषित करने के लिए जिस तरह से नहीं मिल रहा। यह कैसे करना है?भले ही मैं कॉलबैक जोड़ रहा हूं (मैंने शुद्ध जावास्क्रिप्ट बटन कोड का उपयोग करके एक्सप्रेस चेकआउट एम्बेड करने का प्रयास किया)
data-callback
के साथ मेरा आवेदन नहीं कहा गया था। मुझे संदेह है क्योंकि दूरस्थ सर्वरhttp://127.0.0.1/payment/paypal/success
उपयोगकर्ता "पुष्टि" पर क्लिक करने के तुरंत बाद पेपैल पुष्टिकरण के साथ विंडो बंद कर सकता था, इसलिए मैं किसी भी तरह से ब्राउज़र पुनर्निर्देशन पर भरोसा नहीं कर सका।
अंत में, मुझे संदेह है कि मुझे पेपैल वर्कफ़्लो स्पष्ट नहीं है, लेकिन मुझे डेवलपर पोर्टल पर ईवेंट के बारे में अधिक जानकारी नहीं मिली।
जब मैं रीडायरेक्ट करने का प्रयास करता हूं तो मुझे कुछ अजीब सीओआरएस त्रुटि मिल रही है। "अनुरोधित संसाधन पर paypal.sandbox.com नहीं 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर लोड करने में असमर्थ है।" – shell