Exemplo n.º 1
0
        /// <summary>
        /// 退款申请接口
        /// </summary>
        /// <returns></returns>
        public ActionResult Refund()
        {
            string         nonceStr          = TenPayUtil.GetNoncestr();
            RequestHandler packageReqHandler = new RequestHandler(null);

            //设置package订单参数
            packageReqHandler.SetParameter("appid", TenPayV3Info.AppId);      //公众账号ID
            packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);     //商户号
            packageReqHandler.SetParameter("out_trade_no", "");               //填入商家订单号
            packageReqHandler.SetParameter("out_refund_no", "");              //填入退款订单号
            packageReqHandler.SetParameter("total_fee", "1");                 //总金额
            packageReqHandler.SetParameter("refund_fee", "1");                //退款金额
            packageReqHandler.SetParameter("op_user_id", TenPayV3Info.MchId); //操作员Id,默认就是商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);            //随机字符串
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);

            packageReqHandler.SetParameter("sign", sign);                           //签名

            string data = packageReqHandler.ParseXML();

            var    result = TenPayV3.Refund(data);
            var    res    = XDocument.Parse(result);
            string openid = res.Element("xml").Element("out_refund_no").Value;

            return(Content(openid));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 获取微信支付必要的参数
        /// </summary>
        /// <param name="prepayId">微信预支付订单号</param>
        /// <param name="timeStamp">时间戳</param>
        /// <param name="nonceStr">随机数</param>
        /// <returns></returns>
        public TenPayV3_JsApi TenPayV3Info(string prepayId, string timeStamp = null, string nonceStr = null)
        {
            string paySign = "";

            nonceStr  = string.IsNullOrEmpty(nonceStr) ? TenPayUtil.GetNoncestr() : nonceStr;
            timeStamp = string.IsNullOrEmpty(timeStamp) ? TenPayUtil.GetTimestamp() : timeStamp;

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("appId", AppId);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId));
            paySignReqHandler.SetParameter("signType", "MD5");
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySign = paySignReqHandler.CreateMd5Sign("key", Key);
            TenPayV3_JsApi tenPayV3JsApi = new TenPayV3_JsApi()
            {
                AppId     = AppId,
                NonceStr  = nonceStr,
                TimeStamp = timeStamp,
                Package   = string.Format("prepay_id={0}", prepayId),
                PaySign   = paySign
            };

            return(tenPayV3JsApi);
        }
Exemplo n.º 3
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string sp_billno = Request["order_no"];
        //当前时间 yyyyMMdd
        string date = DateTime.Now.ToString("yyyyMMdd");

        if (null == sp_billno)
        {
            //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
            sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4);
        }
        else
        {
            sp_billno = Request["order_no"].ToString();
        }

        sp_billno = TenPayInfo.PartnerId + sp_billno;

        //创建支付应答对象
        RequestHandler packageReqHandler = new RequestHandler(Context);

        //初始化
        packageReqHandler.Init();


        //设置package订单参数
        packageReqHandler.SetParameter("partner", TenPayInfo.PartnerId);                  //商户号
        packageReqHandler.SetParameter("fee_type", "1");                                  //币种,1人民币
        packageReqHandler.SetParameter("input_charset", "GBK");
        packageReqHandler.SetParameter("out_trade_no", sp_billno);                        //商家订单号
        packageReqHandler.SetParameter("total_fee", "1");                                 //商品金额,以分为单位(money * 100).ToString()
        packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify);            //接收财付通通知的URL
        packageReqHandler.SetParameter("body", "JSAPIdemo");                              //商品描述
        packageReqHandler.SetParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP

        //获取package包
        packageValue = packageReqHandler.GetRequestURL();

        //调起微信支付签名
        timeStamp = TenPayUtil.GetTimestamp();
        nonceStr  = TenPayUtil.GetNoncestr();

        //设置支付参数
        RequestHandler paySignReqHandler = new RequestHandler(Context);

        paySignReqHandler.SetParameter("appid", appId);
        paySignReqHandler.SetParameter("appkey", TenPayInfo.AppKey);
        paySignReqHandler.SetParameter("noncestr", nonceStr);
        paySignReqHandler.SetParameter("timestamp", timeStamp);
        paySignReqHandler.SetParameter("package", packageValue);
        paySign = paySignReqHandler.CreateSHA1Sign();



        //获取debug信息,建议把请求和debug信息写入日志,方便定位问题
        //string pakcageDebuginfo = packageReqHandler.getDebugInfo();
        //Response.Write("<br/>pakcageDebuginfo:" + pakcageDebuginfo + "<br/>");
        //string paySignDebuginfo = paySignReqHandler.getDebugInfo();
        //Response.Write("<br/>paySignDebuginfo:" + paySignDebuginfo + "<br/>");
    }
Exemplo n.º 4
0
        /// <summary>
        /// 目前支持向指定微信用户的openid发放指定金额红包
        /// 注意total_amount、min_value、max_value值相同
        /// total_num=1固定
        /// 单个红包金额介于[1.00元,200.00元]之间
        /// </summary>
        /// <returns></returns>
        public ActionResult SendRedPack()
        {
            string mchbillno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28);

            string         nonceStr          = TenPayUtil.GetNoncestr();
            RequestHandler packageReqHandler = new RequestHandler(null);

            //设置package订单参数
            packageReqHandler.SetParameter("nonce_str", nonceStr);                //随机字符串
            packageReqHandler.SetParameter("wxappid", TenPayV3Info.AppId);        //公众账号ID
            packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);         //商户号
            packageReqHandler.SetParameter("mch_billno", mchbillno);              //填入商家订单号
            packageReqHandler.SetParameter("nick_name", "提供方名称");                 //提供方名称
            packageReqHandler.SetParameter("send_name", "红包发送者名称");               //红包发送者名称
            packageReqHandler.SetParameter("re_openid", "接受收红包的用户的openId");       //接受收红包的用户的openId
            packageReqHandler.SetParameter("total_amount", "100");                //付款金额,单位分
            packageReqHandler.SetParameter("min_value", "100");                   //最小红包金额,单位分
            packageReqHandler.SetParameter("max_value", "100");                   //最大红包金额,单位分
            packageReqHandler.SetParameter("total_num", "1");                     //红包发放总人数
            packageReqHandler.SetParameter("wishing", "红包祝福语");                   //红包祝福语
            packageReqHandler.SetParameter("client_ip", Request.UserHostAddress); //调用接口的机器Ip地址
            packageReqHandler.SetParameter("act_name", "活动名称");                   //活动名称
            packageReqHandler.SetParameter("remark", "备注信息");                     //备注信息
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);

            packageReqHandler.SetParameter("sign", sign);                           //签名
            //退款需要post的数据
            string data = packageReqHandler.ParseXML();

            //退款接口地址
            string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
            //本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中)
            string cert = @"F:\apiclient_cert.p12";
            //私钥(在安装证书时设置)
            string password = "";

            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
            //调用证书
            X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

            #region 发起post请求
            HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
            webrequest.ClientCertificates.Add(cer);
            webrequest.Method = "post";

            byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
            webrequest.ContentLength = postdatabyte.Length;
            Stream stream;
            stream = webrequest.GetRequestStream();
            stream.Write(postdatabyte, 0, postdatabyte.Length);
            stream.Close();

            HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
            StreamReader    streamReader    = new StreamReader(httpWebResponse.GetResponseStream());
            string          responseContent = streamReader.ReadToEnd();
            #endregion

            return(Content(responseContent));
        }
