You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Stripe Token从Android应用传递至Parse Server并成功保存?

解决Stripe Token保存到Parse Server的问题

嘿,我来帮你搞定这个保存Token的问题!我看了你的代码,发现几个关键细节没处理对,这应该就是保存失败的原因,咱们一步步修正:

核心问题分析

  1. 无需额外查询当前用户:你已经通过ParseUser.getCurrentUser()拿到了当前用户对象,完全可以直接修改并保存,没必要再用ParseQuery去查询一次,既冗余又可能引发查询异常。
  2. 不能直接存储Stripe Token对象:Parse Server无法直接序列化Stripe的Token类实例,你需要保存的是Token的字符串ID(也就是token.getId()),这才是后端处理支付时需要的核心标识。
  3. 缺失错误处理逻辑:你现在的saveInBackground只处理了成功场景,失败时没有输出具体错误信息,这会让你很难定位问题。

修改后的完整代码

// Test the data.
if (userCard.validateCard()) {
    Stripe stripe = new Stripe(CardActivity.this, "你的Stripe公钥");
    stripe.createToken(
        userCard,
        new TokenCallback() {
            public void onSuccess(final Token token) {
                // 直接使用当前用户对象,无需额外查询
                ParseUser currentUser = ParseUser.getCurrentUser();
                if (currentUser != null) {
                    // 保存Token的ID字符串,而非整个Token对象
                    currentUser.put("token", token.getId());
                    currentUser.saveInBackground(new SaveCallback() {
                        @Override
                        public void done(ParseException e) {
                            if (e == null) {
                                Toast.makeText(CardActivity.this, "Success", Toast.LENGTH_SHORT).show();
                            } else {
                                // 新增:处理保存失败的情况,打印错误信息
                                Toast.makeText(CardActivity.this, "保存失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                } else {
                    Toast.makeText(CardActivity.this, "未获取到当前用户", Toast.LENGTH_SHORT).show();
                }
            }
            public void onError(Exception error) {
                // Show error message
                Toast.makeText(CardActivity.this, error.getMessage(), Toast.LENGTH_LONG ).show();
            }
        }
    );
} else {
    Toast.makeText(CardActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
}

额外建议

  • 如果你担心网络波动导致保存失败,可以考虑用currentUser.saveEventually()替代saveInBackground(),它会自动在网络恢复时重试保存操作。
  • 确保Parse Dashboard里的User类的token字段类型是String,和我们保存的类型匹配。

内容的提问来源于stack exchange,提问作者MarvyP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:37:17