5

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

nfplee
  • 7,643
  • 12
  • 63
  • 124
  • possible duplicate of [Receiving payments trough PayPal and Credit Card](http://stackoverflow.com/questions/1707701/receiving-payments-trough-paypal-and-credit-card) – George Stocker Feb 15 '11 at 14:36
  • @George Stocker - That's not a duplicate. The question you linked to is PHP and this question is C#. – Doctor Jones Feb 15 '11 at 16:48

2 Answers2

2

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
}
Patrick
  • 7,512
  • 7
  • 39
  • 50
0

Yes, PayPal offers this under Website Payments Pro. You can read more about it here.

enter image description here

The first flow is of Direct Payment and second is Express Checkout. Customer enters card details on your website under Direct Payment.

this. __curious_geek
  • 42,787
  • 22
  • 113
  • 137