Пример #1
0
        /// <summary>
        /// 若不管用,请在公众号官方后台---功能设置----js接口安全域名 设置
        ///    初始化微信分享
        /// </summary>
        /// <param name="wxModel"></param>
        /// <param name="fxUrl">分享的目标url,如果传过来的值为空字符串或者为null则默认是当前的网址</param>
        public void jssdkInit(Model.wx_userweixin wxModel, string fxUrl)
        {
            fxModel.appId     = wxModel.AppId;
            fxModel.timestamp = TenPayV3Util.GetTimestamp();
            fxModel.nonceStr  = TenPayV3Util.GetNoncestr();
            fxModel.thisUrl   = HttpContext.Current.Request.Url.ToString();
            // fxModel.fxUrl = MyCommFun.getWebSite() + "/weixin/huodong/index.aspx";
            if (fxUrl == null || fxUrl.Trim() == "")
            {
                fxModel.fxUrl = fxModel.thisUrl;
            }
            else
            {
                fxModel.fxUrl = fxUrl;
            }
            JsApiTicketContainer.Register(wxModel.AppId, wxModel.AppSecret);
            var ticketResult = JsApiTicketContainer.GetTicketResult(wxModel.AppId); //获取Ticket完整结果(包括当前过期秒数)

            // 这里参数的顺序要按照 key 值 ASCII 码升序排序
            string rawstring = "jsapi_ticket=" + ticketResult.ticket + "&noncestr=" + fxModel.nonceStr + "&timestamp=" + fxModel.timestamp + "&url=" + fxModel.thisUrl + "";

            fxModel.signature = SHA1_Hash(rawstring);
        }//end:function
Пример #2
0
        /// <summary>
        /// 获取jssdk认证令牌
        /// </summary>
        /// <param name="QyID"></param>
        /// <returns></returns>
        public string GetJsApiTicket(string QyID, bool GetNewToken = false)
        {
            //var sss = GetAccessToken(QyID);
            LogWriter.Info("GetJsApiTicket:1");
            var token   = "";
            var account = CacheHelper.Get(string.Format("WxAccount{0}", QyID)) as QyAccount;

            if (account == null)
            {
                LogWriter.Info("GetJsApiTicket:2");
                account = entities.QyAccount.Where(c => c.ID == QyID && c.IsDelete == 0).FirstOrDefault();
                CacheHelper.Set(string.Format("WxAccount{0}", QyID), account);
            }
            if (account != null)
            {
                LogWriter.Info("GetJsApiTicket:3");
                if (!JsApiTicketContainer.CheckRegistered(account.CorpID + "@" + account.CorpSecret) || GetNewToken)
                {
                    LogWriter.Info("GetJsApiTicket:4");
                    JsApiTicketContainer.Register(account.CorpID, account.CorpSecret);
                }
                var result = JsApiTicketContainer.GetTicketResult(account.CorpID + "@" + account.CorpSecret, GetNewToken);
                LogWriter.Info("GetJsApiTicket:5");
                if (result.ticket != account.JsApiTicket)
                {
                    LogWriter.Info("GetJsApiTicket:6");
                    account                       = entities.QyAccount.Where(c => c.ID == QyID && c.IsDelete == 0).FirstOrDefault();
                    account.JsApiTicket           = result.ticket;
                    account.JsApiTicketExpireTime = DateTime.Now.AddSeconds(result.expires_in);
                    entities.SaveChanges();
                    CacheHelper.Set(string.Format("WxAccount{0}", QyID), account);
                }
                token = account.JsApiTicket;
            }
            return(token);
        }
Пример #3
0
        public void ContainerTest()
        {
            //注册
            JsApiTicketContainer.Register(base._corpId, base._corpSecret);

            //获取Ticket完整结果(包括当前过期秒数)
            var ticketResult = JsApiTicketContainer.GetTicketResult(base._corpId);

            Assert.IsNotNull(ticketResult);

            //只获取Ticket字符串
            var ticket = JsApiTicketContainer.GetTicket(base._corpId);

            Assert.AreEqual(ticketResult.ticket, ticket);

            //getNewTicket
            {
                ticket = JsApiTicketContainer.TryGetTicket(base._corpId, base._corpSecret, false);
                Assert.AreEqual(ticketResult.ticket, ticket);

                ticket = JsApiTicketContainer.TryGetTicket(base._corpId, base._corpSecret, true);
                Assert.AreNotEqual(ticketResult.ticket, ticket);
            }
        }
Пример #4
0
 /// <summary>
 /// 注册公众号(或小程序)的JSApi(RegisterMpAccount注册过程中已包含)
 /// </summary>
 /// <param name="registerService">RegisterService</param>
 /// <param name="appId">微信公众号后台的【开发】>【基本配置】中的“AppID(应用ID)”</param>
 /// <param name="appSecret">微信公众号后台的【开发】>【基本配置】中的“AppSecret(应用密钥)”</param>
 /// <param name="name">标记AccessToken名称(如微信公众号名称),帮助管理员识别</param>
 /// <returns></returns>
 public static IRegisterService RegisterMpJsApiTicket(this IRegisterService registerService, string appId, string appSecret, string name)
 {
     JsApiTicketContainer.Register(appId, appSecret, name);
     return(registerService);
 }
