Esempio n. 1
0
        public void TestCreatePreOrder2()
        {
            WeiXinPayChannel channel = new WeiXinPayChannel();

            channel.AppID                  = "wxd930ea5d5a258f4f";
            channel.AppSecret              = "db426a9829e4b49a0dcac7b4162da6b6";
            channel.PaySignKey             = "L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K";
            channel.ParnterID              = "1900000109";
            channel.ParnterKey             = "8934e7d15453e97507ef794cf7b0519d";
            channel.NotifyToTradeCenterURL = "http://www.qq.com";

            Package package = new Package()
            {
                Body           = "测试订单",
                NotifyUrl      = "http://www.qq.com",
                OutTradeNo     = "kODvVBBJ3THJ1jMB",
                Partner        = channel.ParnterID,
                SpbillCreateIp = "192.168.0.1",
                TotalFee       = "1"
            };

            WeiXinAppOrderRequest request = new WeiXinAppOrderRequest(channel);

            request.Traceid = "crestxu";
            request.SetPackage(package);

            var rsp        = WeiXinPay4AppGateway.CreatePreOrder(channel, request);
            var rspContent = rsp.ToJSON();

            Console.WriteLine(rspContent);
        }
Esempio n. 2
0
        public static AccessTokenInfo GetToken(WeiXinPayChannel pChannel)
        {
            string url     = GetUrl(WeiXinUrlType.Token);
            string content = string.Format("appid={0}&secret={1}", pChannel.AppID, pChannel.AppSecret);

            return(CallAPI <AccessTokenInfo>(url, content));
        }
Esempio n. 3
0
        public void TestNativeOrderHelper()
        {
            WeiXinPayChannel channel = new WeiXinPayChannel();

            channel.AppID                  = "wx8f74386d57405ec5";
            channel.AppSecret              = "2af3c935fc66e2087bff1064cde3a708";
            channel.PaySignKey             = "tFVyMIdj1DGCUMbahNzxTUxESkE6heBRtD2RWOfyzyh4WziirurWvBHt3WFVfQRlysh7T0MxMFHikBcScLUNrInygE4972yLyrZyFlay8tV4aKwtA3lBPNgI4qqJw46b";
            channel.ParnterID              = "1218285701";
            channel.ParnterKey             = "b158ca37b5fac76293e402e3144869fc";
            channel.NotifyToTradeCenterURL = "http://www.qq.com";

            Package package = new Package()
            {
                Body           = "测试订单",
                NotifyUrl      = "http://www.qq.com",
                OutTradeNo     = "kODvVBBJ3THJ1jMB",
                Partner        = channel.ParnterID,
                SpbillCreateIp = "192.168.0.1",
                TotalFee       = "1"
            };

            NativePayHelper req = new NativePayHelper(channel);

            req.SetPackage(package);
            Console.WriteLine(req.GenerateNativeUrl("12343252"));
            Console.WriteLine(req.GetParametersXMLStr());
        }
Esempio n. 4
0
        public void TestPreOrder()
        {
            //WeiXinPayChannel channel = new WeiXinPayChannel();
            //channel.AppID = "wx8f74386d57405ec5";
            //channel.AppSecret = "2af3c935fc66e2087bff1064cde3a708";
            //channel.PaySignKey = "tFVyMIdj1DGCUMbahNzxTUxESkE6heBRtD2RWOfyzyh4WziirurWvBHt3WFVfQRlysh7T0MxMFHikBcScLUNrInygE4972yLyrZyFlay8tV4aKwtA3lBPNgI4qqJw46b";
            //channel.ParnterID = "1218285701";
            //channel.ParnterKey = "b158ca37b5fac76293e402e3144869fc";
            //channel.NotifyToTradeCenterURL = "http://www.qq.com";

            WeiXinPayChannel channel = new WeiXinPayChannel();

            channel.AppID                  = "wxd930ea5d5a258f4f";
            channel.AppSecret              = "db426a9829e4b49a0dcac7b4162da6b6";
            channel.PaySignKey             = "L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K";
            channel.ParnterID              = "1900000109";
            channel.ParnterKey             = "8934e7d15453e97507ef794cf7b0519d";
            channel.NotifyToTradeCenterURL = "http://www.qq.com";
            var str = channel.ToJSON();

            PreOrderRequest req = new PreOrderRequest();

            req.ClientIP         = "192.168.0.1";
            req.GoodsDescription = "测试订单";
            req.OrderAmount      = 1;
            req.OrderNO          = CommonUtil.GenerateNoncestr();
            req.UserID           = "crestxu";

            var rsp = WeiXinPay4AppGateway.PreOrder(channel, req);

            Assert.IsTrue(rsp.IsSuccess);
        }
