Я пытаюсь реализовать интеграцию платежей Razorpay с API-интерфейсом облачных функций Firebase в Android. Все работает нормально, но при проверке платежа на сервере функции Firebase выдают внутреннюю ошибку как FirebaseFunctionsEceptions.InternalError.
Это мой код на стороне сервера
exports.confirmPayment = functions.https.onCall((data, context) => {
if (context.auth) {
const amount = data.amount;
const text = data.razorpay_order_id + "|" + data.razorpay_payment_id;
var signature = crypto
.createHmac("sha256", key_secret)
.update(text)
.digest("hex");
if (signature === data.razorpay_signature) {
console.log("PAYMENT SUCCESSFUL");
return { text: "PAYMENT_SUCCESSFUL" };
} else {
throw new functions.https.HttpsError('Invalid Pack Bought', 'Your payment was unsuccessful due to invalid pack purchasing!')
}
}else{
throw new functions.https.HttpsError('Unauthenticated User', 'Unable to confirm Payment!')
}
});
И мой Android Studio Java Код
Когда платеж успешен, onPaymentSuccess Razorpay выбрасывается и после оплаты Я должен проверить, является ли произведенный платеж authenti c и имеет такую же сумму. это делается методом verifyPayment, который указан ниже
@Override
public void onPaymentSuccess(String s, PaymentData paymentData) {
Toast.makeText(this, "Payment Successful verifying now!", Toast.LENGTH_SHORT).show();
Task<String> results = verifyPayment(paymentData);
results.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (task.isSuccessful()) {
Snackbar.make(btnBuy.getRootView(), "Points have been added to your balance!", Snackbar.LENGTH_SHORT).show();
} else {
Toast.makeText(BuyPointsActivity.this, "" + task.getException(), Toast.LENGTH_LONG).show();
}
}
});
}
Метод подтверждения оплаты вызывается с помощью этого метода
private Task<String> verifyPayment(PaymentData data) {
Map<String, Object> data1 = new HashMap<>();
data1.put("razorpay_payment_id", data.getPaymentId());
data1.put("razorpay_order_id", data.getOrderId());
data1.put("amount", amount);
data1.put("razorpay_signature", data.getSignature());
data1.put("push", true);
return functions
.getHttpsCallable("confirmPayment")
.call(data1)
.continueWith(new Continuation<HttpsCallableResult, String>() {
@Override
public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
// This continuation runs on either success or failure, but if the task
// has failed then getResult() will throw an Exception which will be
// propagated down.
String result = (String) task.getResult().getData();
return result;
}
});
}
Это журнал функций облака
confirmPayment
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","authenticationInfo":{"principalEmail":"mmbestonbest@gmail.com"},"requestMetadata":{"callerIp":"47.30.174.168","callerSuppliedUserAgent":"FirebaseCLI/8.0.1,gzip(gfe),gzip(gfe)","requestAttributes":{"time":"2020-04-05T03:49:42.041Z","auth":{}},"destinationAttributes":{}},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.UpdateFunction","authorizationInfo":[{"resource":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","permission":"cloudfunctions.functions.update","granted":true,"resourceAttributes":{}}],"resourceName":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","request":{"updateMask":"sourceUploadUrl,name,labels,runtime,httpsTrigger","@type":"type.googleapis.com/google.cloud.functions.v1.UpdateFunctionRequest","function":{"runtime":"nodejs8","name":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","httpsTrigger":{},"labels":{"deployment-callable":"true","deployment-tool":"cli-firebase"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-2535687d-781c-43d3-8bb1-6cdc1434531f/0cdb81e8-551c-4de7-83c0-8fe50f5a97bb.zip?GoogleAccessId=service-615941328944@gcf-admin-robot.iam.gserviceaccount.com&Expires=1586060376&Signature=rF3FqDJFIbAXSLK8DiemM6X%2BfTvMhv6RMpSvFCaHFjSfQ1kEf%2B5jV92LColV1k0szPt98HsExV2u2HGHRBSobobloyY8oAyh94WYHQTkVQZfhRGCOTvSliuhIhE98kRLVLOEPOjkyhNlz1v9kz48z1tq%2BRYyFB224joiU6qx4Qa58a08QZ3a1Ty4yQAuYedz2lgj3auKoJj10MzGf9T9YW3ffvN9vy4fF1z10erVaNMspgrZoU43NnJGWt%2B185ZRT9Gx%2B6mfxYinkXlfeVj3b8WOKwcYGbtN1FnFaUf8wGX3fAb%2B6FRB2n5ATIchyNHnr1F7E6sbdpmG5cCDZE1kbQ%3D%3D"}},"resourceLocation":{"currentLocations":["us-central1"]}}
9:20:10.642 AM
confirmPayment
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{},"authenticationInfo":{"principalEmail":"mmbestonbest@gmail.com"},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.UpdateFunction","resourceName":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment"}
9:21:23.540 AM
confirmPayment
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","authenticationInfo":{"principalEmail":"mmbestonbest@gmail.com"},"requestMetadata":{"callerIp":"47.30.174.168","callerSuppliedUserAgent":"FirebaseCLI/8.0.1,gzip(gfe),gzip(gfe)","requestAttributes":{"time":"2020-04-05T03:51:23.614Z","auth":{}},"destinationAttributes":{}},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.UpdateFunction","authorizationInfo":[{"resource":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","permission":"cloudfunctions.functions.update","granted":true,"resourceAttributes":{}}],"resourceName":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","request":{"updateMask":"sourceUploadUrl,name,labels,runtime,httpsTrigger","@type":"type.googleapis.com/google.cloud.functions.v1.UpdateFunctionRequest","function":{"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-2535687d-781c-43d3-8bb1-6cdc1434531f/87426444-4523-4584-a501-e219ac62e36e.zip?GoogleAccessId=service-615941328944@gcf-admin-robot.iam.gserviceaccount.com&Expires=1586060478&Signature=g2AJztAxLbvci2q7MDms1K7%2B466Z2RM6ALQmeBdH%2By7AA3hMAkdKSI7B3FzY8g1m%2BBuMlO8fkCWBSXcgHauxsOni%2FNW1LD7MZ%2FSUSkZ4npE%2FyVNRy0aitEzVSo6GaPmV9415KoFADyXHAxNakuD8JPZ4wl7qn%2FdcmQ8cZRJ%2BX%2BZ7w2xRw6BmG%2Fbnnmy8DCZe%2F%2Fw%2BIBhM4bpSOO8Ne8nMDa7qAfMzMXHHU8PDuIuIqdOmdIG0xF0itGsw3bhvAc530xWcJY%2F%2B7u%2FUjaszVikTV9igU33nUsqA5%2FzuNLmXrR9B42gn1ncCiwjnx8rlrcETmKkMrD6%2FABM5nYEQ%2Fvy%2BRw%3D%3D","runtime":"nodejs8","name":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","httpsTrigger":{},"labels":{"deployment-tool":"cli-firebase","deployment-callable":"true"}}},"resourceLocation":{"currentLocations":["us-central1"]}}
9:21:56.574 AM
confirmPayment
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{},"authenticationInfo":{"principalEmail":"mmbestonbest@gmail.com"},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.UpdateFunction","resourceName":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment"}
11:45:07.349 AM
confirmPayment
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","authenticationInfo":{"principalEmail":"mmbestonbest@gmail.com"},"requestMetadata":{"callerIp":"47.30.162.219","callerSuppliedUserAgent":"FirebaseCLI/8.0.1,gzip(gfe),gzip(gfe)","requestAttributes":{"time":"2020-04-05T06:15:07.712Z","auth":{}},"destinationAttributes":{}},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.UpdateFunction","authorizationInfo":[{"resource":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","permission":"cloudfunctions.functions.update","granted":true,"resourceAttributes":{}}],"resourceName":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","request":{"updateMask":"sourceUploadUrl,name,labels,runtime,httpsTrigger","@type":"type.googleapis.com/google.cloud.functions.v1.UpdateFunctionRequest","function":{"runtime":"nodejs8","name":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment","httpsTrigger":{},"labels":{"deployment-callable":"true","deployment-tool":"cli-firebase"},"sourceUploadUrl":"https://storage.googleapis.com/gcf-upload-us-central1-2535687d-781c-43d3-8bb1-6cdc1434531f/82b41c31-8b5c-4cd4-857c-301b4f554dd5.zip?GoogleAccessId=service-615941328944@gcf-admin-robot.iam.gserviceaccount.com&Expires=1586069101&Signature=FNLT8XrMwerp00RaqJXMPj6qk7Ztawx0NSAYJIWnWsMy0xdvB0bgqUrYx0dUYGx38r1c6xtyN7mSqFEXEN4IDOkDqWCRFDibiABDmTG9J60F2822bCeReGyYvmTJGVA%2BvBELdtvoiSBaVFHHYQfQdCKGKObboW2950zEeuq52pk30M3doDCUoXuGQUDSpQrZnlXLabH6JjvPDDj6VYcF42HnUmnesd43yErky6ZiW2qo6F4nGAj9hwEDAKFJHX%2FoW1HLDdMjQ2EI0t9%2FPRBi6fvtNjLqbAtE7xjQSwvDlyU1uMFAqwVC5RxKeTGM195E6RbKlSY6YsEzp4rAWltU%2Fw%3D%3D"}},"resourceLocation":{"currentLocations":["us-central1"]}}
11:45:32.142 AM
confirmPayment
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{},"authenticationInfo":{"principalEmail":"mmbestonbest@gmail.com"},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.UpdateFunction","resourceName":"projects/beingfit-6c699/locations/us-central1/functions/confirmPayment"}
Logs are subject to Cloud Logging's