国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

基于C#實現微信支付寶掃碼支付功能

2020-01-24 00:04:14
字體:
來源:轉載
供稿:網友

為公司系統業務需要,這幾天了解了一下微信和支付寶掃碼支付的接口,并用c#實現了微信和支付寶掃碼支付的功能。

微信支付分為6種支付模式:1.付款碼支付,2.native支付,3.jsapi支付,4.app支付,5.h5支付,6.小程序支付

我在這里用到的是native支付,就是網頁生成二維碼讓用戶掃碼支付,再調用回調接口判斷用戶是否支付成功。

支付寶支付api也挺多的,我只使用了一些我在系統中能夠用到的,現在將代碼簡單記錄在這里,先從微信支付開始。

微信支付

先上后臺代碼:

傳入參數(總金額一定要是int類型,微信默認是以分為單位),獲取支付的url,然后用二維碼生成工具將url地址轉換為二維碼圖片并將文件流傳回前臺

/*** 生成直接支付url,支付url有效期為2小時,模式二* @param productId 商品ID* @return 模式二URL*/public ActionResult GetPayUrl(){   //參數   WxPayData data = new WxPayData();   data.SetValue("body", “test”);//商品描述   data.SetValue("attach", "");//附加數據   data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//隨機字符串   data.SetValue("total_fee", 100);//總金額   data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始時間   data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易結束時間   data.SetValue("goods_tag", "");//商品標記   data.SetValue("trade_type", "NATIVE");//交易類型   data.SetValue("product_id", "1234");//商品ID   WxPayData result = WxPayApi.UnifiedOrder(data);//調用統一下單接口   string url = result.GetValue("code_url").ToString();//獲得統一下單接口返回的二維碼鏈接   var jsonData = new   {    url = HttpUtility.UrlEncode(url)   };   return Success(jsonData);    }//將url轉換為二維碼圖片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到內存流       MemoryStream ms = new MemoryStream();      image.Save(ms, ImageFormat.Png);      //輸出二維碼圖片      Response.BinaryWrite(ms.GetBuffer());      Response.End();    }

  前臺代碼:

$.lrSetForm(top.$.rootUrl + 'Test/GetPayUrl',function (data) {          $("#img").attr("src",top.$.rootUrl + '/Test/CodeConversionTool?str=' + data.url);        });

       回調方法:

public string WxPayNotify()    {      WePayReturnModel payResult = new WePayReturnModel();      HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];//獲取傳統context        HttpRequestBase request = context.Request;//定義傳統request對象      bool result = VerifyNotify(request, out payResult);      if (result)      {        //業務代碼        /////////////////////////        /////////////////////////        //如果成功,告知微信不用再調用回調方法          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";      }    }

  這里有一些需要注意的地方,回調地址是區分大小寫的,而且一定要用post,不支持get。而且不論是微信或者是支付寶,為了提高支付成功的幾率,都會多次進行回調,所以我們在確認用戶用戶支付成功了之后,一定要返回一個結果告訴微信,已經支付成功不用在進行回調。

總結

以上所述是小編給大家介紹的基于C#實現微信支付寶掃碼支付功能,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江津市| 襄汾县| 亳州市| 丰原市| 东城区| 同江市| 扎赉特旗| 大新县| 开远市| 诸城市| 子长县| 大石桥市| 赫章县| 武定县| 司法| 彰化市| 南投县| 莆田市| 穆棱市| 登封市| 京山县| 新乡县| 临潭县| 青岛市| 东乡族自治县| 西昌市| 建阳市| 凤台县| 丰都县| 东乌珠穆沁旗| 华池县| 海阳市| 贵溪市| 灵石县| 鄂尔多斯市| 专栏| 香河县| 海安县| 乃东县| 兴和县| 大丰市|