Exemplo n.º 5
0
        public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null)
        {
            string timeStamp = "";
            string nonceStr  = "";
            string paySign   = "";

            string sp_billno = orderId;
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler();

            //初始化
            packageReqHandler.Init();
            //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/);

            timeStamp = TenPayUtil.GetTimestamp();
            nonceStr  = TenPayUtil.GetNoncestr();

            Config config = Utility <Config> .GetConfig(WorkDirectory);

            //设置package订单参数
            packageReqHandler.SetParameter("appid", config.AppId);                                                                                                   //公众账号ID
            packageReqHandler.SetParameter("mch_id", config.MCHID);                                                                                                  //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                                                                                                   //随机字符串
            packageReqHandler.SetParameter("body", productInfo);
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                                                                                               //商家订单号
            packageReqHandler.SetParameter("total_fee", ((int)(totalFee * 100)).ToString());                                                                         //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", _httpContextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>().RemoteIpAddress.ToString()); //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("notify_url", notifyUrl);                                                                                                 //接收财付通通知的URL

            string strScene = "{ 'h5_info': { 'type':'Wap','wap_url': '" + _httpContextAccessor.HttpContext.Request.Scheme + "://" + _httpContextAccessor.HttpContext.Request.Host.ToString() + " ','wap_name': '" + _httpContextAccessor.HttpContext.Request.Host.ToString() + " '}";

            packageReqHandler.SetParameter("trade_type", "MWEB");                           //交易类型
            packageReqHandler.SetParameter("scene_info", strScene);

            string sign = packageReqHandler.CreateMd5Sign("key", config.Key);

            packageReqHandler.SetParameter("sign", sign);                           //签名

            string data = packageReqHandler.ParseXML();
            //Core.Log.Debug("data=" + data);

            var result = TenPayV3.Unifiedorder(data);
            //Core.Log.Debug("result=" + result);
            var res = XDocument.Parse(result);


            if (res.Element("xml").Element("mweb_url") == null)
            {
                throw new Exception(res.ToString().HtmlEncode());
            }
            string mwebUrl = res.Element("xml").Element("mweb_url").Value;

            mwebUrl = mwebUrl + "&redirect_url=" + _httpContextAccessor.HttpContext.Request.Scheme + "://" + _httpContextAccessor.HttpContext.Request.Host.ToString() + "/userorder";

            return(mwebUrl);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 退款申请接口
        /// </summary>
        /// <returns></returns>
        public ActionResult Refund()
        {
            string         nonceStr          = TenPayUtil.GetNoncestr();
            RequestHandler packageReqHandler = new RequestHandler(null);

            //设置package订单参数
            packageReqHandler.SetParameter("appid", TenPayV3Info.AppId);      //公众账号ID
            packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);     //商户号
            packageReqHandler.SetParameter("out_trade_no", "");               //填入商家订单号
            packageReqHandler.SetParameter("out_refund_no", "");              //填入退款订单号
            packageReqHandler.SetParameter("total_fee", "");                  //填入总金额
            packageReqHandler.SetParameter("refund_fee", "");                 //填入退款金额
            packageReqHandler.SetParameter("op_user_id", TenPayV3Info.MchId); //操作员Id,默认就是商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);            //随机字符串
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);

            packageReqHandler.SetParameter("sign", sign);                           //签名
            //退款需要post的数据
            string data = packageReqHandler.ParseXML();

            //退款接口地址
            string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
            //本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中)
            string cert = @"F:\apiclient_cert.p12";
            //私钥(在安装证书时设置)
            string password = "";

            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
            //调用证书
            X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

            #region 发起post请求
            HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
            webrequest.ClientCertificates.Add(cer);
            webrequest.Method = "post";

            byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
            webrequest.ContentLength = postdatabyte.Length;
            Stream stream;
            stream = webrequest.GetRequestStream();
            stream.Write(postdatabyte, 0, postdatabyte.Length);
            stream.Close();

            HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
            StreamReader    streamReader    = new StreamReader(httpWebResponse.GetResponseStream());
            string          responseContent = streamReader.ReadToEnd();
            #endregion

            var    res    = XDocument.Parse(responseContent);
            string openid = res.Element("xml").Element("out_refund_no").Value;

            return(Content(openid));
        }
Exemplo n.º 7
0
        /// <summary>
        /// 获取预支付订单
        /// </summary>
        /// <param name="orderId">订单号</param>
        /// <param name="body">支付主体内容</param>
        /// <param name="spbillCreateIp">IP</param>
        /// <param name="openId"></param>
        /// <param name="price"></param>
        /// <param name="parentId">返回的预支付订单【2小时有效】</param>
        /// <param name="nonceStr"></param>
        /// <returns></returns>
        public string GetCodeUrl(string orderId, string body, string spbillCreateIp, decimal price, out string parentId,
                                 string nonceStr = null)
        {
            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(null);

            //初始化
            packageReqHandler.Init();

            nonceStr = string.IsNullOrEmpty(nonceStr) ? TenPayUtil.GetNoncestr() : nonceStr;

            //设置package订单参数
            packageReqHandler.SetParameter("appid", AppId);                           //公众账号ID
            packageReqHandler.SetParameter("mch_id", MchId);                          //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                    //随机字符串
            packageReqHandler.SetParameter("body", body);
            packageReqHandler.SetParameter("out_trade_no", orderId);                  //商家订单号
            packageReqHandler.SetParameter("total_fee", (price * 100).ToString("0")); //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", spbillCreateIp);       //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("notify_url", TenPayV3Notify);             //接收财付通通知的URL
            packageReqHandler.SetParameter("trade_type", "NATIVE");                   //交易类型
                                                                                      //packageReqHandler.SetParameter("openid", openId); //用户的openid
            string sign = packageReqHandler.CreateMd5Sign("key", Key);

            packageReqHandler.SetParameter("sign", sign); //签名

            string data = packageReqHandler.ParseXML();

            var result = TenPayV3.Unifiedorder(data);

            LogUtility.DebugLogger.Info(result);

            var res = XDocument.Parse(result);

            //LogUtility.Order.Error(string.Format("预支付订单返回XML :{0}", result));
            if (res.Element("xml") == null)
            {
                throw new Exception("统一订单接口出错");
            }
            var codeUrl = res.Element("xml").Element("code_url") == null
               ? null
               : res.Element("xml").Element("code_url").Value;

            parentId = res.Element("xml").Element("prepay_id") == null
              ? null
              : res.Element("xml").Element("prepay_id").Value;
            if (string.IsNullOrEmpty(codeUrl))
            {
                throw new Exception("统一订单接口出错,未获取到预支付订单号");
            }
            return(codeUrl);
        }
Exemplo n.º 8
0
        public async Task <ObjectResultModule> WXJSTicket([FromBody] TencentTicletModel input)
        {
            if (!Commons.CheckSecret(input.Secret))
            {
                this.ObjectResultModule.StatusCode = 422;
                this.ObjectResultModule.Message    = "Wrong Secret";
                this.ObjectResultModule.Object     = "";
                return(this.ObjectResultModule);
            }
            #region 获取微信系统参数
            //SystemConfigsIn systemConfigsIn = new SystemConfigsIn();
            //systemConfigsIn.AndAlso(t => !t.IsDelete && t.SystemType == "TencentWechar");
            //var configs = await _systemConfigsService.SystemConfigsList(systemConfigsIn);
            //var tencentparam = configs.FirstOrDefault();

            //TencentWeCharEntity tencentWeCharEntity = new TencentWeCharEntity();
            //tencentWeCharEntity.grant_type = "authorization_code";
            //tencentWeCharEntity.appid = tencentparam.AppID;
            //tencentWeCharEntity.secret = tencentparam.AppSecret;

            // SystemToken systemToken = new SystemToken();
            //  systemToken.TokenType = "Wechar";
            var Tokens = await _systemTokenService.SystemTokenList("Wechar");

            #endregion
            SystemTokenIn Token = new SystemTokenIn();
            Token.access_token   = Tokens.access_token;
            Token.Appid          = Tokens.Appid;
            Token.AppSecret      = Tokens.AppSecret;
            Token.YaeherPlatform = Tokens.YaeherPlatform;
            var JSTicketTokens = await _systemTokenService.JSWecharTokenList("JSWechar", Token);

            //var result = await tencentoken.TencentTicket("jsapi",Tokens.access_token);

            var    nonce_str       = TenPayUtil.GetNoncestr();
            string timeStamp       = TenPayUtil.GetTimestamp();
            var    requestHandler2 = new RequestHandler(null);
            requestHandler2.SetParameter("noncestr", nonce_str);
            requestHandler2.SetParameter("jsapi_ticket", JSTicketTokens.access_token);
            requestHandler2.SetParameter("timestamp", timeStamp);
            requestHandler2.SetParameter("url", input.url);
            ////SHA1加密签名
            var sha1Sign = requestHandler2.CreateSHA1Sign();
            TencentTicletResponseModel model = new TencentTicletResponseModel();
            model.appId     = Tokens.Appid;
            model.nonceStr  = nonce_str;
            model.signature = sha1Sign;
            model.timestamp = timeStamp;
            return(new ObjectResultModule(model, 200, "success"));
        }
Exemplo n.º 9
0
        public ActionResult Native()
        {
            string sp_billno = Request["order_no"];
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4);
            }
            else
            {
                sp_billno = Request["order_no"].ToString();
            }

            sp_billno = TenPayInfo.PartnerId + sp_billno;


            RequestHandler outParams = new RequestHandler(null);

            outParams.Init();
            string productid = sp_billno;
            string timeStamp = TenPayUtil.GetTimestamp();
            string nonceStr  = TenPayUtil.GetNoncestr();

            RequestHandler Params = new RequestHandler(null);

            Params.SetParameter("appid", TenPayInfo.AppId);
            Params.SetParameter("appkey", TenPayInfo.AppKey);
            Params.SetParameter("noncestr", nonceStr);
            Params.SetParameter("timestamp", timeStamp);
            Params.SetParameter("productid", productid);
            string sign = Params.CreateSHA1Sign();

            Params.SetParameter("sign", sign);

            var parm = TenPay.NativePay(TenPayInfo.AppId, timeStamp, nonceStr, productid, sign);

            parm             = QRCode.QRfromGoogle(parm);
            ViewData["parm"] = parm;
            return(View());
        }
