【问题标题】:PayPal Payment Provider in C#C# 中的 PayPal 支付提供商
【发布时间】:2011-06-27 15:45:25
【问题描述】:

我想知道 PayPal 是否有允许用户在我的网站上输入他们的信用卡详细信息的支付服务(用户甚至不会知道他们是通过 paypal 支付的)。然后我需要确保它处理重复付款和退款。基本上我需要创建一个实现以下功能的贝宝服务:

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; }
}

通常这对于其他支付服务提供商来说是微不足道的,例如 PayPoint(肥皂服务)和 SagePay。

阅读贝宝文档让我头疼,所以我想我会在这里问。非常感谢您的帮助。谢谢

【问题讨论】:

标签: c# paypal


【解决方案1】:

是的。查看此文档。

直接支付api允许您输入持卡人的信息,然后通过paypal系统进行处理。

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();

这里还有更多内容...这是来自我工作的实际生产站点的实际代码,该站点通过 paypal 进行付款

toResponse 包含一个 Ack 属性....所以你可以做类似的事情

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
}

【讨论】:

    【解决方案2】:

    是的,PayPal 在Website Payments Pro 下提供此服务。你可以阅读更多关于它的信息here

    第一个流程是直接付款,第二个流程是快速结帐。客户在您的网站上的直接付款下输入卡详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-07
      • 2022-07-26
      • 1970-01-01
      • 2020-11-17
      • 2011-09-25
      • 2017-08-30
      • 2017-12-24
      • 2011-09-26
      相关资源
      最近更新 更多