/// <summary>
        ///
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="mchId"></param>
        /// <param name="body"></param>
        /// <param name="outTradeNo"></param>
        /// <param name="totalFee">单位:分</param>
        /// <param name="spbillCreateIp"></param>
        /// <param name="notifyUrl"></param>
        /// <param name="tradeType"></param>
        /// <param name="openid"></param>
        /// <param name="key"></param>
        /// <param name="nonceStr"></param>
        /// <param name="deviceInfo">自定义参数,可以为终端设备号(门店号或收银设备ID),PC网页或公众号内支付可以传"WEB",String(32)如:013467007045764</param>
        /// <param name="timeStart">订单生成时间,如果为空,则默认为当前服务器时间</param>
        /// <param name="timeExpire">订单失效时间,留空则不设置失效时间</param>
        /// <param name="detail">商品详细列表</param>
        /// <param name="attach">附加数据</param>
        /// <param name="feeType">符合ISO 4217标准的三位字母代码,默认人民币:CNY</param>
        /// <param name="goodsTag">商品标记,使用代金券或立减优惠功能时需要的参数,说明详见代金券或立减优惠。String(32),如:WXG</param>
        /// <param name="productId">trade_type=NATIVE时(即扫码支付),此参数必传。此参数为二维码中包含的商品ID,商户自行定义。String(32),如:12235413214070356458058</param>
        /// <param name="limitPay">是否限制用户不能使用信用卡支付</param>
        public TenPayV3UnifiedorderRequestData(string appId, string mchId, string body, string outTradeNo, int totalFee, string spbillCreateIp,
                                               string notifyUrl, TenPayV3Type tradeType, string openid, string key, string nonceStr,
                                               string deviceInfo = null, DateTime?timeStart = null, DateTime?timeExpire = null,
                                               string detail     = null, string attach      = null, string feeType = "CNY", string goodsTag = null, string productId = null, bool limitPay = false)
        {
            AppId          = appId;
            MchId          = mchId;
            DeviceInfo     = deviceInfo;
            NonceStr       = nonceStr;
            SignType       = "MD5";
            Body           = body ?? "Senparc TenpayV3";
            Detail         = detail;
            Attach         = attach;
            OutTradeNo     = outTradeNo;
            FeeType        = feeType;
            TotalFee       = totalFee;
            SpbillCreateIP = spbillCreateIp;
            TimeStart      = (timeStart ?? DateTime.Now).ToString("yyyyMMddHHmmss");
            TimeExpire     = timeExpire.HasValue ? timeExpire.Value.ToString("yyyyMMddHHmmss") : null;
            GoodsTag       = goodsTag;
            NotifyUrl      = notifyUrl;
            TradeType      = tradeType;
            ProductId      = productId;
            LimitPay       = limitPay ? "no_credit" : null;
            OpenId         = openid;
            Key            = key;

            #region 设置RequestHandler

            //创建支付应答对象
            PackageRequestHandler = new RequestHandler(null);
            //初始化
            PackageRequestHandler.Init();

            //设置package订单参数
            //以下设置顺序按照官方文档排序,方便维护:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
            PackageRequestHandler.SetParameter("appid", this.AppId);                       //公众账号ID
            PackageRequestHandler.SetParameter("mch_id", this.MchId);                      //商户号
            PackageRequestHandler.SetParameterWhenNotNull("device_info", this.DeviceInfo); //自定义参数
            PackageRequestHandler.SetParameter("nonce_str", this.NonceStr);                //随机字符串
            PackageRequestHandler.SetParameterWhenNotNull("sign_type", this.SignType);     //签名类型,默认为MD5
            PackageRequestHandler.SetParameter("body", this.Body);                         //商品信息
            PackageRequestHandler.SetParameterWhenNotNull("detail", this.Detail);          //商品详细列表
            PackageRequestHandler.SetParameterWhenNotNull("attach", this.Attach);          //附加数据
            PackageRequestHandler.SetParameter("out_trade_no", this.OutTradeNo);           //商家订单号
            PackageRequestHandler.SetParameterWhenNotNull("fee_type", this.FeeType);       //符合ISO 4217标准的三位字母代码,默认人民币:CNY
            PackageRequestHandler.SetParameter("total_fee", this.TotalFee.ToString());     //商品金额,以分为单位(money * 100).ToString()
            PackageRequestHandler.SetParameter("spbill_create_ip", this.SpbillCreateIP);   //用户的公网ip,不是商户服务器IP
            PackageRequestHandler.SetParameterWhenNotNull("time_start", this.TimeStart);   //订单生成时间
            PackageRequestHandler.SetParameterWhenNotNull("time_expire", this.TimeExpire); //订单失效时间
            PackageRequestHandler.SetParameterWhenNotNull("goods_tag", this.GoodsTag);     //商品标记
            PackageRequestHandler.SetParameter("notify_url", this.NotifyUrl);              //接收财付通通知的URL
            PackageRequestHandler.SetParameter("trade_type", this.TradeType.ToString());   //交易类型
            PackageRequestHandler.SetParameterWhenNotNull("product_id", this.ProductId);   //trade_type=NATIVE时(即扫码支付),此参数必传。
            PackageRequestHandler.SetParameterWhenNotNull("limit_pay", this.LimitPay);     //上传此参数no_credit--可限制用户不能使用信用卡支付
            PackageRequestHandler.SetParameter("openid", this.OpenId);                     //用户的openId,trade_type=JSAPI时(即公众号支付),此参数必传
            Sign = PackageRequestHandler.CreateMd5Sign("key", this.Key);
            PackageRequestHandler.SetParameter("sign", Sign);                              //签名
            #endregion
        }