Exemplo n.º 10
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string sp_billno = Request["order_no"];
        //当前时间 yyyyMMdd
        string date = DateTime.Now.ToString("yyyyMMdd");

        if (null == sp_billno)
        {
            //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
            sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4);
        }
        else
        {
            sp_billno = Request["order_no"].ToString();
        }

        sp_billno = TenPayInfo.PartnerId + sp_billno;


        RequestHandler outParams = new RequestHandler(Context);

        outParams.Init();
        string productid = sp_billno;
        string timeStamp = TenPayUtil.GetTimestamp();
        string nonceStr  = TenPayUtil.GetNoncestr();

        RequestHandler Params = new RequestHandler(Context);

        Params.SetParameter("appid", TenPayInfo.AppId);
        Params.SetParameter("appkey", TenPayInfo.AppKey);
        Params.SetParameter("noncestr", nonceStr);
        Params.SetParameter("timestamp", timeStamp);
        Params.SetParameter("productid", productid);
        string sign = Params.CreateSHA1Sign();

        Params.SetParameter("sign", sign);


        parm = "weixin://wxpay/bizpayurl?sign=" + sign + "&appid=" + TenPayInfo.AppId + "&productid=" + productid + "&timeStamp=" + timeStamp + "&nonceStr=" + nonceStr;
        parm = QRfromGoogle(parm);
    }
Exemplo n.º 11
0
        public ActionResult Delivernotify()
        {
            string timeStamp    = "";
            string appSignature = "";
            //string appId, string openId, string transId, string out_Trade_No, string deliver_TimesTamp, string deliver_Status, string deliver_Msg, string app_Signature,
            string sp_billno = Request["order_no"];
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4);
            }
            else
            {
                sp_billno = Request["order_no"].ToString();
            }

            sp_billno = TenPayInfo.PartnerId + sp_billno;

            //调起微信支付签名
            timeStamp = TenPayUtil.GetTimestamp();

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("appid", TenPayInfo.AppId);
            paySignReqHandler.SetParameter("openId", TenPayInfo.AppKey);
            paySignReqHandler.SetParameter("transId", "111112222233333");
            paySignReqHandler.SetParameter("deliver_TimesTamp", timeStamp);
            paySignReqHandler.SetParameter("out_Trade_No", sp_billno);
            paySignReqHandler.SetParameter("deliver_Status", "1");
            paySignReqHandler.SetParameter("deliver_Msg", "ok");
            appSignature = paySignReqHandler.CreateSHA1Sign();
            var result = TenPay.Delivernotify(TenPayInfo.AppId, "oX99MDgNcgwnz3zFN3DNmo8uwa-w", "111112222233333", sp_billno,
                                              timeStamp, "1", "ok", appSignature, "sha1");

            ViewData["message"] = result.errcode;
            return(View());
        }
Exemplo n.º 12
0
        /// <summary>
        /// 微信预支付
        /// </summary>
        /// <param name="attach"></param>
        /// <param name="body"></param>
        /// <param name="openid"></param>
        /// <param name="price"></param>
        /// <param name="orderNum"></param>
        /// <returns></returns>
        public static WechatOrderInfo PayInfo(string attach, string body, string openid, string price, string orderNum = "1833431773763549")
        {
            RequestHandler requestHandler = new RequestHandler(HttpContext.Current);

            //微信分配的公众账号ID(企业号corpid即为此appId)
            requestHandler.SetParameter("appid", tenPayV3Info.AppId);
            //附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
            requestHandler.SetParameter("attach", attach);
            //商品或支付单简要描述
            requestHandler.SetParameter("body", body);
            //微信支付分配的商户号
            requestHandler.SetParameter("mch_id", tenPayV3Info.MchId);
            //随机字符串,不长于32位。
            requestHandler.SetParameter("nonce_str", TenPayUtil.GetNoncestr());
            //接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
            requestHandler.SetParameter("notify_url", tenPayV3Info.TenPayV3Notify);
            //trade_type=JSAPI,此参数必传,用户在商户公众号appid下的唯一标识。
            requestHandler.SetParameter("openid", openid);
            //商户系统内部的订单号,32个字符内、可包含字母,自己生成
            requestHandler.SetParameter("out_trade_no", orderNum);
            //APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。
            requestHandler.SetParameter("spbill_create_ip", "127.0.0.1");
            //订单总金额,单位为分,做过银联支付的朋友应该知道,代表金额为12位,末位分分
            requestHandler.SetParameter("total_fee", price);
            //取值如下:JSAPI,NATIVE,APP,我们这里使用JSAPI
            requestHandler.SetParameter("trade_type", "JSAPI");
            //设置KEY
            requestHandler.SetKey(tenPayV3Info.Key);

            requestHandler.CreateMd5Sign();
            requestHandler.GetRequestURL();
            requestHandler.CreateSHA1Sign();
            string data = requestHandler.ParseXML();

            requestHandler.GetDebugInfo();

            //获取并返回预支付XML信息
            return(XmlHelper.XmlDeserialize <WechatOrderInfo>(TenPayV3.Unifiedorder(data)));
        }
        public ActionResult Index(string Id)
        {
            timeStamp = TenPayUtil.GetTimestamp();
            nonceStr  = TenPayUtil.GetNoncestr();
            //晓峰测试号 appID 和 Scret  appid=wx0bcc58e7cb182a1f&secret=6bca2d2e1e4a0892b462590aec81716f
            //获取全局Access_takenJSON 有效期7200秒,开发者必须在自己的服务全局缓存access_token
            string Access_takenJSON = packageReqHandler.RequestGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xx&secret=xxxx");

            strAccess_taken = packageReqHandler.GetJsonValue(Access_takenJSON, "access_token");


            //获取jsapi_ticket,有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket
            string jsapi_ticketJSON = packageReqHandler.RequestGet(string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", strAccess_taken));

            strjsapi_ticket = packageReqHandler.GetJsonValue(jsapi_ticketJSON, "ticket");


            //设置签名参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("jsapi_ticket", strjsapi_ticket);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySignReqHandler.SetParameter("url", Request.Url.AbsoluteUri);
            signature = paySignReqHandler.CreateSHA1Sign();

            ViewBag.TimeStamp = timeStamp;
            ViewBag.NonceStr  = nonceStr;
            ViewBag.Signature = signature;

            //ViewBag.JSTickets = strjsapi_ticket;
            //ViewBag.URLS = Request.Url.AbsoluteUri;


            Contents pic = contentsBll.GetContentsById(int.Parse(Id));

            return(View(pic));
        }
Exemplo n.º 14
0
        /// <summary>
        /// 订单查询
        /// </summary>
        /// <returns></returns>
        public ActionResult OrderQuery()
        {
            string         nonceStr          = TenPayUtil.GetNoncestr();
            RequestHandler packageReqHandler = new RequestHandler(null);

            //设置package订单参数
            packageReqHandler.SetParameter("appid", TenPayV3Info.AppId);  //公众账号ID
            packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId); //商户号
            packageReqHandler.SetParameter("transaction_id", "");         //填入微信订单号
            packageReqHandler.SetParameter("out_trade_no", "");           //填入商家订单号
            packageReqHandler.SetParameter("nonce_str", nonceStr);        //随机字符串
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);

            packageReqHandler.SetParameter("sign", sign);                           //签名

            string data = packageReqHandler.ParseXML();

            var    result = TenPayV3.OrderQuery(data);
            var    res    = XDocument.Parse(result);
            string openid = res.Element("xml").Element("sign").Value;

            return(Content(openid));
        }
Exemplo n.º 15
0
        public ActionResult SharedAddress()
        {
            var accessToken = AccessTokenContainer.TryGetAccessToken(TenPayInfo.AppId, "49b71198b776e18521659a32a97501a6");

            string timeStamp = TenPayUtil.GetTimestamp();
            string nonceStr  = TenPayUtil.GetNoncestr();

            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("accessToken", accessToken);
            paySignReqHandler.SetParameter("appid", TenPayInfo.AppId);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySignReqHandler.SetParameter("url", TenPayInfo.TenPayNotify);
            var addrSign = paySignReqHandler.CreateSHA1Sign();

            ViewData["appId"]     = TenPayInfo.AppId;
            ViewData["addrSign"]  = addrSign;
            ViewData["timeStamp"] = timeStamp;
            ViewData["nonceStr"]  = nonceStr;

            return(View());
        }
