【问题标题】:C# PayPal REST API Checkout with Credit CardC# PayPal REST API 使用信用卡结帐
【发布时间】:2015-06-11 00:39:45
【问题描述】:

这是我使用信用卡结帐的代码。使用 PayPal Trans 可以正常工作,但我缺少一些用于信用卡交易的内容。

HttpContext CurrContext = HttpContext.Current;    
APIContext apiContext = Configuration.GetAPIContext();    
Item item = new Item();
            item.name = _ItemDescription;
            item.currency = "USD";
            item.price = _Amount;
            item.quantity = "1";
            item.sku = _UPC;

            List<Item> itms = new List<Item>();
            itms.Add(item);
            ItemList itemList = new ItemList();
            itemList.items = itms;

            Address billingAddress = new Address();
            billingAddress.city = ciTxBx.Text;
            billingAddress.country_code = "US";
            billingAddress.line1 = ad1TxBx.Text;
            billingAddress.line2 = ad2TxBx.Text;
            billingAddress.postal_code = pcTxBx.Text;
            billingAddress.state = stRcb.SelectedValue.ToString();

            CreditCard crdtCard = new CreditCard();
            crdtCard.billing_address = billingAddress;
            crdtCard.cvv2 = scTxBx.Text;
            crdtCard.expire_month = Convert.ToInt32(emonthTxBx.Text);
            crdtCard.expire_year = Convert.ToInt32(eyearTxBx.Text);
            crdtCard.first_name = ccfnTxBx.Text;
            crdtCard.last_name = cclnTxBx.Text;
            crdtCard.number = ccnTxBx.Text;
            crdtCard.type = ConvertLower(cctRcb.SelectedValue.ToString());

            Details details = new Details();
            details.tax = "0";
            details.shipping = "0";
            details.subtotal = _Amount;

            Amount amont = new Amount();
            amont.currency = "USD";
            amont.total = _Amount;
            amont.details = details;

            Transaction tran = new Transaction();
            tran.amount = amont;
            tran.description = _ItemDescription;
            tran.item_list = itemList;

            List<Transaction> transactions = new List<Transaction>();
            transactions.Add(tran);

            FundingInstrument fundInstrument = new FundingInstrument();
            fundInstrument.credit_card = crdtCard;

            List<FundingInstrument> fundingInstrumentList = new List<FundingInstrument>();
            fundingInstrumentList.Add(fundInstrument);

            PayerInfo pi = new PayerInfo();
            pi.email = emTxBx.Text;
            pi.first_name = fnTxBx.Text;
            pi.last_name = lnTxBx.Text;
            pi.shipping_address = billingAddress;

            Payer payr = new Payer();
            payr.funding_instruments = fundingInstrumentList;
            payr.payment_method = "credit_card";
            payr.payer_info = pi;

            Payment paymnt = new Payment();
            paymnt.intent = "sale";
            paymnt.payer = payr;
            paymnt.transactions = transactions;
            try
            {
                Payment createdPayment = paymnt.Create(apiContext);
                CurrContext.Items.Add("ResponseJson", JObject.Parse(createdPayment.ConvertToJson()).ToString(Formatting.Indented));
            }
            catch (PayPal.Exception.PayPalException ex)
            {
                if (ex.InnerException is PayPal.Exception.ConnectionException)
                {
                    CurrContext.Response.Write(((PayPal.Exception.ConnectionException)ex.InnerException).Response);
                }
                else
                {
                    CurrContext.Response.Write(ex.Message);
                }
            }
            CurrContext.Items.Add("RequestJson", JObject.Parse(paymnt.ConvertToJson()).ToString(Formatting.Indented));

有人知道为什么我会收到“此请求无负载”消息吗?

【问题讨论】:

  • 你好像没有PayerInfo for your Payer。嗯……
  • 我对我的原始帖子进行了编辑。感谢您发布。不过还是不开心。
  • 所以在检查沙箱后,我看到列出的信用卡交易,但网站仍然显示错误“此请求没有有效负载”。还有其他想法吗?
  • 谁能帮帮我。我很想得到这个工作。谢谢。
  • 上面真的编译了吗? pi.shipping_address = billingAddress; 回复:AddressShippingAddress (PayerInfo)

