.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%中小公司的支付系统都离不开微信支付和支付宝支付.那么大家要思考了,为什么微信支付和支 ...
随机推荐
- [转】IIS:Do not nest virtual directories
原文:https://msdn.microsoft.com/en-us/library/ms178685.aspx#Anchor_6 Configuration settings for virtua ...
- Nodejs课堂笔记-第二课 package.json的作用
本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 上节课,我们打造了一下IDE工具-web storm的显示界面.至少现在回到 ...
- ABAP 发邮件(三)
[转自http://blog.sina.com.cn/s/blog_7c7b16000101bnxk.html]SAP ABAP 发邮件方法三(OO) *&------------------ ...
- 分析DNS解析时间
提高网页的打开速度,一般地我们会选择使用CDN,利用“就近原则”让用户在最短的时间内获取到服务器资源,实际应用当中采用CDN的方式提高网站访问速度的效果也是最明显的.这也就是为什么国外的空间打开速度远 ...
- 请简单介绍一下Spring
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. Spring ...
- Gem简介
Rubyems:简称gems是一个用于对rails组建近些年个打包的ruby打包系统,它提供了一个分发ruby程序喝库的标准格式,还提供了一个管理程序包的工具.Rubyems的功能类似于linux下的 ...
- 每天一个Linux命令(7)pwd命令
pwd命令以绝对路径的方式显示用户当前工作目录.命令将当前目录的全路径名称(从根目录)写入标准输出.全部目录使用/分隔.第一个/表示根目录,最后一个目录是当前目录. (1)用法介绍: pwd[ ...
- 数据库连接理解——JDBC
需求:数据库操作 数据是:用户信息 1.连接数据库 JDBC Hibernate 2.操作数据库 c create r read u update d delete 3.关闭数据库连接 interf ...
- [原创]java WEB学习笔记31:会话与状态管理 session机制 概述(定义,session机制,session的声明周期,保存session的方式,Session的创建与删除)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- jquery获取表单元素与回显
一.获取哦表单元素 dcoument表单文本对象的集合 all[] 对所有html元素的访问 forms 返回对文档中所有form对象的引用 forms[1] 对所有form对象引用 <scri ...