.NET接入微信支付(一)JS API接入 V3
前段时间刚接完银联支付,完事后又接了微信支付,前段时间一直急着上线,微信的接入一直没有时间处理,今天我们就来整理一下微信支付的接入方法和要点。
配置:
首先呢微信支付需要通过审核,审核啥的准备工作我就不说了。
这里有个微信配置
这里的授权目录影响着后面的支付能不能成功进行,
本文讲的主要是JS API。
支付流程:
首先用调用微信统一支付接口,接口成功后返回一个预支付的回话标识(prepay_id),这个标识的有效期是2个小时。然后使用这个预支付标识,调用微信内置浏览器的WeixinJSBridge
对象,完成支付。
代码部分:
1.请求预支付标识部分
Dictionary<string, string> param = new Dictionary<string, string>();
//appid
param.Add("appid", appid);
//商户号
param.Add("mch_id", mch_id);
//支付类型
param.Add("trade_type", "JSAPI");
//随机字符串
param.Add("nonce_str", WeiXinPayUtil.GetNoncestr());
//商品描述
param.Add("body", request.Body);
//商品详情
param.Add("detail", request.Detail);
//回调地址
param.Add("notify_url","");
//商户订单号
param.Add("out_trade_no", "");
//支付金额
param.Add("total_fee", (payfee * 100).ToString("#"));
//终端IP
param.Add("spbill_create_ip", "");
//Openid
param.Add("openid", "");
//签名
param.Add("sign", WeiXinMD5Util.Sign(WeixinTradeConfig.FormatBizQueryParaMapForUnifiedPay(dict),
WeixinTradeConfig.key));
string postData = WeixinTradeXmlDocument.DictionaryToXmlString(dict);
//获取统一支付接口的数据
var result = WeiXinRequestPlus.PostXmlResponse<GetTradeWeiXinPayResult>(WeixinTradeConfig.
WeiXin_Pay_UnifiedPrePayUrl,postData);
//准备返回的数据
Dictionary<string, string> requestdict = new Dictionary<string, string>();
requestdict.Add("appId", “appid”);
requestdict.Add("package", string.Format("prepay_id={0}", result.Prepay_Id));
//时间戳
requestdict.Add("timeStamp", WeiXinPayUtil.GetTimestamp());
//随机值
requestdict.Add("nonceStr", WeiXinPayUtil.GetNoncestr());
requestdict.Add("signType", "MD5");
TradeWeiXinPayModule weixmodule = new TradeWeiXinPayModule()
{
PayMethod = TradePayMethods.WeixinPay,
Prepayid = result.Prepay_Id,
Appid = WeixinTradeConfig.appid,
NonceStr = requestdict["nonceStr"],
TimeStamp = requestdict["timeStamp"],
SerialID = request.SerialIDString,
PaySign = WeiXinMD5Util.Sign(WeixinTradeConfig.FormatBizQueryParaMapForUnifiedPay(requestdict),
WeixinTradeConfig.key)
};
2.关于上面请求预支付用到的一些公用方法,我也不一一列出来了,文件已打包,weixinpayTool.zip
3.收集步骤一返回的参数,生成一段JS,并在微信中打开,
<script>
function onBridgeReady() {
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": "@Model.Appid", //公众号名称,由商户传入
"timeStamp": "@Model.Timestamp", //时间戳
"nonceStr": "@Model.Noncestr", //随机串
"package": "@Model.Prepayid", //扩展包
"signType": "MD5", //微信签名算法:MD5
"paySign": "@Model.Paysign" //微信签名
},
function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
window.location.href = "";
} else {
if(confrim("您并未支付成功,是否继续付款?"){
window.location.reload();
}else{
//用户不想付款了 跳走
}
}
}
);
}
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady',
onBridgeReady, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady',
onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady',
onBridgeReady);
}
} else {
onBridgeReady();
} </script>
有一点别忘了修改了这段js所在的html必须在微信的授权目录中打开。
如果你在开发中发现本文有什么BUG,敬请留言告诉我~
原文地址:http://www.lorna.com.cn/Articles/Index/b2a594a1-6dff-4fe2-ae2f-0671a915a5d5
.NET接入微信支付(一)JS API接入 V3的更多相关文章
- 在Web应用中接入微信支付的流程之极简清晰版
在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...
- 在Web应用中接入微信支付的流程之极简清晰版 (转)
在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...
- Unity接入微信支付SDK 2022年版安卓篇
最近1年转了UE开发,博客更新的比较少,技术栈宽了不少,以后有空尽量多更新,也方便总结记忆 Unity接入微信支付整个过程坑比较多,网上之前的教程要么比较老,要么比较零碎,只能东拼西凑摸索,跑通后还是 ...
- 微信公众平台Js API(WeixinApi)
微信公众平台Js API(WeixinApi): https://github.com/zxlie/WeixinApi#user-content-3%E9%9A%90%E8%97%8F%E5%BA%9 ...
- 为产品接入微信支付解决方案(公司&个人)
微信支付个人及公司的区别 H5支付:主要实现的效果是在非微信内网页中点击支付,拉起微信APP内的微信支付进行付款. APP支付:主要实现的效果是在APP内部点击支付,拉起微信APP内的微信支付进行付款 ...
- 微信支付相关js
import $ from "jquery" /*支付功能开始*/let ip="";let nonceStr;let appId;let mchId;let ...
- 微信支付回调 敏感信息解密 v3 php
今天博主用了一波微信的v3版本的支付,支付成功后发现回调跟v2的完全不一样,于是去看了了一波v3的文档,发现信息是经过加密的,需要解密才能获取的到 但是最悲催的是文档上没写怎么解密的,经过了一下午的百 ...
- iOS - WXPay 微信支付
1.微信支付申请 微信支付官方集成指引 微信支付官方集成指导视频 微信 APP 支付开发者文档 微信公众平台 微信开放平台 微信商户平台 1.1 微信 APP 支付申请步骤 APP 支付:APP 支付 ...
- 微信支付之扫码、APP、小程序支付接入详解
做电商平台的小伙伴都知道,支付服务是必不可少的一部分,今天我们开始就说说支付服务的接入及实现.目前在国内,几乎90%中小公司的支付系统都离不开微信支付和支付宝支付.那么大家要思考了,为什么微信支付和支 ...
随机推荐
- Symfony 上传图片教程
介绍:我使用的Bundle:"vich/uploader-bundle": "^1.4"; "liip/imagine-bundle": & ...
- 中国移动OnetNet云平台 使用以太网传输数据流步骤
使用工具: 网络调试助手 链接:http://pan.baidu.com/s/1c06VC9E 密码:h0ys 1.选择TCP Client 2.输入IP 183.230.40.33 3.输入端口 ...
- Jmeter使用文档(windows)
1. 安装jdk并配置环境变量 以1.8为例: (1)安装jdk1.8; (2)在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径“C:\Program Files\Jav ...
- hbase shell-dml(数据管理指令)
hbase shell数据管理篇: append count delete deleteall get get_counter get_splits incr put scan truncate tr ...
- POJ 2536 之 Gopher II(二分图最大匹配)
Gopher II Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6675 Accepted: 2732 Descrip ...
- 利用etcd及confd实现配置自动管理
ETCD etcd 架设etcd集群 静态启动etcd集群需要每个成员在集群中知道另一个成员.在许多情况下,集群成员的IP可能提前未知.在这种情况下,可以使用etcd集群的自动发现服务.一旦etcd集 ...
- Entity Framework中的Identity map和Unit of Work模式(转)
一,什么是Identity map模式 Identity map是EF获取和缓存数据的模式.Identity map模式指的是任何数据都只会被加载一次,以map的形式缓存,以唯一的identity来再 ...
- web应用组成结构,web.xml的作用
- bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 优先队列+dij
1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1768 Solv ...
- Struts2的使用
Struts2的核心类库 名称 说明 Struts2-core-2.3.4.jar 核心类库 Xwork-core-2.3.4.jar Xwork的核心类库 Ognl-3.0.5.jar Ognl表达 ...