标签: rest paypal


【解决方案1】:

在模拟您的代码(和硬编码值)之后,我评论的那一行是我唯一纠正以使其工作的内容(我不知道您的代码如何/为什么会编译):

pi.shipping_address = new ShippingAddress
{
   city = "San Mateo",
   country_code = "US",
   line1 = "SO TEST",
   line2 = "",
   postal_code = "94002",
   state = "CA",
 }; 

最后是来自 PayPal (ResponseJson) 的(成功)响应:

ResponseJson: {
    "id": "PAY-8EU11336Y2032051SKUYZZOQ",
    "intent": "sale",
    "payer": {
        "payment_method": "credit_card",
        "funding_instruments": [{
            "credit_card": {
                "number": "xxxxxxxxxxxx2274",
                "type": "visa",
                "expire_month": 1,
                "expire_year": 2018,
                "first_name": "Stack",
                "last_name": "Overflow",
                "billing_address": {
                    "line1": "SO TEST",
                    "line2": "",
                    "city": "San Mateo",
                    "country_code": "US",
                    "postal_code": "94002",
                    "state": "CA"
                }
            }
        }]
    },
    "transactions": [{
        "related_resources": [{
            "sale": {
                "id": "1Y28050325502832C",
                "amount": {
                    "currency": "USD",
                    "total": "99.00"
                },
                "state": "completed",
                "parent_payment": "PAY-8EU11336Y2032051SKUYZZOQ",
                "create_time": "2015-04-17T23:52:26Z",
                "update_time": "2015-04-17T23:52:28Z",
                "links": [{
                    "href": "https://api.sandbox.paypal.com/v1/payments/sale/1Y28050325502832C",
                    "rel": "self",
                    "method": "GET"
                },
                {
                    "href": "https://api.sandbox.paypal.com/v1/payments/sale/1Y28050325502832C/refund",
                    "rel": "refund",
                    "method": "POST"
                },
                {
                    "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-8EU11336Y2032051SKUYZZOQ",
                    "rel": "parent_payment",
                    "method": "GET"
                }]
            }
        }],
        "amount": {
            "currency": "USD",
            "total": "99.00",
            "details": {
                "subtotal": "99.00"
            }
        },
        "description": "trnx desc",
        "item_list": {
            "items": [{
                "quantity": "1",
                "name": "foo",
                "price": "99.00",
                "currency": "USD",
                "sku": "fooSku"
            }]
        }
    }],
    "state": "approved",
    "create_time": "2015-04-17T23:52:26Z",
    "update_time": "2015-04-17T23:52:28Z",
    "links": [{
        "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-8EU11336Y2032051SKUYZZOQ",
        "rel": "self",
        "method": "GET"
    }]
}

并显示在 Paypal 开发人员 Sandbox Transactions 中:

第...

【讨论】:

  • 您介意发布您的代码,以便我可以与我的进行比较。谢谢。
  • 这太令人沮丧了!我仍然收到没有有效负载的相同错误。有人有使用信用卡的 PayPal 的 C# 代码吗?我不想回到经典的 PayPal。
  • @RooGuru 我使用了你的代码,除了来自控件的变量(我只是提供了硬编码值)。我唯一改变的另一件事是ShippingAddress 的行。您是否在 asp.net 应用程序上下文中执行上述操作?我是(这也许是我们不同的地方?)。另一个假设是您使用的是 .Net SDK(基于您使用的方法和对象名称,这仍然只是我的假设)。
  • 我正在使用上下文并且我确实安装了 SDK。我不应该使用 SDK 吗?
  • @RooGuru - 使用 SDK(我是)。你到底在哪里遇到了这个错误?如您所知,我似乎无法重现它....
猜你喜欢
  • 2020-10-06
  • 2017-06-24
  • 2016-06-27
  • 2013-12-24
  • 2018-06-18
  • 2015-04-21
  • 2015-12-02
  • 2023-03-15
  • 2013-06-05
相关资源
最近更新 更多