Пример #5
0
        public static string Pay(string orderNumber, int totalFee, string openid)
        {
            //读取配置文件
            var merchantId = string.Empty;
            var appId      = string.Empty;
            var key        = string.Empty;
            var appSecret  = string.Empty;
            //接收微信支付异步通知回调地址
            var notifyUrl = string.Empty;
            var payUrl    = string.Empty;

            var xd = new XmlDocument();

            xd.Load(HttpContext.Current.Server.MapPath("/app_data/xml/payment.xml"));
            var selectSingleNode = xd.SelectSingleNode("paymentMethod");

            if (selectSingleNode != null)
            {
                var xnl = selectSingleNode.ChildNodes;
                foreach (XmlNode xn in xnl)
                {
                    var xe = (XmlElement)xn;
                    if (xe.GetAttribute("id") != "wechat")
                    {
                        continue;
                    }
                    merchantId = xe.GetAttribute("merchant_id");
                    appId      = xe.GetAttribute("app_id");
                    appSecret  = xe.GetAttribute("app_secret");
                    key        = xe.GetAttribute("key");
                    notifyUrl  = xe.GetAttribute("notify_url");
                    payUrl     = xe.GetAttribute("pay_url") + orderNumber.ToString();
                    break;
                }
            }
            var timestamp = Senparc.Weixin.MP.TenPayLib.TenPayUtil.GetTimestamp();
            var nonceStr  = Senparc.Weixin.MP.TenPayLib.TenPayUtil.GetNoncestr();

            JsApiTicketContainer.Register(appId, appSecret);
            var jsapiTicket = JsApiTicketContainer.GetJsApiTicket(appId);
            var signConfig  = new Senparc.Weixin.MP.TenPayLib.RequestHandler(null);

            signConfig.SetParameter("jsapi_ticket", jsapiTicket);
            signConfig.SetParameter("noncestr", nonceStr);
            signConfig.SetParameter("timestamp", timestamp);
            signConfig.SetParameter("url", payUrl);
            var signature = signConfig.CreateSHA1Sign();
            //支付
            //商品或支付单简要描述
            var body = "Billion智能仪表管理系统";
            //商户系统内部的订单号,32个字符内,可包含字母,其他说明见商户订单号
            //APP和网页支付提交用户端IP,Native支付填调用微信支付API的机器IP
            var spbillCreateIp = HttpContext.Current.Request.ServerVariables.Get("Remote_Addr");

            //JSAPI,NATIVE,APP,WAP
            var trade_type = "JSAPI";
            //创建支付应答对象
            var panSigig = new RequestHandler(null);

            //初始化
            panSigig.Init();
            //设置package订单参数
            panSigig.SetParameter("appid", appId);
            panSigig.SetParameter("mch_id", merchantId);
            panSigig.SetParameter("nonce_str", nonceStr);
            panSigig.SetParameter("body", body);
            panSigig.SetParameter("out_trade_no", orderNumber);
            panSigig.SetParameter("total_fee", totalFee.ToString());
            panSigig.SetParameter("spbill_create_ip", spbillCreateIp);
            panSigig.SetParameter("notify_url", notifyUrl);
            panSigig.SetParameter("trade_type", trade_type);
            panSigig.SetParameter("openid", openid);

            var sign = panSigig.CreateMd5Sign("key", key);

            panSigig.SetParameter("sign", sign);

            var data = panSigig.ParseXML();

            var result = TenPayV3.Unifiedorder(data);

            var res      = System.Xml.Linq.XDocument.Parse(result);
            var xElement = res.Element("xml");

            if (xElement == null)
            {
                return("");
            }
            var element = xElement.Element("prepay_id");

            if (element == null)
            {
                return("");
            }
            var prepayId          = element.Value;
            var paysignReqHandler = new RequestHandler(null);

            paysignReqHandler.Init();

            //设置支付参数
            paysignReqHandler.SetParameter("appId", appId);
            paysignReqHandler.SetParameter("timeStamp", timestamp);
            paysignReqHandler.SetParameter("nonceStr", nonceStr);
            paysignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId));
            paysignReqHandler.SetParameter("signType", "MD5");
            var paysign = paysignReqHandler.CreateMd5Sign("key", key);

            paysignReqHandler.SetParameter("paysign", paysign);
            NVelocityHelper nh = new NVelocityHelper();

            nh.Put("app_id", appId);
            nh.Put("timestamp", timestamp);
            nh.Put("nonceStr", nonceStr);
            nh.Put("signature", signature);
            nh.Put("package", string.Format("prepay_id={0}", prepayId));
            nh.Put("signType", "MD5");
            nh.Put("paySign", paysign);
            nh.Put("orderid", orderNumber);
            return(nh.Write("app_data/template/wechat"));
        }