.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%中小公司的支付系统都离不开微信支付和支付宝支付.那么大家要思考了,为什么微信支付和支 ...
随机推荐
- 【基于rssi室内定位报告】rssi分布情况标识位置
import matplotlib matplotlib.use('Agg') import numpy as np from numpy import array from matplotlib i ...
- 我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法
本文参考: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html http://www.blogjava.net/ ...
- Linux c编程:I/O多路复用之epoll
前面介绍了select处理,这一章继续介绍另外一种I/O多路服用的机制:epoll.来比较下两种机制的不同点. select: 调用过程如下: (1)使用copy_from_user从用户空间拷贝fd ...
- The path "fos_user.from_email.address" cannot contain an empty value, but got null.
The path "fos_user.from_email.address" cannot contain an empty value, but got null.. 修改 pa ...
- 去掉标题栏/ActionBar后点击menu键时应用崩溃
MainActivity 继承了 ActionBarActivity后,想要去掉标题栏(ActionBar),在程序中加上requestWindowFeature(Window.FEATURE_NO_ ...
- linux 如何查找命令的路径
linux 下,我们常使用 cd ,grep,vi 等命令,有时候我们要查到这些命令所在的位置,如何做呢? linux下有2个命令可完成该功能:which ,whereis which 用来查看当 前 ...
- hd acm1005
问题: 已知递推公式:f[i] = ( a * f[i-1] + b * f[i-2] ) % 7,f[1]=1,f[2]=1. 需要你输入三个数a,b,n.其中a,b用来补充上述公式,用补充后的公式 ...
- 算法(Algorithms)第4版 练习 1.3.4
主要思路: 遇到左括号则一直压栈,遇到右括号时则从栈中弹出一个元素. 如果此时栈为空,则返回false. 如果这个元素与右括号不匹配,则返回false. 重复此过程,最后判断栈是否为空,若为空则返回t ...
- Linux离线同步时间
Linux离线同步时间 思路:以其中一台时间为准 脚本 #!/bin/shcurrent=`date '+%H:%M:%S'` for i in bigdata1 bigdata2 bigdata3 ...
- Zookeeper简单配置
1.配置zookeeper 解压tar包后,在conf目录下,有一个zoo_sample.cfg,拷贝一份并命名为zoo.cfg cp zoo_sample.cfg zoo.cfg 编辑修改数据路径, ...