Esempio n. 5
0
        public bool CheckSign(WeiXinPayChannel pChannel)
        {
            var dic = new Dictionary <string, object>();

            dic["appid"]     = this.AppId;
            dic["appkey"]    = pChannel.PaySignKey;
            dic["timestamp"] = this.TimeStamp;
            dic["openid"]    = this.OpenId;
            var nosignstr = CommonUtil.GetParametersStr(dic);
            var sign      = CommonUtil.Sha1(nosignstr);

            return(sign == this.AppSignature);
        }
Esempio n. 6
0
        public static string GetUpdateFeedBackUrl(WeiXinPayChannel pChannel, string pFeedBackID, string pOpenID)
        {
            var tokenInfo = GetToken(pChannel);

            if (tokenInfo == null)
            {
                throw new Exception("获取Token失败");
            }
            if (!tokenInfo.IsSuccess)
            {
                throw new Exception(string.Format("获取Token失败:{0} {1}", tokenInfo.ErrorCode, tokenInfo.ErrorMessage));
            }
            var token = tokenInfo.Token;
            var url   = string.Format("{0}?access_token={1}&openid={2}&feedbackid={3}", GetUrl(WeiXinUrlType.UpdateFeedback), token, pOpenID, pFeedBackID);

            return(url);
        }
Esempio n. 7
0
        public static PreOrderResponse PreOrder(WeiXinAppOrderRequest pRequest, WeiXinPayChannel pChannel)
        {
            var tokenInfo = GetToken(pChannel);

            if (tokenInfo == null)
            {
                throw new Exception("获取Token失败");
            }
            if (!tokenInfo.IsSuccess)
            {
                throw new Exception(string.Format("获取Token失败:{0} {1}", tokenInfo.ErrorCode, tokenInfo.ErrorMessage));
            }
            var token = tokenInfo.Token;
            var url   = string.Format("{0}?access_token={1}", GetUrl(WeiXinUrlType.AppPreOrder), token);

            return(CallAPI <PreOrderResponse>(url, pRequest.GetContent()));
        }
Esempio n. 8
0
        public void TestGeneratePreOrderContent()
        {
            Dictionary <string, string> ps = new Dictionary <string, string>();

            ps.Add("timestamp", CommonUtil.GetCurrentTimeStamp().ToString());
            ps.Add("package", "bank_type=WX&body=test&fee_type=1&input_charset=UTF-8&notify_url=htttp%3a%2f%2fwww.baidu.com&out_trade_no=VxscC3lGoO5mBI63&partner=1900000109&spbill_create_ip=127.0.0.1&total_fee=1&sign=819255571F172EFB3994B99F2A7E1D85");
            ps.Add("noncestr", CommonUtil.GenerateNoncestr());
            ps.Add("traceid", "test");

            WeiXinPayChannel channel = new WeiXinPayChannel();

            channel.AppID      = "wxd930ea5d5a258f4f";
            channel.PaySignKey = "L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K";
            channel.ParnterKey = "8934e7d15453e97507ef794cf7b0519d";

            var preorderContent = CommonUtil.GeneratePreOrderContent(ps, channel);
            //Assert.IsTrue(preorderContent == "41fb55f446eac92a60c4a8cff91e51af38ebf505");
        }
Esempio n. 9
0
        public static bool UpdateFeedBack(WeiXinPayChannel pChannel, string pFeedBackID, string pOpenID, out string msg)
        {
            var tokenInfo = GetToken(pChannel);

            if (tokenInfo == null)
            {
                throw new Exception("获取Token失败");
            }
            if (!tokenInfo.IsSuccess)
            {
                throw new Exception(string.Format("获取Token失败:{0} {1}", tokenInfo.ErrorCode, tokenInfo.ErrorMessage));
            }
            var token = tokenInfo.Token;
            var url   = string.Format("{0}?access_token={1}&openid={2}&feedbackid={3}", GetUrl(WeiXinUrlType.UpdateFeedback), token, pOpenID, pFeedBackID);
            var dic   = JIT.Utility.Web.HttpClient.GetQueryString(url, "").DeserializeJSONTo <Dictionary <string, string> >();

            msg = dic["errmsg"].ToString();
            return(Convert.ToInt32(dic["errcode"]) == 0);
        }
