一、微信支付方式介绍

微信提供了各种支付方式,试用于各种不同的支付场景,主要有如下几种:

1、刷卡支付

刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。

2、扫码支付

扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

3、公众号支付

公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:

  1. ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
  2. ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
  3. ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

4、APP支付

APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。

5、H5支付

H5支付用于在手机端微信外浏览器进行支付,笔者的测试本支付方式在微信内不能使用。

本文主要讲解.net mvc实现扫码支付方法,具体代码如下:

二、调起支付Controller代码
  1. /// <summary>
  2. /// 支付首页
  3. /// </summary>
  4. /// <returns></returns>
  5. public ActionResult Index()
  6. {
  7. NativePay nativePay = new NativePay();
  8. //总金额
  9. int total_fee = ;
  10. //生成订单
  11. //判断是否有未支付订单
  12. string productId = "产品ID";
  13. decimal moeny = Convert.ToDecimal();//支付金额
  14. string orderId = "订单ID";
  15. //订单描述
  16. string body = "订单描述";
  17. //生成扫码支付模式二url
  18. WxPayData data = new WxPayData();
  19. data.SetValue("body", "商品描述");//商品描述
  20. data.SetValue("attach", body);//附加数据
  21. data.SetValue("out_trade_no", orderId);//随机字符串
  22. data.SetValue("total_fee", total_fee.ToString());//总金额
  23. data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
  24. data.SetValue("time_expire", DateTime.Now.AddMinutes().ToString("yyyyMMddHHmmss"));//交易结束时间
  25. data.SetValue("goods_tag", orderId);//商品标记
  26. data.SetValue("trade_type", "NATIVE");//交易类型
  27. data.SetValue("product_id", productId);//商品ID
  28. data.SetValue("notify_url", "http://www.*****.com.cn/Pay/ResultNotify");//支付成功返回调用
  29. WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
  30. ViewBag.ImageUrl2 = "/Pay/MakeQRCode?data=" + HttpUtility.UrlEncode(result.GetValue("code_url").ToString());
  31. return View();
  32. }
  33. /// <summary>
  34. /// 生成支付二维码图片
  35. /// </summary>
  36. /// <returns></returns>
  37. public ActionResult MakeQRCode()
  38. {
  39. if (!string.IsNullOrEmpty(Request.QueryString["data"]))
  40. {
  41. string str = Request.QueryString["data"];
  42.  
  43. //初始化二维码生成工具
  44. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  45. qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
  46. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  47. qrCodeEncoder.QRCodeVersion = ;
  48. qrCodeEncoder.QRCodeScale = ;
  49.  
  50. //将字符串生成二维码图片
  51. Bitmap image = qrCodeEncoder.Encode(str, Encoding.Default);
  52.  
  53. //保存为PNG到内存流
  54. MemoryStream ms = new MemoryStream();
  55. image.Save(ms, ImageFormat.Png);
  56.  
  57. //输出二维码图片
  58. return File(ms.GetBuffer(), @"image/png");
  59. //Response.BinaryWrite(ms.GetBuffer());
  60. //Response.End();
  61. }
  62. return Content("Error");
  63. }
三、支付成功后台处理方法
  1. /// <summary>
  2. /// 支付成功返回处理订单信息
  3. /// </summary>
  4. /// <returns></returns>
  5. public ActionResult ResultNotify()
  6. {
  7. WxPayData notifyData = GetNotifyData();
  8. //检查支付结果中transaction_id是否存在
  9. if (!notifyData.IsSet("transaction_id"))
  10. {
  11. //若transaction_id不存在,则立即返回结果给微信支付后台
  12. WxPayData res = new WxPayData();
  13. res.SetValue("return_code", "FAIL");
  14. res.SetValue("return_msg", "支付结果中微信订单号不存在");
  15. Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
  16. return Content("支付结果中微信订单号不存在");
  17. }
  18.  
  19. string transaction_id = notifyData.GetValue("transaction_id").ToString();
  20. string trade_no = notifyData.GetValue("out_trade_no").ToString();
  21. //查询订单,判断订单真实性
  22. if (!QueryOrder(transaction_id))
  23. {
  24. //若订单查询失败,则立即返回结果给微信支付后台
  25. WxPayData res = new WxPayData();
  26. res.SetValue("return_code", "FAIL");
  27. res.SetValue("return_msg", "订单查询失败");
  28. Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml());
  29. return Content("订单查询失败");
  30. }
  31. //查询订单成功
  32. else
  33. {
  34. WxPayData res = new WxPayData();
  35. res.SetValue("return_code", "SUCCESS");
  36. res.SetValue("return_msg", "OK");
  37. Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
  38. //更新支付状态
  39.  
  40. return Content("支付成功" + res.ToXml());
  41. }
  42. }

四、源码下载:http://www.kwstu.com/ResourcesView/weixin_201710301127489173

