支付提交页面:

  1. [HttpPost]
  2. public ActionResult index(decimal amount)
  3. {
  4. //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
  5. string order_no = DateTime.Now.ToString("yyyyMMddHHmmss") + TenpayUtil.BuildRandomStr(4);
  6. //这里是数据操作,代码已删除
  7.  
  8. ViewData["weixin_pay_qr_code"] = string.Format("/get_qrcode?product_id={0}", order_no);
  9. return View();
  10. }

输出二维码:

  1. public void get_qrcode(string product_id)
  2. {
  3. WxPayHelper helper = new WxPayHelper();
  4. Dictionary<string, string> dic = new Dictionary<string, string>();
  5. dic.Add("appid", config_util.mp_weixin_appid);
  6. dic.Add("mch_id", config_util.weixin_mch_id);
  7. dic.Add("nonce_str", TenpayUtil.getNoncestr());
  8. dic.Add("product_id", product_id);
  9. dic.Add("time_stamp", TenpayUtil.getTimestamp());
  10. dic.Add("sign", helper.GetSign(dic));
  11. string url = WxPayHelper.FormatBizQueryParaMap(dic, false);//这里不要url编码
  12.  
  13. string code = "weixin://wxpay/bizpayurl?" + url;
  14. var qrc = Create_ImgCode(code, 6);
  15. System.IO.MemoryStream ms = new System.IO.MemoryStream();
  16. qrc.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
  17. byte[] bytes = ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以,至于区别么,下面有解释
  18. ms.Close();
  19.  
  20. Response.BinaryWrite(bytes);
  21. return;
  22. }

原生拉取微信支付代码:

  1. public ContentResult index()
  2. {
  3.  
  4. if (Request.RequestType == "POST")
  5. {
  6. try
  7. {
  8. WxPayHelper helper = new WxPayHelper();
  9. StreamReader reader = new StreamReader(Request.InputStream);
  10. String xmlData = reader.ReadToEnd();
  11. helper.ReceivePostXmlData(xmlData);
  12. common_util.WriteLog("接收post来的xmlData=" + xmlData);
  13. if (helper.CheckSign())
  14. {
  15. common_util.WriteLog("签名验证通过");
  16. string product_id = helper.GetProductId();
  17. common_util.WriteLog("产品id=" + product_id);
  18. string order_no = product_id;if (产品ID存在)
  19. {
  20. #region 业务处理
  21. helper.SetParameter("body", "用户充值,用户号:" + item.user_id);
  22. helper.SetParameter("out_trade_no", order_no);
  23. helper.SetParameter("total_fee", (item.amount * 100).ToString("#"));//这里单位是分
  24. helper.SetParameter("notify_url", "http//www.openweixin.com.cn/notify");
  25. helper.SetParameter("trade_type", "NATIVE");
  26. string prepay_id = helper.GetPrepayId();
  27. common_util.WriteLog("prepay_id=" + prepay_id);
  28. if (!string.IsNullOrEmpty(prepay_id))
  29. {
  30. helper.SetReturnParameter("return_code", "SUCCESS");
  31. helper.SetReturnParameter("result_code", "SUCCESS");
  32. helper.SetReturnParameter("prepay_id", prepay_id);
  33. helper.SetReturnParameter("appid", helper.GetAppId);
  34. helper.SetReturnParameter("mch_id", helper.GetMch_Id);
  35. helper.SetReturnParameter("nonce_str", TenpayUtil.getNoncestr());
  36. }
  37. else
  38. {
  39. helper.SetReturnParameter("return_code", "SUCCESS");//返回状态码
  40. helper.SetReturnParameter("result_code", "FAIL");//业务结果
  41. helper.SetReturnParameter("err_code_des", "预订单生产失败");
  42. }
  43. #endregion
  44. }
  45. else
  46. {
  47. helper.SetReturnParameter("return_code", "SUCCESS");//返回状态码
  48. helper.SetReturnParameter("result_code", "FAIL");//业务结果
  49. helper.SetReturnParameter("err_code_des", "此商品无效");//业务结果
  50. }
  51. }
  52. else
  53. {
  54. helper.SetReturnParameter("return_code", "FAIL");
  55. helper.SetReturnParameter("return_msg", "签名失败");
  56. common_util.WriteLog("签名验证没有通过");
  57. }
  58. string xmlStr = helper.GetReturnXml();
  59. common_util.WriteLog("返回xml=" + xmlStr);
  60. Response.ContentType = "text/xml";
  61. Response.Clear();
  62. Response.Write(xmlStr);
  63. Response.End();
  64. }
  65. catch (Exception ex)
  66. {
  67. common_util.WriteLog("异常了" + ex);
  68. }
  69. }
  70. return Content("OK");
  71. }

