如何将Stripe Token从Android应用传递至Parse Server并成功保存?
解决Stripe Token保存到Parse Server的问题
嘿,我来帮你搞定这个保存Token的问题!我看了你的代码,发现几个关键细节没处理对,这应该就是保存失败的原因,咱们一步步修正:
核心问题分析
- 无需额外查询当前用户:你已经通过
ParseUser.getCurrentUser()拿到了当前用户对象,完全可以直接修改并保存,没必要再用ParseQuery去查询一次,既冗余又可能引发查询异常。 - 不能直接存储Stripe Token对象:Parse Server无法直接序列化Stripe的
Token类实例,你需要保存的是Token的字符串ID(也就是token.getId()),这才是后端处理支付时需要的核心标识。 - 缺失错误处理逻辑:你现在的
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
相关产品推荐
相关产品推荐

