我使用Stripe并获得了卡片令牌,但我无法创建客户。 Android Studio通过清单上的Internet权限为我提供了NetworkOnMainThreadException。这是我的代码:
public void registerOnClick(View v)
{
Card card = new Card("4242424242424242", 12, 2017, "123");
boolean validation = card.validateCard();
Debug.log("Is it validate? "+validation);
if (validation)
{
new Stripe().createToken(
card,
PUBLISHABLE_KEY,
new TokenCallback()
{
public void onSuccess(Token token)
{
Debug.log("TOKEN: "+token);
Toast.makeText(getApplicationContext(), "Toke achieved", Toast.LENGTH_LONG).show();
RequestOptions requestOptions = (new RequestOptions.RequestOptionsBuilder()).setApiKey(SECRET_KEY).build();
Map<String, Object> customerParams = new HashMap<String, Object>();
customerParams.put("source", token.getId()); // Token ID
customerParams.put("plan", "mumsclub"); //The plan created in Stripe dashboard
customerParams.put("email", "tabo@example.com");
try {
Customer.create(customerParams, requestOptions);
} catch (StripeException e) {
e.printStackTrace();
}
}
public void onError(Exception error)
{
Debug.log("Token not retrieved");
}
});
}
else
{
Debug.log("Card is not valid");
}
}
答案 0 :(得分:3)
不幸的是,在Android应用程序中无法执行此操作,因为这些调用需要您的Secret API密钥。您不应该在Android应用程序中使用Secret API密钥,否则攻击者可以获取它,然后代表您创建费用,退款或转移。
您需要做的是首先创建一个卡片令牌,然后使用您的密钥将其发送到您将创建费用的服务器或客户。您的Android应用程序中不会发生这种情况。