https://developer.paypal.com/docs/api/を読んだ後に、私はPaypalフローイベントを誤解しています。エクスプレスチェックアウトとクレジットカードによる支払いを私のサイトに統合したいのですが。フラスコ拡張なしでFlask
とpaypalrestsdk
を使用しています。ここでFlaskアプリケーションへのPaypalインテグレーション
は私のアプリからの抜粋です:
@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')
それは(状態created
で)正常に作成されたボタンpayment
をクリックした後、正常に動作され、承認ページにリダイレクトユーザー。そこで彼は「確認」をクリックします...私はreturn_urlを指定すると、私のアプリケーション、イベントに戻ったことはありません!私。バイヤーが支払いを承認したことをアプリケーションに通知することはできず、それは自分のデータベースで更新し、その人に新しいライセンスを送付しなければなりません。
問題:
私は
pyhtonrestsdk
を使用して、いくつかのコールバックを定義する方法を見つけることができません。どうやってするの?data-callback
でコールバック(純粋なJavascriptボタンコードを使用してエクスプレスチェックアウトを埋め込みました)を追加しても、私のアプリケーションは呼び出されませんでした。私はリモートサーバーが電話できなかったので疑う。http://127.0.0.1/payment/paypal/success
ユーザーは「確認」をクリックした直後にウィンドウを閉じることができたので、後で何らかの形で実行したブラウザリダイレクトを信頼できなかった。
最後に、私はPayPalワークフローを明確に理解していないと思うが、開発者ポータルでこのイベントに関する詳細情報を見つけることができなかった。
リダイレクトしようとすると奇妙なCORSエラーが発生します。 "paypal.sandbox.comを読み込むことができません 'Access-Control-Allow-Origin'ヘッダーが要求されたリソースに存在しません。 – shell