支付成功通知页面:

  1. if (Request.RequestType == "POST")
  2. {
  3. try
  4. {
  5. WxPayHelper helper = new WxPayHelper();
  6. StreamReader reader = new StreamReader(Request.InputStream);
  7. String xmlData = reader.ReadToEnd();
  8. helper.ReceivePostXmlData(xmlData);
  9. common_util.WriteLog("Notify_接收post来的xmlData=" + xmlData);
  10. if (helper.CheckSign())
  11. {
  12. Dictionary<string, string> dicBack = helper.GetParameter();//获取所有参数
  13. if (dicBack != null && dicBack.Keys.Contains("return_code"))
  14. {
  15. if (dicBack["return_code"] == "SUCCESS")
  16. {
  17. common_util.WriteLog("return_code=SUCCESS");
  18. if (dicBack["result_code"] == "SUCCESS")
  19. {
  20. common_util.WriteLog("result_code=SUCCESS");
  21. string out_trade_no = dicBack["out_trade_no"];//商户订单号
  22. common_util.WriteLog("out_trade_no=" + out_trade_no);
  23.  
  24. //1.验证商户订单号是否被处理
  25. //2.处理过直接返回成功,否则返回
  26. //此处根据out_trade_no 处理业务数据
  27. //处理业务数据结束
  28.  
  29. common_util.WriteLog("Notify_验证签名成功");
  30. helper.SetReturnParameter("return_code", "SUCCESS");
  31. helper.SetReturnParameter("return_msg", "");
  32. }
  33. }
  34. if (dicBack["return_code"] == "FAIL")
  35. {
  36. common_util.WriteLog("Notify_验证签名成功");
  37. helper.SetReturnParameter("return_code", "SUCCESS");
  38. helper.SetReturnParameter("return_msg", dicBack["return_msg"]);
  39. }
  40. }
  41. }
  42. else
  43. {
  44. common_util.WriteLog("Notify_验证签名失败");
  45. helper.SetReturnParameter("return_code", "FAIL");
  46. helper.SetReturnParameter("return_msg", "签名失败");
  47. }
  48. string xmlStr = helper.GetReturnXml();
  49. common_util.WriteLog("Notify_返回xml=" + xmlStr);
  50. Response.ContentType = "text/xml";
  51. Response.Clear();
  52. Response.Write(xmlStr);
  53. Response.End();
  54. }
  55. catch (Exception ex)
  56. {
  57. common_util.WriteLog("Notify_异常了" + ex);
  58. }
  59. }
  60. return Content("OK");

以上代码全部经过实体网站测试成功运行。

微信扫码支付asp.net(C#)实现步骤的更多相关文章

  1. 微信扫码支付+Asp.Net MVC

    这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下.(demo在最下方) 一.准备工作 使用的微信API中的统一下单方法,关键的参数是‘公众账号I ...

  2. Net MVC微信扫码支付

    微信扫码支付+Asp.Net MVC 这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下. 一.准备工作 使用的微信API中的统一下单方法,关键的 ...

  3. ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...

  4. 【转载】ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    转自:http://www.cnblogs.com/essenroc/p/8630730.html 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步 ...

  5. asp.net core 微信扫码支付(扫码支付,H5支付,公众号支付,app支付)之1

    2018-08-13更新生成二维码的方法 在做微信支付前,首先要了解你需要什么方式的微信支付,目前本人做过的支付包含扫码支付.H5支付.公众号支付.App支付等,本人使用的是asp.net mvc c ...

  6. ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)

    原文 https://www.cnblogs.com/essenroc/p/8630730.html // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET C ...

  7. .NET微信扫码支付模式二API接口开发测试

    主要实现微信扫码支付,官网的SDKdemo 就不要使用 一直不能调试通过的,还是自己按照API接口文档一步一步来实现,吐槽下微信一点责任感都木有,能不能demo搞个正常的吗,不要坑惨了一大群码农们有点 ...

  8. MVC 微信扫码支付

    微信扫码支付有两种模式, 模式一和模式二, 两者具体的区别可参考官网文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4 微 ...

  9. C# 微信扫码支付 回调页面

    .NET版 微信扫码支付,官方推荐使用[模式二] 一.微信扫码支付模式一: 1.回调页面:官方demo中example文件下的NativeNotifyPage.aspx 2.微信回调地址:http:/ ...

随机推荐

  1. 二模07day2解题报告

    T1.采药(medic) 有n个草药,要在m的时间内获得最大价值. 乍一看像是01背包,然而数据只能过50分. 考虑数据范围,t<=10,w<=10,所以只有121种草药.考虑多重背包的二 ...

  2. Android fragment 想activity 传送数据

    fragment可以通过定义 fragment的接口的方法来 想activity传送数据: 而activity则是通过实现 fragment的接口来接收fragment的送来的数据: 1.在fragm ...

  3. 用C#访问SSRS自动导出SSRS报表

    一.              新建一个winform应用程序WindowsFormsApplication1 二.              添加web引用 . 报表服务:http://dbpdhk ...

  4. 见怪不怪的typedef

    typedef是C++中的一个十分重要的关键字,它有强大的功能和方法的用途.但是有时候,碰到一些用到typedef的地方却感到很奇怪了. 给个栗子尝尝: typedef void(*pFun)(voi ...

  5. slf4j+log4j配置

    下载三个包: 三个包分别是:log4j的API包,slf4j的API包,slf4j对log4j的适配包. 选择使用slf4j一个重要的原因是支持占位符{},不用频繁操作字符串对象. 实现代码如下: i ...

  6. 爱之初体验---编译加载内核模块hello

    1. hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h ...

  7. windows下如何修改远程登录端口

    windows下如何修改远程登录端口 windows远程桌面默认端口为3389,修改 方法如下:在"开始>运行"中输入"regedit" 点击“确定”,打 ...

  8. Cookie与Session的一些总结

    一.Cookie: Cookie主要存储一些不敏感的数据,只能存储字符串类型 执行过程: (1)第一次请求: 客户端将数据(比如用户名)以请求报文的形式请求服务器端响应, 服务器端得到数据(用户名), ...

  9. c#生成随机数示例分享

    c#生成(随机数 http://www.jbxue.com/tags/suijishu.html)的代码. /// 构造随机数 种子 ];             System.Security.Cr ...

  10. CodeBlocks背景主题的设置

    来自:http://blog.csdn.net/gzshun/article/details/8294305 找了好几个CodeBlocks的背景色,都不太如人意.感觉下面这个还不错,所以转来给大家分 ...