asp.net mvc实现微信外H5支付方法
一、微信支付方式介绍
微信提供了各种支付方式,试用于各种不同的支付场景,主要有如下几种:
1、刷卡支付
刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。
2、扫码支付
扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。
3、公众号支付
公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:
- ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
- ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
- ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付
4、APP支付
APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。
5、H5支付
H5支付用于在手机端微信外浏览器进行支付,笔者的测试本支付方式在微信内不能使用。
本文主要讲解asp.net mvc框架下H5支付如何实现
public ActionResult Index()
{
try
{
NativePay nativePay = new NativePay();
//总金额
int total_fee =;
Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);
packageReqHandler.SetParameter("appid", WxPayConfig.APPID);//APPID
packageReqHandler.SetParameter("mch_id", WxPayConfig.MCHID);//商户号
packageReqHandler.SetParameter("nonce_str", Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr());
packageReqHandler.SetParameter("body", "商品名称");
packageReqHandler.SetParameter("out_trade_no", WxPayApi.GenerateOutTradeNo());//订单号
packageReqHandler.SetParameter("total_fee", total_fee.ToString()); //金额,以分为单位
string IpAddress = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : Request.ServerVariables["REMOTE_ADDR"];
packageReqHandler.SetParameter("spbill_create_ip", IpAddress);//IP
packageReqHandler.SetParameter("notify_url", "http://www.******.com.cn/Pay/PayNotifyUrl"); //回调地址
packageReqHandler.SetParameter("trade_type", "MWEB");//这个不可以改。固定为Mweb
packageReqHandler.SetParameter("sign", packageReqHandler.CreateMd5Sign("key", WxPayConfig.KEY));
string data = packageReqHandler.ParseXML();
var urlFormat = "https://api.mch.weixin.qq.com/pay/unifiedorder";
var formDataBytes = data == null ? new byte[] : Encoding.UTF8.GetBytes(data);
MemoryStream ms = new MemoryStream();
ms.Write(formDataBytes, , formDataBytes.Length);
ms.Seek(, SeekOrigin.Begin);
var result = RequestUtility.HttpPost(urlFormat, null, ms);
var res = System.Xml.Linq.XDocument.Parse(result);
string mweb_url = res.Element("xml").Element("mweb_url").Value;
try
{
return Redirect(mweb_url);
}
catch (Exception e)
{
return Content("调取微信支付失败!");
}
}
catch (Exception e)
{
return Content("调取微信支付失败!" + e.Message);
}
}
[HttpPost]
public virtual ActionResult PayNotifyUrl()
{
Senparc.Weixin.MP.TenPayLibV3.ResponseHandler payNotifyRepHandler = new Senparc.Weixin.MP.TenPayLibV3.ResponseHandler(null);
payNotifyRepHandler.SetKey(WxPayConfig.KEY);
string return_code = payNotifyRepHandler.GetParameter("return_code");
string return_msg = payNotifyRepHandler.GetParameter("return_msg");
string xml = string.Format(@"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>", return_code, return_msg);
if (return_code.ToUpper() != "SUCCESS")
{
return Content(xml, "text/xml");
}
string out_trade_no = payNotifyRepHandler.GetParameter("out_trade_no");//订单编号
//微信服务器可能会多次推送到本接口,这里需要根据out_trade_no去查询订单是否处理,如果处理直接返回:return Content(xml, "text/xml"); 不跑下面代码
//验证请求是否从微信发过来(安全)
if (payNotifyRepHandler.IsTenpaySign())
{
//支付成功处理逻辑,更新支付状态 }
else
{
return Content("订单" + out_trade_no + "支付回调验证失败");
}
return Content(xml, "text/xml");
}
源码下载地址:http://www.kwstu.com/ResourcesView/weixin_201710301051436959
技术咨询QQ:806693619
asp.net mvc实现微信外H5支付方法的更多相关文章
- 微信开发】【Asp.net MVC】-- 微信分享功能
[微信开发][Asp.net MVC]-- 微信分享功能 2017-01-15 09:09 by stoneniqiu, 12886 阅读, 15 评论, 收藏, 编辑 内嵌在微信中的网页,右上角都会 ...
- 黄聪:详解申请微信h5支付方法,开通微信h5网页支付接口(转)
版权声明:图文并茂的微信小程序教程!欢迎转载,请保留作者名字和链接:商业合作请联系子恒老师助理 QQ : 2334512685 https://blog.csdn.net/towtotow/artic ...
- 详解申请微信h5支付方法,开通微信h5网页支付接口(转)
现在大街小巷的商家都在使用微信支付,但是一些商家使用的是个人微信收款,这个虽然很便利,但是如果你想要数据统计汇总,让客户在网络上在线付款,就需要用到微信的h5支付. 微信h5支付 今天子恒老师跟你分享 ...
- asp.net mvc中使用jquery H5省市县三级地区选择控件
地区选择是项目开发中常用的操作,本文讲的控件是在手机端使用的选择控件,不仅可以用于实现地区选择,只要是3个级别的选择都可以实现,比如专业选择.行业选择.职位选择等.效果如下图所示: 附:本实例asp. ...
- ASP.NET MVC 5 - 查询Details和Delete方法
在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...
- asp.net MVC webservice 报次错解决方法
asp.net MVC webservice 报次错解决方法: 解决方法: 在 RouteConfig.cs public static void RegisterRoutes(RouteCol ...
- [转]ASP.NET MVC 5 - 查询Details和Delete方法
在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...
- ASP.NET MVC 开发微信支付H5(外置浏览器支付)
H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付. 主要用于触屏版的手机浏览器请求微信支付的场景.可以方便的从外部浏览器 ...
- 微信商户H5支付申请不通过被驳回,拒绝原因提示:网站存在不实内容或不安全信息
一.H5支付简介及使用场景说明 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于触屏版的手机浏览器请求微信支付 ...
随机推荐
- Win7,Vista UAC下应用程序标注为“需要管理员权限”的四种方法(可以修改注册表)
[转]Vista UAC下应用程序标注为“需要管理员权限”的四种方法 在Microsoft 的UACBlog里对此有过叙述.总结如下: 首先,如果一个程序被识别为管理员程序时,Vista会在它的图标上 ...
- sqlplus登录信息,列出所有表,列在表结构,sqlplus行和列显示设置,别名,Null值问题,细木工,DISTINCT
1 sqlplus登录方式: 普通用户登录: 登录eg:C:\>sqlplusscott/11 (格式:sqlplus username/password) 退出eg:quit退出 超级 ...
- C#委托五(自定义事件)
事件: "在发生其他类或对象关注的事情时,类或对象可以通过事件通知他们.发送(或引发)事件的类称为"发行者",接受(或处理)事件的类称为"订户".&q ...
- POJ 1438 One-way Traffic
意甲冠军: 与 http://blog.csdn.net/houserabbit/article/details/38958891 类别似 仅仅不是将原本的无向图变为混合图 思路: 在上一篇我也写过 ...
- 嵌入式开发(*(volatile unsigned long *)) 认识
一个.说明 (*(volatile unsigned long *)) 这个语句对于不同的计算机体系结构,设备可能是port映射,也可能是内存映射的. 假设系统结构支持独立的IO地址空间.而且是por ...
- WPF Clip实现百叶窗
原文:WPF Clip实现百叶窗 效果图; 后台代码: public MainWindow() { InitializeComponent(); ...
- cocos2d-x 源代码分析 : Ref (CCObject) 源代码分析 cocos2d-x内存管理策略
从源代码版本号3.x.转载请注明 cocos2d-x 总的文件夹的源代码分析: http://blog.csdn.net/u011225840/article/details/31743129 1.R ...
- XF 列表视图事件
<?xml version="1.0" encoding="utf-8" ?><ContentPage xmlns="http:// ...
- WPF编游戏系列 之七 动画效果(2)
原文:WPF编游戏系列 之七 动画效果(2) 上一篇已经对关闭窗口图标进行了动画效果处理,本篇将对窗口界面的显示和关闭效果进行处理.由于所有的动画效果都是针对窗口界面的Canvas,所以 ...
- JS 输入框为空的使用
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...