asp.net mvc内微信pc端、H5、JsApi支付方式总结
本文提供技术支持QQ:806693619 V:kwstugdb
微信提供了各种支付方式,有针对手机APP开发的支付方式,有针对pc web端的,手机端的等,pc端支付使用场景是在pc端完整内使用的支付方式,JsApi只能在微信内被调用,H5不限于微信内使用,手机端浏览器内也可以使用,个人理解的不知道对不对,本文主要介绍pc端、H5、JsApi支付方式,废话不多说直接上代码,代码只提供JsApi部分,pc端web及H5端的代码直接下载附件,附件内包括全部代码及相关类库。
微信JsApi支付之前必须通过后台获取支付调起参数,参数获得后通过js方法调起支付才行。
一、前端支付Js代码
<script>
var _wxJsApiParam;
function callpay() {
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}
else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}
else {
jsApiCall();
}
}
//调用微信JS api 支付
function jsApiCall() {
WeixinJSBridge.invoke('getBrandWCPayRequest', _wxJsApiParam,
function (res) {
if (res.err_msg == "get_brand_wcpay_request:cancel") {
$.messager.alert('提示信息', '支付已经取消!', 'info');
return false;
} else if (res.err_msg == "get_brand_wcpay_request:ok") {
//支付成功
$.messager.alert('提示信息', '支付成功!', 'info');
}
});
}
//获取微信支付参数
function rePay(obj) {
//调起微信公众号JsApi支付
$.ajax({
url: "/Pay/RePayJsApi",
type: 'post',
cache: false,
dataType: 'html',
data: {
OrderId: obj
},
success: function (data) {
if (data != "Error") {
_wxJsApiParam = eval('(' + data + ')');
callpay();
}
else $.messager.alert('提示信息', '生成订单失败!', 'info');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus); return;
}
});
}
</script>
二、后台代码
/// <summary>
/// 重新发起支付
/// </summary>
/// <param name="tmpModel"></param>
/// <returns></returns>
[HttpPost]
public ActionResult RePayJsApi()
{
try
{
string orderId = ClassesLib.GetString("OrderId");
string newOrderId = ClassesLib.GetIdByTime();
var model = db.MEMBER_ORDER.Find(orderId);
model.ORDERID = newOrderId;
db.SaveChanges();
//登录判断
if (ClassesLib.WxSessionIsNull())
{
return Content("<script>alert('登录超时,请重新登录!');window.location.href='/WeiXin/Login?returnUrl=/WeiXin/ViewProduct?objId=" + model.OBJECTID + "&salesmanId=" + model.SALEID + "'</script>");
}
//调用支付
JsApiPay jsApiPay = new JsApiPay();
jsApiPay.bodyStr = model.OBJECTNAME + "-" + ClassesLib.getWxLoginName();
jsApiPay.attachStr = model.OBJECTNAME + "-" + ClassesLib.getWxLoginName();
jsApiPay.orderId = newOrderId;
jsApiPay.openid = model.OPENID;
jsApiPay.total_fee = Convert.ToInt32(model.MONEY * 100);//测试 订单金额(1表示分,正式金额要*100)
//JSAPI支付预处理
//调用统一下单,获得下单结果
WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult();
//从统一下单成功返回的数据中获取微信浏览器调起jsapi支付所需的参数
var wxJsApiParam = jsApiPay.GetJsApiParameters(); //获取到的是json格式字符串
return Content(wxJsApiParam);
}
catch (Exception e)
{
return Content("Error");
}
}
[HttpPost]
public virtual ActionResult JsApiNotifyUrl()
{
ClassesLib.InsertLog("支付测试1", "支付");
WxPayData notifyData = GetNotifyData();
//检查支付结果中transaction_id是否存在
if (!notifyData.IsSet("transaction_id"))
{
//若transaction_id不存在,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", "支付结果中微信订单号不存在");
Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
return Content("支付结果中微信订单号不存在");
}
ClassesLib.InsertLog("支付测试2", "支付");
string transaction_id = notifyData.GetValue("transaction_id").ToString();
string trade_no = notifyData.GetValue("out_trade_no").ToString();
//查询订单,判断订单真实性
if (!QueryOrder(transaction_id))
{
//若订单查询失败,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", "订单查询失败");
Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml());
return Content("订单查询失败");
}
//查询订单成功
else
{
ClassesLib.InsertLog("支付测试3", "支付");
WxPayData res = new WxPayData();
res.SetValue("return_code", "SUCCESS");
res.SetValue("return_msg", "OK");
Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
//更新支付状态
var model = db.MEMBER_ORDER.Where(c => c.ORDERID == trade_no).FirstOrDefault();
if (model != null && model.PAYSTATE == "未支付")
{
model.PAYSTATE = "已支付";
model.PAYDATE = DateTime.Now;
//发送支付成功提示,通过微信消息通知收银员已经收到付款
SendTemplateMessage.SendMessage("oPCLNv5B1T8kYM5AYgXWHOiD24_s", "您好,用户" + model.MEMBERNAME + "已购买服务", model.OBJECTNAME, (Convert.ToDouble(model.MONEY) * 0.01).ToString() + "元", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
db.SaveChanges();
}
return Content("支付成功" + res.ToXml());
}
}
本文附件(20191212220830asp.net mvc微信PC WEB、H5、JsApi各种支付源码.rar)价格:¥10元
立刻购买资源
注:支付完成后请等待支付页面返回下载页面或者刷新此页面进行下载。
猜您可能还喜欢
- asp.net mvc内微信pc端、H5、JsApi支付方式总结(5875)
- HTML5 WebSocket与C#建立Socket连接实现代码(3179)
- asp.net mvc开发移动端省、市、县三级地区选择控件实现方法(1786)
- C# 使用Socket链接Ftp服务器下载上传代码FTPClient(1717)
- C# 两个类的实例之间相同属性的值的复制(1574)
- 关于“System.Data.OleDb.OleDbException,外部数据库驱动程序 (1) 中的意外错误。”的解决方案(1572)
- VS 2017调试程序鼠标定位文本输入框浏览器闪退调试终止解决方法(1563)
- C#微信公众号推送消息接口消息排重(1246)
- html5 webScoket与C#建立Socket连接(1142)
- 什么是.NET Core ?它和.NET Framework 有什么不同?(1121)
评论列表
发表评论
文章分类
文章归档
- 2025年3月 (1)
- 2024年6月 (2)
- 2024年5月 (2)
- 2024年4月 (4)
- 2024年3月 (30)
- 2024年1月 (4)
- 2023年12月 (2)
- 2023年11月 (4)
- 2023年10月 (4)
- 2023年9月 (6)
- 2023年3月 (2)
- 2023年2月 (1)
- 2023年1月 (1)
- 2022年12月 (1)
- 2022年9月 (21)
- 2022年8月 (10)
- 2022年7月 (3)
- 2022年4月 (1)
- 2022年3月 (13)
- 2021年8月 (1)
- 2021年3月 (1)
- 2020年12月 (42)
- 2020年11月 (7)
- 2020年10月 (5)
- 2020年8月 (1)
- 2020年6月 (1)
- 2020年3月 (2)
- 2019年12月 (8)
- 2019年11月 (3)
- 2019年9月 (1)
- 2019年4月 (1)
- 2019年3月 (6)
- 2019年2月 (1)
- 2018年7月 (7)
阅读排行
- 1.asp.net mvc内微信pc端、H5、JsApi支付方式总结(5875)
- 2.Windows 10休眠文件更改存储位置(3821)
- 3.各大搜索网站网站收录提交入口地址(3477)
- 4.ECharts仪表盘实例及参数使用详解(3431)
- 5.windows 10安装myeclipse 10破解补丁cracker.jar、run.bat闪退解决办法(3422)
- 6.HTML5 WebSocket与C#建立Socket连接实现代码(3179)
- 7.华为鸿蒙系统清除微信浏览器缓存方法(3167)
- 8.CERT_HAS_EXPIRED错误如何解决(2960)
- 9.Js异步async、await关键字详细介绍(lambda表达式中使用async和await关键字)(2596)
- 10.HBuilder编辑器格式化代码(2393)