Exemplo n.º 16
0
        public ActionResult Index()
        {
            string _code = Request.QueryString["code"];

            //微信授权(如需授权,可开通)
            //weChatOauth(_code);
            //this.oAuthAccessTokenResult = OAuth.GetAccessToken("AppId", "AppSecret", _code);
            //this.oAuthAccessTokenResult = OAuth.RefreshToken("AppId", this.oAuthAccessTokenResult.refresh_token);
            //this.openid = this.oAuthAccessTokenResult.openid;
            //this.accessToken = this.oAuthAccessTokenResult.access_token;

            string timeStamp = TenPayUtil.GetTimestamp();
            string nonceStr  = TenPayUtil.GetNoncestr();
            string paySign   = "";
            string sp_billno = Request["order_no"];
            string openid    = this.openid;

            //附加数据
            string attach = sp_billno;
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28);
            }
            else
            {
                sp_billno = Request["order_no"].ToString();
            }


            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(null);

            //初始化
            //packageReqHandler.Init();
            //packageReqHandler.SetKey(TenPayInfo.Key);
            //设置package订单参数
            packageReqHandler.SetParameter("appid", TenPayInfo.AppId);                   //公众账号ID
            packageReqHandler.SetParameter("body", "test");
            packageReqHandler.SetParameter("mch_id", TenPayInfo.Mchid);                  //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr.ToLower());             //随机字符串
            packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify);       //接收财付通通知的URL
            packageReqHandler.SetParameter("openid", openid);                            //openid
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                   //商家订单号
            packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("total_fee", "1");                            //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("trade_type", "JSAPI");                       //交易类型

            //获取package包
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayInfo.Key);

            packageReqHandler.SetParameter("sign", sign);                           //交易类型
            string data   = packageReqHandler.ParseXML();
            var    result = TenPayV3.Unifiedorder(data);
            var    res    = XDocument.Parse(result);

            string prepayId = "";

            try
            {
                if (res.Element("xml").Element("return_code").Value == "SUCCESS")
                {
                    prepayId = res.Element("xml").Element("prepay_id").Value;
                }
            }
            catch (Exception ex)
            {
                return(View());
            }
            string package = string.Format("prepay_id={0}", prepayId);

            timeStamp = TenPayUtil.GetTimestamp();

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("appId", TenPayInfo.AppId);
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("package", package);
            paySignReqHandler.SetParameter("signType", "MD5");
            paySign = paySignReqHandler.CreateMd5Sign("key", TenPayInfo.Key);

            ViewData["appId"]     = TenPayInfo.AppId;
            ViewData["timeStamp"] = timeStamp;
            ViewData["nonceStr"]  = nonceStr;
            ViewData["package"]   = package;
            ViewData["paySign"]   = paySign;

            return(View());
        }
Exemplo n.º 17
0
        public ActionResult NativeCall()
        {
            string sp_billno = Request["order_no"];
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");
            //订单号,此处用时间和随机数生成,商户根据自己调整,保证唯一
            string out_trade_no = "" + DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4);

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4);
            }
            else
            {
                sp_billno = Request["order_no"].ToString();
            }

            sp_billno = TenPayInfo.PartnerId + sp_billno;



            //创建RequestHandler实例
            RequestHandler packageReqHandler = new RequestHandler(null);

            //初始化
            packageReqHandler.Init();
            packageReqHandler.SetKey(TenPayInfo.Key);

            //设置package订单参数
            packageReqHandler.SetParameter("partner", TenPayInfo.PartnerId);                                //商户号
            packageReqHandler.SetParameter("bank_type", "WX");                                              //银行类型
            packageReqHandler.SetParameter("fee_type", "1");                                                //币种,1人民币
            packageReqHandler.SetParameter("input_charset", "GBK");
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                                      //商家订单号
            packageReqHandler.SetParameter("total_fee", "1");                                               //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify);                          //接收财付通通知的URL
            packageReqHandler.SetParameter("body", "nativecall");                                           //商品描述
            packageReqHandler.SetParameter("spbill_create_ip", "8.8.8.8" /*Page.Request.UserHostAddress*/); //用户的公网ip,不是商户服务器IP

            //获取package包
            string packageValue = packageReqHandler.GetRequestURL();

            //调起微信支付签名
            string timeStamp = TenPayUtil.GetTimestamp();
            string nonceStr  = TenPayUtil.GetNoncestr();

            //设置支付参数
            RequestHandler payHandler = new RequestHandler(null);

            payHandler.SetParameter("appid", TenPayInfo.AppId);
            payHandler.SetParameter("noncestr", nonceStr);
            payHandler.SetParameter("timestamp", timeStamp);
            payHandler.SetParameter("package", packageValue);
            payHandler.SetParameter("RetCode", "0");
            payHandler.SetParameter("RetErrMsg", "成功");
            string paySign = payHandler.CreateSHA1Sign();

            payHandler.SetParameter("app_signature", paySign);
            payHandler.SetParameter("sign_method", "SHA1");


            Response.ContentType = "text/xml";
            Response.Clear();
            ViewData["payHandler"] = payHandler.ParseXML();

            return(View());
        }
Exemplo n.º 18
0
        public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null)
        {
            string timestamp = "";
            string noncestr  = "";
            string str       = "";
            string str1      = orderId;

            DateTime.Now.ToString("yyyyMMdd");
            RequestHandler requestHandler = new RequestHandler();

            requestHandler.Init();
            timestamp = TenPayUtil.GetTimestamp();
            noncestr  = TenPayUtil.GetNoncestr();
            Config config = Utility <Config> .GetConfig(base.WorkDirectory);

            requestHandler.SetParameter("appid", config.AppId);
            requestHandler.SetParameter("mch_id", config.MCHID);
            requestHandler.SetParameter("nonce_str", noncestr);
            requestHandler.SetParameter("body", productInfo);
            requestHandler.SetParameter("out_trade_no", str1);
            int num = (int)(totalFee * new decimal(100));

            requestHandler.SetParameter("total_fee", num.ToString());
            requestHandler.SetParameter("spbill_create_ip", "222.240.184.122");
            requestHandler.SetParameter("notify_url", notifyUrl);
            requestHandler.SetParameter("trade_type", "JSAPI");
            requestHandler.SetParameter("openid", openId);
            string str2 = requestHandler.CreateMd5Sign("key", config.Key);

            requestHandler.SetParameter("sign", str2);
            string    str3      = requestHandler.ParseXML();
            XDocument xDocument = XDocument.Parse(TenPayV3.Unifiedorder(str3));

            if (xDocument == null)
            {
                throw new ApplicationException(string.Concat("调用统一支付出错:请求内容:", str3));
            }
            if (xDocument.Element("xml").Element("return_code").Value == "FAIL")
            {
                throw new ApplicationException(string.Concat("预支付失败:", xDocument.Element("xml").Element("return_msg").Value));
            }
            if (xDocument.Element("xml").Element("result_code").Value == "FAIL")
            {
                throw new ApplicationException(string.Concat("预支付失败:", xDocument.Element("xml").Element("err_code_des").Value));
            }
            string         value           = xDocument.Element("xml").Element("prepay_id").Value;
            RequestHandler requestHandler1 = new RequestHandler();

            requestHandler1.SetParameter("appId", config.AppId);
            requestHandler1.SetParameter("timeStamp", timestamp);
            requestHandler1.SetParameter("nonceStr", noncestr);
            requestHandler1.SetParameter("package", string.Format("prepay_id={0}", value));
            requestHandler1.SetParameter("signType", "MD5");
            str = requestHandler1.CreateMd5Sign("key", config.Key);
            string str4 = string.Concat("WeixinJSBridge.invoke('getBrandWCPayRequest', {{'appId': '{0}','timeStamp': '{1}','nonceStr': '{2}','package': '{3}','signType': 'MD5','paySign': '{4}'}}, function (res) {{if (res.err_msg == 'brand_wcpay_request:ok') {{location.href='", returnUrl, "'}}else alert('支付失败!')}});");

            object[] appId = new object[] { config.AppId, timestamp, noncestr, string.Format("prepay_id={0}", value), str };
            string   str5  = string.Format(str4, appId);

            return(string.Format("javascript:{0}", str5));
        }
Exemplo n.º 19
0
        public string GetRequestUrl_App(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null)
        {
            string timeStamp = "";
            string nonceStr  = "";
            string paySign   = "";

            string sp_billno = orderId;
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler();

            //初始化
            packageReqHandler.Init();
            //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/);

            timeStamp = TenPayUtil.GetTimestamp();
            nonceStr  = TenPayUtil.GetNoncestr();

            Config config = Utility <Config> .GetConfig(WorkDirectory);

            //设置package订单参数
            packageReqHandler.SetParameter("appid", config.AppId);                                                                                                   //公众账号ID
            packageReqHandler.SetParameter("mch_id", config.MCHID);                                                                                                  //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                                                                                                   //随机字符串
            packageReqHandler.SetParameter("body", productInfo);
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                                                                                               //商家订单号
            packageReqHandler.SetParameter("total_fee", ((int)(totalFee * 100)).ToString());                                                                         //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", _httpContextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>().RemoteIpAddress.ToString()); //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("notify_url", notifyUrl);                                                                                                 //接收财付通通知的URL
            packageReqHandler.SetParameter("trade_type", "APP");                                                                                                     //交易类型
            packageReqHandler.SetParameter("openid", string.IsNullOrWhiteSpace(openId) ? "" : openId);                                                               //用户的openId

            string sign = packageReqHandler.CreateMd5Sign("key", config.Key);

            packageReqHandler.SetParameter("sign", sign);                           //签名

            string data = packageReqHandler.ParseXML();
            //Core.Log.Debug("data=" + data);

            var result = TenPayV3.Unifiedorder(data);
            //Core.Log.Debug("result=" + result);
            var res = XDocument.Parse(result);

            if (res == null)
            {
                throw new ApplicationException("调用统一支付出错:请求内容:" + data);
            }
            string returnCode = res.Element("xml").Element("return_code").Value;

            if (returnCode == "FAIL")//失败
            {
                throw new ApplicationException("预支付失败:" + res.Element("xml").Element("return_msg").Value);
            }

            string resultCode = res.Element("xml").Element("result_code").Value;

            if (resultCode == "FAIL")
            {
                throw new ApplicationException("预支付失败:" + res.Element("xml").Element("err_code_des").Value);
            }

            string prepayId = res.Element("xml").Element("prepay_id").Value;


            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler();

            paySignReqHandler.SetParameter("appid", config.AppId);
            paySignReqHandler.SetParameter("partnerid", config.MCHID);
            paySignReqHandler.SetParameter("prepayid", prepayId);
            paySignReqHandler.SetParameter("timestamp", timeStamp);
            paySignReqHandler.SetParameter("noncestr", nonceStr);
            paySignReqHandler.SetParameter("package", "Sign=WXPay");
            paySign = paySignReqHandler.CreateMd5Sign("key", config.Key);
            paySignReqHandler.SetParameter("sign", paySign);
            var hashtable = paySignReqHandler.GetAllParameters();

            System.Text.StringBuilder strBuilder = new System.Text.StringBuilder();
            strBuilder.Append("{");
            foreach (var p in hashtable.Keys)
            {
                if (p.ToString() == "timestamp")
                {
                    strBuilder.Append("\"" + p + "\":" + hashtable[p] + "");
                }
                else
                {
                    strBuilder.Append("\"" + p + "\":\"" + hashtable[p] + "\"");
                }
                strBuilder.Append(",");
            }
            string resultStr = strBuilder.ToString().TrimEnd(',') + "}";

            return(resultStr);
        }
