コード例 #1
0
        /// <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); }));
        }
コード例 #2
0
        /// <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}&notify_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);
        }