亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

.NET微信掃碼支付接入(模式二-NATIVE)

2024-07-10 13:32:40
字體:
來源:轉載
供稿:網友

一、前言

      經過兩三天的琢磨總算完成了微信掃碼支付功能,不得不感嘆幾句:

微信提供的DEMO不錯,直接復制粘貼就可以跑起來了;
微信的配置平臺我真是服了。公眾平臺、商戶平臺、開放平臺,一個平臺一套賬戶密碼,大寫的惡心
       DEMO地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

       .NET版DEMO中的Lib文件夾是關鍵,直接復制到自己的代碼里,或者打成dll隨個人意愿。

二、正文

Step1:肯定是產生商戶訂單號,然后傳給微信后臺,由微信去組成二維碼字符串,然后返給你,你再把字符串做成圖片;

 /// <summary> /// 獲取二維碼 /// </summary> /// <param name="orderNumber"></param> /// <returns></returns> public string GetCodeUrl(string orderNumber) {  var result = string.Empty;  if (!string.IsNullOrEmpty(orderNumber))  {  var matchedItem = db.OrderInfoForProducts.FirstOrDefault(x => x.OrderNumber == orderNumber);  if (matchedItem != null && matchedItem.IsPaid == false)  {   WxPayData data = new WxPayData();   data.SetValue("body", "productBody");//商品描述   data.SetValue("attach", "attach data");//附加數據   data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//隨機字符串   data.SetValue("total_fee", price);//總金額   data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始時間   data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易結束時間   data.SetValue("goods_tag", "tag");//商品標記   data.SetValue("trade_type", "NATIVE");//交易類型   data.SetValue("product_id", WxPayApi.GenerateOutTradeNo());//商品ID   result = WxPayApi.UnifiedOrder(data).GetValue("code_url").ToString();//調用統一下單接口  }  }  return result; }

        在這里,我是把公司的商戶訂單號放在了attach字段上,因為公司的商戶訂單號比較長,超過了32位。out_trade_no與product_id字段最多32位,請慎重!

        微信中的價格不能帶小數,所以0.01元要寫成100。 

Step2: 成功返回二維碼字符串之后就可以在生成圖片了,我這邊使用了ThoughtWorks.QRCode.dll來生成圖片:

 /// <summary> /// 根據字符串得到相應的二維碼 /// </summary> /// <param name="qrInfo"></param> /// <param name="productName"></param> /// <param name="version"></param> /// <returns></returns> public static Image CreateQRCodeImage(string qrInfo, string productName, string version) {  try  {  if (!string.IsNullOrEmpty(qrInfo))  {   QRCodeEncoder encoder = new QRCodeEncoder   {   QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,   QRCodeScale = 4,   QRCodeVersion = 0,   QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M   };   //編碼方式(注意:BYTE能支持中文,ALPHA_NUMERIC掃描出來的都是數字)   //大小(值越大生成的二維碼圖片像素越高)   //版本(注意:設置為0主要是防止編碼的字符串太長時發生錯誤)   //錯誤效驗、錯誤更正(有4個等級)   Image image = encoder.Encode(qrInfo, Encoding.GetEncoding("utf-8"));   string filename = $"{productName}_{version}.png";   var userLocalPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);   var docPath = Path.Combine(userLocalPath, @"Your Product/QRCode");   if (!Directory.Exists(docPath))   {   Directory.CreateDirectory(docPath);   }   string filepath = Path.Combine(docPath, filename);    using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write))   {   image.Save(fs, System.Drawing.Imaging.ImageFormat.Png);   fs.Close();   image.Dispose();   }   return image;  }  }  catch (Exception)  {  return null;  }  return null; }