Exemplo n.º 20
0
        //public ActionResult FeedBack()
        //{
        //    //创建支付应答对象
        //    ResponseHandler resHandler = new ResponseHandler(null);
        //    resHandler.Init();
        //    resHandler.SetKey(TenPayInfo.Key, TenPayInfo.AppKey);

        //    //判断签名
        //    if (resHandler.IsWXsignfeedback())
        //    {
        //        //回复服务器处理成功
        //        Response.Write("OK");
        //        Response.Write("OK:" + resHandler.GetDebugInfo());
        //    }
        //    else
        //    {
        //        //sha1签名失败
        //        Response.Write("fail");
        //        Response.Write("fail:" + resHandler.GetDebugInfo());
        //    }
        //    return null;
        //}

        public ActionResult JsApi()
        {
            string appId     = "";//TenPayV3Info.AppId
            string timeStamp = "";
            string nonceStr  = "";
            string package   = "";
            string paySign   = "";

            string sp_billno = Request["order_no"];
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28);
            }
            else
            {
                sp_billno = Request["order_no"].ToString();
            }

            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(null);

            //初始化
            packageReqHandler.Init();
            packageReqHandler.SetKey("" /*TenPayV3Info.Key*/);

            timeStamp = TenPayUtil.GetTimestamp();
            nonceStr  = TenPayUtil.GetNoncestr();

            //设置package订单参数
            packageReqHandler.SetParameter("appid", appId);                                                //公众账号ID
            packageReqHandler.SetParameter("mch_id", "" /*TenPayV3Info.Mchid*/);                           //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                                         //随机字符串
            packageReqHandler.SetParameter("body", "test");
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                                     //商家订单号
            packageReqHandler.SetParameter("total_fee", "1");                                              //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", /*Request.UserHostAddress*/ "8.8.8.8");     //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("notify_url", "www.weiweihi.com" /*_tenPayInfo.TenPayNotify*/); //接收财付通通知的URL
            packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString());                   //交易类型

            //获取package包
            string sign = packageReqHandler.CreateMd5Sign("key", "" /*TenPayV3Info.Key*/);

            packageReqHandler.SetParameter("sign", sign);                           //交易类型

            string data   = packageReqHandler.ParseXML();
            var    result = TenPayV3.Unifiedorder(data);

            var    res      = XDocument.Parse(result);
            string prepayId = res.Element("xml").Element("prepay_id").Value;

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("appid", appId);
            paySignReqHandler.SetParameter("timestamp", timeStamp);
            paySignReqHandler.SetParameter("noncestr", nonceStr);
            paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId));
            paySign = paySignReqHandler.CreateMd5Sign("signType", "MD5");



            //获取debug信息,建议把请求和debug信息写入日志,方便定位问题
            //string pakcageDebuginfo = packageReqHandler.getDebugInfo();
            //Response.Write("<br/>pakcageDebuginfo:" + pakcageDebuginfo + "<br/>");
            //string paySignDebuginfo = paySignReqHandler.getDebugInfo();
            //Response.Write("<br/>paySignDebuginfo:" + paySignDebuginfo + "<br/>");

            ViewData["appId"]     = appId;
            ViewData["timeStamp"] = timeStamp;
            ViewData["nonceStr"]  = nonceStr;
            ViewData["package"]   = package;
            ViewData["paySign"]   = paySign;

            return(View());
        }
Exemplo n.º 21
0
        public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null)
        {
            string         timestamp = "";
            string         noncestr  = "";
            string         str3      = "";
            string         str4      = orderId;
            string         str5      = DateTime.Now.ToString("yyyyMMdd");
            RequestHandler handler   = new RequestHandler();

            handler.Init();
            timestamp = TenPayUtil.GetTimestamp();
            noncestr  = TenPayUtil.GetNoncestr();
            Config config = Utility <Config> .GetConfig(WorkDirectory);

            handler.SetParameter("appid", config.AppId);
            handler.SetParameter("mch_id", config.MCHID);
            handler.SetParameter("nonce_str", noncestr);
            handler.SetParameter("body", productInfo);
            handler.SetParameter("out_trade_no", str4);
            handler.SetParameter("total_fee", ((int)(totalFee * 100M)).ToString());
            handler.SetParameter("spbill_create_ip", _httpContextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>().RemoteIpAddress.ToString());
            handler.SetParameter("notify_url", notifyUrl);
            handler.SetParameter("trade_type", "JSAPI");
            handler.SetParameter("openid", string.IsNullOrWhiteSpace(openId) ? "" : openId);
            string str6 = handler.CreateMd5Sign("key", config.Key);

            handler.SetParameter("sign", str6);
            string str7 = handler.ParseXML();
            // Log.Debug("data=" + str7);
            XDocument document = XDocument.Parse(TenPayV3.Unifiedorder(str7));

            if (document == null)
            {
                throw new ApplicationException("调用统一支付出错:请求内容:" + str7);
            }
            if (document.Element("xml").Element("return_code").Value == "FAIL")
            {
                throw new ApplicationException("预支付失败:" + document.Element("xml").Element("return_msg").Value);
            }
            if (document.Element("xml").Element("result_code").Value == "FAIL")
            {
                throw new ApplicationException("预支付失败:" + document.Element("xml").Element("err_code_des").Value);
            }
            string         str11    = document.Element("xml").Element("prepay_id").Value;
            RequestHandler handler2 = new RequestHandler();

            handler2.SetParameter("appId", config.AppId);
            handler2.SetParameter("nonceStr", noncestr);
            handler2.SetParameter("timeStamp", timestamp);
            handler2.SetParameter("package", "prepay_id=" + str11);
            handler2.SetParameter("signType", "MD5");
            str3 = handler2.CreateMd5Sign("key", config.Key);
            handler2.SetParameter("sign", str3);
            handler2.SetParameter("prepayId", str11);
            Hashtable     allParameters = handler2.GetAllParameters();
            StringBuilder builder       = new StringBuilder();

            foreach (object obj2 in allParameters.Keys)
            {
                builder.Append(obj2 + ":" + allParameters[obj2]);
                builder.Append(",");
            }
            char[] trimChars = new char[] { ',' };
            return(builder.ToString().TrimEnd(trimChars));
        }
