Я пытаюсь создать полосовой заряд, используя облачную функцию, и я получаю только ВНУТРЕННЕЕ исключение на клиенте. Где и как следует выдать ошибку HttpsError, чтобы она была перехвачена клиентом Android.
Я следовал документации по облачным функциям, найденной здесь , но когда я пришел в раздел обработки ошибок, я получил только ВНУТРЕННИЙ.
Код, который я пробовал:
exports.createCharge = functions.https.onCall((data, context) => {
var amount = data.amount * 100
var token = data.token
var info = {
amount: amount,
currency: 'usd',
description: 'Concession Charge',
source: token
}
stripe.charges.create(info, (err, charge)=>{
if(err){
throw new functions.https.HttpsError(err.type, err.message)
}else{
return charge
}
})
})
Поскольку stripe.charges.create(info);
возвращает обещание, которое я также пытался:
return stripe.charges.create(info).then((charge) => {
return charge;
}).catch((error) =>{
throw new functions.https.HttpsError(err.type, err.message)
})
Мой код на стороне клиента в основном совпадает с документацией.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//......
confirmBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
submitPayment("tok_chargeDeclinedInsufficientFunds", 8.50)
.addOnCompleteListener(paymentCallback);
}
}
//......
}
//Function Call
private Task<String> submitPayment(String token, double amount) {
Log.d(TAG, "Submitting Payment of: $" + amount);
// Create the arguments to the callable function.
Map<String, Object> data = new HashMap<>();
data.put("token", token);
data.put("amount", amount);
return mFunctions
.getHttpsCallable("createCharge")
.call(data)
.continueWith(new Continuation<HttpsCallableResult, String>() {
@Override
public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
String result = (String) task.getResult().getData();
return result;
}
});
}
//Function Complete callback
OnCompleteListener<String> paymentCallback = new OnCompleteListener<String(){
@Override
public void onComplete(@NonNull Task<String> task){
if (!task.isSuccessful()){
Exception e = task.getException();
if (e instanceof FirebaseFunctionsException) {
FirebaseFunctionsException ffe = (FirebaseFunctionsException) e;
FirebaseFunctionsException.Code code = ffe.getCode();
Object details = ffe.getDetails(); //DEBUG BREAKPOINT HERE
}
}
}
}
};
Я ожидаю, что в моем paymentCallback будет Исключение, которое считывает конкретные детали того, почему это не удалось, но вместо этого я получаю только Внутреннюю ошибку каждый раз.