Step3: 當用戶掃完二維碼之后,微信會發起回調,這時候我們就可以處理自己的業務邏輯了。這里我的UpdatePayStatus返回的是一個空頁面

 /// <summary> /// 回調函數 /// </summary> public ActionResult UpdatePayStatus() {  //接收從微信后臺POST過來的數據  System.IO.Stream s = Request.InputStream;  int count = 0;  byte[] buffer = new byte[1024];  StringBuilder builder = new StringBuilder();  while ((count = s.Read(buffer, 0, 1024)) > 0)  {  builder.Append(Encoding.UTF8.GetString(buffer, 0, count));  }  s.Flush();  s.Close();  s.Dispose();  //轉換數據格式并驗證簽名  WxPayData data = new WxPayData();  try  {  data.FromXml(builder.ToString());  }  catch (WxPayException ex)  {  //若簽名錯誤,則立即返回結果給微信支付后臺  WxPayData res = new WxPayData();  res.SetValue("return_code", "FAIL");  res.SetValue("return_msg", ex.Message);  LogEntity signErrorLog = new LogEntity();  signErrorLog.errorMessage = ex.Message;  LogHelper.WriteLog(signErrorLog, null);  Response.Write(res.ToXml());  Response.End();  }  ProcessNotify(data);    return View(); } /// <summary> /// 處理回調數據 /// </summary> /// <param name="data"></param> public void ProcessNotify(WxPayData data) {  WxPayData notifyData = data;  //檢查支付結果中transaction_id是否存在  if (!notifyData.IsSet("transaction_id"))  {  //若transaction_id不存在,則立即返回結果給微信支付后臺  WxPayData res = new WxPayData();  res.SetValue("return_code", "FAIL");  res.SetValue("return_msg", "支付結果中微信訂單號不存在");  LogEntity orderLog = new LogEntity();  orderLog.errorMessage = "支付結果中微信訂單號不存在";  LogHelper.WriteLog(orderLog, null);  Response.Write(res.ToXml());  Response.End();  }  string transaction_id = notifyData.GetValue("transaction_id").ToString();  //查詢訂單,判斷訂單真實性  if (!QueryOrder(transaction_id))  {  //若訂單查詢失敗,則立即返回結果給微信支付后臺  WxPayData res = new WxPayData();  res.SetValue("return_code", "FAIL");  res.SetValue("return_msg", "訂單查詢失敗");  LogEntity orderqueryLog = new LogEntity();  orderqueryLog.errorMessage = "訂單查詢失敗";  LogHelper.WriteLog(orderqueryLog, null);  Response.Write(res.ToXml());  Response.End();  }  //查詢訂單成功  else  {  WxPayData res = new WxPayData();  res.SetValue("return_code", "SUCCESS");  res.SetValue("return_msg", "OK");  SetPaymentResult(data); //這里的參數是 data !??! 不是 res !??!  Response.Write(res.ToXml());  Response.End();  } } /// <summary> /// 商戶后臺更新 /// </summary> /// <param name="res"></param> private void SetPaymentResult(WxPayData res) {  var isSucessFlagOne = res.GetValue("return_code").ToString();  var isSuccessFlagTwo = res.GetValue("result_code").ToString();    if (isSucessFlagOne == "SUCCESS" && isSuccessFlagTwo == "SUCCESS")  {  //自己的業務邏輯 ?。。?!  } } //查詢訂單 private bool QueryOrder(string transaction_id) {  WxPayData req = new WxPayData();  req.SetValue("transaction_id", transaction_id);  WxPayData res = WxPayApi.OrderQuery(req);  if (res.GetValue("return_code").ToString() == "SUCCESS" &&  res.GetValue("result_code").ToString() == "SUCCESS")  {  return true;  }  else  {  return false;  } }