Esempio n. 10
0
        /// <summary>
        /// 生成预订单内容
        /// </summary>
        /// <param name="pChannel"></param>
        /// <returns></returns>
        public InnerPreOrderRequestInfo GetContent(WeiXinPayChannel pChannel)
        {
            //组织参数
            Dictionary <string, string> parameters = new Dictionary <string, string>();
            var packageContent = this.GenerateOrderPackage(pChannel);

            parameters.Add("package", packageContent);
            var nonceStr = CommonUtil.GenerateNoncestr();

            parameters.Add("noncestr", nonceStr);
            var timeStamp = CommonUtil.GetCurrentTimeStamp();

            parameters.Add("timestamp", timeStamp.ToString());
            if (!string.IsNullOrWhiteSpace(this.UserID))
            {
                parameters.Add("traceid", this.UserID);
            }
            //生成预订单内容
            return(CommonUtil.GeneratePreOrderContent(parameters, pChannel));
        }
Esempio n. 11
0
        public void TestGenerateOrderPackage()
        {
            Dictionary <string, string> ps = new Dictionary <string, string>();

            ps.Add("bank_type", "WX");
            ps.Add("body", "test");
            ps.Add("fee_type", "1");
            ps.Add("input_charset", "UTF-8");
            ps.Add("notify_url", "htttp://www.baidu.com");
            ps.Add("out_trade_no", "VxscC3lGoO5mBI63");
            ps.Add("partner", "1900000109");
            ps.Add("spbill_create_ip", "127.0.0.1");
            ps.Add("total_fee", "1");

            WeiXinPayChannel channel = new WeiXinPayChannel();

            channel.ParnterKey = "8934e7d15453e97507ef794cf7b0519d";
            var packageContent = CommonUtil.GenerateOrderPackage(ps, channel);

            Assert.IsTrue(packageContent == "bank_type=WX&body=test&fee_type=1&input_charset=UTF-8&notify_url=htttp%3a%2f%2fwww.baidu.com&out_trade_no=VxscC3lGoO5mBI63&partner=1900000109&spbill_create_ip=127.0.0.1&total_fee=1&sign=819255571F172EFB3994B99F2A7E1D85");
        }
Esempio n. 12
0
        public void TestUpdateFeedBack()
        {
            //{"AppID":"wx8f74386d57405ec5",
            //    "AppSecret":"2af3c935fc66e2087bff1064cde3a708",
            //    "ParnterID":"1218285701",
            //    "ParnterKey":"b158ca37b5fac76293e402e3144869fc",
            //    "PaySignKey":"tFVyMIdj1DGCUMbahNzxTUxESkE6heBRtD2RWOfyzyh4WziirurWvBHt3WFVfQRlysh7T0MxMFHikBcScLUNrInygE4972yLyrZyFlay8tV4aKwtA3lBPNgI4qqJw46b",
            //    "NotifyToTradeCenterURL":"http://www.qq.com",
            //    "NotifyToBussinessSystemURL":null}
            WeiXinPayChannel channel = new WeiXinPayChannel()
            {
                AppID      = "wx8f74386d57405ec5",
                AppSecret  = "2af3c935fc66e2087bff1064cde3a708",
                ParnterID  = "1218285701",
                ParnterKey = "b158ca37b5fac76293e402e3144869fc",
                PaySignKey = "tFVyMIdj1DGCUMbahNzxTUxESkE6heBRtD2RWOfyzyh4WziirurWvBHt3WFVfQRlysh7T0MxMFHikBcScLUNrInygE4972yLyrZyFlay8tV4aKwtA3lBPNgI4qqJw46b"
            };
            string msg;
            var    res = WeiXinPayGateway.UpdateFeedBack(channel, "10279402725891408111", "oUcanju-XbWR0IJmdF_Y68Kt0szw", out msg);

            Console.WriteLine(msg);
        }
Esempio n. 13
0
        public void TestCreatePreOrder()
        {
            WeiXinPayChannel channel = new WeiXinPayChannel();

            channel.AppID                  = "wxd930ea5d5a258f4f";
            channel.AppSecret              = "db426a9829e4b49a0dcac7b4162da6b6";
            channel.PaySignKey             = "L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K";
            channel.ParnterID              = "1900000109";
            channel.ParnterKey             = "8934e7d15453e97507ef794cf7b0519d";
            channel.NotifyToTradeCenterURL = "http://www.qq.com";

            PreOrderRequest req = new PreOrderRequest();

            req.ClientIP         = "192.168.0.1";
            req.GoodsDescription = "测试订单";
            req.OrderAmount      = 1;
            req.OrderNO          = "kODvVBBJ3THJ1jMB";
            req.UserID           = "crestxu";

            var rsp        = WeiXinPay4AppGateway.CreatePreOrder(channel, req);
            var rspContent = rsp.ToJSON();

            Assert.IsTrue(string.IsNullOrWhiteSpace(rsp.PreOrderID) == false);
        }
