這是怎麼回事?我使用Ywain的答案,並將其放入像Stripe SDK那樣的Async。適用於我。
private class CreateStripeTokenTask extends AsyncTask<Void, Void, com.stripe.model.Token> {
private Map<String, Object> mMap;
protected CreateStripeTokenTask(Card card) {
mMap = hashMapFromCard(card);
}
@Override
protected com.stripe.model.Token doInBackground(Void... params) {
try
{
RequestOptions requestOptions = RequestOptions.builder().setApiKey(<YOUR_STRIPE_PUBLISHABLE_KEY>).build();
com.stripe.model.Token stripeToken = com.stripe.model.Token.create(mMap, requestOptions);
return stripeToken;
}
catch (Exception e)
{
return null;
}
}
protected void onPostExecute(com.stripe.model.Token stripeToken) {
if (stripeToken != null && stripeToken.getCard() != null)
{
if ("prepaid".equals(stripeToken.getCard().getFunding()))
{
//error - prepaid cards are not eligible
}
else
{
//card is fine
}
}
}
private Map<String, Object> hashMapFromCard(Card card) {
Map<String, Object> tokenParams = new HashMap<>();
Map<String, Object> cardParams = new HashMap<>();
cardParams.put("number", TextUtils.nullIfBlank(card.getNumber()));
cardParams.put("cvc", TextUtils.nullIfBlank(card.getCVC()));
cardParams.put("exp_month", card.getExpMonth());
cardParams.put("exp_year", card.getExpYear());
cardParams.put("name", TextUtils.nullIfBlank(card.getName()));
cardParams.put("currency", TextUtils.nullIfBlank(card.getCurrency()));
cardParams.put("address_line1", TextUtils.nullIfBlank(card.getAddressLine1()));
cardParams.put("address_line2", TextUtils.nullIfBlank(card.getAddressLine2()));
cardParams.put("address_city", TextUtils.nullIfBlank(card.getAddressCity()));
cardParams.put("address_zip", TextUtils.nullIfBlank(card.getAddressZip()));
cardParams.put("address_state", TextUtils.nullIfBlank(card.getAddressState()));
cardParams.put("address_country", TextUtils.nullIfBlank(card.getAddressCountry()));
// Remove all null values; they cause validation errors
for (String key : new HashSet<>(cardParams.keySet())) {
if (cardParams.get(key) == null) {
cardParams.remove(key);
}
}
tokenParams.put("card", cardParams);
return tokenParams;
}
}
難道這沿側使用了Android綁定或我需要專門使用Java綁定? –
你應該可以使用這兩個。據我所知,Java綁定無論如何都是Android綁定的依賴! – Ywain
感謝您的更新。我試圖使用這種方法,但遇到了您在編輯中描述的錯誤。在這一點上,我只是做檢查服務器端。 –