I was wondering if PayPal has a payment service which allows the users to enter their credit card details on my site (the user wouldn't even be aware they are paying by paypal). I then need to make sure it handles repeat payments and refunds. Basically i need to create a paypal service which implements the following:
public interface IPaymentService {
Response ValidateCard(NetworkCredential credential, int transactionID, decimal amount, string ipAddress, CardDetails cardDetails, Address billingAddress, Options options);
Response RepeatCard(NetworkCredential credential, int oldTransactionID, int newTransactionID, decimal amount);
Response RefundCard(NetworkCredential credential, int refundedTransactionID, int newTransactionID, decimal amount);
}
public class Address {
public virtual string Address1 { get; set; }
public virtual string Address2 { get; set; }
public virtual string Address3 { get; set; }
public virtual string Town { get; set; }
public virtual string County { get; set; }
public virtual Country Country { get; set; }
public virtual string Postcode { get; set; }
}
public class CardDetails {
public string CardHolderName { get; set; }
public CardType CardType { get; set; }
public string CardNumber { get; set; }
public int ExpiryDateMonth { get; set; }
public int ExpiryDateYear { get; set; }
public string IssueNumber { get; set; }
public string Cv2 { get; set; }
}
public class Response {
public bool IsValid { get; set; }
public string Message { get; set; }
}
public class Options {
public bool TestStatus { get; set; }
public string Currency { get; set; }
}
Usually this is quite trivual with other other payment providers eg PayPoint (soap service) and SagePay.
Reading the paypal documentation is giving me a headache so i thought i'd ask here. Really appreciate the help. Thanks
Yes they do. Check out this documentation.
The direct payment api allows you to enter the card holder's info and then process it through the paypal system.
https://www.paypal.com/cgi-bin/webscr?cmd=_dcc_hub-outside
//process payment
Paypal toPayment = new Paypal();
toPayment.BillingAddress = new Address(txt_BillingAddr1.Text, txt_BillingAddr2.Text, txt_BillingCity.Text, ddl_BillingState.SelectedValue, txt_BillingZip.Text, "");
toPayment.BillingCountry = com.paypal.soap.api.CountryCodeType.US;
toPayment.BillingFName = txt_BillingFName.Text;
toPayment.BillingLName = txt_BillingLName.Text;
toPayment.BillingMName = txt_BillingMName.Text;
toPayment.BillingPhoneNumber = txt_BillingPhone.Text;
toPayment.BillingSuffix = txt_BillingSuffix.Text;
toPayment.ContactPhoneNumber = txtPhone.Text;
toPayment.CreditCardExpireMonth = Convert.ToInt32(ddl_CCExpireMonth.SelectedIndex + 1);
toPayment.CreditCardExpireYear = Convert.ToInt32(ddl_CCExpireYear.SelectedValue);
toPayment.CreditCardNumber = txt_CreditCard.Text;
toPayment.CreditCardSecurityCode = txt_CCID.Text;
switch (lst_CCTypes.SelectedValue)
{
case "Visa":
toPayment.CreditCardType = com.paypal.soap.api.CreditCardTypeType.Visa;
break;
case "MasterCard":
toPayment.CreditCardType = com.paypal.soap.api.CreditCardTypeType.MasterCard;
break;
case "AmericanExpress":
toPayment.CreditCardType = com.paypal.soap.api.CreditCardTypeType.Amex;
break;
case "Discover":
toPayment.CreditCardType = com.paypal.soap.api.CreditCardTypeType.Discover;
break;
}
toPayment.UserHostAddress = Request.UserHostAddress;
toPayment.OrderTotal = StaticMethods.getDecimal(lbl_TotalPrice_cout.Text, 0);
//set API Profile
toPayment.APIProfile = Master.PayPal_API_Profile;
DoDirectPaymentResponseType toResponse = new DoDirectPaymentResponseType();
toResponse = toPayment.processDirectPaymentTransaction();
Here is a little bit more for you... this is actual code from an actual production site that i work on that takes payments via paypal
toResponse contains an Ack property.... so you can do something like
switch(toResponse.Ack)
{
case AckCodeType.Failure;
// The card is bad. void transaction.
lblResponse = toResponse.Errors[0].LongMessage;
Break;
case AckCodeType.Success
// The card is good. Go forward with process
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With