Esempio n. 14
0
 public JSPayHelper(WeiXinPayChannel pChannel)
     : base(pChannel)
 {
     SignType = "SHA1";
 }
Esempio n. 15
0
        /// <summary>
        /// 生成订单Package
        /// </summary>
        /// <param name="pChannel"></param>
        /// <returns></returns>
        protected string GenerateOrderPackage(WeiXinPayChannel pChannel)
        {
            //组织参数字典
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("bank_type", "WX");
            if (!string.IsNullOrWhiteSpace(this.GoodsDescription))
            {
                parameters.Add("body", this.GoodsDescription);
            }
            else
            {
                throw new WeiXinPayException(string.Format("缺少必填参数GoodsDescription."));
            }
            if (!string.IsNullOrWhiteSpace(this.Attach))
            {
                parameters.Add("attach", this.Attach);
            }
            if (!string.IsNullOrWhiteSpace(pChannel.ParnterID))
            {
                parameters.Add("partner", pChannel.ParnterID);
            }
            else
            {
                throw new WeiXinPayException(string.Format("缺少必填参数pChannel.ParnterID."));
            }
            if (!string.IsNullOrWhiteSpace(this.OrderNO))
            {
                parameters.Add("out_trade_no", this.OrderNO);
            }
            else
            {
                throw new WeiXinPayException(string.Format("缺少必填参数OrderNO."));
            }
            if (this.OrderNO.Length > 16)
            {
                throw new WeiXinPayException(string.Format("OrderNO的长度不能超过16个字符."));
            }
            if (this.OrderAmount > 0)
            {
                parameters.Add("total_fee", this.OrderAmount.ToString());
            }
            else
            {
                throw new WeiXinPayException(string.Format("订单金额必须大于0."));
            }
            parameters.Add("fee_type", this.Currency.GetCode());
            if (!string.IsNullOrWhiteSpace(pChannel.NotifyToTradeCenterURL))    //总是先通知到交易中心
            {
                parameters.Add("notify_url", pChannel.NotifyToTradeCenterURL);
            }
            else
            {
                throw new WeiXinPayException(string.Format("缺少必填参数pChannel.NotifyToTradeCenterURL."));
            }
            if (!string.IsNullOrWhiteSpace(this.ClientIP))
            {
                parameters.Add("spbill_create_ip", this.ClientIP);
            }
            else
            {
                throw new WeiXinPayException(string.Format("缺少必填参数ClientIP."));
            }
            if (this.TimeStart.HasValue)
            {
                parameters.Add("time_start", this._timeStart);
            }
            if (this.TimeExpire.HasValue)
            {
                parameters.Add("time_expire", this._timeExpire);
            }
            if (this.TransportAmount.HasValue && this.TransportAmount.Value > 0)
            {
                parameters.Add("transport_fee", this.TransportAmount.Value.ToString());
            }
            if (this.ProductAmount.HasValue && this.ProductAmount.Value > 0)
            {
                parameters.Add("product_fee", this.ProductAmount.Value.ToString());
            }
            if (!string.IsNullOrWhiteSpace(this.GoodsTag))
            {
                parameters.Add("goods_tag", this.GoodsTag);
            }
            parameters.Add("input_charset", "UTF-8");
            return(CommonUtil.GenerateOrderPackage(parameters, pChannel));
        }