Esempio n. 2
0
 /// <summary>
 /// 普通商户
 /// </summary>
 /// <param name="appId"></param>
 /// <param name="mchId"></param>
 /// <param name="body"></param>
 /// <param name="outTradeNo"></param>
 /// <param name="totalFee">单位:分</param>
 /// <param name="spbillCreateIp"></param>
 /// <param name="notifyUrl"></param>
 /// <param name="tradeType"></param>
 /// <param name="openid">trade_type=NATIVE时,OpenId应该为null</param>
 /// <param name="key"></param>
 /// <param name="nonceStr"></param>
 /// <param name="deviceInfo">自定义参数,可以为终端设备号(门店号或收银设备ID),PC网页或公众号内支付可以传"WEB",String(32)如:013467007045764</param>
 /// <param name="timeStart">订单生成时间,如果为空,则默认为当前服务器时间</param>
 /// <param name="timeExpire">订单失效时间,留空则不设置失效时间</param>
 /// <param name="detail">商品详细列表</param>
 /// <param name="attach">附加数据</param>
 /// <param name="feeType">符合ISO 4217标准的三位字母代码,默认人民币:CNY</param>
 /// <param name="goodsTag">商品标记,使用代金券或立减优惠功能时需要的参数,说明详见代金券或立减优惠。String(32),如:WXG</param>
 /// <param name="productId">trade_type=NATIVE时(即扫码支付),此参数必传。此参数为二维码中包含的商品ID,商户自行定义。String(32),如:12235413214070356458058</param>
 /// <param name="limitPay">是否限制用户不能使用信用卡支付</param>
 public TenPayV3UnifiedorderRequestData(
     string appId, string mchId, string body, string outTradeNo, int totalFee, string spbillCreateIp,
     string notifyUrl, TenPayV3Type tradeType, string openid, string key, string nonceStr,
     string deviceInfo = null, DateTime?timeStart = null, DateTime?timeExpire = null,
     string detail     = null, string attach      = null, string feeType = "CNY", string goodsTag = null,
     string productId  = null, bool limitPay      = false
     ) : this(appId, mchId, null, null, body, outTradeNo, totalFee, spbillCreateIp, notifyUrl, tradeType, openid, null, key, nonceStr, deviceInfo, timeStart, timeExpire, detail, attach, feeType, goodsTag, productId, limitPay)
 {
 }
Esempio n. 3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="appId"></param>
 /// <param name="mchId"></param>
 /// <param name="body"></param>
 /// <param name="outTradeNo"></param>
 /// <param name="totalFee"></param>
 /// <param name="spbillCreateIp"></param>
 /// <param name="notifyUrl"></param>
 /// <param name="tradeType"></param>
 /// <param name="openid"></param>
 /// <param name="key"></param>
 /// <param name="nonceStr"></param>
 public TenPayV3XmlDataInfo(string appId, string mchId, string body, string outTradeNo, decimal totalFee, string spbillCreateIp, string notifyUrl, TenPayV3Type tradeType, string openid, string key, string nonceStr)
 {
     AppId          = appId;
     MchId          = mchId;
     NonceStr       = nonceStr;
     Body           = body ?? "test";
     OutTradeNo     = outTradeNo;
     TotalFee       = totalFee;
     SpbillCreateIP = spbillCreateIp;
     NotifyUrl      = notifyUrl;
     TradeType      = tradeType;
     OpenId         = openid;
     Key            = key;
 }
