微信扫码支付asp.net(C#)实现步骤
支付提交页面:
- [HttpPost]
- public ActionResult index(decimal amount)
- {
- //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
- string order_no = DateTime.Now.ToString("yyyyMMddHHmmss") + TenpayUtil.BuildRandomStr(4);
- //这里是数据操作,代码已删除
- ViewData["weixin_pay_qr_code"] = string.Format("/get_qrcode?product_id={0}", order_no);
- return View();
- }
输出二维码:
- public void get_qrcode(string product_id)
- {
- WxPayHelper helper = new WxPayHelper();
- Dictionary<string, string> dic = new Dictionary<string, string>();
- dic.Add("appid", config_util.mp_weixin_appid);
- dic.Add("mch_id", config_util.weixin_mch_id);
- dic.Add("nonce_str", TenpayUtil.getNoncestr());
- dic.Add("product_id", product_id);
- dic.Add("time_stamp", TenpayUtil.getTimestamp());
- dic.Add("sign", helper.GetSign(dic));
- string url = WxPayHelper.FormatBizQueryParaMap(dic, false);//这里不要url编码
- string code = "weixin://wxpay/bizpayurl?" + url;
- var qrc = Create_ImgCode(code, 6);
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- qrc.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
- byte[] bytes = ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以,至于区别么,下面有解释
- ms.Close();
- Response.BinaryWrite(bytes);
- return;
- }
原生拉取微信支付代码:
- public ContentResult index()
- {
- if (Request.RequestType == "POST")
- {
- try
- {
- WxPayHelper helper = new WxPayHelper();
- StreamReader reader = new StreamReader(Request.InputStream);
- String xmlData = reader.ReadToEnd();
- helper.ReceivePostXmlData(xmlData);
- common_util.WriteLog("接收post来的xmlData=" + xmlData);
- if (helper.CheckSign())
- {
- common_util.WriteLog("签名验证通过");
- string product_id = helper.GetProductId();
- common_util.WriteLog("产品id=" + product_id);
- string order_no = product_id;if (产品ID存在)
- {
- #region 业务处理
- helper.SetParameter("body", "用户充值,用户号:" + item.user_id);
- helper.SetParameter("out_trade_no", order_no);
- helper.SetParameter("total_fee", (item.amount * 100).ToString("#"));//这里单位是分
- helper.SetParameter("notify_url", "http//www.openweixin.com.cn/notify");
- helper.SetParameter("trade_type", "NATIVE");
- string prepay_id = helper.GetPrepayId();
- common_util.WriteLog("prepay_id=" + prepay_id);
- if (!string.IsNullOrEmpty(prepay_id))
- {
- helper.SetReturnParameter("return_code", "SUCCESS");
- helper.SetReturnParameter("result_code", "SUCCESS");
- helper.SetReturnParameter("prepay_id", prepay_id);
- helper.SetReturnParameter("appid", helper.GetAppId);
- helper.SetReturnParameter("mch_id", helper.GetMch_Id);
- helper.SetReturnParameter("nonce_str", TenpayUtil.getNoncestr());
- }
- else
- {
- helper.SetReturnParameter("return_code", "SUCCESS");//返回状态码
- helper.SetReturnParameter("result_code", "FAIL");//业务结果
- helper.SetReturnParameter("err_code_des", "预订单生产失败");
- }
- #endregion
- }
- else
- {
- helper.SetReturnParameter("return_code", "SUCCESS");//返回状态码
- helper.SetReturnParameter("result_code", "FAIL");//业务结果
- helper.SetReturnParameter("err_code_des", "此商品无效");//业务结果
- }
- }
- else
- {
- helper.SetReturnParameter("return_code", "FAIL");
- helper.SetReturnParameter("return_msg", "签名失败");
- common_util.WriteLog("签名验证没有通过");
- }
- string xmlStr = helper.GetReturnXml();
- common_util.WriteLog("返回xml=" + xmlStr);
- Response.ContentType = "text/xml";
- Response.Clear();
- Response.Write(xmlStr);
- Response.End();
- }
- catch (Exception ex)
- {
- common_util.WriteLog("异常了" + ex);
- }
- }
- return Content("OK");
- }
支付成功通知页面:
- if (Request.RequestType == "POST")
- {
- try
- {
- WxPayHelper helper = new WxPayHelper();
- StreamReader reader = new StreamReader(Request.InputStream);
- String xmlData = reader.ReadToEnd();
- helper.ReceivePostXmlData(xmlData);
- common_util.WriteLog("Notify_接收post来的xmlData=" + xmlData);
- if (helper.CheckSign())
- {
- Dictionary<string, string> dicBack = helper.GetParameter();//获取所有参数
- if (dicBack != null && dicBack.Keys.Contains("return_code"))
- {
- if (dicBack["return_code"] == "SUCCESS")
- {
- common_util.WriteLog("return_code=SUCCESS");
- if (dicBack["result_code"] == "SUCCESS")
- {
- common_util.WriteLog("result_code=SUCCESS");
- string out_trade_no = dicBack["out_trade_no"];//商户订单号
- common_util.WriteLog("out_trade_no=" + out_trade_no);
- //1.验证商户订单号是否被处理
- //2.处理过直接返回成功,否则返回
- //此处根据out_trade_no 处理业务数据
- //处理业务数据结束
- common_util.WriteLog("Notify_验证签名成功");
- helper.SetReturnParameter("return_code", "SUCCESS");
- helper.SetReturnParameter("return_msg", "");
- }
- }
- if (dicBack["return_code"] == "FAIL")
- {
- common_util.WriteLog("Notify_验证签名成功");
- helper.SetReturnParameter("return_code", "SUCCESS");
- helper.SetReturnParameter("return_msg", dicBack["return_msg"]);
- }
- }
- }
- else
- {
- common_util.WriteLog("Notify_验证签名失败");
- helper.SetReturnParameter("return_code", "FAIL");
- helper.SetReturnParameter("return_msg", "签名失败");
- }
- string xmlStr = helper.GetReturnXml();
- common_util.WriteLog("Notify_返回xml=" + xmlStr);
- Response.ContentType = "text/xml";
- Response.Clear();
- Response.Write(xmlStr);
- Response.End();
- }
- catch (Exception ex)
- {
- common_util.WriteLog("Notify_异常了" + ex);
- }
- }
- return Content("OK");
以上代码全部经过实体网站测试成功运行。
微信扫码支付asp.net(C#)实现步骤的更多相关文章
- 微信扫码支付+Asp.Net MVC
这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下.(demo在最下方) 一.准备工作 使用的微信API中的统一下单方法,关键的参数是‘公众账号I ...
- Net MVC微信扫码支付
微信扫码支付+Asp.Net MVC 这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下. 一.准备工作 使用的微信API中的统一下单方法,关键的 ...
- ASP.NET Core Web 支付功能接入 微信-扫码支付篇
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...
- 【转载】ASP.NET Core Web 支付功能接入 微信-扫码支付篇
转自:http://www.cnblogs.com/essenroc/p/8630730.html 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步 ...
- asp.net core 微信扫码支付(扫码支付,H5支付,公众号支付,app支付)之1
2018-08-13更新生成二维码的方法 在做微信支付前,首先要了解你需要什么方式的微信支付,目前本人做过的支付包含扫码支付.H5支付.公众号支付.App支付等,本人使用的是asp.net mvc c ...
- ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)
原文 https://www.cnblogs.com/essenroc/p/8630730.html // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET C ...
- .NET微信扫码支付模式二API接口开发测试
主要实现微信扫码支付,官网的SDKdemo 就不要使用 一直不能调试通过的,还是自己按照API接口文档一步一步来实现,吐槽下微信一点责任感都木有,能不能demo搞个正常的吗,不要坑惨了一大群码农们有点 ...
- MVC 微信扫码支付
微信扫码支付有两种模式, 模式一和模式二, 两者具体的区别可参考官网文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4 微 ...
- C# 微信扫码支付 回调页面
.NET版 微信扫码支付,官方推荐使用[模式二] 一.微信扫码支付模式一: 1.回调页面:官方demo中example文件下的NativeNotifyPage.aspx 2.微信回调地址:http:/ ...
随机推荐
- java servlet上传文件并把文件内容显示在网页中
servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...
- 在jQuery和JavaScript中,实现转跳
隐藏转跳,浏览器不产生历史记录(replace).代码片段: window.location.replace("http://insus.cnblogs.com"); 当然我们还不 ...
- leetcode 83
83. Remove Duplicates from Sorted List Given a sorted linked list, delete all duplicates such that e ...
- javascript之toString()和valueOf()函数
1.我们为什么要了解这两种方法 众所周知,toString()函数和valueOf函数,这两个函数是Object类的对象生来就拥有的,而且他们还可以允许我们重写,那么,这两个函数到底有什么用呢? 从名 ...
- AnyCAD C++ SDK与OpenCASCADE互操作
AnyCAD SDK有.Net和C++两个版本,使用C++版本的AnyPlatformOcc模块可以实现与OpenCASCADE互操作. C++版本(VS2010 32bit)下载 在AOBridge ...
- Becoming a Hacker...
This is my dream... http://catb.org/~esr/faqs/hacker-howto.html 黑客的精神 世上仍有大量迷人的事情等待解决 同样的问题不应被重复处理两次 ...
- 逻辑运算符||和| 、&&和&的区别
||和| .&&和&的区别 这里以&&和&为例.或与之一直 1.&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符 ...
- div模拟下拉框
1.模拟下拉框.点击文本框在文本框下面显示一个层divList,点击divList以外的任何地方,关闭divList层 document.body.onclick = function (e) { e ...
- Elasticsearch的PHP的API使用(一)
前提:在服务器上安装Elasticsearch (host:192.168.1.10) http://192.168.1.10:9200?_search?pretty 1:安装PHP的Elast ...
- 插入排序与shell排序(希尔排序)
1 .插入排序的过程如同我们平时打扑克牌取牌插入的过程,不断将取出的扑克牌插入已经排好的地方. 插入排序过程初始有序区间大小为1,取出无序区间的首元素,查找有序区间的合适位置,进行插入.不断重复上述过 ...