.NET5快速接入支付寶掃碼支付

最近一個朋友的老板讓他支付寶支付呐伞,但是他沒搞過這事啊,然后找到我慎式,讓我?guī)退阋幌铝媲猓缓笳宜习褰o點小費,反正閑著也是閑著瘪吏,最近生活非常拮據(jù)啊癣防,所以就應(yīng)下來了。

在開始之前需要先去支付寶開發(fā)平臺->開發(fā)者中心,創(chuàng)建應(yīng)用掌眠、為應(yīng)用添加功能包蕾盯、設(shè)置接口加簽方式等開發(fā)信息,具體操作可以去開發(fā)者中心查看相關(guān)文檔蓝丙,由于支付寶的所有參數(shù)和設(shè)置都是由朋友那邊準(zhǔn)備好的级遭,所以我也就省去了這一步,等這些基本工作都準(zhǔn)備好后渺尘,就開始開始編程之旅了挫鸽。

其實我也沒有接入過支付寶支付,先去Nuget或者Github搜素一番鸥跟,看有沒有官方SDK或者是開源庫可以方便快捷的接入支付功能丢郊,?


結(jié)果非常好,找打了Alipay Easy SDK for .NET医咨,那么 直接通過NuGet管理面板搜索AlipayEasySDK進(jìn)行安裝枫匾,或者通過.NET CLI 執(zhí)行dotnet add package AlipayEasySDK來進(jìn)行安裝。當(dāng)然拟淮,喜歡哪種方式自行選擇干茉。SDK安裝好后,先就需要進(jìn)行支付寶的參數(shù)配置惩歉,我在appsetting.json里面新增了一個Alipay的配置節(jié)點等脂,用于配置支付寶支付的相關(guān)參數(shù)?

"Alipay": {

? ? "Protocol": "https",

? ? "GatewayHost": "openapi.alipay.com",

? ? "SignType": "RSA2",

? ? "AppId": "AppId",

? ? "NotifyUrl": "回調(diào)地址",

? ? "MerchantPrivateKey": "應(yīng)用的私鑰",

? ? "AlipayPublicKey": "支付寶公鑰"

? }

我采用的加簽?zāi)J綖楣€模式的偷懶做法,官方推薦推薦加簽?zāi)J綖楣€證書模式,?

配置文件配置好后撑蚌,我們就可以去Startup.cs初始化我們的支付寶配置了

Config alipayConfig = Configuration.GetSection("Alipay").Get<Config>();

Factory.SetOptions(alipayConfig);

是不是感覺有些so easy,現(xiàn)在就可以去調(diào)用SDK提供的API來發(fā)起支付了上遥。我們先來做一個二維碼掃碼支付

AlipayTradePrecreateResponse response = Factory.Payment.FaceToFace().PreCreate("商品名稱", "訂單id", "金額");

if (ResponseChecker.Success(response))

{

? string qrCode=response.QrCode; //二維碼支付地址

}

Factory.Payment.FaceToFace().PreCreate會給我們返回一個二維碼支付的支付,我們需要自己來生成二維碼**(可以前端生成争涌,也可以后端生成)**粉楚,我這里就是用的后端生成,這里我通過Nuget安裝了一個叫SkiaSharp.QrCode的類庫,使用起來也是非常方便的模软。

using (var generator = new QRCodeGenerator())

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? var qr = generator.CreateQrCode("支付寶二維碼地址", ECCLevel.L);

? ? ? ? ? ? ? ? ? ? var info = new SKImageInfo(120, 120);

? ? ? ? ? ? ? ? ? ? using (var surface = SKSurface.Create(info))

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? var canvas = surface.Canvas;

? ? ? ? ? ? ? ? ? ? ? ? canvas.Render(qr, info.Width, info.Height);

? ? ? ? ? ? ? ? ? ? ? ? using (var image = surface.Snapshot())

? ? ? ? ? ? ? ? ? ? ? ? using (var data = image.Encode(SKEncodedImageFormat.Png, 100)) { return File(data.ToArray(), "image/jpeg"); }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

最后就可以實現(xiàn)這樣的效果伟骨。


