My_Test_Repo/force-app/main/default/classes/InvokeSendLink.cls

88 lines
3.6 KiB
OpenEdge ABL

public class InvokeSendLink {
private static final String RAZORPAY_API_URL = 'https://api.razorpay.com/v1/payment_links/';
private static final String RAZORPAY_KEY_ID = System.label.Key_Id_of_Razor_Pay;
private static final String RAZORPAY_KEY_SECRET = System.label.key_secret_of_RazorPay;
public class SendLinkInput {
@InvocableVariable(label = 'Opportunity Name' required=true)
public String OppName;
@InvocableVariable(label = 'Amount' required=true)
public Decimal Amount;
@InvocableVariable(label = 'Email' required=true)
public String Email;
@InvocableVariable(label = 'Phone' required=true)
public String Phone;
@InvocableVariable(label = 'ContactName' required=true)
public String ContactName;
}
public class SendLinkOutput {
@InvocableVariable(label = 'Payment ID')
public String paymentId;
@InvocableVariable(label = 'Status')
public String status;
}
@InvocableMethod(label='Send Payment Link' description='Sending the Payment Link To Donor')
public static List<SendLinkOutput> InvokeMethod(List<SendLinkInput> inputs) {
List<SendLinkOutput> outputs = new List<SendLinkOutput>();
if (inputs != null && !inputs.isEmpty()) {
for (SendLinkInput input : inputs) {
SendLinkOutput output = sendLinkMethod(input.Amount, input.Email, input.Phone, input.ContactName);
outputs.add(output);
}
}
System.debug(outputs);
return outputs;
}
//Send Payment Link Method
public static SendLinkOutput sendLinkMethod(Decimal Amount,String Email,String Phone,String ContactName){
HttpRequest req = new HttpRequest();
req.setEndpoint(RAZORPAY_API_URL);
req.setMethod('POST');
req.setHeader('Content-Type', 'application/json');
req.setHeader('Authorization', 'Basic ' + EncodingUtil.base64Encode(Blob.valueOf(RAZORPAY_KEY_ID + ':' + RAZORPAY_KEY_SECRET)));
Map<String, Object> requestBody = new Map<String, Object>{
'amount' => (Integer)(Amount * 100), // Razorpay expects amount in paise
'currency' => 'INR',
'description' => 'Payment link expires in 24 hours',
'expire_by' => System.now().addDays(1).getTime() / 1000,
'customer' => new Map<String, Object>{
'name' => ContactName,
'contact' => '+91'+Phone,
'email' => Email
},
'notify' => new Map<String, Object>{
'sms' => true,
'email' => true
}
};
req.setBody(JSON.serialize(requestBody));
Http http = new Http();
HttpResponse res = http.send(req);
if (res.getStatusCode() == 200) {
Map<String, Object> responseBody = (Map<String, Object>)JSON.deserializeUntyped(res.getBody());
SendLinkOutput output = new SendLinkOutput();
output.paymentId = (String)responseBody.get('id');
output.status = (String)responseBody.get('status');
return output;
} else {
System.debug('Error creating payment link. Status code: ' + res.getStatusCode());
System.debug('Response body: ' + res.getBody());
return null;
}
}
}