簡體   English   中英

Node.js上的Stripe API錯誤:沒有這樣的客戶:

[英]Stripe API on Node.js Error: No such customer:

這很新。 一切正常,卡進行了驗證,但是當他們提交信息時,網頁顯示“內部服務器錯誤”,錯誤日志顯示“錯誤:沒有這樣的客戶”。 對錯誤消息的研究表明,我的代碼有問題,但是我很難發現它。

客戶正在為訂閱產品付費。

  let promise = Promise.resolve();
    if(user.stripe_plan_id !== plan || card_token){
        promise = promise.then( () => {
            return new Promise( (resolve, reject) => {
                if(!user.stripe_user_id){
                    stripe.customers.create({
                        description: 'Customer for test@example.com',
                        email: user.email,
                        //source: "tok_16UzfA2eZvKYlo2CVJRxXLSR" // obtained with Stripe.js
                        plan: 'free',
                        metadata: {
                            userId: user.id
                        }
                    }, function(err, customer) {
                        if(err){
                            reject(err);
                        }else{
                            user.stripe_user_id = customer.id;
                            resolve();
                        }
                    });
                }else{
                    resolve();
                }
            });
        });
    }
    if(card_token){
        promise = promise.then( () => {
            return new Promise( (resolve, reject) => {
                stripe.customers.update(user.stripe_user_id, {
                    source: card_token
                }, function(err, customer) {
                    if(err){
                        reject(err);
                    }else{
                        let last4;
                        if(customer.default_source){
                            customer.sources.data.forEach( (source) => {
                                if(source.id == customer.default_source){
                                    last4 = source.last4;
                                }
                            });
                        }
                        user.last4 = last4 || '';
                        resolve(); //next section will save the user anyways.
                    }
                });
            });
        });
    }
    if(user.stripe_plan_id !== plan){
        promise = promise.then( () => {
            return new Promise( (resolve, reject) => {
                stripe.customers.listSubscriptions(user.stripe_user_id, function(err, subscriptions) {
                    if(err){
                        reject(err);
                    }else{
                        resolve(subscriptions);
                    }
                });
            });
        }).then( (subscriptions) => {
            return new Promise( (resolve, reject) => {
                if(subscriptions.data[0]){
                    stripe.customers.updateSubscription(
                        user.stripe_user_id,
                        subscriptions.data[0].id,
                        { plan },
                        function(err, subscription) {
                            if(err){
                                reject(err);
                            }else{
                                user.stripe_plan_id = plan;
                                resolve();
                            }
                        }
                    );
                }else{
                    stripe.customers.createSubscription(
                        user.stripe_user_id,
                        {plan},
                        function(err, subscription) {
                            if(err){
                                reject(err);
                            }else{
                                user.stripe_plan_id = plan;
                                resolve();
                            }
                        }
                    );
                }
            });
        });
    }
    return promise.then( () => {
        return user.save();
    });
}).then( (user) => {
    res.json({
        plan: user.stripe_plan_id
    }).end();
}).catch( (err) => {
    console.error(err);
    if(err.message === 'This customer has no attached payment source'){
        res.json({
            error: true,
            message:'Payment source missing.'
        }).end();
        return;
    }
    res.json({
        error: true,
        message:typeof(err)==="string"?err:'internal server error'
    }).end();
});

});

因此,您在此處看到的消息僅表示您嘗試更新的Stripe帳戶中不存在您要更新的客戶。 您在錯誤響應中收到的消息應提供客戶ID; 如果您在Stripe儀表板中(或通過API)搜索該客戶,您在那看到嗎? 我懷疑user.stripe_user_id已經設置好了,或者您試圖更新另一個帳戶上存在的客戶,或者那里有一些其他無效值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM