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); }
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)); }
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()); }
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); }
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); }
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); }
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())); }
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¬ify_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"); }
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); }
/// <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)); }
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¬ify_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"); }
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); }
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); }
public JSPayHelper(WeiXinPayChannel pChannel) : base(pChannel) { SignType = "SHA1"; }
/// <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)); }
/// <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()); }
/// <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()); }
/// <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); }
public WeiXinAppOrderRequest(WeiXinPayChannel pChannel) : base(pChannel) { SignMethod = "SHA1"; }
public NativePayHelper(WeiXinPayChannel pChannel) : base(pChannel) { }