我正在我的Android应用程序中集成Stripe。 我发现了两个问题,我被困住了。
第一个(主要)问题是 - 我从卡信息中获得了令牌密钥。但是当我试图进行第一次充电时,它在下一行显示错误。
Stripe.apiKey = "sk_test_0000000000000";
我也用Google搜索但找不到任何解决方案。
Creating Stripe Customer - cannot resolve symbol apiKey
我甚至也见过这样的问题。但我没理解它的解决方案。
以下是我的收费代码:
final String publishableApiKey = BuildConfig.DEBUG ?
"pk_test_000000000000000000" :
//"sk_test_00000000000000000000000" :
getString(R.string.com_stripe_publishable_key);
final TextView cardNumberField = (TextView) findViewById(R.id.cardNumber);
final TextView monthField = (TextView) findViewById(R.id.month);
final TextView yearField = (TextView) findViewById(R.id.year);
TextView cvcField = (TextView) findViewById(R.id.cvc);
Card card = new Card(cardNumberField.getText().toString(),
Integer.valueOf(monthField.getText().toString()),
Integer.valueOf(yearField.getText().toString()),
cvcField.getText().toString());
Stripe stripe = new Stripe();
stripe.createToken(card, publishableApiKey, new TokenCallback() {
public void onSuccess(Token token) {
// TODO: Send Token information to your backend to initiate a charge
Toast.makeText(
getApplicationContext(),
"Charge Token created: " + token.getId(),
Toast.LENGTH_LONG).show();
/*make a charge starts*/
// Set your secret key: remember to change this to your live secret key in production
// Create the charge on Stripe's servers - this will charge the user's card
Stripe.apiKey = "sk_test_0000000000000000000000";
try {
Map<String, Object> chargeParams = new HashMap<String, Object>();
chargeParams.put("amount", 100); // amount in cents, again
chargeParams.put("currency", "usd");
chargeParams.put("source", token.getId());
chargeParams.put("description", "Example charge");
Charge charge = Charge.create(chargeParams);
System.out.println("Charge Log :" + charge);
} catch (CardException e) {
// The card has been declined
} catch (APIException e) {
e.printStackTrace();
} catch (AuthenticationException e) {
e.printStackTrace();
} catch (InvalidRequestException e) {
e.printStackTrace();
} catch (APIConnectionException e) {
e.printStackTrace();
}
/*charge ends*/
}
我从不同的例子中尝试过这些代码。我也跟着Stripe doc。
但我收到了这个错误:
com.stripe.exception.AuthenticationException:未提供API密钥。 (提示:使用'Stripe.apiKey ='设置API密钥。
第二个问题是 - 关于验证。 如果我输入自己的卡片详情,如果我写错了cvv号码。它仍然生成令牌密钥。
我已经使用Stripe的官方文档实现了字段验证。我不知道如何用实时数据验证它。
第一期的解决方案:
com.stripe.Stripe.apiKey = "sk_test_xxxxxxxxxxxxxxxxxxx";
try {
final Map<String, Object> chargeParams = new HashMap<String, Object>();
chargeParams.put("amount", 500); // amount in cents, again
chargeParams.put("currency", "usd");
chargeParams.put("source", token.getId());
chargeParams.put("description", "Example charge");
new Thread(new Runnable() {
@Override
public void run() {
Charge charge = null;
try {
charge = Charge.create(chargeParams);
} catch (AuthenticationException e) {
e.printStackTrace();
} catch (InvalidRequestException e) {
e.printStackTrace();
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (CardException e) {
e.printStackTrace();
} catch (APIException e) {
e.printStackTrace();
}
System.out.println("Charge Log :" + charge);
}
}).start();
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:1)
Stripe的Android绑定只允许您对卡信息进行标记。创建令牌后,必须将其发送到外部服务器,您可以在API服务器中使用它。
您无法直接从应用中使用该令牌,因为该应用必须永远无法访问您的密钥,攻击者可以轻松将其提取,然后该攻击者可以访问您的帐户。
重新。第二个问题,当创建令牌时,该卡未经银行验证(仍有一些基本的健全性检查,例如检查数字位数,未来到期日的事实等等)。 )。只有当您在服务器端API请求中使用令牌时,才会向银行核对该卡。