asp.net mvc下实现微信公众号(JsApi)支付介绍
本文主要讲解asp.net mvc框架下公众号支付如何实现,公众号支付主要包括三个核心代码,前台调起支付js代码、对应js调用参数参数生成代码、支付成功处理代码。
微信提供了各种支付方式,试用于各种不同的支付场景,主要有如下几种:
1、刷卡支付
刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。
2、扫码支付
扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。
3、公众号支付
公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:
- ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
- ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
- ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付
4、APP支付
APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。
5、H5支付
H5支付用于在手机端微信外浏览器进行支付,笔者的测试本支付方式在微信内不能使用。
具体相关代码如下:
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 () {
$("#buyBtn").click(function () {
//调起微信公众号JsApi支付
$.ajax({
url: "/Pay/GenerateOrder",
type: 'post',
cache: false,
dataType: 'html',
data: {
OBJECTID: $("#OBJECTID").val()
},
success: function (data) {
if (data != "Error") {
_wxJsApiParam = eval('(' + data + ')');
callpay();
}
else $.messager.alert('提示信息', '生成订单失败!', 'info');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus); return;
}
});
});
});
/// <summary>
/// 生成订单及JSAPI提交参数
/// </summary>
/// <param name="tmpModel"></param>
/// <returns></returns>
[HttpPost]
public ActionResult GenerateOrder()
{
try
{
//调用支付
JsApiPay jsApiPay = new JsApiPay();
jsApiPay.bodyStr = "商品名称";
jsApiPay.attachStr = "附加信息";
jsApiPay.orderId = "订单编号";
jsApiPay.openid = "OpenId";
jsApiPay.total_fee = ;//测试 订单金额(1表示分,正式金额要*100)
//JSAPI支付预处理
//调用统一下单,获得下单结果
WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult();
//从统一下单成功返回的数据中获取微信浏览器调起jsapi支付所需的参数
var wxJsApiParam = jsApiPay.GetJsApiParameters(); //获取到的是json格式字符串
return Content(wxJsApiParam);
}
catch (Exception e)
{
return Content("Error");
}
}
/// <summary>
/// 支付成功后台处理方法
/// </summary>
/// <returns></returns>
[HttpPost]
public virtual ActionResult JsApiNotifyUrl()
{
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("支付结果中微信订单号不存在");
}
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
{
WxPayData res = new WxPayData();
res.SetValue("return_code", "SUCCESS");
res.SetValue("return_msg", "OK");
Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
//更新支付状态 return Content("支付成功" + res.ToXml());
}
}
五、源码下载地址:http://www.kwstu.com/ResourcesView/weixin_201710301110519827
联系QQ:806693619
asp.net mvc下实现微信公众号(JsApi)支付介绍的更多相关文章
- 微信公众号JSAPI支付
微信公众号JSAPI支付 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心-&g ...
- 微信公众号JSAPI支付-多公众号向同一商户号支付的问题解决
一.背景 项目提供公众号商城集成,在公众号里进行商品的购买,并与多家公众号合作增加渠道流量. . 二.实现 有关微信公众号.商户号的开通与支付绑定不细说 从背景里可知,我们需要实现多个公众号购买向同一 ...
- java微信公众号JSAPI支付以及所遇到的坑
上周做了个支付宝微信扫码支付,今天总结一下.微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊. 笔记地址 http://note.youdao.com/notesha ...
- PHP应用如何对接微信公众号JSAPI支付
微信支付的产品有很多,1. JSAPI支付 2. APP支付 3. Native支付 4.付款码支付 5. H5支付. 其中基于微信公众号开发的应用选择“JSAPI支付“产品,其他APP支付需 ...
- 网站如何接入微信公众号JSAPI支付PHP版
1.首先,我们要有一个微信公众号(分类类型有订阅号,服务号,企业号)我们的微信公众号一定是个服务号只有它才有微信支付接口.. 并且这个微信公众号一定要进行微信认证才能申请微信支付接口. 2.申请JSA ...
- 在Thinkphp中微信公众号JsApi支付
由于网站使用的微信Native扫码支付,现在公众号需要接入功能,怎么办呢,看这官方文档,参考着demo进行写吧.直接进入正题 进入公众号(服务号)设置--->功能设置--->网页授权域名配 ...
- 【weixi】微信支付---微信公众号JSAPI支付
一.JSAPI支付 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打 ...
- PHP微信公众号JSAPI网页支付(下)
上一篇PHP微信公众号JSAPI网页支付(上)中讲到了公众号平台的相关设置以及支付的大致流程. 这一篇重点讲支付后,异步接受回调通知,以及处理后同步通知微信服务器. 首先梳理下整个jsapi支付的流程 ...
- PHP微信公众号JSAPI网页支付(上)
一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...
随机推荐
- Android studio怎么创建Android虚拟机?
进行Android studio中进行开发app应用的情况,如果在进行调式app的应用的情况下,没有真机手机机器是没有办法调式的,那么只能通过Android studio中sdk提供虚拟机进行调式ap ...
- 聊聊QPS/TPS/并发量/系统吞吐量的概念
原文:聊聊QPS/TPS/并发量/系统吞吐量的概念 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/cainiao_user/article/deta ...
- Qt5信号与槽C++11风格连接简介
最近在论坛上看到了这个方面的问题,详见这里. 随后浅浅地学习了一下子,看到了Qt官方论坛上给出的说明,觉得C++11的functional连接方法还是比Qt4既有的宏连接方法有很大不同. 官方论坛的文 ...
- WSL探索及WSLAPI调用记录
以前都是在虚拟机上安装linux,居然刚知道win10有WSL(Windows Subsystem for Linux)可以直接在win10上安装linux,消耗低,效率高,很赞,趁着干兴趣把WSL探 ...
- 一个2013届毕业生(踏上IT行业)的迷茫(1)
从毕业到现在已经快半年了,已经想写这篇文字很久了,但是一次又一次的被没有时间给搁置了,今天突然好想写一篇自己这么多年的总结,算是一种反思,也可以看作为未来的人生指路吧. 我和很多搞IT的同行们一样,不 ...
- delphi 颜色,字体保存到INI文件
颜色转换成整型保存{也可以用ColorToString / stringTOColor}字体用下面的函数转换成字符串,然后保存 unit xFonts; interface uses Classes ...
- automapper如何全局配置map条件过滤null值空值对所有映射起效
原文 automapper如何全局配置map条件过滤null值空值对所有映射起效 我们在使用automapper的时候经常会遇到这样的问题:假设展示给用户的数据我们用UserDto类,User类就是我 ...
- DDD实战5 实现上下文服务
通过服务来协调领域对象,来添加产品用例. 1.要实现产品上下文的服务,首先新建一个项目,在Product解决方案文件夹下面新建一个项目,项目的名称为:Product.AppSrv. 2.这个项目首先引 ...
- VS中发布并调试IIS程序(非附加进程!!!)
筒子们,你们不觉得发布到IIS再附加进程太烦了么???看了看网上全是这种方法,这不科学!VS已经提供了更好的方式了,少年们! 流程 1.打开你的IIS,创建一个站点示例中,我创建了一个端口号为5002 ...
- AngularJS 页面计算
<div ng-app="multipliedCaculateApp" ng-controller="multipliedCaculateController as ...