/// <summary> /// 验证授权 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var clientIp = MFSystemUtil.GetIP(); if (!MmcoyWebAPIAuthIPs.Contains(clientIp))//判断客户端的IP是否合法 { int matchAuthCount = request.Headers.Count(item => { if ("MmcoyWebAPIKey".NewEquals(item.Key)) { foreach (var key in item.Value) { return(MmcoyWebAPIKeys.Contains(key)); } } return(false); }); if (matchAuthCount > 0) { return(base.SendAsync(request, cancellationToken)); } } HttpContext.Current.Response.Write("调用WebAPI失败,你的服务密钥不正确或IP地址没有得到授权!"); return(Task.Factory.StartNew <HttpResponseMessage>(() => { return new HttpResponseMessage(HttpStatusCode.OK); })); }
/// <summary> /// 获取统一下单 /// </summary> /// <param name="userData"></param> /// <returns></returns> private RetValue GetPrepayId(string userData) { JsonData data = JsonMapper.ToObject(userData); short channelId = data["ChannelId"].ToString().ToShort(); SDK_Weixin_Config config = GetWeixinConfig(channelId); string rechargeProductId = data["RechargeProductId"].ToString(); string orderId = data["OrderId"].ToString(); //产品说明 string body = "充值产品"; //随机字符串 string nonce_str = new Random().Next(0, 99999).ToString(); //商户订单号 string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmssfff"); //终端IP string spbill_create_ip = MFSystemUtil.GetIP(); //总金额 订单总金额,单位为分 int total_fee = RechargeShopDBModel.Instance.Get(int.Parse(rechargeProductId)).Price * 100; total_fee = 1; //临时改成1分 //交易类型 string trade_type = @"APP"; string attach = string.Format("{0}^{1}", channelId, orderId); string temp = string.Format("appid={0}&attach={1}&body={2}&mch_id={3}&nonce_str={4}¬ify_url={5}&out_trade_no={6}&spbill_create_ip={7}&total_fee={8}&trade_type={9}&key={10}", config.appid, attach, body, config.mch_id, nonce_str, config.notify_url, out_trade_no, spbill_create_ip, total_fee, trade_type, config.payKey); string sign = MFEncryptUtil.Md5(temp).ToUpper(); //签名是MD5大写形式 string urlString = "https://api.mch.weixin.qq.com/pay/unifiedorder"; StringBuilder sbr = new StringBuilder(); sbr.Append("<xml>"); sbr.AppendFormat("<appid><![CDATA[{0}]]></appid>", config.appid); sbr.AppendFormat("<attach><![CDATA[{0}]]></attach>", attach); sbr.AppendFormat("<body><![CDATA[{0}]]></body>", body); sbr.AppendFormat("<mch_id><![CDATA[{0}]]></mch_id>", config.mch_id); sbr.AppendFormat("<nonce_str><![CDATA[{0}]]></nonce_str>", nonce_str); sbr.AppendFormat("<out_trade_no><![CDATA[{0}]]></out_trade_no>", out_trade_no); sbr.AppendFormat("<spbill_create_ip><![CDATA[{0}]]></spbill_create_ip>", spbill_create_ip); sbr.AppendFormat("<total_fee><![CDATA[{0}]]></total_fee>", total_fee); sbr.AppendFormat("<trade_type><![CDATA[{0}]]></trade_type>", trade_type); sbr.AppendFormat("<notify_url><![CDATA[{0}]]></notify_url>", config.notify_url); sbr.AppendFormat("<sign><![CDATA[{0}]]></sign>", sign); sbr.Append("</xml>"); string resposeContent = NetWorkHttp.Instance.HttpPost(urlString, sbr.ToString()); RetValue retValue = new RetValue(); XDocument doc = XDocument.Parse(resposeContent); XElement rootElement = doc.Root; string return_code = rootElement.Element("return_code").Value; if (return_code.Equals("SUCCESS", StringComparison.CurrentCultureIgnoreCase)) { string prepay_id = rootElement.Element("prepay_id").Value; retValue.Value = GetPayReqInfo(config, prepay_id); } else { retValue.HasError = true; } return(retValue); }