但是這樣有個不好的地方,就是不知道實時的支付狀態(tài)燃异,所以携狭,我就準(zhǔn)備了另外一種方式,PC端跳轉(zhuǎn)到支付寶頁面支付回俐,

AlipayTradePagePayResponse response= Factory.Payment.Page().Pay("火鍋", "00000009929929", "0.01", "http://www.baidu.com");

if (ResponseChecker.Success(response))

{

? string html=response.Body;? //html代碼逛腿,嵌入前端會自動跳轉(zhuǎn)至支付寶頁面

}

Factory.Payment.FaceToFace().PreCreate("商品名稱", "訂單id", "金額","支付成功后的跳轉(zhuǎn)地址")

我們把這段html嵌入到頁面中,就可以看到自動跳轉(zhuǎn)至支付寶頁面?

此時仅颇,我們掃碼后就會看到有實時的處理狀態(tài)?

支付寶支持成功的結(jié)果有異步回調(diào)和主動查詢兩種方式单默,一般來說,會兩種方式同時使用忘瓦,因為搁廓,誰也說不準(zhǔn),異步回調(diào)的時候會不會出問題耕皮。這里我就只演示一下異步回調(diào)的方式境蜕,我先新建一個接口來接口我們的回調(diào)參數(shù)

[HttpPost("payNotify")]?

public string PayNotify()

{

? ? ? IFormCollection collection = HttpContext.Request.Form;

? ? ? ICollection<string> keys = HttpContext.Request.Form.Keys;

? ? Dictionary<string, string> alipayResult = new Dictionary<string, string>();

? ? ? ? ? ? foreach (string key in keys)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? alipayResult.Add(key, collection[key]);

? ? ? ? ? ? }


? ? ? ? }

,既然是異步回調(diào)明场,那么肯定是讓支付寶能夠訪問到我們的接口汽摹,所以,我們需要把我們的接口暴露到外網(wǎng)苦锨。這里我用的是natapp,因為它可以免費創(chuàng)建兩個通道的止,代理方式也是非常簡單的桶现,直接新建通道,然后下載對應(yīng)版本的程序,通過命令行的方式運行即可




好了备闲,這里我們就可以把我們的回調(diào)地址配置到剛才的配置文件中了http://v6thj2.natappfree.cc/api/PayCallback/payNotify,現(xiàn)在晤柄,我們來支付一分錢看看我們的勞動成果?

可以看到傍念,我們支付成功后围辙,支付寶會通知我們支付結(jié)果,在我們接到通知結(jié)果后夺鲜,要記得驗簽和支付金額皆尔,然后去處理自己的業(yè)務(wù)邏輯。好了币励,.NET5接入支付寶支付就簡單的講這么多了慷蠕。希望能對大家有所幫助。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末食呻,一起剝皮案震驚了整個濱河市流炕,隨后出現(xiàn)的幾起案子澎现,更是在濱河造成了極大的恐慌,老刑警劉巖每辟,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剑辫,死亡現(xiàn)場離奇詭異,居然都是意外死亡渠欺,警方通過查閱死者的電腦和手機(jī)妹蔽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峻堰,“玉大人讹开,你說我怎么就攤上這事盅视【杳” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵闹击,是天一觀的道長镶蹋。 經(jīng)常有香客問我,道長赏半,這世上最難降的妖魔是什么贺归? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮断箫,結(jié)果婚禮上拂酣,老公的妹妹穿的比我還像新娘。我一直安慰自己仲义,他們只是感情好婶熬,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著埃撵,像睡著了一般赵颅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暂刘,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天饺谬,我揣著相機(jī)與錄音,去河邊找鬼谣拣。 笑死募寨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的森缠。 我是一名探鬼主播拔鹰,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辅鲸!你這毒婦竟也來了格郁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎例书,沒想到半個月后锣尉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡决采,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年自沧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片树瞭。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡拇厢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晒喷,到底是詐尸還是另有隱情孝偎,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布凉敲,位于F島的核電站衣盾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏爷抓。R本人自食惡果不足惜势决,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蓝撇。 院中可真熱鬧果复,春花似錦、人聲如沸渤昌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耘沼。三九已至极颓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間群嗤,已是汗流浹背菠隆。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留狂秘,地道東北人骇径。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像者春,于是被迫代替她去往敵國和親破衔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容