Esempio n. 4
0
        /// <summary>
        /// 创建预支付交易单
        /// </summary>
        private UnifiedorderResult CreatePrePayOrder(TenPayV3Type payType, string orderNo, int amount, string body, string ip, string openId, string productId, string attach)
        {
            string nonceStr = String2.GetGuid();

            string appId = JsApiAppId;
            string mchId = JsApiMchId;
            string key   = JsApiKey;

            if (payType == TenPayV3Type.APP)
            {
                appId = AppAppId;
                mchId = AppMchId;
                key   = AppKey;
            }

            var param = new TenPayV3UnifiedorderRequestData(appId, mchId, body, orderNo, amount, ip, NotifyUrl, payType, openId, key, nonceStr, productId: productId, attach: attach);
            var order = TenPayV3.Unifiedorder(param);

            return(order);
        }
Esempio n. 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="mchId"></param>
        /// <param name="body"></param>
        /// <param name="outTradeNo"></param>
        /// <param name="totalFee"></param>
        /// <param name="spbillCreateIp"></param>
        /// <param name="notifyUrl"></param>
        /// <param name="tradeType"></param>
        /// <param name="openid"></param>
        /// <param name="key"></param>
        /// <param name="nonceStr"></param>
        public TenPayV3RequestData(string appId, string mchId, string body, string outTradeNo, decimal totalFee, string spbillCreateIp, string notifyUrl, TenPayV3Type tradeType, string openid, string key, string nonceStr)
        {
            AppId          = appId;
            MchId          = mchId;
            NonceStr       = nonceStr;
            Body           = body ?? "Senparc TenpayV3";
            OutTradeNo     = outTradeNo;
            TotalFee       = totalFee;
            SpbillCreateIP = spbillCreateIp;
            NotifyUrl      = notifyUrl;
            TradeType      = tradeType;
            OpenId         = openid;
            Key            = key;

            #region 设置RequestHandler

            //创建支付应答对象
            PackageRequestHandler = new RequestHandler(null);
            //初始化
            PackageRequestHandler.Init();

            //设置package订单参数
            PackageRequestHandler.SetParameter("appid", this.AppId);                     //公众账号ID
            PackageRequestHandler.SetParameter("mch_id", this.MchId);                    //商户号
            PackageRequestHandler.SetParameter("nonce_str", this.NonceStr);              //随机字符串
            PackageRequestHandler.SetParameter("body", this.NonceStr);                   //商品信息
            PackageRequestHandler.SetParameter("out_trade_no", this.OutTradeNo);         //商家订单号
            PackageRequestHandler.SetParameter("total_fee", this.TotalFee.ToString());   //商品金额,以分为单位(money * 100).ToString()
            PackageRequestHandler.SetParameter("spbill_create_ip", this.SpbillCreateIP); //用户的公网ip,不是商户服务器IP
            PackageRequestHandler.SetParameter("notify_url", this.NotifyUrl);            //接收财付通通知的URL
            PackageRequestHandler.SetParameter("trade_type", this.TradeType.ToString()); //交易类型
            PackageRequestHandler.SetParameter("openid", this.OpenId);                   //用户的openId
            Sign = PackageRequestHandler.CreateMd5Sign("key", this.Key);
            PackageRequestHandler.SetParameter("sign", Sign);                            //签名
            #endregion
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="mchId"></param>
        /// <param name="body"></param>
        /// <param name="outTradeNo"></param>
        /// <param name="totalFee"></param>
        /// <param name="spbillCreateIp"></param>
        /// <param name="notifyUrl"></param>
        /// <param name="tradeType"></param>
        /// <param name="openid"></param>
        /// <param name="key"></param>
        /// <param name="nonceStr"></param>
        public TenPayV3RequestData(string appId, string mchId, string body, string outTradeNo, decimal totalFee, string spbillCreateIp, string notifyUrl, TenPayV3Type tradeType, string openid, string key, string nonceStr)
        {
            AppId = appId;
            MchId = mchId;
            NonceStr = nonceStr;
            Body = body ?? "Senparc TenpayV3";
            OutTradeNo = outTradeNo;
            TotalFee = totalFee;
            SpbillCreateIP = spbillCreateIp;
            NotifyUrl = notifyUrl;
            TradeType = tradeType;
            OpenId = openid;
            Key = key;

            #region 设置RequestHandler

            //创建支付应答对象
            PackageRequestHandler = new RequestHandler(null);
            //初始化
            PackageRequestHandler.Init();

            //设置package订单参数
            PackageRequestHandler.SetParameter("appid", this.AppId);          //公众账号ID
            PackageRequestHandler.SetParameter("mch_id", this.MchId);         //商户号
            PackageRequestHandler.SetParameter("nonce_str", this.NonceStr);                    //随机字符串
            PackageRequestHandler.SetParameter("body", this.NonceStr);    //商品信息
            PackageRequestHandler.SetParameter("out_trade_no", this.OutTradeNo);      //商家订单号
            PackageRequestHandler.SetParameter("total_fee", this.TotalFee.ToString());                    //商品金额,以分为单位(money * 100).ToString()
            PackageRequestHandler.SetParameter("spbill_create_ip", this.SpbillCreateIP);   //用户的公网ip,不是商户服务器IP
            PackageRequestHandler.SetParameter("notify_url", this.NotifyUrl);          //接收财付通通知的URL
            PackageRequestHandler.SetParameter("trade_type", this.TradeType.ToString());                        //交易类型
            PackageRequestHandler.SetParameter("openid", this.OpenId);                      //用户的openId
            Sign = PackageRequestHandler.CreateMd5Sign("key", this.Key);
            PackageRequestHandler.SetParameter("sign", Sign);                       //签名
            #endregion
        }
 /// <summary>
 /// 获取参数
 /// </summary>
 /// <param name="openId">用户的openId</param>
 /// <param name="outTradeNo">商家订单号</param>
 /// <param name="totalFee">商品金额, 以分为单位</param>
 /// <param name="body">商品信息</param>
 /// <param name="productId">二维码中包含的商品ID,商户自行定义。 </param>
 /// <param name="tradeType">交易类型</param>
 /// <returns></returns>
 public static WeChatUnifiedorderParamter GetSimpleParamter(string openId, string outTradeNo, int totalFee, string body, string productId, TenPayV3Type tradeType = TenPayV3Type.JSAPI)
 {
     return(new WeChatUnifiedorderParamter
     {
         TradeType = tradeType,
         OutTradeNo = outTradeNo,
         TotalFee = totalFee,
         Body = body,
         ProductId = productId,
         OpenId = openId
     });
 }
Esempio n. 8
0
        /// <summary>
        /// 调用微信支付,生成预支付交易ID:prepay_id
        /// </summary>
        /// <param name="param">微信支付参数</param>
        /// <returns></returns>
        public WxPayReturn Pay(WxPayParam param)
        {
            string       nonceStr  = TenPayV3Util.GetNoncestr();
            string       notifyUrl = string.Format(param.Domain + param.NotifyUrl);//通知地址,接收微信支付异步通知回调地址
            int          totalFee  = (int)(param.TotalFee * 100);
            TenPayV3Type tradeType = TenPayV3Type.JSAPI;

            switch (param.TradeType)
            {
            case TradeType.App:
                tradeType = TenPayV3Type.APP;
                break;

            case TradeType.JsApi:
                tradeType = TenPayV3Type.JSAPI;
                break;

            case TradeType.Native:
                tradeType = TenPayV3Type.NATIVE;
                break;
            }
            DateTime timeStart  = DateTime.Now;
            DateTime timeExpire = DateTime.Now.AddHours(0.5);
            //设置参数
            TenPayV3UnifiedorderRequestData requestData = new TenPayV3UnifiedorderRequestData(
                param.AppId,
                param.MchId,
                param.Body,
                param.OutTradeNo,
                totalFee,
                param.ServiceIpAddress,
                notifyUrl,
                tradeType,
                param.Openid,
                param.Key,
                nonceStr,
                param.DeviceInfo,
                timeStart,
                timeExpire,
                param.Detail,
                param.Attach,
                param.FeeType);
            var result = TenPayV3.Unifiedorder(requestData);

            LogHelper.Info(string.Format("生成预支付ID:{0}", JsonConvert.SerializeObject(result)));

            if (!result.IsReturnCodeSuccess())
            {
                throw new BaseException(result.return_msg);
            }
            if (!result.IsResultCodeSuccess())
            {
                throw new BaseException(result.err_code_des);
            }
            WxPayReturn wxPayReturn = new WxPayReturn();

            wxPayReturn.ReturnCode = WxPayState.Success;
            if (param.TradeType == TradeType.Native)
            {
                wxPayReturn.CodeUrl = result.code_url;
            }
            wxPayReturn.PrepayId   = result.prepay_id;
            wxPayReturn.DeviceInfo = result.device_info;
            return(wxPayReturn);
        }