使用 PayPal REST SDK 和 PayPal-Python-SDK 时未发送或接收资金

Posted

技术标签:

【中文标题】使用 PayPal REST SDK 和 PayPal-Python-SDK 时未发送或接收资金【英文标题】:Money is not being sent or received when using PayPal REST SDK and PayPal-Python-SDK 【发布时间】:2016-08-11 02:55:18 【问题描述】:

我已使用PayPal-Python-SDK 以下列方式集成了 PayPal 付款流程。

    在我们的网站上订购。至此,我知道要向访客收取多少费用。 我通过将mode 参数传递为live(不是sandbox)、客户端ID 和live 设置的客户端密码来配置paypalrestsdk 模块。 我使用paypalrestsdk.Payment 创建了一个付款,我向其中传递了大量参数,包括return_urlcancel_urlpricecurrencyquantity 和其他一些参数。 如果付款创建没有错误,我会从创建的付款中获得redirect_url。 用户点击链接将他重定向到redirect_url,这是他填写PayPal详细信息或信用卡详细信息的PayPal页面。 用户支付了相应金额并被重定向回我们的网站。 作为最后一步,我检查 DB 中是否有一条记录带有来自 GET 或 POST 参数的付款 ID,如果 DB 中有一条记录,我将其标记为 paid

现在,问题是整个过程运行良好且符合预期,但资金并未从用于付款的 PayPal 账户中流出。钱也不会从信用卡中流出。当然,用于收款的帐户不会收到钱。

这是生成付款的代码:

# Configure SDK.
paypalrestsdk.configure(
    'mode': settings.PAYPAL_MODE, # This one is set to 'live'.
    'client_id': settings.PAYPAL_CLIENT_ID,
    'client_secret': settings.PAYPAL_SECRET,
)

# Create a payment.
payment = paypalrestsdk.Payment(
    "intent": "sale",
    "payer": 
        "payment_method": "paypal"
    ,
    "redirect_urls": 
        "return_url": '...', # Here's the return URL.
        "cancel_url": '...', # Here's the cancel URL.
    ,
    "transactions": [
        "item_list": 
            "items": [
                "name": "Invoice Payment #1",
                "sku": "item",
                "price": "1.00", # This is set to 1 for testing only.
                "currency": "AUD",
                "quantity": 1
            ]
        ,
        "amount": 
            "total": "1.00", # Same as above.
            "currency": "AUD"
        ,
        "description": "Invoice Payment #1"
    ]
)

# Get the payment URL if successful.
if payment.create():
    for link in payment.links:
        if link.method == "REDIRECT":
            redirect_url = str(link.href)
            "..."
            # Pass this variable to the html template context.
else:
    "..."
    # Handle the error.

所以,我将redirect_url 传递给用户。用户发起支付。付款得到了正确处理,但钱没有被转移或收到。

我是不是做错了什么?

PS:这是我刚刚发现的一个类似问题——“Paypal App does not receive money via REST”。

【问题讨论】:

【参考方案1】:

回答我自己的问题。

在 PayPal 将您重定向回您的重定向网址后,您的 GET 或 POST 参数中有“paymentId”和“PayerID”。

之后,您使用它们即可成功付款。

payment_id = request.GET.get('paymentId', None) or request.POST.get('paymentId', None)
payer_id = request.GET.get('PayerID', None) or request.POST.get('PayerID', None)
payment = paypalrestsdk.Payment.find(payment_id)

然后你需要执行付款。

payment_response = payment.execute('payer_id': payer_id)

然后,如果付款成功执行,请执行您需要的其余工作:

if payment_response:
    # Payment successful.
    ...
else:
    # Something went wrong.
    ...

【讨论】:

以上是关于使用 PayPal REST SDK 和 PayPal-Python-SDK 时未发送或接收资金的主要内容,如果未能解决你的问题,请参考以下文章

使用 paypal-rest-sdk 时出错。请帮助我

PayPal REST API 未返回 payment_info

PayPal REST SDK 已弃用

贝宝 sdk '类 'PayPal\Rest\ApiContext' 未找到'

使用 paypal/rest-api-sdk-php 的 laravel paypal 集成错误

react 和 paypal-rest-sdk:如何将数据从支付页面传回应用程序