PayPal 对接
時間:2019-1-29 15:39:39
文章相應鏈接:
官方SDK:https://developer.paypal.com/docs/api/rest-sdks/
官方API:https://developer.paypal.com/docs/api/payments/v1/
官方.NET 支付案例:https://paypal.github.io/PayPal-NET-SDK/Samples/PaymentWithPayPal.aspx.html
官方SDK 支付使用邏輯:https://developer.paypal.com/docs/api/quickstart/create-process-order/#
?
PayPal 支付流程說明:
?
1。安裝官方SDK (上面的第一個鏈接)
.NET 案例: Install-package Paypal
2.編寫支付代碼(上面的第4個鏈接)
3.創建支付訂單詳情,返回一個approval_url(獲得這個URL)返回前端請求跳轉到這個頁面確認訂單信息,用戶點擊支付按鈕。
4.paypa 回調 后臺配置的 URL?
5.處理業務邏輯,例如修改訂單狀態等等
6.UI 渲染支付成功頁面。
7. End 結束。
?
代碼案例:
? public static bool PayPalCreate(string payerId) // 這個ID 是回調的時候自己傳遞過來的。所以自行獲取調用
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? var payer = new Payer() { payment_method = "paypal" };
? ? ? ? ? ? ? ? var config = ConfigManager.Instance.GetProperties();
? ? ? ? ? ? ? ? var accessToken = new OAuthTokenCredential(config).GetAccessToken();
? ? ? ? ? ? ? ? var apiContext = new APIContext(accessToken);
? ? ? ? ? ? ? ? string createParamId = "";
? ? ? ? ? ? ? ? if (string.IsNullOrEmpty(payerId))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? var guid = Convert.ToString((new Random()).Next(100000));
? ? ? ? ? ? ? ? ? ? //var baseURI = Request.Url.Scheme + "://" + Request.Url.Authority + "/PaymentWithPayPal.aspx?";
? ? ? ? ? ? ? ? ? ? var baseUrl = "https://164l647f09.51mypc.cn/PayStripe.ashx?method=PayImageListTest?";
? ? ? ? ? ? ? ? ? ? var redirectUrl = baseUrl + "guid=" + guid;
? ? ? ? ? ? ? ? ? ? var redirUrls = new RedirectUrls()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? cancel_url = redirectUrl + "&cancel=true",
? ? ? ? ? ? ? ? ? ? ? ? return_url = redirectUrl
? ? ? ? ? ? ? ? ? ? };
?
? ? ? ? ? ? ? ? ? ? var itemList = new ItemList()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? items = new List<Item>()
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? new Item()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? name = "Item Name",
? ? ? ? ? ? ? ? ? ? ? ? currency = "TWD",
? ? ? ? ? ? ? ? ? ? ? ? price = "15",
? ? ? ? ? ? ? ? ? ? ? ? quantity = "5",
? ? ? ? ? ? ? ? ? ? ? ? sku = "sku"
? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? new Item()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? name = "Item Name2",
? ? ? ? ? ? ? ? ? ? ? ? currency = "TWD",
? ? ? ? ? ? ? ? ? ? ? ? price = "15",
? ? ? ? ? ? ? ? ? ? ? ? quantity = "5",
? ? ? ? ? ? ? ? ? ? ? ? sku = "sku"
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? };
?
? ? ? ? ? ? ? ? ? ? var details = new Details()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? tax = "30",? // 這幾個價格都是要? 求和, 并且相等,? 官網有說明
? ? ? ? ? ? ? ? ? ? ? ? shipping = "10",
? ? ? ? ? ? ? ? ? ? ? ? subtotal = "150"
? ? ? ? ? ? ? ? ? ? };
?
? ? ? ? ? ? ? ? ? ? var amount = new Amount()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? currency = "TWD",
? ? ? ? ? ? ? ? ? ? ? ? total = "190.00", // Total must be equal to sum of shipping, tax and subtotal.
? ? ? ? ? ? ? ? ? ? ? ? details = details
? ? ? ? ? ? ? ? ? ? };
?
? ? ? ? ? ? ? ? ? ? var transactionList = new List<Transaction>();
?
? ? ? ? ? ? ? ? ? ? transactionList.Add(new Transaction()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? description = "Transaction description.",
? ? ? ? ? ? ? ? ? ? ? ? invoice_number = "123456789101113",
? ? ? ? ? ? ? ? ? ? ? ? amount = amount,
? ? ? ? ? ? ? ? ? ? ? ? item_list = itemList
? ? ? ? ? ? ? ? ? ? });
?
? ? ? ? ? ? ? ? ? ? var payment = new Payment()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? intent = "sale",
? ? ? ? ? ? ? ? ? ? ? ? payer = payer,
? ? ? ? ? ? ? ? ? ? ? ? redirect_urls = redirUrls,
? ? ? ? ? ? ? ? ? ? ? ? transactions = transactionList,
? ? ? ? ? ? ? ? ? ? };
?
? ? ? ? ? ? ? ? ? ? var createdPayment = payment.Create(new APIContext(accessToken));
? ? ? ? ? ? ? ? ? ? createParamId = createdPayment.id;? ?// 需要存儲起來,方便回調的時候用這個ID去做支付扣款,我這邊沒做存儲,只是復制出來了,然后調試的時候粘貼上去做的扣款
? ? ? ? ? ? ? ? ?//? ?payerId = createdPayment.payer.payer_info.payer_id;
? ? ? ? ? ? ? ? ? ? var links = createdPayment.links.GetEnumerator();
? ? ? ? ? ? ? ? ? ? while (links.MoveNext())
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? var link = links.Current;
? ? ? ? ? ? ? ? ? ? ? ? if (link.rel.ToLower().Trim().Equals("approval_url"))
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? var linkUrl = link.href;
? ? ? ? ? ? ? ? ? ? ? ? ? ? // Redirect the customer to link.href
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
?
?
? ? ? ? ? ? ? ? ? ? // Using the information from the redirect, setup the payment to execute.
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? var createdPaymentId = createParamId;? ?// 需要存儲起來,方便回調的時候用這個ID去做支付扣款,我這邊沒做存儲,只是復制出來了,然后調試的時候粘貼上去做的扣款
? ? ? ? ? ? ? ? ? ? var paymentExecution = new PaymentExecution() { payer_id = payerId };
? ? ? ? ? ? ? ? ? ? var payment2 = new Payment() { id = createdPaymentId };
?
? ? ? ? ? ? ? ? ? ? // Execute the payment.
? ? ? ? ? ? ? ? ? ? var executedPayment = payment2.Execute(apiContext, paymentExecution);
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? return true;
?
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? }
?
一個簡單的支付案例分享,官網有很多支付模式,大伙可以自己去瞅瞅。
?文章中有很多依賴沒有完全寫清楚,需要自行去看看官方文檔 琢磨,比如安裝了Nuget包,web.config 的配置沒寫 ClientID,秘鑰。等等
轉載于:https://www.cnblogs.com/Mrly/p/10334448.html
總結
- 上一篇: Go 结构体
- 下一篇: js - 浅拷贝和深拷贝