.net 调用盛派SDK微信支付
1,下载盛派代码
https://github.com/JeffreySu/WeiXinMPSDK
2,使用OAuth2.0 方式 获取 Openid
a,获取 微信公众号里配置的 回调url (url 中会带有我们所需要的code)
/// <summary>
/// 获取验证地址
/// </summary>
/// <param name="appId">公众号的唯一标识</param>
/// <param name="redirectUrl">授权后重定向的回调链接地址,请使用urlencode对链接进行处理</param>
/// <param name="state">重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节</param>
/// <param name="scope">应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)</param>
/// <param name="responseType">返回类型,请填写code(或保留默认)</param>
/// <param name="addConnectRedirect">加上后可以解决40029-invalid code的问题(测试中)</param>
/// <returns></returns>
public static string GetAuthorizeUrl(string appId, string redirectUrl, string state, OAuthScope scope, string responseType = "code", bool addConnectRedirect = true)
{
var url =
string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type={2}&scope={3}&state={4}{5}#wechat_redirect",
appId.AsUrlData(), redirectUrl.AsUrlData(), responseType.AsUrlData(), scope.ToString("g").AsUrlData(), state.AsUrlData(),
addConnectRedirect ? "&connect_redirect=1" : "");
/* 这一步发送之后,客户会得到授权页面,无论同意或拒绝,都会返回redirectUrl页面。
* 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这里的code用于换取access_token(和通用接口的access_token不通用)
* 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
*/
return url;
}
(注:scope 枚举值是snsapi_userinfo弹出授权页面,snsapi_base 不弹出授权页面。 redirectUrl 是用户在公众号后台设置的回调页面的地址。 盛派SDK代码在 Senparc.Weixin.MP.AdvancedAPIs.OAuthApi.GetAuthorizeUrl)
b,在你设置的回调页面中获取 code( 如:string code=request["code"])通过code 获得 微信 回传的信息 从中获取 openid 并将 openid存在session中 (此操作一般在回调页面中)
/// <summary>
/// 获取AccessToken
/// </summary>
/// <param name="appId">公众号的唯一标识</param>
/// <param name="secret">公众号的appsecret</param>
/// <param name="code">code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。</param>
/// <param name="grantType">填写为authorization_code(请保持默认参数)</param>
/// <returns></returns>
public static OAuthAccessTokenResult GetAccessToken(string appId, string secret, string code, string grantType = "authorization_code")
{
var url =
string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type={3}",
appId.AsUrlData(), secret.AsUrlData(), code.AsUrlData(), grantType.AsUrlData());
return CommonJsonSend.Send<OAuthAccessTokenResult>(null, url, null, CommonJsonSendType.GET);
}
(注 盛派SDK代码在 Senparc.Weixin.MP.AdvancedAPIs.GetAccessToken 得到一个 回传信息的数据对象 OAuthAccessTokenResult 里面有 openid 和 Token)
3,填充数据向微信发送支付请求
var timeStamp = TenPayV3Util.GetTimestamp();
var nonceStr = TenPayV3Util.GetNoncestr();
var body = product == null ? "test" : product.Name;
var price = product == null ? 100 : (int)product.Price * 100;
var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, body, sp_billno, price, Request.UserHostAddress, TenPayV3Info.TenPayV3Notify, TenPayV3Type.JSAPI, openIdResult.openid, TenPayV3Info.Key, nonceStr);
var result = TenPayV3.Unifiedorder(xmlDataInfo);//调用统一订单接口
(注:因为采用的是 TenPayV3Type.JSAPI 方式进行支付所以openid 必填)
4,前端js 调用 微信支付
a,为js 提供数据
var package = string.Format("prepay_id={0}", result.prepay_id); 回传数据中获取签名包
ViewData["appId"] = TenPayV3Info.AppId;
ViewData["timeStamp"] = timeStamp;
ViewData["nonceStr"] = nonceStr;
ViewData["package"] = package;
ViewData["paySign"] = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);
ViewData["paySign"] 是对js 进行重新签名
b, js 发起支付
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
//公众号支付
jQuery('a#getBrandWCPayRequest').click(function (e) {
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId": "@ViewData["appId"]", //公众号名称,由商户传入
"timeStamp": "@ViewData["timeStamp"]", //时间戳
"nonceStr": "@ViewData["nonceStr"]", //随机串
"package": "@Html.Raw(ViewData["package"])",//扩展包
"signType": "MD5", //微信签名方式:MD5
"paySign": "@ViewData["paySign"]" //微信签名
}, function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
}
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
//因此微信团队建议,当收到ok返回时,向商户后台询问是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此时未收到通知,商户后台主动调用查询订单接口,查询订单的当前状态,并反馈给前端展示相应的界面。
});
});
WeixinJSBridge.log('yo~ ready.');
}, false);
5,完成支付后 在你的回调页面中处理你的后台业务 (此处是微信自动你的回调页面)
ResponseHandler resHandler = new ResponseHandler(null);
string return_code = resHandler.GetParameter("return_code");
string return_msg = resHandler.GetParameter("return_msg");
string res = null;
resHandler.SetKey(TenPayV3Info.Key);
//验证请求是否从微信发过来(安全)
if (resHandler.IsTenpaySign())
{
res = "success";
//正确的订单处理
}
else
{
res = "wrong";
//错误的订单处理
}
.net 调用盛派SDK微信支付相关推荐
- APICloud模拟微信支付调用(非集成微信支付SDK)
最近因为公司业务发展,需要研究APICloud的使用,主要是针对iOS模块化开发这块.我在APICloud官网搜索半天也没得到解决方案,而下载的APICloud Demo过于简单,故经过几天的钻研,找 ...
- 基于盛派SDK开发(配置篇一):企业号充当服务号多客服功能
背景: 由于服务号不支持手机版多客服,可以通过企业号来实现此功能. 效果图: 1,服务号: 2,企业号: 服务号配置: 其中WeChatController代码如下: /// <summary& ...
- RN 调用原生WebPage 解决微信支付Referer问题
补充一下: referer送什么值? 一般来说就是商户产品的域名就行 遇到一个问题, 测试环境提供的商户产品与生产环境的域名如果不一致, 也会出现一样的报错 说商户号问题,如果都改造好了, 不妨再招业 ...
- 盛派SDK开发公众号获取用户输入上下文
如图所示,我只是想说,千万不要买他们推荐的那本工具书,全篇都在介绍代码怎么定义的然后贴代码,没有任何实质性可用的知识,也没有如何操作如何使用那些工具的知识,一堆废纸而已. 只能是看源码看官方sampl ...
- 基于SENPARC盛派微信sdk的.net WebService微信公众号的相关开发(包含从零开始本机测试环境搭建//token验证//获取微信推送消息//向微信推送消息)
前言: 由于微信公众号正式号,一直在被使用,所以在研发的时候,本机测试环境,就显得非常重要. 而且在自己闲暇之余,可以自己尝试更深程度的微信公众号的研发工作. 1.首先,必要的网站 http://sd ...
- 前端怎么做接口签名验证 -baijiahao_微信H5介绍:Razor+Mvc+盛派微信接口
01 微信H5 介绍 介绍一个.NET Mvc下开发微信H5的案例,这个是2年前找了一个封装比较简洁友好的一个Demo,开发环境是Razor+mvc+盛派接口,当然前提是你首先要熟悉微信开放平台以及微 ...
- 微信sdk服务器支付文档,微信支付-普通下单开发者文档
3.2. API接入(含示例代码) 本章节展示了如何使用微信支付服务端 SDK 快速接入小程序支付产品,完成与微信支付对接的部分. 注意: 文档中的代码示例是用来阐述 API 基本使用方法,代码中的示 ...
- 微信支付SDK接入流程梳理
微信SDK的支付功能接入简单梳理. 首先说一下,你需要的官网都有,但是官网提供的东西不管新旧与否先给你放上去,部分地方提供的链接点击时还提示404,不同的页面提示相同的下载内容(demo)还不一样,表 ...
- 微信小程序调用JSAPI进行微信支付
微信小程序调用JSAPI进行微信支付 1.小程序中先调用接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付: 2.商户server调用再次签名: 3.唤起微信支付页面,进行支付: ...
最新文章
- PostgreSQL 数据目录结构
- (双引号)与 ' '(单引号)的区别
- form表单提交不刷新页面的方法
- 是否非要用interface关键字来实现接口?
- jquery/原生js/css3 实现瀑布流以及下拉底部加载
- 剑指offer 面试题61. 扑克牌中的顺子
- 运营商缺的是应用还是想法--广州晨皓
- android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
- 面试题:React实现鼠标托转文字绕原点旋转
- 最难编程语言排名!不接受反驳!!!
- Python:实现max non adjacent sum最大非相邻和算法(附完整源码)
- “不老时代”:细说nmn是什么产品?nmn功效与作用是真的吗?
- 公众号h5拼团购买业务梳理
- 虾皮运营之不实折扣有多严重?堪比双十一 虾皮运营技巧
- Qt编写的项目作品11-带频谱的音乐播放器
- 自动关闭MessageBox
- 胖AP和瘦AP区别组网优缺点
- 微信的这些功能超级实用
- 2018年中国捐赠百杰榜发布
- 我是头好马,但要吃次回头草了。