基于C#實(shí)現(xiàn)微信支付寶掃碼支付功能
為公司系統(tǒng)業(yè)務(wù)需要,這幾天了解了一下微信和支付寶掃碼支付的接口,并用c#實(shí)現(xiàn)了微信和支付寶掃碼支付的功能。
微信支付分為6種支付模式:1.付款碼支付,2.native支付,3.jsapi支付,4.app支付,5.h5支付,6.小程序支付
我在這里用到的是native支付,就是網(wǎng)頁(yè)生成二維碼讓用戶(hù)掃碼支付,再調(diào)用回調(diào)接口判斷用戶(hù)是否支付成功。
支付寶支付api也挺多的,我只使用了一些我在系統(tǒng)中能夠用到的,現(xiàn)在將代碼簡(jiǎn)單記錄在這里,先從微信支付開(kāi)始。
微信支付
先上后臺(tái)代碼:
傳入?yún)?shù)(總金額一定要是int類(lèi)型,微信默認(rèn)是以分為單位),獲取支付的url,然后用二維碼生成工具將url地址轉(zhuǎn)換為二維碼圖片并將文件流傳回前臺(tái)
/** * 生成直接支付url,支付url有效期為2小時(shí),模式二 * @param productId 商品ID * @return 模式二URL */ public ActionResult GetPayUrl() { //參數(shù) WxPayData data = new WxPayData(); data.SetValue("body", “test”);//商品描述 data.SetValue("attach", "");//附加數(shù)據(jù) data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//隨機(jī)字符串 data.SetValue("total_fee", 100);//總金額 data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始時(shí)間 data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易結(jié)束時(shí)間 data.SetValue("goods_tag", "");//商品標(biāo)記 data.SetValue("trade_type", "NATIVE");//交易類(lèi)型 data.SetValue("product_id", "1234");//商品ID WxPayData result = WxPayApi.UnifiedOrder(data);//調(diào)用統(tǒng)一下單接口 string url = result.GetValue("code_url").ToString();//獲得統(tǒng)一下單接口返回的二維碼鏈接 var jsonData = new { url = HttpUtility.UrlEncode(url) }; return Success(jsonData); } //將url轉(zhuǎn)換為二維碼圖片 public void CodeConversionTool(string str) { //初始化二維碼生成工具 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; qrCodeEncoder.QRCodeVersion = 0; qrCodeEncoder.QRCodeScale = 4; //將字符串生成二維碼圖片 Bitmap image = qrCodeEncoder.Encode(str, Encoding.Default); //保存為PNG到內(nèi)存流 MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Png); //輸出二維碼圖片 Response.BinaryWrite(ms.GetBuffer()); Response.End(); }
前臺(tái)代碼:
$.lrSetForm(top.$.rootUrl + 'Test/GetPayUrl',function (data) { $("#img").attr("src",top.$.rootUrl + '/Test/CodeConversionTool?str=' + data.url); });
回調(diào)方法:
public string WxPayNotify() { WePayReturnModel payResult = new WePayReturnModel(); HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];//獲取傳統(tǒng)context HttpRequestBase request = context.Request;//定義傳統(tǒng)request對(duì)象 bool result = VerifyNotify(request, out payResult); if (result) { //業(yè)務(wù)代碼 ///////////////////////// ///////////////////////// //如果成功,告知微信不用再調(diào)用回調(diào)方法 WxPayData res = new WxPayData(); res.SetValue("transaction_id", payResult.TradeNo); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); return res.ToXml(); } else { return "fail"; } }
這里有一些需要注意的地方,回調(diào)地址是區(qū)分大小寫(xiě)的,而且一定要用post,不支持get。而且不論是微信或者是支付寶,為了提高支付成功的幾率,都會(huì)多次進(jìn)行回調(diào),所以我們?cè)诖_認(rèn)用戶(hù)用戶(hù)支付成功了之后,一定要返回一個(gè)結(jié)果告訴微信,已經(jīng)支付成功不用在進(jìn)行回調(diào)。
總結(jié)
以上所述是小編給大家介紹的基于C#實(shí)現(xiàn)微信支付寶掃碼支付功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
C#?Winform消息通知之系統(tǒng)本地通知local?toast?notification
這篇文章主要為大家介紹了C#?Winform消息通知之系統(tǒng)本地通知local?toast?notification使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08C#實(shí)現(xiàn)讀寫(xiě)ini文件類(lèi)實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)讀寫(xiě)ini文件類(lèi),實(shí)例分析了C#實(shí)現(xiàn)針對(duì)ini文件的讀、寫(xiě)、刪除等操作的常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03C#如何動(dòng)態(tài)創(chuàng)建lambda表達(dá)式
這篇文章主要介紹了C#如何動(dòng)態(tài)創(chuàng)建lambda表達(dá)式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02c# 實(shí)現(xiàn)IComparable、IComparer接口、Comparer類(lèi)的詳解
本篇文章是對(duì)c#中實(shí)現(xiàn)IComparable、IComparer接口、Comparer類(lèi)進(jìn)行了詳細(xì)的分析詳解,需要的朋友參考下2013-05-05C#設(shè)計(jì)模式之Template模板方法模式實(shí)現(xiàn)ASP.NET自定義控件 密碼強(qiáng)度檢測(cè)功能
這篇文章主要介紹了C#設(shè)計(jì)模式之Template模板方法模式實(shí)現(xiàn)ASP.NET自定義控件 密碼強(qiáng)度檢測(cè)功能,簡(jiǎn)單介紹了模板方法模式的定義、原理及檢測(cè)密碼強(qiáng)度的相關(guān)使用技巧,需要的朋友可以參考下2017-09-09C#用websocket實(shí)現(xiàn)簡(jiǎn)易聊天功能(客戶(hù)端)
這篇文章主要為大家詳細(xì)介紹了C#用websocket實(shí)現(xiàn)簡(jiǎn)易聊天功能,客戶(hù)端方向,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02