Exemplo n.º 22
0
        /// <summary>
        /// 提现转账
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="money"></param>
        /// <param name="openId"></param>
        /// <param name="checkName">【NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓 OPTION_CHECK:针对已实名认证的用户才校验真实姓名】</param>
        /// <param name="reUserName"></param>
        /// <param name="spbillCreateIp"></param>
        /// <param name="desc"></param>
        /// <param name="nonceStr"></param>
        public void WithdrawMoney(string orderId, decimal money, string openId, string checkName, string reUserName,
                                  string spbillCreateIp, string desc,
                                  string nonceStr = null)
        {
            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(null);

            //初始化
            packageReqHandler.Init();

            nonceStr = string.IsNullOrEmpty(nonceStr) ? TenPayUtil.GetNoncestr() : nonceStr;

            //设置package订单参数
            packageReqHandler.SetParameter("mch_appid", AppId);                    //公众账号ID
            packageReqHandler.SetParameter("mchid", MchId);                        //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                 //随机字符串
            packageReqHandler.SetParameter("desc", desc);                          //企业付款描述信息
            packageReqHandler.SetParameter("check_name", checkName);               //校验用户姓名选项
            packageReqHandler.SetParameter("re_user_name", reUserName);            //收款用户姓名
            packageReqHandler.SetParameter("partner_trade_no", orderId);           //商户订单号
            packageReqHandler.SetParameter("amount", (money * 100).ToString("0")); //转账金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", spbillCreateIp);    //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("openid", openId);                      //用户的openId
            string sign = packageReqHandler.CreateMd5Sign("key", Key);

            packageReqHandler.SetParameter("sign", sign); //签名
            string data = packageReqHandler.ParseXML();

            #region transfers()

            //发企业支付接口地址
            string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";

            //本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中)
            //string cert = @"D:\apiclient_cert.p12";
            //私钥(在安装证书时设置)
            string password = MchId;
            ServicePointManager.ServerCertificateValidationCallback =
                new RemoteCertificateValidationCallback(CheckValidationResult);
            //调用证书
            //X509Certificate2 cer = new X509Certificate2(cert, password,
            //    X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);


            X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            certStore.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection certCollection = certStore.Certificates.Find(
                X509FindType.FindByThumbprint, "9595BAC7475049BA7CB06ACD6CDC792BADF40217", false);

            X509Certificate2 cert = null;
            if (certCollection.Count > 0)
            {
                cert = certCollection[0];
            }

            #region 发起post请求

            HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
            webrequest.ClientCertificates.Add(cert);
            webrequest.Method = "post";

            byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
            webrequest.ContentLength = postdatabyte.Length;
            Stream stream;
            stream = webrequest.GetRequestStream();
            stream.Write(postdatabyte, 0, postdatabyte.Length);
            stream.Close();

            HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
            StreamReader    streamReader    = new StreamReader(httpWebResponse.GetResponseStream());
            string          result          = streamReader.ReadToEnd();

            #endregion

            #endregion

            var res = XDocument.Parse(result);

            if (res.Element("xml") == null)
            {
                throw new Exception("转账订单接口出错");
            }

            var returnCode = res.Element("xml").Element("return_code") == null
                ? null
                : res.Element("xml").Element("return_code").Value;
            var resultCode = res.Element("xml").Element("result_code") == null
                ? null
                : res.Element("xml").Element("result_code").Value;
            if (string.IsNullOrEmpty(returnCode))
            {
                throw new Exception("转账订单接口出错,未获取到返回状态码");
            }
            if (returnCode == "FAIL" || resultCode == "FAIL")
            {
                var returnMsg = res.Element("xml").Element("return_msg").ToString();
                throw new Exception(returnMsg);
            }
        }
Exemplo n.º 23
0
        /// <summary>
        /// 最新接口调用
        /// 2014-11-24
        /// </summary>
        /// <param name="ttFee">支付金额(单位元)</param>
        /// <param name="busiBody">订单内容</param>
        /// <param name="out_trade_no">订单号</param>
        /// <param name="code"></param>
        protected void WxPayDataV3(decimal ttFee, string busiBody, string out_trade_no, string code)
        {
            BLL.wx_payment_wxpay   wxPayBll    = new BLL.wx_payment_wxpay();
            Model.wx_payment_wxpay paymentInfo = wxPayBll.GetModelByWid(wid);

            BLL.wx_userweixin   uwBll    = new BLL.wx_userweixin();
            Model.wx_userweixin uwEntity = uwBll.GetModel(wid);

            // logBll.AddLog(wid,"【微支付】微信预定", "paypage.aspx WxPayDataV3", "211 wid:" + wid, 1);

            //先设置基本信息
            string MchId = paymentInfo.partnerId;       // "1218574001";//

            string partnerKey = paymentInfo.partnerKey; // 商户支付密钥Key。登录微信商户后台,进入栏目【账户设置】【密码安全】【API 安全】【API 密钥】

            string notify_url = "http://" + HttpContext.Current.Request.Url.Authority + "/api/payment/wxpay/notify_url.aspx";

            logBll.AddLog(wid, "【微支付】微信预定", "paypage.aspx WxPayDataV3", "uwEntity.AppId: " + uwEntity.AppId + "| uwEntity.AppSecret;" + uwEntity.AppSecret + "|code:" + code, 1);


            string timeStamp = "";
            string nonceStr  = "";
            string paySign   = "";

            string sp_billno = out_trade_no;
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28);
            }


            //创建支付应答对象
            Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);
            //初始化

            //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/);

            timeStamp = TenPayUtil.GetTimestamp();
            nonceStr  = TenPayUtil.GetNoncestr();

            //设置package订单参数
            packageReqHandler.SetParameter("appid", uwEntity.AppId);                      //公众账号ID
            packageReqHandler.SetParameter("mch_id", MchId);                              //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                        //随机字符串
            packageReqHandler.SetParameter("body", busiBody);                             //商品描述
            packageReqHandler.SetParameter("attach", wid + "|" + busiBody);
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                    //商家订单号
            packageReqHandler.SetParameter("total_fee", ((int)(ttFee * 100)).ToString()); //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress);  //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("notify_url", notify_url);                     //接收财付通通知的URL
            packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString());  //交易类型
            packageReqHandler.SetParameter("openid", openid);                             //用户的openId

            string sign = packageReqHandler.CreateMd5Sign("key", partnerKey);

            packageReqHandler.SetParameter("sign", sign);                           //签名

            string data = packageReqHandler.ParseXML();

            var    result   = TenPayV3.Unifiedorder(data);
            var    res      = XDocument.Parse(result);
            string prepayId = res.Element("xml").Element("prepay_id").Value;



            //设置支付参数
            Senparc.Weixin.MP.TenPayLibV3.RequestHandler paySignReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);
            paySignReqHandler.SetParameter("appId", uwEntity.AppId);
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId));
            paySignReqHandler.SetParameter("signType", "MD5");
            paySign = paySignReqHandler.CreateMd5Sign("key", partnerKey);

            packageValue  = "";
            packageValue += " \"appId\": \"" + uwEntity.AppId + "\", ";
            packageValue += " \"timeStamp\": \"" + timeStamp + "\", ";
            packageValue += " \"nonceStr\": \"" + nonceStr + "\", ";
            packageValue += " \"package\": \"" + string.Format("prepay_id={0}", prepayId) + "\", ";
            packageValue += " \"signType\": \"MD5\", ";
            packageValue += " \"paySign\": \"" + paySign + "\"";
        }
        public ActionResult JsApi(string code, string state)
        {
            if (string.IsNullOrEmpty(code))
            {
                return(Content("您拒绝了授权!"));
            }

            if (state != "JeffreySu")
            {
                //这里的state其实是会暴露给客户端的,验证能力很弱,这里只是演示一下
                //实际上可以存任何想传递的数据,比如用户ID,并且需要结合例如下面的Session["OAuthAccessToken"]进行验证
                return(Content("验证失败!请从正规途径进入!"));
            }

            //通过,用code换取access_token
            var openIdResult = OAuth.GetAccessToken(TenPayV3Info.AppId, TenPayV3Info.AppSecret, code);

            if (openIdResult.errcode != ReturnCode.请求成功)
            {
                return(Content("错误:" + openIdResult.errmsg));
            }

            string timeStamp = "";
            string nonceStr  = "";
            string paySign   = "";

            string sp_billno = Request["order_no"];
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28);
            }
            else
            {
                sp_billno = Request["order_no"].ToString();
            }

            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(null);

            //初始化
            packageReqHandler.Init();
            //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/);

            timeStamp = TenPayUtil.GetTimestamp();
            nonceStr  = TenPayUtil.GetNoncestr();

            //设置package订单参数
            packageReqHandler.SetParameter("appid", TenPayV3Info.AppId);                 //公众账号ID
            packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);                //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                       //随机字符串
            packageReqHandler.SetParameter("body", "test");
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                   //商家订单号
            packageReqHandler.SetParameter("total_fee", "1");                            //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("notify_url", TenPayV3Info.TenPayV3Notify);   //接收财付通通知的URL
            packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString()); //交易类型
            packageReqHandler.SetParameter("openid", openIdResult.openid);               //用户的openId

            string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);

            packageReqHandler.SetParameter("sign", sign);                           //签名

            string data = packageReqHandler.ParseXML();

            var    result   = TenPayV3.Unifiedorder(data);
            var    res      = XDocument.Parse(result);
            string prepayId = res.Element("xml").Element("prepay_id").Value;

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("appId", TenPayV3Info.AppId);
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId));
            paySignReqHandler.SetParameter("signType", "MD5");
            paySign = paySignReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);

            ViewData["appId"]     = TenPayV3Info.AppId;
            ViewData["timeStamp"] = timeStamp;
            ViewData["nonceStr"]  = nonceStr;
            ViewData["package"]   = string.Format("prepay_id={0}", prepayId);
            ViewData["paySign"]   = paySign;

            return(View());
        }
