【问题标题】:Stripe API on Node.js Error: No such customer:Node.js 上的 Stripe API 错误:没有这样的客户:
【发布时间】:2016-06-24 17:58:27
【问题描述】:

对此很陌生。一切正常,卡验证,但是当他们提交信息时,网页显示“内部服务器错误”,错误日志显示“错误:没有这样的客户”。对该错误消息的研究表明我的代码中有问题,但我无法发现它。

客户正在为订阅产品付费。

  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();
});

});

【问题讨论】:

    标签: javascript node.js api stripe-payments


    【解决方案1】:

    因此,您在此处看到的消息仅表示您尝试更新的客户在您尝试更新的 Stripe 帐户中不存在。您在错误响应中收到的消息应提供客户 ID;如果您在 Stripe 仪表板(或通过 API)中搜索该客户,您会在那里看到吗?我怀疑user.stripe_user_id 已经设置好了,你要么尝试更新另一个帐户上存在的客户,要么那里有一些其他无效值。

    【讨论】:

    • 感谢或反馈!当一个全新的人注册然后尝试升级他们的帐户时,就会发生这种情况。
    猜你喜欢
    • 2018-07-26
    • 2021-06-09
    • 2021-01-06
    • 2016-06-23
    • 1970-01-01
    • 2015-11-16
    • 2016-07-02
    • 2016-08-27
    • 2019-12-28
    相关资源
    最近更新 更多