三、結尾

      做完支付寶與微信掃碼支付發現支付寶的接入要比微信方便很多,還有一個同步請求。而且吐槽個其它的,微信開放平臺的審批速度要比支付寶的審批慢很多。還有微信支付最后上線前不需要非得用沙箱測試,做完之后直接一分錢一分錢測試即可。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩高清中文字幕| 粉嫩老牛aⅴ一区二区三区| 国产欧美va欧美va香蕉在| 亚洲成人久久久久| 欧美日韩加勒比精品一区| 91青草视频久久| 国内精品美女av在线播放| 久热在线中文字幕色999舞| 久久久久这里只有精品| 77777少妇光屁股久久一区| 亚洲免费电影一区| 欧美精品性视频| 91在线高清免费观看| 亚洲老头同性xxxxx| 日韩精品在线观看一区二区| 国产精品av网站| 欧美猛男性生活免费| 国产精品扒开腿做爽爽爽的视频| 国产成人精品综合| 欧洲日韩成人av| 在线看欧美日韩| 亚洲人成网站免费播放| 91免费的视频在线播放| 欧美特黄级在线| 国产婷婷97碰碰久久人人蜜臀| 亚洲视频视频在线| 国产精品久久久久久久久久久久久| 欧美一级片免费在线| 亚洲深夜福利在线| 色老头一区二区三区在线观看| 国产精品日韩av| 欧美激情国产高清| 91麻豆桃色免费看| 国产精品69久久久久| 高潮白浆女日韩av免费看| 欧美怡红院视频一区二区三区| 国产不卡视频在线| 久久久久久这里只有精品| 久久九九精品99国产精品| 久久精品国产99国产精品澳门| 视频一区视频二区国产精品| 欧美日韩在线视频观看| 亚洲成人在线视频播放| 午夜剧场成人观在线视频免费观看| 国产裸体写真av一区二区| 欧美精品在线看| 久久亚洲影音av资源网| 欧美理论电影在线播放| 亚洲国产欧美久久| 久久久久久久久久久免费精品| 亚洲美女视频网站| 午夜精品久久久久久久久久久久| 91精品国产自产在线| 91欧美视频网站| 欧美视频第一页| 欧美影院久久久| 国产狼人综合免费视频| 国外成人在线直播| 欧美日韩一区二区在线| 久久免费精品视频| 91久久综合亚洲鲁鲁五月天| 久久最新资源网| 久久久噜噜噜久久| 日韩欧美在线中文字幕| 欧美一级大片视频| 亚洲男人天堂古典| 国产精品视频色| 国产精品自产拍高潮在线观看| 亚洲国产女人aaa毛片在线| 91精品久久久久久久久青青| 岛国视频午夜一区免费在线观看| 国产精品免费视频久久久| 日韩少妇与小伙激情| 在线亚洲国产精品网| 久久免费成人精品视频| 亚洲精品第一国产综合精品| 亚洲精品国精品久久99热| 亚洲女人天堂av| 亚洲va男人天堂| 国产一区二区精品丝袜| 亚洲色图在线观看| 日韩av网址在线| 亚洲自拍高清视频网站| 国产精品日韩电影| 欧美激情一区二区三级高清视频| 亚洲第一页在线| 欧美日韩国产区| 日韩欧美精品网站| 日本精品久久中文字幕佐佐木| 深夜福利亚洲导航| 国产精品精品一区二区三区午夜版| 欧美性极品少妇精品网站| 欧美性色xo影院| 日韩av资源在线播放| 国产精品爱啪在线线免费观看| 国产日韩欧美中文在线播放| 亚洲国产精品va在线看黑人动漫| 欧美视频专区一二在线观看| 亚洲黄色www网站| 亚洲欧美激情精品一区二区| 欧美在线视频免费播放| 日韩在线免费观看视频| 欧美激情女人20p| 久久久久九九九九| 2019最新中文字幕| 国产欧美一区二区白浆黑人| 欧美国产极速在线| 亚洲xxxxx| 91精品国产综合久久男男| 欧美一二三视频| 久久精品福利视频| 久久国产一区二区三区| 亚洲精品720p| 538国产精品一区二区在线| 91高清视频免费观看| 一个色综合导航| 国产精品免费福利| 中文字幕视频在线免费欧美日韩综合在线看| 国产91精品高潮白浆喷水| 亚洲激情视频网站| 日韩欧美极品在线观看| 日本国产精品视频| 国模极品一区二区三区| 国产精品久久久久久久久久久不卡| 美女福利精品视频| 国产精品国产福利国产秒拍| 97超级碰碰碰久久久| 日韩在线视频中文字幕| 欧美成人第一页| 久久高清视频免费| 国产精品久久久91| 国产精品av电影| 精品magnet| 欧美裸体男粗大视频在线观看| 欧美性猛交xxxx乱大交蜜桃| 亚洲精品国产精品久久清纯直播| 亚洲综合自拍一区| 欧美激情精品久久久久久蜜臀| 欧美激情欧美激情| 久久久成人的性感天堂| 欧美日韩国产一区在线| 久久伊人色综合| 最新亚洲国产精品| 国产精品久久久久7777婷婷| 黑人巨大精品欧美一区免费视频| 国产精品一区二区久久精品| 成人免费观看49www在线观看| 久久综合伊人77777蜜臀| 日韩av大片在线| 91免费的视频在线播放| 正在播放亚洲1区| 久久人人爽人人| 成人激情在线观看| 97视频在线观看播放| 日本一区二区三区在线播放| 青青在线视频一区二区三区| 欧美一级片在线播放| 日韩精品视频在线播放| 欧美日韩中国免费专区在线看| 国产亚洲a∨片在线观看| 国产精品高潮呻吟久久av无限| 亚洲大胆人体视频| 欧美在线播放视频| 欧美乱大交xxxxx|