Esempio n. 16
0
        /// <summary>
        /// 生成订单包裹
        /// </summary>
        /// <param name="pParameters">订单参数集</param>
        /// <returns></returns>
        public static string GenerateOrderPackage(Dictionary <string, string> pParameters, WeiXinPayChannel pChannel)
        {
            //参数检查
            if (pParameters == null)
            {
                throw new ArgumentNullException("pParameters");
            }
            if (pChannel == null)
            {
                throw new ArgumentNullException("pChannel");
            }
            if (string.IsNullOrWhiteSpace(pChannel.ParnterKey))
            {
                throw new ArgumentNullException("pChannel.ParnterKey");
            }
            //计算订单包裹签名
            StringBuilder sb1   = new StringBuilder();
            StringBuilder sb2   = new StringBuilder();
            var           items = pParameters.OrderBy(item => item.Key).ToArray();

            foreach (var item in items)
            {
                sb1.AppendFormat("{0}={1}&", item.Key, item.Value);
                sb2.AppendFormat("{0}={1}&", item.Key, HttpUtility.UrlEncode(item.Value));
                //sb2.AppendFormat("{0}={1}&", item.Key, UrlEncoder.UpperCaseUrlEncode(item.Value));
            }
            sb1.AppendFormat("key={0}", pChannel.ParnterKey);
            string sign = MD5Helper.Encryption(sb1.ToString());

            sign = sign.ToUpper();
            //
            sb2.AppendFormat("sign={0}", sign);
            //
            return(sb2.ToString());
        }
Esempio n. 17
0
        /// <summary>
        /// 生成签名
        /// </summary>
        /// <param name="pParameters">生成签名的参数</param>
        /// <param name="pChannel">通道</param>
        /// <returns></returns>
        public static string CreateSign(IEnumerable <KeyValuePair <string, object> > pParameters, WeiXinPayChannel pChannel)
        {
            Dictionary <string, object> dic = new Dictionary <string, object>();

            foreach (var item in pParameters)
            {
                dic[item.Key] = item.Value;
            }
            dic["appkey"] = pChannel.PaySignKey;
            if (!dic.Keys.ToList().Exists(t => t.ToLower() == "appid"))
            {
                dic["appid"] = pChannel.AppID;
            }
            var temp   = dic.OrderBy(t => t.Key);
            var nosign = GetParametersStr(temp, false);
            var sign   = CommonUtil.Sha1(nosign);

            return(sign.ToLower());
        }
Esempio n. 18
0
        /// <summary>
        /// 生成预订单内容
        /// </summary>
        /// <param name="pParameters">参数</param>
        /// <param name="pChannel">渠道</param>
        /// <returns></returns>
        public static InnerPreOrderRequestInfo GeneratePreOrderContent(Dictionary <string, string> pParameters, WeiXinPayChannel pChannel)
        {
            //参数检查
            if (pParameters == null)
            {
                throw new ArgumentNullException("pParameters");
            }
            if (pChannel == null)
            {
                throw new ArgumentNullException("pChannel");
            }
            //
            string packageContent          = string.Empty;
            string timestamp               = string.Empty;
            string noncestr                = string.Empty;
            string traceid                 = string.Empty;
            Dictionary <string, string> ps = new Dictionary <string, string>();

            foreach (var item in pParameters)
            {
                var key = item.Key.ToLower();
                switch (key)
                {
                case "noncestr":
                    noncestr = item.Value;
                    ps.Add(key, item.Value);
                    break;

                case "timestamp":
                    timestamp = item.Value;
                    ps.Add(key, item.Value);
                    break;

                case "traceid":
                    traceid = item.Value;
                    ps.Add(key, item.Value);
                    break;

                case "package":
                    packageContent = item.Value;
                    ps.Add(key, item.Value);
                    break;
                }
            }
            ps.Add("appid", pChannel.AppID);
            ps.Add("appkey", pChannel.PaySignKey);
            //计算签名
            var           items = ps.OrderBy(item => item.Key).ToArray();
            StringBuilder sb    = new StringBuilder();

            foreach (var item in items)
            {
                sb.AppendFormat("&{0}={1}", item.Key, item.Value);
            }
            sb.Remove(0, 1);
            var sign = FormsAuthentication.HashPasswordForStoringInConfigFile(sb.ToString(), "SHA1");

            sign = sign.ToLower();
            //组织预订单内容
            InnerPreOrderRequestInfo request = new InnerPreOrderRequestInfo();

            request.Sign      = sign;
            request.AppID     = pChannel.AppID;
            request.Package   = packageContent;
            request.TimeStamp = int.Parse(timestamp);
            request.NonceStr  = noncestr;
            if (!string.IsNullOrWhiteSpace(traceid))
            {
                request.UserID = traceid;
            }
            //
            return(request);
        }
Esempio n. 19
0
 public WeiXinAppOrderRequest(WeiXinPayChannel pChannel)
     : base(pChannel)
 {
     SignMethod = "SHA1";
 }
Esempio n. 20
0
 public NativePayHelper(WeiXinPayChannel pChannel)
     : base(pChannel)
 {
 }