日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core 2.0 使用支付宝PC网站支付

發(fā)布時間:2025/5/22 asp.net 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 2.0 使用支付宝PC网站支付 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

支付寶有比較多的支付產(chǎn)品,比如當(dāng)面付、APP支付、手機網(wǎng)站支付、電腦網(wǎng)站支付等,本次講的是電腦網(wǎng)站支付。

詳細(xì)

代碼下載:http://www.demodashi.com/demo/11730.html

?

前言

最近在使用ASP.NET Core來進行開發(fā),剛好有個接入支付寶支付的需求,百度了一下沒找到相關(guān)的資料,看了官方的SDK以及Demo都還是.NET Framework的,所以就先根據(jù)官方SDK的源碼,用.NET Standard 2.0 實現(xiàn)了支付寶服務(wù)端SDK,Alipay.AopSdk.Core(github:https://github.com/stulzq/Alipay.AopSdk.Core) ,支持.NET CORE 2.0。為了使用方便,已上傳至Nuget可以直接使用。

支付寶有比較多的支付產(chǎn)品,比如當(dāng)面付、APP支付、手機網(wǎng)站支付、電腦網(wǎng)站支付等,本次講的是電腦網(wǎng)站支付。

一、創(chuàng)建項目

新建一個ASP.NET Core 2.0 MVC項目

二、配置

由于我在開發(fā)的時候支付接口并沒有申請下來,所以使用的是支付寶沙箱環(huán)境來進行開發(fā)的。

支付寶沙箱環(huán)境介紹:螞蟻沙箱環(huán)境(Beta)是協(xié)助開發(fā)者進行接口功能開發(fā)及主要功能聯(lián)調(diào)的輔助環(huán)境。沙箱環(huán)境模擬了開放平臺部分產(chǎn)品的主要功能和主要邏輯,在開發(fā)者應(yīng)用上線審核前,開發(fā)者可以根據(jù)自身需求,先在沙箱環(huán)境中了解、組合和調(diào)試各種開放接口,進行開發(fā)調(diào)通工作,從而幫助開發(fā)者在應(yīng)用上線審核完成后,能更快速、更順利的進行線上調(diào)試和驗收工作。
如果在簽約或創(chuàng)建應(yīng)用前想要進行集成測試,可以使用沙箱環(huán)境。
沙箱環(huán)境支持使用個人賬號或企業(yè)賬號登陸。

沙箱環(huán)境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

1、生成秘鑰

下載支付寶官方提供的密鑰生成工具來進行生成,詳細(xì)介紹:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=105971&docType=1

2、設(shè)置應(yīng)用公鑰

我們生成密鑰之后,需要到支付寶后臺設(shè)置應(yīng)用公鑰,就是我們生成的公鑰。

設(shè)置之后,支付寶會給我們一個支付寶公鑰,保存這個支付寶公鑰

這個支付寶公鑰和我們自己生成的公鑰是不一樣的,我們在配置SDK時用的公鑰就是支付寶公鑰

3、配置SDK

新建一個Config類,在里面存儲我們的配置。

public class Config {// 應(yīng)用ID,您的APPIDpublic static string AppId = "";// 支付寶網(wǎng)關(guān)public static string Gatewayurl = "";// 商戶私鑰,您的原始格式RSA私鑰public static string PrivateKey = "";// 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應(yīng)APPID下的支付寶公鑰。public static string AlipayPublicKey = "";// 簽名方式public static string SignType = "RSA2";// 編碼格式public static string CharSet = "UTF-8"; }
  • 應(yīng)用ID和支付寶網(wǎng)關(guān)都可以在支付寶后臺查看。

  • 商戶私鑰即我們自己生成的私鑰,公鑰就是支付寶公鑰這里一定要注意,別用錯了。這里的公鑰私鑰直接填寫字符串即可。

  • 簽名方式推薦使用RSA2,使用RSA2,支付寶會用SHA256withRsa算法進行接口調(diào)用時的驗簽(不限制密鑰長度)。

  • 編碼格式,如果我們是直接配置的字符串(公鑰、私鑰),那么就是我們代碼的編碼,如果使用的是文件(公鑰、私鑰),那么就是文件的編碼。

  • 完成配置如下:

三、添加SDk

官方SDK的源碼(.NET Framework),用.NET Standard 2.0 實現(xiàn)的支付寶服務(wù)端SDK,Alipay.AopSdk.Core(github:https://github.com/stulzq/Alipay.AopSdk.Core) ,支持.NET Core 2.0。
通過Nuget安裝:Install-Package Alipay.AopSdk.Core

四、支付

添加一個控制器?PayController

/// 發(fā)起支付請求 /// </summary> /// <param name="tradeno">外部訂單號,商戶網(wǎng)站訂單系統(tǒng)中唯一的訂單號</param> /// <param name="subject">訂單名稱</param> /// <param name="totalAmout">付款金額</param> /// <param name="itemBody">商品描述</param> /// <returns></returns> [HttpPost] public void PayRequest(string tradeno,string subject,string totalAmout,string itemBody) {DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);// 組裝業(yè)務(wù)參數(shù)modelAlipayTradePagePayModel model = new AlipayTradePagePayModel();model.Body = itemBody;model.Subject = subject;model.TotalAmount = totalAmout;model.OutTradeNo = tradeno;model.ProductCode = "FAST_INSTANT_TRADE_PAY";AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();// 設(shè)置同步回調(diào)地址request.SetReturnUrl("http://localhost:5000/Pay/Callback");// 設(shè)置異步通知接收地址request.SetNotifyUrl("");// 將業(yè)務(wù)model載入到requestrequest.SetBizModel(model);var response = client.SdkExecute(request);Console.WriteLine($"訂單支付發(fā)起成功,訂單號:{tradeno}");//跳轉(zhuǎn)支付寶支付Response.Redirect(Config.Gatewayurl + "?" + response.Body); }

運行:

  • 圖1

  • 圖2

  • 圖3

五、支付異步回調(diào)通知

支付寶同步回調(diào)通知(支付成功后跳轉(zhuǎn)到商戶網(wǎng)站),是不可靠的,所以這里必須使用異步通知來獲取支付結(jié)果,異步通知即支付寶主動請求我們提供的地址,我們根據(jù)請求數(shù)據(jù)來校驗,獲取支付結(jié)果。

/// <summary> /// 支付異步回調(diào)通知 需配置域名 因為是支付寶主動post請求這個action 所以要通過域名訪問或者公網(wǎng)ip /// </summary> public async void Notify() {/* 實際驗證過程建議商戶添加以下校驗。1、商戶需要驗證該通知數(shù)據(jù)中的out_trade_no是否為商戶系統(tǒng)中創(chuàng)建的訂單號,2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創(chuàng)建時的金額),3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據(jù)的對應(yīng)的操作方(有的時候,一個商戶可能有多個seller_id/seller_email)4、驗證app_id是否為該商戶本身。*/Dictionary<string, string> sArray = GetRequestPost();if (sArray.Count != 0){bool flag = AlipaySignature.RSACheckV1(sArray, Config.AlipayPublicKey,Config.CharSet, Config.SignType, false);if (flag){//交易狀態(tài)//判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理//如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細(xì),并執(zhí)行商戶的業(yè)務(wù)程序//請務(wù)必判斷請求時的total_amount與通知時獲取的total_fee為一致的//如果有做過處理,不執(zhí)行商戶的業(yè)務(wù)程序//注意://退款日期超過可退款期限后(如三個月可退款),支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知Console.WriteLine(Request.Form["trade_status"]);await Response.WriteAsync("success");}else{await Response.WriteAsync("fail");}} }

六、同步回調(diào)

同步回調(diào)即支付成功跳轉(zhuǎn)回商戶網(wǎng)站

運行:

/// <summary> /// 支付同步回調(diào) /// </summary> [HttpGet] public IActionResult Callback() {/* 實際驗證過程建議商戶添加以下校驗。1、商戶需要驗證該通知數(shù)據(jù)中的out_trade_no是否為商戶系統(tǒng)中創(chuàng)建的訂單號,2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創(chuàng)建時的金額),3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據(jù)的對應(yīng)的操作方(有的時候,一個商戶可能有多個seller_id/seller_email)4、驗證app_id是否為該商戶本身。*/Dictionary<string, string> sArray = GetRequestGet();if (sArray.Count != 0){bool flag = AlipaySignature.RSACheckV1(sArray, Config.AlipayPublicKey, Config.CharSet, Config.SignType, false);if (flag){Console.WriteLine($"同步驗證通過,訂單號:{sArray["out_trade_no"]}");ViewData["PayResult"] = "同步驗證通過";}else{Console.WriteLine($"同步驗證失敗,訂單號:{sArray["out_trade_no"]}");ViewData["PayResult"] = "同步驗證失敗";}}return View(); }

七、訂單查詢

查詢訂單當(dāng)前狀態(tài):已付款、未付款等等。

運行:

[HttpPost] public JsonResult Query(string tradeno, string alipayTradeNo) {DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);AlipayTradeQueryModel model = new AlipayTradeQueryModel();model.OutTradeNo = tradeno;model.TradeNo = alipayTradeNo;AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();request.SetBizModel(model);var response = client.Execute(request);return Json(response.Body); }

八、訂單退款

退回該訂單金額。

運行:

/// <summary> /// 訂單退款 /// </summary> /// <param name="tradeno">商戶訂單號</param> /// <param name="alipayTradeNo">支付寶交易號</param> /// <param name="refundAmount">退款金額</param> /// <param name="refundReason">退款原因</param> /// <param name="refundNo">退款單號</param> /// <returns></returns> [HttpPost] public JsonResult Refund(string tradeno,string alipayTradeNo,string refundAmount,string refundReason,string refundNo) {DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);AlipayTradeRefundModel model = new AlipayTradeRefundModel();model.OutTradeNo = tradeno;model.TradeNo = alipayTradeNo;model.RefundAmount = refundAmount;model.RefundReason = refundReason;model.OutRequestNo = refundNo;AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();request.SetBizModel(model);var response = client.Execute(request);return Json(response.Body); }

九、退款查詢

查詢退款信息。

運行:

/// <summary> /// 退款查詢 /// </summary> /// <param name="tradeno">商戶訂單號</param> /// <param name="alipayTradeNo">支付寶交易號</param> /// <param name="refundNo">退款單號</param> /// <returns></returns> [HttpPost] public JsonResult RefundQuery(string tradeno,string alipayTradeNo,string refundNo) {DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);if (string.IsNullOrEmpty(refundNo)){refundNo = tradeno;}AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();model.OutTradeNo = tradeno;model.TradeNo = alipayTradeNo;model.OutRequestNo = refundNo;AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();request.SetBizModel(model);var response = client.Execute(request);return Json(response.Body); }

十、訂單關(guān)閉

對一定時間以后沒有進行付款的訂單進行關(guān)閉,訂單狀態(tài)需為:待付款,已完成支付的訂單無法關(guān)閉。

運行:

/// <summary> /// 關(guān)閉訂單 /// </summary> /// <param name="tradeno">商戶訂單號</param> /// <param name="alipayTradeNo">支付寶交易號</param> /// <returns></returns> [HttpPost] public JsonResult OrderClose(string tradeno, string alipayTradeNo) {DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);AlipayTradeCloseModel model = new AlipayTradeCloseModel();model.OutTradeNo = tradeno;model.TradeNo = alipayTradeNo;AlipayTradeCloseRequest request = new AlipayTradeCloseRequest();request.SetBizModel(model);var response = client.Execute(request);return Json(response.Body); }

十、項目文件截圖

十一、地址集合

  • 支付寶API文檔

  • 支付寶沙箱環(huán)境

  • 支付寶密鑰生成工具

  • 支付寶服務(wù)端SDK源碼

  • 支付寶服務(wù)端SDK Nuget

?

?

代碼下載:http://www.demodashi.com/demo/11730.html

注:本文著作權(quán)歸作者,由demo大師發(fā)表,拒絕轉(zhuǎn)載,轉(zhuǎn)載需要作者授權(quán)

?

轉(zhuǎn)載于:https://www.cnblogs.com/demodashi/p/8491122.html

總結(jié)

以上是生活随笔為你收集整理的ASP.NET Core 2.0 使用支付宝PC网站支付的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲免费三级 | 日日躁夜夜躁狠狠久久av | 悠悠色综合 | 亚洲国产精品一区二区尤物区 | 日韩美女做爰高潮免费 | 91精品国产91久久久久青草 | 欧美一区二区三区免费观看 | 欧美一区二区三区在线观看 | 老司机在线看片 | 亚洲一区二区三区成人 | 深夜视频一区二区 | 国产美女av在线 | 日韩123| 亚洲精品网站在线播放gif | 国产亚洲美女精品久久久2020 | 中文字幕乱码一区二区三区 | 久久草视频 | 国产精品一区二区黑人巨大 | 午夜不卡av| 91一区视频 | xxxxx亚洲| 国产a网站 | 国产美女无遮挡永久免费观看 | 久久a毛片| 欧美成人第一页 | 97人人爽 | 亚洲一级无毛 | www.av小说| h片免费观看 | 国产又粗又猛又黄又爽的视频 | 91超级碰| 精品一卡二卡 | 在线观看亚洲一区 | 成人p站在线观看 | 黄色工厂在线观看 | 红猫大本营在线观看的 | 公肉吊粗大爽色翁浪妇视频 | 日韩欧美一卡二卡 | 美女网站黄频 | 久久男人的天堂 | www.亚洲人 | 老司机深夜福利影院 | 老司机福利院 | 中文字幕第7页 | 欧美少妇一区二区 | 91麻豆精品国产91久久久无需广告 | 人妻天天爽夜夜爽一区二区三区 | 黑人又大又粗又长 | 久久久久久1 | 欧美动态视频 | 国产精品一区二区三区不卡 | 精品无码国产一区二区三区51安 | 日韩视频三区 | 色呦呦在线观看视频 | 亚洲色精品三区二区一区 | 在线观看亚洲免费视频 | 8x8x国产精品一区二区 | 在线观看的免费 | 亚洲欧美日韩图片 | 九九碰 | 久久久全国免费视频 | 中国黄色一级视频 | 亚洲av无码不卡 | 日韩1区 | 中文字幕第28页 | 午夜精品福利一区二区 | www.国产视频 | 日皮在线观看 | 精品福利三区3d卡通动漫 | 欧美最黄视频 | 五月色婷婷综合 | 天天cao在线 | 亚洲综合图片一区 | 少妇人妻一区二区三区 | 日本一区视频在线播放 | 久草资源在线 | 国产黄色一级大片 | 亚洲欧美偷拍一区 | wwwjizzzcom| 9久9久9久女女女九九九一九 | 欧美激情在线免费 | 咪咪色影院 | 免费观看成人 | 午夜老司机福利 | 九九三级| 日韩精品一区二区视频 | 狠狠鲁视频| 亚洲啪啪| 特级丰满少妇一级aaa爱毛片 | 五月天91| 亚洲熟女乱综合一区二区三区 | 丰满少妇一级 | 久久ww| 欧美v视频 | 日韩一区二区三区视频在线观看 | 不许穿内裤随时挨c调教h苏绵 | 国产成人精品二区三区亚瑟 | 欧美成人777 | 国产精品久久久久久影视 |