为什么在收到响应后代码没有执行

2024-04-24 15:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行下面的代码,它将用户带到PayPal进行支付,然后按预期将它们返回到return_url。但是代码不再执行,也不执行付款。在

我的代码基于https://github.com/paypal/rest-api-sdk-python

class PayPalHandler(tornado.web.RequestHandler):

    def get(self):

        logging.basicConfig(level=logging.INFO)

        paypal.configure({
                             "mode": PAYPAL_MODE, 
                             "client_id": PAYPAL_CLIENT_ID,
                             "client_secret": PAYPAL_CLIENT_SECRET})



        payment = paypal.Payment({
            "intent":  "sale",


            "payer":  {
                 "payment_method":  "paypal" },


            "redirect_urls": {
                 "return_url": "http://127.0.0.1:8000/ty",
                  "cancel_url": "http://127.0.0.1:8000/" },


            "transactions":  [ {

                 "item_list": {
                      "items": [{
                                 "name": "membership",
                                 "price": "2.00",
                                 "currency": "GBP",
                                 "quantity": 1 }]},


                      "amount":  {
                            "total":  "2.00",
                             "currency":  "GBP" },
                             "description":  "One of membership fee." } ] } )

        redirect_url = ""

        if payment.create():
            print("Payment[%s] created successfully"%(payment.id))

            for link in payment.links:
                if link.method == "REDIRECT":
                    redirect_url = link.href
            print("Redirect for approval: %s"%(redirect_url))
            return self.redirect(redirect_url)

        else:
            print("Error while creating payment.")
            print(payment.error)


        response = payment.to_dict()
        print response
        payment = paypal.Payment.find(payment.id)

        if payment.execute({"payer_id": response['payer_id']}):              
            print ("Payment executed successfully")
        else:
            print(payment.error) # Error Hash

        print payment.to_dict()

        print userData

所以在https://devtools-paypal.com/guide/pay_paypal/python?success=true&token=EC-8JL96732FP068791F&PayerID=QQGSRNHDACTLJ的例子中。步骤5没有发生,贝宝也没有回复?在


Tags: 代码httpsidurlreturnifresponselink
3条回答

为什么使用

return self.redirect(redirect_url)

我想你可以用

^{pr2}$

我从来没有在龙卷风处理程序中看到过返回声明。在

您需要其他url,papypal重定向支付成功时,您将收到代币和PayerID。在该GET方法中,可以将这部分代码(伪代码)放入:

 payerid_param = request.get('PayerID')
 payment = paypal.Payment.find(db_payment.id)

 if payment.execute({"payer_id": payerid_param}):              
    print ("Payment executed successfully")
 else:
    print(payment.error) # Error Hash

您需要在两次通话之间保存付款密码。在

我是贝宝的阿维。我对Tornado不是很熟悉,但是当代码中出现return self.redirect(redirect_url)行,并将用户返回返回返回的url之后,payment.execute({"payer_id": response['payer_id']})中的付款人id是否正确?Payer_id作为http://<return_url>?token=EC-60U79048BN7719609&PayerID=7E7MGXCWTTKK2格式的参数之一返回到返回的url后面。另外,执行payment = paypal.Payment.find(payment.id)后付款的状态是什么。另一个建议是看看print payment.error是否打印出有用的调试消息和调试id,paypal商家的技术服务部门可以使用它来查看问题。在

相关问题 更多 >