I am using razor pay flutter package to make payment in flutter in test mode . I have options to handle the events and also save the payment id in my database . I want to refund the amount based on the payment id . I dont have much clarification on how to do the same . Here is my code for sending payment request
Razorpay? _razorpay = Razorpay();
void openPaymentPortal() async {
var options = {
'key': 'My_key',
'amount': 100000,
'name': 'test',
'description': 'Payment for Pro account',
'prefill': {'contact': '9999999999', 'email': 'build@test.com'},
'external': {
'wallets': ['paytm']
}
};
try {
_razorpay?.open(options);
} catch (e) {
debugPrint(e.toString());
}
}
void _handlePaymentSuccess(PaymentSuccessResponse response) {
Fluttertoast.showToast(
msg: "SUCCESS PAYMENT: ${response.paymentId}", timeInSecForIosWeb: 5);
onSubmit(false, response.paymentId.toString());
}
void _handlePaymentError(PaymentFailureResponse response) {
Fluttertoast.showToast(
msg: "ERROR HERE: ${response.code} - ${response.message}",
timeInSecForIosWeb: 4);
}
void _handleExternalWallet(ExternalWalletResponse response) {
Fluttertoast.showToast(
msg: "EXTERNAL_WALLET IS : ${response.walletName}",
timeInSecForIosWeb: 4);
}
How to process refund of the amount to the user ? I followed something like the below code but it is not working
void processRefund(String paymentId) async {
var url =
Uri.parse('https://api.razorpay.com/v1/payments/$paymentId/refund');
try {
var response = await http.post(
url,
headers: {
'Authorization': 'Bearer My_Key',
'Content-Type': 'application/json'
},
);
if (response.statusCode == 200) {
// Refund processed successfully
print('Refund processed successfully');
} else {
// Refund failed
print('Refund failed with status code: ${response.statusCode}');
print('Response body: ${response.body}');
}
} catch (e) {
// Error occurred while making the refund request
print('Error occurred during refund process: $e');
}
}
I solved my case as follows
Future<void> processRefund() async {
String keyId = 'My_Key';
String keySecret = 'My_Secret';
String paymentId = 'My_payment_id';
String url = 'https://api.razorpay.com/v1/payments/$paymentId/refund';
Map<String, dynamic> refundRequest = {
'amount': 1000,
'speed': 'normal',
'notes': {
'notes_key_1': 'Tea, Earl Grey, Hot',
'notes_key_2': 'Tea, Earl Grey... decaf.',
},
'receipt': 'Receipt No. #31',
};
String basicAuth =
'Basic ${base64Encode(utf8.encode('$keyId:$keySecret'))}';
try {
final response = await http.post(
Uri.parse(url),
headers: {
'Content-Type': 'application/json',
'Authorization': basicAuth,
},
body: jsonEncode(refundRequest),
);
if (response.statusCode == 200) {
// Refund request successful
var responseData = jsonDecode(response.body);
print('Refund success: $responseData');
} else {
// Refund request failed
print('Refund request failed with status code ${response.statusCode}');
}
} catch (error) {
// Handle any exceptions
print('Error creating refund request: $error');
}
}