Exemplo n.º 25
0
        public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null)
        {
            string strResult = string.Empty;
            Config payConfig = Utility <Config> .GetConfig(WorkDirectory);

            if (string.IsNullOrEmpty(payConfig.AppId))
            {
                throw new PluginException("未设置AppId");
            }
            if (string.IsNullOrEmpty(payConfig.MCHID))
            {
                throw new PluginException("未设置MCHID");
            }

            string strNonce     = TenPayUtil.GetNoncestr();
            string strStartTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            //参数处理
            RequestHandler paraHandler = new RequestHandler();

            paraHandler.SetParameter("appid", payConfig.AppId);    //微信分配的公众账号ID
            paraHandler.SetParameter("mch_id", payConfig.MCHID);   //微信支付分配的商户号
            paraHandler.SetParameter("device_info", string.Empty); //可不填
            paraHandler.SetParameter("nonce_str", strNonce);
            paraHandler.SetParameter("body", productInfo);
            paraHandler.SetParameter("attach", string.Empty);  //可不填
            paraHandler.SetParameter("out_trade_no", orderId); //内部订单号,订单系统全局唯一
            paraHandler.SetParameter("total_fee", ((int)(totalFee * 100)).ToString());
            paraHandler.SetParameter("spbill_create_ip", "222.240.184.122");
            paraHandler.SetParameter("time_start", strStartTime);
            paraHandler.SetParameter("time_expire", string.Empty);
            paraHandler.SetParameter("goods_tag", string.Empty);
            paraHandler.SetParameter("notify_url", notifyUrl);             //支付成功通知商户URL
            paraHandler.SetParameter("trade_type", "NATIVE");              //原生支付
            paraHandler.SetParameter("openid", openId);                    //Native模式可不填
            paraHandler.SetParameter("product_id", orderId);               //Native模式必填

            string sign = paraHandler.CreateMd5Sign("key", payConfig.Key); //按约定规则生成MD5,规则参考接口文档

            paraHandler.SetParameter("sign", sign);

            string    strXml      = paraHandler.ParseXML();
            string    result      = TenPayV3.Unifiedorder(strXml);//调用统一接口
            XDocument xmlDocument = XDocument.Parse(result);

            if (xmlDocument == null)
            {
                throw new PluginException("调用统一支付接口(Native)时出错:" + strXml);
            }

            XElement e_return = xmlDocument.Element("xml").Element("return_code");
            XElement e_result = xmlDocument.Element("xml").Element("return_msg");

            if (e_return == null)
            {
                throw new PluginException("调用统一支付接口(Native)时,返回参数异常");
            }

            //处理返回时先判断协议错误码,再业务,最后交易状态
            if (e_return.Value == "SUCCESS")
            {
                e_result = xmlDocument.Element("xml").Element("result_code");
                XElement e_errdes = xmlDocument.Element("xml").Element("err_code_des");
                if (e_result.Value == "SUCCESS")
                {
                    e_result  = xmlDocument.Element("xml").Element("code_url");
                    strResult = e_result.Value;
                }
                else
                {
                    throw new PluginException("调用统一支付接口(Native)时,接口返回异常:" + e_errdes.Value);
                }
            }
            else
            {
                throw new PluginException("调用统一支付接口(Native)时,接口返回异常:" + e_result.Value);
            }
            return(strResult);
        }
Exemplo n.º 26
0
        public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null)
        {
            string timeStamp = "";
            string nonceStr  = "";
            string paySign   = "";

            string sp_billno = orderId;
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler();

            //初始化
            packageReqHandler.Init();
            //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/);

            timeStamp = TenPayUtil.GetTimestamp();
            nonceStr  = TenPayUtil.GetNoncestr();

            Config config = Utility <Config> .GetConfig(WorkDirectory);

            //设置package订单参数
            packageReqHandler.SetParameter("appid", config.AppId);                                                                                                   //公众账号ID
            packageReqHandler.SetParameter("mch_id", config.MCHID);                                                                                                  //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                                                                                                   //随机字符串
            packageReqHandler.SetParameter("body", productInfo);
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                                                                                               //商家订单号
            packageReqHandler.SetParameter("total_fee", ((int)(totalFee * 100)).ToString());                                                                         //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", _httpContextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>().RemoteIpAddress.ToString()); //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("notify_url", notifyUrl);                                                                                                 //接收财付通通知的URL
            packageReqHandler.SetParameter("trade_type", "JSAPI");                                                                                                   //交易类型
            packageReqHandler.SetParameter("openid", openId);                                                                                                        //用户的openId

            string sign = packageReqHandler.CreateMd5Sign("key", config.Key);

            packageReqHandler.SetParameter("sign", sign);                           //签名

            string data = packageReqHandler.ParseXML();

            var result = TenPayV3.Unifiedorder(data);
            var res    = XDocument.Parse(result);

            if (res == null)
            {
                throw new ApplicationException("调用统一支付出错:请求内容:" + data);
            }
            string returnCode = res.Element("xml").Element("return_code").Value;

            if (returnCode == "FAIL")//失败
            {
                throw new ApplicationException("预支付失败:" + res.Element("xml").Element("return_msg").Value);
            }

            string resultCode = res.Element("xml").Element("result_code").Value;

            if (resultCode == "FAIL")
            {
                throw new ApplicationException("预支付失败:" + res.Element("xml").Element("err_code_des").Value);
            }

            string prepayId = res.Element("xml").Element("prepay_id").Value;


            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler();

            paySignReqHandler.SetParameter("appId", config.AppId);
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId));
            paySignReqHandler.SetParameter("signType", "MD5");
            paySign = paySignReqHandler.CreateMd5Sign("key", config.Key);


            string js = string.Format("WeixinJSBridge.invoke('getBrandWCPayRequest', {{" +
                                      "'appId': '{0}'," +
                                      "'timeStamp': '{1}'," +
                                      "'nonceStr': '{2}'," +
                                      "'package': '{3}'," +
                                      "'signType': 'MD5'," +
                                      "'paySign': '{4}'" +
                                      "}}, function (res) {{" +
                                      "if (res.err_msg == 'get_brand_wcpay_request:ok') {{" +
                                      "location.href='" + returnUrl + "'" +
                                      "}}else alert('支付失败!')" +
                                      "}});", config.AppId, timeStamp, nonceStr, string.Format("prepay_id={0}", prepayId), paySign);

            return(string.Format("javascript:{0}", js));
        }
Exemplo n.º 27
0
        public ActionResult JsApi()
        {
            //string appId = TenPayInfo.AppId;
            string timeStamp    = "";
            string nonceStr     = "";
            string packageValue = "";
            string paySign      = "";

            string sp_billno = Request["order_no"];
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(4);
            }
            else
            {
                sp_billno = Request["order_no"].ToString();
            }

            sp_billno = TenPayInfo.PartnerId + sp_billno;

            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(null);

            //初始化
            packageReqHandler.Init();
            packageReqHandler.SetKey(TenPayInfo.Key);

            //设置package订单参数
            packageReqHandler.SetParameter("partner", TenPayInfo.PartnerId);    //商户号
            packageReqHandler.SetParameter("fee_type", "1");                    //币种,1人民币
            packageReqHandler.SetParameter("input_charset", "GBK");
            packageReqHandler.SetParameter("bank_type", "WX");
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                   //商家订单号
            packageReqHandler.SetParameter("total_fee", "1");                            //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify);       //接收财付通通知的URL
            packageReqHandler.SetParameter("body", "JSAPIdemo");                         //商品描述
            packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP

            //获取package包
            packageValue = packageReqHandler.GetRequestURL();

            //调起微信支付签名
            timeStamp = TenPayUtil.GetTimestamp();
            nonceStr  = TenPayUtil.GetNoncestr();

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("appid", TenPayInfo.AppId);
            paySignReqHandler.SetParameter("appkey", TenPayInfo.AppKey);
            paySignReqHandler.SetParameter("noncestr", nonceStr);
            paySignReqHandler.SetParameter("timestamp", timeStamp);
            paySignReqHandler.SetParameter("package", packageValue);
            paySign = paySignReqHandler.CreateSHA1Sign();
            //TenPay.Delivernotify(TenPayInfo.AppId, "oX99MDgNcgwnz3zFN3DNmo8uwa-w", "111112222233333", sp_billno,
            //                     timeStamp, "1", "ok", "53cca9d47b883bd4a5c85a9300df3da0cb48565c", "sha1");


            //获取debug信息,建议把请求和debug信息写入日志,方便定位问题
            //string pakcageDebuginfo = packageReqHandler.getDebugInfo();
            //Response.Write("<br/>pakcageDebuginfo:" + pakcageDebuginfo + "<br/>");
            //string paySignDebuginfo = paySignReqHandler.getDebugInfo();
            //Response.Write("<br/>paySignDebuginfo:" + paySignDebuginfo + "<br/>");

            //TODO:和JSSDK一样整合信息包
            ViewData["appId"]        = TenPayInfo.AppId;
            ViewData["timeStamp"]    = timeStamp;
            ViewData["nonceStr"]     = nonceStr;
            ViewData["packageValue"] = packageValue;
            ViewData["paySign"]      = paySign;

            return(View());
        }
