Salesforce To Authorize.Net Integration
A Little Background About This Post:
In last 2 years working as independent consultant/developer , I got salesforce to Authorize.net integration request some 7-8 times . This is one of the popular integration these days .
I worked over this piece of integration and thought of sharing this with community .
General Requirements :
1. We would like our customers to pay via credit card ,bank(ACH) details automatically .
2. We would like to send them a payment link at a frequency, customers can open link and can pay us .
3. We would like to track transactions as well as payment requests .
4. We do not want to store credit card info within salesforce , it should be PCI DSS compliant .
Authorize.net Account :
Create a authorize.net developer account and create a app to get API credentials .
Payment Page Screens :
Here we have payment screens for creit card as well as e-check .
Code Samples :
Here we have visualforce page as well as apex classes for same .
Visualforce Page :
General Requirements :
1. We would like our customers to pay via credit card ,bank(ACH) details automatically .
2. We would like to send them a payment link at a frequency, customers can open link and can pay us .
3. We would like to track transactions as well as payment requests .
4. We do not want to store credit card info within salesforce , it should be PCI DSS compliant .
Authorize.net Account :
Create a authorize.net developer account and create a app to get API credentials .
Payment Page Screens :
Here we have payment screens for creit card as well as e-check .
Code Samples :
Here we have visualforce page as well as apex classes for same .
Visualforce Page :
<apex:page controller="AU_Payment_Class" showHeader="false" > <script> function inputLimiter(e,allow) { var AllowableCharacters = ''; if (allow == 'Letters'){AllowableCharacters=' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';} if (allow == 'Numbers'){AllowableCharacters='1234567890';} if (allow == 'NameCharacters'){AllowableCharacters=' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-.\'';} if (allow == 'NameCharactersAndNumbers'){AllowableCharacters='1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-\'';} if (allow == 'Currency'){AllowableCharacters='1234567890.';} var k = document.all?parseInt(e.keyCode): parseInt(e.which); if (k!=13 && k!=8 && k!=0){ if ((e.ctrlKey==false) && (e.altKey==false)) { return (AllowableCharacters.indexOf(String.fromCharCode(k))!=-1); } else { return true; } } else { return true; } } function GetURLParameter(sParam) { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == sParam) { return sParameterName[1]; } } } function getPrice() { var price = GetURLParameter('p'); document.getElementById("price").innerHTML = price ; ) window.onload = getPrice; </script> <style> .form{ height: 90%; width: 55%; align-items: center; margin-left:50px; margin-right:50px; margin-bottom:50px; margin-top:10px; position: absolute; border: none; font-size:14px } .topDiv{ margin-left:10%; margin-right:10%; margin-bottom:10%; margin-top:3%; width : 80% } .logo{ align-items: center; margin-left: 50%; } .p, .table, .tr, .td{ font-size:14px } #tabTwo{ font-size : 14px !important } .activeTab {background-color: #236FBD; color:white; background-image:none;font-size:14px} .inactiveTab { background-color: lightgrey; color:black; background-image:none;font-size:14px} </style> <apex:form styleclass="form" > <apex:pageblock > <div class="topDiv"> <div class="logo" width="100%" >Logo</div> <div><p id="price"></p></div> <p style="align-items: center;margin-left: 50%;">TestCompany.Com</p> <br/> Thank you for signing the Proposal letter. To proceed with the next steps in the process please provide payment for the $250 due diligence fee either using Credit Card or Check via the form below: <br/><br/> <apex:tabPanel switchType="client" selectedTab="creditCard" id="theTabPanel" tabClass="activeTab" inactiveTabClass="inactiveTab"> <apex:tab label="CreditCard" style="font-size:14px;" name="creditCard" id="tabOne"> <p>The charge will appear on your credit card as Test Company Business Capital,LLC</p> <br/> <table> <tr><td width="25%">*Credit Card: </td> <td> <apex:selectList value="{!creditCard}" multiselect="false" size="1"> <apex:selectOptions value="{!CreditCards}"/> </apex:selectList> </td> </tr> <tr><td>*Card Number: </td> <td colspan="2"> <apex:inputText value="{!cardNumber}" style="width:100px;" onkeypress="return inputLimiter(event,'Numbers');"/> </td> </tr> <tr><td>*Name on Card: </td> <td colspan="4" > <apex:inputText value="{!cardName}" style="width:180px;" onkeypress="return inputLimiter(event,'NameCharacters');"/> </td> </tr> <tr><td>*Expires: </td> <td > <apex:selectList value="{!cardExpYear}" multiselect="false" size="1" > <apex:selectOptions value="{!Year}"/> </apex:selectList> <apex:selectList value="{!cardExpMonth}" multiselect="false" size="1"> <apex:selectOptions value="{!Months}"/> </apex:selectList> </td> </tr> <tr><td>*Security Code: </td> <td > <apex:inputText value="{!securityCode}" style="width:70px;" onkeypress="return inputLimiter(event,'Numbers');"/> </td> </tr> <tr><td>*Address (line 1): </td> <td > <apex:inputText value="{!Add1}" style="width:200px;"/> </td> </tr> <tr><td>Address (line 2): </td> <td > <apex:inputText value="{!Add2}" style="width:200px;"/> </td> </tr> <tr><td>*City: </td> <td > <apex:inputText value="{!city}" style="width:80px;"/> </td> </tr> <tr><td>*state: </td> <td > <apex:inputText value="{!state}" style="width:80px;"/> </td> </tr> <tr><td>*Zip Code: </td> <td > <apex:inputText value="{!zip}" style="width:60px;" onkeypress="return inputLimiter(event,'Numbers');"/> </td> </tr> <tr></tr> <tr></tr> <tr><td></td> <td> <span><apex:inputCheckbox value="{!cardTermCheck}"/></span> *I understand that Test Company Business Capital,LLC does not process refunds </td></tr> </table> <apex:commandbutton action="{!submitPayProfile}" value="Submit Payment" immediate="true" style="margin-left: 34%;margin-top: 3%"/> </apex:tab> <apex:tab label="Check" style="font-size:14px !important;" name="check" id="tabTwo"> <p>Enter the Following: </p> <table> <tr><td>*Bank Routing: </td> <td > <apex:inputText value="{!bankRouting}" /> </td> </tr> <tr><td>*Bank Account: </td> <td > <apex:inputText value="{!accountNum}" /> </td> </tr> <tr><td>*Confirm Bank Account: </td> <td > <apex:inputText value="{!confirmAccNum}" /> </td> </tr> </table> <apex:commandbutton action="{!SaveCheck}" value="Submit Payment" immediate="true" style="margin-left: 31%;margin-top: 5%;" /> <p> By clicking "Submit Payment" button above, I confirm that I am the owner of the account identified by the numbers entered above and authorize Test Company Business Capital,LLC to initiate an ACH(eletronic debit) to my account in the amount of $250. </p> </apex:tab> </apex:tabPanel></div></apex:pageblock></apex:form> </apex:page>
Apex Class :
public class AU_Payment_Class{ public Id payId {get;set;} public String firstName {get;set;} public String lastName {get;set;} public String Add1 {get;set;} public String Add2 {get;set;} public String city {get;set;} public String state {get;set;} public String zip {get;set;} public String email {get;set;} public String country {get;set;} public String cardName {get;set;} public String cardNumber {get;set;} public String cardExpMonth {get;set;} public String cardExpYear {get;set;} public String cardCVV {get;set;} public boolean cardTermCheck {get;set;} public boolean tankFlag {get;set;} public boolean payFlag {get;set;} public String ResString {get;set;} public Decimal Amount {get;set;} private String transactionID; public Payment_Request__c payReqRec; public Contact conRec {get;set;} public Opportunity oppRec; public string securityCode{get;set;} public string bankRouting {get;set;} public string accountNum {get;set;} public string confirmAccNum {get;set;} public string creditCard {get;set;} public static string bankRouting1 {get;set;} public static string accountNum1 {get;set;} public AU_Payment_Class(){ payId = apexpages.currentpage().getparameters().get('id'); payReqRec = new Payment_Request__c(); Contact conRec = new Contact(); tankFlag = true; payFlag = true; cardNumber = ''; cardExpMonth = ''; cardExpYear = ''; cardCVV = ''; System.debug('payId=>'+payId ); if(payId != null){ payReqRec = [SELECT Id, Billing_Contact__c, Opportunity__c, Status__c FROM Payment_Request__c WHERE Id =: payId]; conRec = [SELECT Id, Customer_Payment_Token__c, Customer_Profile_Token__c, FirstName, LastName, Email, MailingCity, MailingState, MailingPostalCode, MailingCountry, MailingStreet FROM Contact WHERE Id =: payReqRec.Billing_Contact__c]; oppRec = [SELECT Id, Name, Amount FROM Opportunity WHERE Id =: payReqRec.Opportunity__c]; System.debug('Contact=>'+conRec); firstName = conRec.FirstName; lastName = conRec.LastName; Add1 = conRec.MailingStreet; city = conRec.MailingCity; state = conRec.MailingState; zip = conRec.MailingPostalCode; email = conRec.Email; country = conRec.MailingCountry; //Amount = oppRec.Amount; Amount = 10; } } public PageReference submitPayProfile() { System.debug('submitPayProfile==>'+cardNumber+cardExpYear+cardExpMonth); String custPayProfileId; String custProfileId; AuthorizeNet__c ANetCS = AuthorizeNet__c.getInstance('Cred'); //Create Customer Profile JSONGenerator gen = JSON.createGenerator(true); // Write data to the JSON string. gen.writeStartObject(); gen.writeFieldName('createCustomerProfileRequest'); gen.writeStartObject(); gen.writeFieldName('merchantAuthentication'); gen.writeStartObject(); gen.writeStringField('name', ANetCS.Api_Login_ID__c); gen.writeStringField('transactionKey', ANetCS.Transaction_Key__c); gen.writeEndObject(); gen.writeFieldName('profile'); gen.writeStartObject(); gen.writeStringField('email', email); gen.writeFieldName('paymentProfiles'); gen.writeStartObject(); gen.writeStringField('customerType', 'individual'); gen.writeFieldName('payment'); gen.writeStartObject(); gen.writeFieldName('creditCard'); gen.writeStartObject(); gen.writeStringField('cardNumber', cardNumber); gen.writeStringField('expirationDate', cardExpYear+'-'+cardExpMonth); gen.writeEndObject(); gen.writeEndObject(); gen.writeEndObject(); gen.writeEndObject(); gen.writeEndObject(); gen.writeEndObject(); // Get the JSON string. String CreateCustProString = gen.getAsString(); System.debug('CreateCustProString==>'+CreateCustProString); Http http1=new Http(); HttpRequest req1=new HttpRequest(); req1.setendpoint(ANetCS.Endpoint_URL__c); req1.Setheader('Content-Type','application/json'); req1.setmethod('POST'); //you can also SET method `GET` with Get there is no need of req1.setbody() req1.setbody(CreateCustProString); HttpResponse res1; res1 = http1.send(req1); if(res1.getStatusCode()==200){ String str=res1.getbody().escapeUnicode(); string FinalJSON=str.replaceall('uFEFF',''); FinalJSON=FinalJSON.replaceall('\\\\',''); System.debug(FinalJSON); AU_PaymentCustProfileJSON custProfileObj=new AU_PaymentCustProfileJSON(); custProfileObj=(AU_PaymentCustProfileJSON) System.JSON.deserialize(FinalJSON, AU_PaymentCustProfileJSON.class); AU_PaymentCustProfileJSON.cls_messages custProfileMsg=custProfileObj.messages; ListcustProfileSubMsg = custProfileMsg.message; if(custProfileSubMsg[0].text == 'Successful.'){ custProfileId = custProfileObj.customerProfileId; }else if(custProfileSubMsg[0].text.containsIgnoreCase('duplicate')){ custProfileId = custProfileSubMsg[0].text.replaceAll('[^-?0-9]+', ''); }else{ ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error,custProfileSubMsg[0].text)); return null; } System.debug('custProfileId=>'+custProfileId ); //Create Customer Profile JSONGenerator genPayPro = JSON.createGenerator(true); // Write data to the JSON string Customer Payment Profile . genPayPro.writeStartObject(); genPayPro.writeFieldName('createCustomerPaymentProfileRequest'); genPayPro.writeStartObject(); genPayPro.writeFieldName('merchantAuthentication'); genPayPro.writeStartObject(); genPayPro.writeStringField('name', ANetCS.Api_Login_ID__c); genPayPro.writeStringField('transactionKey', ANetCS.Transaction_Key__c); genPayPro.writeEndObject(); genPayPro.writeStringField('customerProfileId', custProfileId ); genPayPro.writeFieldName('paymentProfile'); genPayPro.writeStartObject(); genPayPro.writeFieldName('billTo'); genPayPro.writeStartObject(); genPayPro.writeStringField('firstName', firstName ); genPayPro.writeStringField('lastName', lastName ); genPayPro.writeStringField('address', Add1 + Add2 ); genPayPro.writeStringField('city', city ); genPayPro.writeStringField('state', state ); genPayPro.writeStringField('zip', zip ); genPayPro.writeStringField('country', country ); genPayPro.writeStringField('phoneNumber', ''); genPayPro.writeEndObject(); genPayPro.writeFieldName('payment'); genPayPro.writeStartObject(); genPayPro.writeFieldName('creditCard'); genPayPro.writeStartObject(); genPayPro.writeStringField('cardNumber', cardNumber); genPayPro.writeStringField('expirationDate', cardExpYear+'-'+cardExpMonth); genPayPro.writeEndObject(); genPayPro.writeEndObject(); genPayPro.writeStringField('defaultPaymentProfile', 'true'); genPayPro.writeEndObject(); genPayPro.writeEndObject(); genPayPro.writeEndObject(); // Get the JSON string. String CreateCustPayProString = genPayPro.getAsString(); System.debug('CreateCustProString==>'+CreateCustPayProString ); Http http2=new Http(); HttpRequest req2=new HttpRequest(); req2.setendpoint(ANetCS.Endpoint_URL__c); req2.Setheader('Content-Type','application/json'); req2.setmethod('POST'); //you can also SET method `GET` with Get there is no need of req1.setbody() req2.setbody(CreateCustPayProString); HttpResponse res2; res2 = http2.send(req2); if(res1.getStatusCode()==200){ String str2=res2.getbody().escapeUnicode(); string FinalJSON2=str2.replaceall('uFEFF',''); FinalJSON2=FinalJSON2.replaceall('\\\\',''); System.debug('FinalJSON2=>'+FinalJSON2); AU_CustPayProfilefromJSON custProfileObj2=new AU_CustPayProfilefromJSON(); custProfileObj2=(AU_CustPayProfilefromJSON) System.JSON.deserialize(FinalJSON2, AU_CustPayProfilefromJSON.class); AU_CustPayProfilefromJSON.cls_messages custProfileMsg2=custProfileObj2.messages; List custProfileSubMsg2 = custProfileMsg2.message; custPayProfileId = custProfileObj2.customerPaymentProfileId; System.debug('custPayProfileId=>'+custPayProfileId); //Create Customer Profile JSONGenerator genPayPro2 = JSON.createGenerator(true); genPayPro2.writeStartObject(); genPayPro2.writeFieldName('createTransactionRequest'); genPayPro2.writeStartObject(); genPayPro2.writeFieldName('merchantAuthentication'); genPayPro2.writeStartObject(); genPayPro2.writeStringField('name', ANetCS.Api_Login_ID__c); genPayPro2.writeStringField('transactionKey', ANetCS.Transaction_Key__c); genPayPro2.writeEndObject(); genPayPro2.writeFieldName('transactionRequest'); genPayPro2.writeStartObject(); genPayPro2.writeStringField('transactionType', 'authCaptureTransaction'); genPayPro2.writeStringField('amount', String.ValueOf(Amount)); genPayPro2.writeFieldName('profile'); genPayPro2.writeStartObject(); genPayPro2.writeStringField('customerProfileId', custProfileId); genPayPro2.writeFieldName('paymentProfile'); genPayPro2.writeStartObject(); genPayPro2.writeStringField('paymentProfileId', (custPayProfileId !=null ? custPayProfileId:'')); genPayPro2.writeEndObject(); genPayPro2.writeEndObject(); genPayPro2.writeEndObject(); genPayPro2.writeEndObject(); genPayPro2.writeEndObject(); // Get the JSON string. String JSONRequestBODY = genPayPro2.getAsString(); System.debug('JSONRequestBODY==>'+JSONRequestBODY ); Http http3=new Http(); HttpRequest req3=new HttpRequest(); req3.setendpoint(ANetCS.Endpoint_URL__c); req3.Setheader('Content-Type','application/json'); req3.setmethod('POST'); //you can also SET method `GET` with Get there is no need of req1.setbody() req3.setbody(JSONRequestBODY); HttpResponse res3; res3 = http3.send(req3); if(res1.getStatusCode()==200){ String str3=res3.getbody().escapeUnicode(); string FinalJSONTran=str3.replaceall('uFEFF',''); FinalJSONTran=FinalJSONTran.replaceall('\\\\',''); System.debug(FinalJSONTran); Transaction__c tanRec = new Transaction__c(); AU_Transaction_fromJSON transactionObj=new AU_Transaction_fromJSON(); transactionObj=(AU_Transaction_fromJSON) System.JSON.deserialize(FinalJSONTran, AU_Transaction_fromJSON.class); AU_Transaction_fromJSON.cls_messages tranMsg=transactionObj.messages; List tranSubMsg = tranMsg.message; if(tranSubMsg[0].text == 'Successful.'){ AU_Transaction_fromJSON.cls_transactionResponse tranData=transactionObj.transactionResponse; tanRec.Amount__c = Amount; tanRec.Authorization__c = tranData.authCode; tanRec.Card_Last_4__c = cardNumber.right(4); tanRec.Credit_Card_Name__c = cardName; tanRec.Credit_Card_Type__c = tranData.accountType; tanRec.Opportunity__c = payReqRec.Opportunity__c; //tanRec.Payment_Method__c = tanRec.Payment_Request__c = payReqRec.Id; //tanRec.Reason_Code__c = //tanRec.Reason_Text__c = //tanRec.Recurring__c = //tanRec.Response__c = tanRec.Response_Code__c = tranData.responseCode; tanRec.Type__c = 'Charge'; List tranSubData = tranData.messages; tanRec.Response_Message__c = String.ValueOf(tranSubData[0].message); tanRec.Response_Status__c = String.ValueOf(tranSubData[0].resultCode); //tanRec.Security_Response__c = tanRec.Tokenization__c = tranData.transId; //tanRec.Type__c = Insert tanRec; system.debug('custPayProfileId=>'+custPayProfileId); system.debug('custProfileId=>'+custProfileId); system.debug('payReqRec=>'+payReqRec); system.debug('conRec=>'+conRec); Contact conRec2 = new Contact(); conRec2 = [SELECT Id, Customer_Payment_Token__c, Customer_Profile_Token__c FROM Contact WHERE Id =: payReqRec.Billing_Contact__c LIMIT 1]; conRec2.Customer_Payment_Token__c = custPayProfileId; conRec2.Customer_Profile_Token__c = custProfileId; Update conRec2; tankFlag = false; payFlag = true; ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Warning,'This transaction has been approved')); return null; }else{ ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error,tranSubMsg[0].text)); return null; } System.debug('Tansaction=>'+custProfileId ); } } } tankFlag = false; payFlag = true; return null; } public static pageReference SaveCheck(){ String custPayProfileId; String custProfileId; AuthorizeNet__c ANetCS = AuthorizeNet__c.getInstance('Cred'); //Create Customer Profile JSONGenerator gen = JSON.createGenerator(true); // Write data to the JSON string. gen.writeStartObject(); gen.writeFieldName('createCustomerProfileRequest'); gen.writeStartObject(); gen.writeFieldName('merchantAuthentication'); gen.writeStartObject(); gen.writeStringField('name', ANetCS.Api_Login_ID__c); gen.writeStringField('transactionKey', ANetCS.Transaction_Key__c); gen.writeEndObject(); gen.writeFieldName('profile'); gen.writeStartObject(); //gen.writeStringField('email', email); gen.writeStringField('email', 'test@test.com'); gen.writeFieldName('paymentProfiles'); gen.writeStartObject(); gen.writeStringField('customerType', 'individual'); gen.writeFieldName('payment'); gen.writeStartObject(); gen.writeFieldName('bankAccount'); gen.writeStartObject(); gen.writeStringField('routingNumber', bankRouting1); gen.writeStringField('accountNumber', accountNum1); gen.writeStringField('nameOnAccount', 'test Name'); /*gen.writeStringField('bankName', 'test bank');*/ //gen.writeStringField('accountType', 'checking'); gen.writeStringField('echeckType', 'WEB'); //gen.writeStringField('checkNumber', '123456874'); gen.writeEndObject(); gen.writeEndObject(); gen.writeEndObject(); gen.writeEndObject(); gen.writeEndObject(); gen.writeEndObject(); // Get the JSON string. String CreateCustProString = gen.getAsString(); System.debug('CreateCustProString==>'+CreateCustProString); Http http1=new Http(); HttpRequest req1=new HttpRequest(); req1.setendpoint(ANetCS.Endpoint_URL__c); req1.Setheader('Content-Type','application/json'); req1.setmethod('POST'); //you can also SET method `GET` with Get there is no need of req1.setbody() req1.setbody(CreateCustProString); HttpResponse res1; system.debug('req1==>'+req1); res1 = http1.send(req1); system.debug('res1==>'+req1); if(res1.getStatusCode()==200){ String str=res1.getbody().escapeUnicode(); string FinalJSON=str.replaceall('uFEFF',''); FinalJSON=FinalJSON.replaceall('\\\\',''); System.debug('FinalJSON==>'+FinalJSON); AU_PaymentCustProfileJSON custProfileObj=new AU_PaymentCustProfileJSON(); custProfileObj=(AU_PaymentCustProfileJSON) System.JSON.deserialize(FinalJSON, AU_PaymentCustProfileJSON.class); AU_PaymentCustProfileJSON.cls_messages custProfileMsg=custProfileObj.messages; List custProfileSubMsg = custProfileMsg.message; if(custProfileSubMsg[0].text == 'Successful.'){ custProfileId = custProfileObj.customerProfileId; }else if(custProfileSubMsg[0].text.containsIgnoreCase('duplicate')){ custProfileId = custProfileSubMsg[0].text.replaceAll('[^-?0-9]+', ''); }else{ ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error,custProfileSubMsg[0].text)); return null; } System.debug('custProfileId=>'+custProfileId ); //Create Customer Profile JSONGenerator genPayPro = JSON.createGenerator(true); // Write data to the JSON string Customer Payment Profile . genPayPro.writeStartObject(); genPayPro.writeFieldName('createCustomerPaymentProfileRequest'); genPayPro.writeStartObject(); genPayPro.writeFieldName('merchantAuthentication'); genPayPro.writeStartObject(); genPayPro.writeStringField('name', ANetCS.Api_Login_ID__c); genPayPro.writeStringField('transactionKey', ANetCS.Transaction_Key__c); genPayPro.writeEndObject(); genPayPro.writeStringField('customerProfileId', custProfileId); genPayPro.writeFieldName('paymentProfile'); genPayPro.writeStartObject(); genPayPro.writeFieldName('payment'); genPayPro.writeStartObject(); genPayPro.writeFieldName('bankAccount'); genPayPro.writeStartObject(); genPayPro.writeStringField('routingNumber', bankRouting1); genPayPro.writeStringField('accountNumber', accountNum1); genPayPro.writeStringField('nameOnAccount', 'test Name'); /*gen.writeStringField('bankName', 'test bank');*/ //gen.writeStringField('accountType', 'checking'); genPayPro.writeStringField('echeckType', 'WEB'); genPayPro.writeStringField('checkNumber', '123456874'); genPayPro.writeEndObject(); genPayPro.writeEndObject(); genPayPro.writeStringField('defaultPaymentProfile', 'true'); genPayPro.writeEndObject(); genPayPro.writeEndObject(); genPayPro.writeEndObject(); system.debug('genPayPro==>'+genPayPro); // Get the JSON string. String CreateCustPayProString = genPayPro.getAsString(); System.debug('CreateCustProString==>'+CreateCustPayProString ); Http http2=new Http(); HttpRequest req2=new HttpRequest(); req2.setendpoint(ANetCS.Endpoint_URL__c); req2.Setheader('Content-Type','application/json'); req2.setmethod('POST'); //you can also SET method `GET` with Get there is no need of req1.setbody() req2.setbody(CreateCustPayProString); HttpResponse res2; res2 = http2.send(req2); if(res1.getStatusCode()==200){ String str2=res2.getbody().escapeUnicode(); string FinalJSON2=str2.replaceall('uFEFF',''); FinalJSON2=FinalJSON2.replaceall('\\\\',''); System.debug('FinalJSON2=>'+FinalJSON2); AU_CustPayProfilefromJSON custProfileObj2=new AU_CustPayProfilefromJSON(); custProfileObj2=(AU_CustPayProfilefromJSON) System.JSON.deserialize(FinalJSON2, AU_CustPayProfilefromJSON.class); AU_CustPayProfilefromJSON.cls_messages custProfileMsg2=custProfileObj2.messages; List custProfileSubMsg2 = custProfileMsg2.message; custPayProfileId = custProfileObj2.customerPaymentProfileId; System.debug('custPayProfileId=>'+custPayProfileId); //Create Customer Profile JSONGenerator genPayPro2 = JSON.createGenerator(true); genPayPro2.writeStartObject(); genPayPro2.writeFieldName('createTransactionRequest'); genPayPro2.writeStartObject(); genPayPro2.writeFieldName('merchantAuthentication'); genPayPro2.writeStartObject(); genPayPro2.writeStringField('name', ANetCS.Api_Login_ID__c); genPayPro2.writeStringField('transactionKey', ANetCS.Transaction_Key__c); genPayPro2.writeEndObject(); genPayPro2.writeFieldName('transactionRequest'); genPayPro2.writeStartObject(); genPayPro2.writeStringField('transactionType', 'authCaptureTransaction'); //genPayPro2.writeStringField('amount', String.ValueOf(Amount)); genPayPro2.writeStringField('amount', String.ValueOf(450)); genPayPro2.writeFieldName('profile'); genPayPro2.writeStartObject(); genPayPro2.writeStringField('customerProfileId', custProfileId); genPayPro2.writeFieldName('paymentProfile'); genPayPro2.writeStartObject(); genPayPro2.writeStringField('paymentProfileId', custPayProfileId); //genPayPro2.writeStringField('paymentProfileId', '12354'); //genPayPro2.writeStringField('defaultShippingAddress', 'false'); genPayPro2.writeEndObject(); genPayPro2.writeEndObject(); genPayPro2.writeEndObject(); genPayPro2.writeEndObject(); genPayPro2.writeEndObject(); system.debug('genPayPro2 ==>'+genPayPro2); // Get the JSON string. String JSONRequestBODY = genPayPro2.getAsString(); System.debug('JSONRequestBODY==>'+JSONRequestBODY ); Http http3=new Http(); HttpRequest req3=new HttpRequest(); req3.setendpoint(ANetCS.Endpoint_URL__c); req3.Setheader('Content-Type','application/json'); req3.setmethod('POST'); //you can also SET method `GET` with Get there is no need of req1.setbody() req3.setbody(JSONRequestBODY); HttpResponse res3; res3 = http3.send(req3); system.debug('res3 ==>'+res3 ); if(res1.getStatusCode()==200){ String str3=res3.getbody().escapeUnicode(); string FinalJSONTran=str3.replaceall('uFEFF',''); FinalJSONTran=FinalJSONTran.replaceall('\\\\',''); System.debug(FinalJSONTran); Transaction__c tanRec = new Transaction__c(); AU_Transaction_fromJSON transactionObj=new AU_Transaction_fromJSON(); transactionObj=(AU_Transaction_fromJSON) System.JSON.deserialize(FinalJSONTran, AU_Transaction_fromJSON.class); AU_Transaction_fromJSON.cls_messages tranMsg=transactionObj.messages; List tranSubMsg = tranMsg.message; if(tranSubMsg[0].text == 'Successful.'){ /* AU_Transaction_fromJSON.cls_transactionResponse tranData=transactionObj.transactionResponse; tanRec.Amount__c = Amount; tanRec.Authorization__c = tranData.authCode; tanRec.Card_Last_4__c = cardNumber.right(4); tanRec.Credit_Card_Name__c = cardName; tanRec.Credit_Card_Type__c = tranData.accountType; tanRec.Opportunity__c = payReqRec.Opportunity__c; //tanRec.Payment_Method__c = tanRec.Payment_Request__c = payReqRec.Id; //tanRec.Reason_Code__c = //tanRec.Reason_Text__c = //tanRec.Recurring__c = //tanRec.Response__c = tanRec.Response_Code__c = tranData.responseCode; tanRec.Type__c = 'Charge'; List tranSubData = tranData.messages; tanRec.Response_Message__c = String.ValueOf(tranSubData[0].message); tanRec.Response_Status__c = String.ValueOf(tranSubData[0].resultCode); //tanRec.Security_Response__c = tanRec.Tokenization__c = tranData.transId; //tanRec.Type__c = Insert tanRec; system.debug('custPayProfileId=>'+custPayProfileId); system.debug('custProfileId=>'+custProfileId); system.debug('payReqRec=>'+payReqRec); system.debug('conRec=>'+conRec); Contact conRec2 = new Contact(); conRec2 = [SELECT Id, Customer_Payment_Token__c, Customer_Profile_Token__c FROM Contact WHERE Id =: payReqRec.Billing_Contact__c LIMIT 1]; conRec2.Customer_Payment_Token__c = custPayProfileId; conRec2.Customer_Profile_Token__c = custProfileId; Update conRec2; tankFlag = false; payFlag = true; ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Warning,'This transaction has been approved'));*/ return null; }else{ ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error,tranSubMsg[0].text)); return null; } System.debug('Tansaction=>'+custProfileId ); } } } /* tankFlag = false; payFlag = true;*/ return null; return null; } public List getCreditCards() { List options = new List (); options.add(new SelectOption('None','None')); options.add(new SelectOption('Type1','Type1')); options.add(new SelectOption('Type2','Type3')); options.add(new SelectOption('Type3','Type3')); return options; } public List getYear() { integer year = Datetime.now().year(); List options = new List (); options.add(new SelectOption('Year','Year')); for(integer i =0;i<25 electoption="" i="" list="" new="" options.add="" options="" public="" return="" selectoption="" string.valueof="" year=""> getMonths() { integer year = Datetime.now().year(); List options = new List 25>(); options.add(new SelectOption('MTH','MTH')); options.add(new SelectOption('1','Jan')); options.add(new SelectOption('2','Feb')); options.add(new SelectOption('3','Mar')); options.add(new SelectOption('4','Apr')); options.add(new SelectOption('5','May')); options.add(new SelectOption('6','Jun')); options.add(new SelectOption('7','Jul')); options.add(new SelectOption('8','Aug')); options.add(new SelectOption('9','Sep')); options.add(new SelectOption('10','Oct')); options.add(new SelectOption('11','Nov')); options.add(new SelectOption('12','Dec')); return options; } }
perde modelleri
ReplyDeleteMobil onay
turkcell mobil ödeme bozdurma
nft nasıl alınır
ankara evden eve nakliyat
trafik sigortası
Dedektor
web sitesi kurma
aşk kitapları