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;
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('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();
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;
}
}
25>

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ı