Exemplo n.º 28
0
        public ActionResult Index()
        {
            string sp_billno = Request["orderId"].ToString();

            ViewData["orderId"] = sp_billno;
            string timeStamp = TenPayUtil.GetTimestamp();
            string nonceStr  = TenPayUtil.GetNoncestr();
            string paySign   = "";


            string  body     = string.Empty;
            string  fee      = string.Empty;
            decimal totalfee = 0;

            //根据订单号获取从数据库中body fee 等信息
            try
            {
                var goodsinfos = this.customerOrder.GetOrderById(Int64.Parse(sp_billno));
                ViewData["Goods"] = goodsinfos;
                foreach (var goodinfo in goodsinfos)
                {
                    totalfee += goodinfo.Price * goodinfo.Quantity;
                }
                body = "商品数量" + goodsinfos.Count;
                var integerpart = decimal.Truncate(totalfee);
                var decimalpart = decimal.Floor((totalfee - integerpart) * 100);
                fee             = (integerpart * 100 + decimalpart).ToString();
                ViewData["Fee"] = totalfee;
            }
            catch (Exception ex)
            {
                ViewData["Msg"] = ex.Message;
                return(View("failurePay"));
            }

            //附加数据
            string attach = sp_billno;
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (string.IsNullOrEmpty(sp_billno))
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                //sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28);
                ViewData["Msg"] = "订单生成错误";
                return(View("failurePay"));
            }

            //sp_billno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28);

            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(null);
            //初始化
            //packageReqHandler.Init();
            //packageReqHandler.SetKey(TenPayInfo.Key);
            //设置package订单参数
            string openid = Request.Cookies["sid"].Value;

            packageReqHandler.SetParameter("appid", TenPayInfo.AppId);                   //公众账号ID
            packageReqHandler.SetParameter("body", body);
            packageReqHandler.SetParameter("mch_id", TenPayInfo.Mchid);                  //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr.ToLower());             //随机字符串
            packageReqHandler.SetParameter("notify_url", TenPayInfo.TenPayNotify);       //接收财付通通知的URL
            packageReqHandler.SetParameter("openid", openid);                            //openid
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                   //商家订单号
            packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("total_fee", fee);                            //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("trade_type", "JSAPI");                       //交易类型

            //获取package包
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayInfo.Key);

            packageReqHandler.SetParameter("sign", sign);                           //交易类型
            string data   = packageReqHandler.ParseXML();
            var    result = TenPayV3.Unifiedorder(data);
            var    res    = XDocument.Parse(result);

            string prepayId = "";

            try
            {
                if (res.Element("xml").Element("return_code").Value == "SUCCESS")
                {
                    prepayId = res.Element("xml").Element("prepay_id").Value;
                }
            }
            catch (Exception ex)
            {
                ViewData["Msg"] = ex.Message;
                return(View("failurePay"));
            }
            string package = string.Format("prepay_id={0}", prepayId);

            timeStamp = TenPayUtil.GetTimestamp();

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("appId", TenPayInfo.AppId);
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("package", package);
            paySignReqHandler.SetParameter("signType", "MD5");
            paySign = paySignReqHandler.CreateMd5Sign("key", TenPayInfo.Key);

            ViewData["appId"]     = TenPayInfo.AppId;
            ViewData["timeStamp"] = timeStamp;
            ViewData["nonceStr"]  = nonceStr;
            ViewData["package"]   = package;
            ViewData["paySign"]   = paySign;

            return(View());
        }
Exemplo n.º 29
0
        public string GetRequestUrl(string returnUrl, string notifyUrl, string orderId, decimal totalFee, string productInfo, string openId = null)
        {
            string empty  = string.Empty;
            Config config = Utility <Config> .GetConfig(base.WorkDirectory);

            if (string.IsNullOrEmpty(config.AppId))
            {
                throw new PluginException("未设置AppId");
            }
            if (string.IsNullOrEmpty(config.MCHID))
            {
                throw new PluginException("未设置MCHID");
            }
            string         noncestr       = TenPayUtil.GetNoncestr();
            string         str            = DateTime.Now.ToString("yyyyMMddHHmmss");
            RequestHandler requestHandler = new RequestHandler();

            requestHandler.SetParameter("appid", config.AppId);
            requestHandler.SetParameter("mch_id", config.MCHID);
            requestHandler.SetParameter("device_info", string.Empty);
            requestHandler.SetParameter("nonce_str", noncestr);
            requestHandler.SetParameter("body", productInfo);
            requestHandler.SetParameter("attach", string.Empty);
            requestHandler.SetParameter("out_trade_no", orderId);
            int num = (int)(totalFee * new decimal(100));

            requestHandler.SetParameter("total_fee", num.ToString());
            requestHandler.SetParameter("spbill_create_ip", "222.240.184.122");
            requestHandler.SetParameter("time_start", str);
            requestHandler.SetParameter("time_expire", string.Empty);
            requestHandler.SetParameter("goods_tag", string.Empty);
            requestHandler.SetParameter("notify_url", notifyUrl);
            requestHandler.SetParameter("trade_type", "NATIVE");
            requestHandler.SetParameter("openid", openId);
            requestHandler.SetParameter("product_id", orderId);
            string str1 = requestHandler.CreateMd5Sign("key", config.Key);

            requestHandler.SetParameter("sign", str1);
            string    str2      = requestHandler.ParseXML();
            XDocument xDocument = XDocument.Parse(TenPayV3.Unifiedorder(str2));

            if (xDocument == null)
            {
                throw new PluginException(string.Concat("调用统一支付接口(Native)时出错:", str2));
            }
            XElement xElement  = xDocument.Element("xml").Element("return_code");
            XElement xElement1 = xDocument.Element("xml").Element("return_msg");

            if (xElement == null)
            {
                throw new PluginException("调用统一支付接口(Native)时,返回参数异常");
            }
            if (!(xElement.Value == "SUCCESS"))
            {
                throw new PluginException(string.Concat("调用统一支付接口(Native)时,接口返回异常:", xElement1.Value));
            }
            xElement1 = xDocument.Element("xml").Element("result_code");
            XElement xElement2 = xDocument.Element("xml").Element("err_code_des");

            if (!(xElement1.Value == "SUCCESS"))
            {
                throw new PluginException(string.Concat("调用统一支付接口(Native)时,接口返回异常:", xElement2.Value));
            }
            xElement1 = xDocument.Element("xml").Element("code_url");
            empty     = xElement1.Value;
            return(empty);
        }
Exemplo n.º 30
0
        public ActionResult JsPay(string code, string state)
        {
            try
            {
                Logger.LogDebug("进来啦");

                var openIdResult = OAuthApi.GetAccessToken(this.weChatOptions.AppId, this.weChatOptions.AppSecret, code);
                if (openIdResult.errcode != Senparc.Weixin.ReturnCode.请求成功)
                {
                    throw new Exception($"微信支付申请失败,Erro:{openIdResult.errmsg}");
                }
                Logger.LogDebug("获取AccessToken成功");
                if (this.memoryCache.TryGetValue <WeChatPayRequest>(state, out WeChatPayRequest request))
                {
                    Logger.LogDebug(Newtonsoft.Json.JsonConvert.SerializeObject(request));
                }
                else
                {
                    Logger.LogDebug($"未找到对应的付款请求,state:{state}");
                }

                var array      = state.Split('|');
                var bcTradeNo  = array[0];
                var money      = decimal.Parse(array[1]);
                var SuccessUrl = array[2].ToString();                                          //成功跳转地址
                var FailedUrl  = array[3].ToString();                                          //失败跳转地址

                var notifyUrl = "https://bcl.baocailang.com:8995/api/Payment/WeChatPayNotify"; //回调地址

                var nonceStr  = TenPayUtil.GetNoncestr();
                var timeStamp = TenPayUtil.GetTimestamp();

                string billBody = "商城--订单支付";

                var xmlDataInfo = new TenPayV3UnifiedorderRequestData(
                    this.weChatOptions.AppId,
                    this.weChatOptions.MchId,
                    billBody,
                    request.PaymentId,
                    (int)(request.TotalFee * 100),
                    "192.168.2.1",
                    notifyUrl,
                    Senparc.Weixin.TenPay.TenPayV3Type.JSAPI,
                    openIdResult.openid,
                    this.weChatOptions.ApiKey,
                    nonceStr
                    );
                Logger.LogDebug($"申请支付结果:{0}", Newtonsoft.Json.JsonConvert.SerializeObject(xmlDataInfo));
                var result = TenPayV3.Unifiedorder(xmlDataInfo);

                Logger.LogDebug($"申请JsPay支付返回code:{result.result_code}");
                Logger.LogDebug($"申请JsPay支付返回:{result.ResultXml}");

                Logger.LogDebug($"申请JsPay支付返回结果:{result.return_msg}");

                var package = string.Format("prepay_id={0}", result.prepay_id);

                Logger.LogDebug($"Package={package}");

                var jsPayParam = new WeChatPayParameter
                {
                    AppId      = result.appid,
                    MchId      = result.mch_id,
                    NonceStr   = result.nonce_str,
                    PaySign    = TenPayV3.GetJsPaySign(this.weChatOptions.AppId, timeStamp, nonceStr, package, this.weChatOptions.ApiKey),
                    SuccessUrl = request.SuccessUrl,
                    FailedUrl  = request.FailedUrl,
                    Package    = package,
                    TimeStamp  = timeStamp
                };

                return(View(jsPayParam));
            }
            catch (Exception ex)
            {
                Logger.LogDebug("启动微信支付失败--{0}", ex.Message);
                throw new Exception(ex.Message);
            }
        }