咨询QQ:806693619

asp.net mvc PC端二维码支付实例(微信二维码支付)的更多相关文章

  1. 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二)

    基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二) 之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了 ...

  2. ASP.NET MVC 4 插件化架构简单实现-实例篇

    先回顾一下上篇决定的做法: 1.定义程序集搜索目录(临时目录). 2.将要使用的各种程序集(插件)复制到该目录. 3.加载临时目录中的程序集. 4.定义模板引擎的搜索路径. 5.在模板引擎的查找页面方 ...

  3. asp.net mvc 之旅 —— 第六站 ActionFilter的应用及源码分析

    这篇文章我们开始看一下ActionFilter,从名字上其实就大概知道ActionFilter就是Action上的Filter,对吧,那么Action上的Filter大概有几个呢??? 这个问题其实还 ...

  4. ASP.NET MVC 3 Model【通过一简单实例一步一步的介绍】

    今天主要讲Model的两个方面: 1. ASP.Net MVC 3 Model 简介 通过一简单的事例一步一步的介绍 2. ASP.Net MVC 3 Model 的一些验证 MVC 中 Model ...

  5. 在phpWeChat里生成一个临时二维码(非微信二维码)

    phpWeChat作为支持Pc+H5开发的管理系统,内置一套二维码生成API,访问地址: 您的域名/api/qrcode/index.php?data=二维码数据 以下为使用示例 使用时有一点需要注意 ...

  6. asp.net+mvc+easyui+sqlite 简单用户系统学习之旅(二)—— easyui的简单实用

    下面开始在UserManager.Web中利用easyUI构建web. 1. 先删除自带的controllers.models和views(里面的shared和web.config可以保存)下面的文件 ...

  7. Asp.net MVC 服务端验证多语言错误

    服务端验证用户提交信息时为了实现多语言使用了资源文件,如: using System.ComponentModel.DataAnnotations; public class UserModel { ...

  8. asp.net mvc 注册中的邮箱激活功能实现(二)

    邮件发送功能封装 /// <summary>        /// 发送注册邮件        /// </summary>        /// <param name ...

  9. ASP.NET MVC中的路由IRouteConstraint方法应用实例

    在如下代码的写法中: public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { ro ...

随机推荐

  1. Linux常用 bash

    学会Linux常用 bash命令 目录 基本操作1.1. 文件操作1.2. 文本操作1.3. 目录操作1.4. SSH, 系统信息 & 网络操作 基本 Shell 编程2.1. 变量2.2.  ...

  2. OpenCL基本概念

    OpenCL程序同CUDA程序一样,也是分为两部分,一部分是在主机(以CPU为核心)上运行,一部分是在设备(以GPU为核心)上运行.在设备上运行的程序被称为核函数.但是对于核函数的编写,CUDA一般直 ...

  3. C#颜色对照使用表

    这篇文章来来源于C# Color Table,这里是我翻译的中文版本,其中已经加上了我的一些理解和注释.翻译这篇文章的原因是我在写C#程序的时候发现,C#自带的颜色种类极多(详见下表),如果没有直观的 ...

  4. NP、NP-完全、NP-难问题

    What are the differences between NP, NP-Complete and NP-Hard? 0. 基本定义 判定问题(decision problem):一个答案是是或 ...

  5. Information centric network (icn) node based on switch and network process using the node

    The present invention relates to an apparatus for supporting information centric networking. An info ...

  6. 相关web 片段记录安全性研究(不时更新)

    一.有关html/css, js, php, cgi 的一些认识 当我们浏览器訪问一个网站的静态文件.会把文件内容都下载下来(一般压缩).当然假设遇到外联的css/js,会再发起请求得 到.假设我们右 ...

  7. 机器学习:DeepDreaming with TensorFlow (三)

    我们看到,利用TensorFlow 和训练好的Googlenet 可以生成多尺度的pattern,那些pattern看起来比起单一通道的pattern你要更好,但是有一个问题就是多尺度的pattern ...

  8. crossplatform---Nodejs in Visual Studio Code 01.简单介绍Nodejs

    1.开始 作者自己:开发人员,Asp.Net , html / js , restful , memcached , oracle ,windows , iis 目标读者:供自己以后回顾 2.我看No ...

  9. 解决ASP.NET中Redis 每小时6000次访问请求的问题

    原文:解决ASP.NET中Redis 每小时6000次访问请求的问题 虽然ServiceStack v4是商业支持的产品,但我们也允许免费使用小型项目和评估目的.上面的NuGet包中包含可以使用许可证 ...

  10. SQList3 and SQL入门学习笔记

    SQL 这是一个标准的计算机语言进行访问和操作数据库. 什么是 SQL? ·       SQL 指结构化查询语言 ·       SQL 使我们有能力訪问数据库 ·       SQL 是一种 AN ...