繁体   English   中英

Paypal 结帐客户端集成 - 返回订单 ID promise 出现问题

[英]Paypal Checkout client integration - Problem with returning order id promise

我在集成贝宝支付网关时遇到问题。 我将 javascript 用于客户端,python 用于后端和结帐 v2 api。

在后端创建订单没有问题,但是在等待我的服务器响应时 createOrder function 引发错误:

unhandled_error 
Object { err: "Expected an order id to be passed\nLe/</<@https://www.sandbox.paypal.com/smart/buttons?style.layout=vertical&style.color=blue&style.shape=rect&style.tagline=false&components.0=buttons&locale.country=NO&locale.lang=no&sdkMeta=eyJ1cmwiOiJodHRwczovL3d3dy5wYXlwYWwuY29tL3Nkay9qcz9jbGllbnQtaWQ9QWJmSjNNSG5oMkFIU1ZwdXl4eW5lLXBCbHdJZkNsLXpyVXc1dzFiX29TVUloZU01LXNMaDNfSWhuTnZkNUhYSW5wcXVFdm5MZG1LN0xOZ1gmZGlzYWJsZS1mdW5kaW5nPWNyZWRpdCxjYXJkIiwiYXR0cnMiOnt9fQ&clientID=AbfJ3MHnh2AHSVpuyxyne-pBlwIfCl-zrUw5w1b_oSUIheM5-sLh3_IhnNvd5HXInpquEvnLdmK7LNgX&sessionID=e2ea737589_mtc6mtu6mdi&buttonSessionID=de4bfb3626_mtc6mjm6mtk&env=sandbox&fundingEligibility=eyJwYXlwYWwiOnsiZWxpZ2libGUiOnRydWV9LCJjYXJkIjp7ImVsaWdpYmxlIjpmYWxzZSwiYnJhbmRlZCI6dHJ1ZSwidmVuZG9ycyI6eyJ2aXNhIjp7ImVsaWdpYmxlIjp0cnVlfSwibWFzdGVyY2FyZCI6eyJlbGlnaWJsZSI6dHJ1ZX0sImFtZXgiOnsiZWxpZ2libGUiOnRydWV9LCJkaXNjb3ZlciI6eyJlbGlnaWJsZSI6ZmFsc2V9LCJoaXBlciI6eyJlbGlnaWJsZSI6ZmFsc2V9LCJlbG8iOnsiZWxpZ2libGUiOmZhbHNlfSwiamNiIjp7ImVsaWdpYmxlIjpmYWxzZX19…", timestamp: "1593537805136", referer: "www.sandbox.paypal.com", sessionID: "e2ea737589_mtc6mtu6mdi", env: "sandbox", buttonSessionID: "de4bfb3626_mtc6mjm6mtk" }
Error: Expected an order id to be passed 
Error: Expected an order id to be passed 
12V21085461823829  // ticks in a few seconds later

控制台截图

问题似乎是 createOrder 在引发错误之前没有等待 promise ,或者 promise 没有以正确的方式给出。 类似的东西。 无论如何,这里是客户端代码:

paypal.Buttons({
    
    // button styling removed for clarity

    createOrder: function() {
        // purchase information 
        var data =  {
            'track_id': vm.selectedTrack.id,
            'lease_id': vm.selectedLease.id,
        }
        
        // post req to api with lease and track ids 
        // create payment on server side
        fetch('http://localhost:5000/api/paypal/create-purchase', {
            method: 'post',
            headers: {
                'content-type': 'application/json'
            },
            body: JSON.stringify(data),
        }).then(function(res) {
            return res.json();
        }).then(function(data) {
            console.log(data.order_id)
            return data.order_id
        })
    }
// conatiner element to render buttons in
}).render('#paypal-button');

和服务器端:

@app.route('/api/paypal/create-purchase', methods=['POST'])
def paypal_create_purchase():

    # cart validation removed for clarity

    # create paypal purchase

    environment = SandboxEnvironment(client_id=app.config['PAYPAL_PUBLIC'], client_secret=app.config['PAYPAL_PRIVATE'])
    client = PayPalHttpClient(environment)

    paypal_request = OrdersCreateRequest()
    paypal_request.prefer('return=representation')
    paypal_request.request_body (
        {
            "intent": "CAPTURE",
            "purchase_units": [
                {
                    "amount": {
                        "currency_code": "USD",
                        "value": lease.price
                    }
                }
            ]
        }
    )
    try:
        # Call API with your client and get a response for your call
        response = client.execute(paypal_request)
        order = response.result
        print(order.id)

    except IOError as ioe:
        print (ioe)
        if isinstance(ioe, HttpError):
            # Something went wrong server-side
            print(ioe.status_code)

    # note that it is the same key as on the client
    return jsonify(success=True,order_id=order.id)
    

我发现了这个类似的线程,但我不认为错误的来源与该线程中的相同(客户端上的 json 密钥不正确)

另请参阅提供此代码的文档中的相关页面

createOrder: function() {
    return fetch('/my-server/create-paypal-transaction', {
        method: 'post',
        headers: {
            'content-type': 'application/json'
        }
    }).then(function(res) {
        return res.json();
    }).then(function(data) {
        return data.orderID; // Use the same key name for order ID on the client and server
    });
}

该死的,就在我输入帖子的最后一部分时,我注意到了错误。 在我的 fetch 调用之前缺少return 会把这个留给有同样错误的其他人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM