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微信支付相关推荐

  1. APICloud模拟微信支付调用(非集成微信支付SDK)

    最近因为公司业务发展,需要研究APICloud的使用,主要是针对iOS模块化开发这块.我在APICloud官网搜索半天也没得到解决方案,而下载的APICloud Demo过于简单,故经过几天的钻研,找 ...

  2. 基于盛派SDK开发(配置篇一):企业号充当服务号多客服功能

    背景: 由于服务号不支持手机版多客服,可以通过企业号来实现此功能. 效果图: 1,服务号: 2,企业号: 服务号配置: 其中WeChatController代码如下: /// <summary& ...

  3. RN 调用原生WebPage 解决微信支付Referer问题

    补充一下: referer送什么值? 一般来说就是商户产品的域名就行 遇到一个问题, 测试环境提供的商户产品与生产环境的域名如果不一致, 也会出现一样的报错 说商户号问题,如果都改造好了, 不妨再招业 ...

  4. 盛派SDK开发公众号获取用户输入上下文

    如图所示,我只是想说,千万不要买他们推荐的那本工具书,全篇都在介绍代码怎么定义的然后贴代码,没有任何实质性可用的知识,也没有如何操作如何使用那些工具的知识,一堆废纸而已. 只能是看源码看官方sampl ...

  5. 基于SENPARC盛派微信sdk的.net WebService微信公众号的相关开发(包含从零开始本机测试环境搭建//token验证//获取微信推送消息//向微信推送消息)

    前言: 由于微信公众号正式号,一直在被使用,所以在研发的时候,本机测试环境,就显得非常重要. 而且在自己闲暇之余,可以自己尝试更深程度的微信公众号的研发工作. 1.首先,必要的网站 http://sd ...

  6. 前端怎么做接口签名验证 -baijiahao_微信H5介绍:Razor+Mvc+盛派微信接口

    01 微信H5 介绍 介绍一个.NET Mvc下开发微信H5的案例,这个是2年前找了一个封装比较简洁友好的一个Demo,开发环境是Razor+mvc+盛派接口,当然前提是你首先要熟悉微信开放平台以及微 ...

  7. 微信sdk服务器支付文档,微信支付-普通下单开发者文档

    3.2. API接入(含示例代码) 本章节展示了如何使用微信支付服务端 SDK 快速接入小程序支付产品,完成与微信支付对接的部分. 注意: 文档中的代码示例是用来阐述 API 基本使用方法,代码中的示 ...

  8. 微信支付SDK接入流程梳理

    微信SDK的支付功能接入简单梳理. 首先说一下,你需要的官网都有,但是官网提供的东西不管新旧与否先给你放上去,部分地方提供的链接点击时还提示404,不同的页面提示相同的下载内容(demo)还不一样,表 ...

  9. 微信小程序调用JSAPI进行微信支付

    微信小程序调用JSAPI进行微信支付 1.小程序中先调用接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付: 2.商户server调用再次签名: 3.唤起微信支付页面,进行支付: ...

最新文章

  1. PostgreSQL 数据目录结构
  2. (双引号)与 ' '(单引号)的区别
  3. form表单提交不刷新页面的方法
  4. 是否非要用interface关键字来实现接口?
  5. jquery/原生js/css3 实现瀑布流以及下拉底部加载
  6. 剑指offer 面试题61. 扑克牌中的顺子
  7. 运营商缺的是应用还是想法--广州晨皓
  8. android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
  9. 面试题:React实现鼠标托转文字绕原点旋转
  10. 最难编程语言排名!不接受反驳!!!
  11. Python:实现max non adjacent sum最大非相邻和算法(附完整源码)
  12. “不老时代”:细说nmn是什么产品?nmn功效与作用是真的吗?
  13. 公众号h5拼团购买业务梳理
  14. 虾皮运营之不实折扣有多严重?堪比双十一 虾皮运营技巧
  15. Qt编写的项目作品11-带频谱的音乐播放器
  16. 自动关闭MessageBox
  17. 胖AP和瘦AP区别组网优缺点
  18. 微信的这些功能超级实用
  19. 2018年中国捐赠百杰榜发布
  20. 我是头好马,但要吃次回头草了。

热门文章

  1. 区块链技术是关键?元宇宙热潮背后的三股驱动力
  2. 区县大气环境可视化分析平台
  3. 腾讯云游戏使用方法(不需要下载客户端就可以玩英雄联盟)(旧电脑玩英雄联盟方法)
  4. python游戏教程 | 小蜜蜂历险记,自己做的游戏就是好玩~
  5. 数据结构课程主页16智11
  6. 路由的props参数
  7. 从外包程序员到阿里合伙人,新任阿里CTO鲁肃:每一滴为梦想流过的汗水,都是钻石!...
  8. 数组猎杀时刻——数组详解
  9. python编写一个简单的猜数字小游戏
  10. 仅96秒,突破100亿,支付宝技术答卷:双11一切皆有可能