コード例 #1
0
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            PayWeiXin        model   = new PayWeiXin();
            PayForWeiXinHelp PayHelp = new PayForWeiXinHelp();
            string           result  = string.Empty;
            //传入OpenId
            string openId = context.Request.Form["openId"].ToString();
            //传入红包金额(单位分)
            string amount = context.Request.Form["amount"] == null ? "" : context.Request.Form["amount"].ToString();

            //接叐收红包的用户 用户在wxappid下的openid
            model.re_openid = openId;//"oFIYdszuDXVqVCtwZ-yIcbIS262k";
            //付款金额,单位分
            model.total_amount = int.Parse(amount);
            //最小红包金额,单位分
            model.min_value = int.Parse(amount);
            //最大红包金额,单位分
            model.max_value = int.Parse(amount);
            //调用方法
            string postData = PayHelp.DoDataForPayWeiXin(model);

            try
            {
                result = PayHelp.PayForWeiXin(postData);
            }
            catch (Exception ex)
            {
                //写日志
            }
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(result);
            string jsonResult = JsonConvert.SerializeXmlNode(doc);

            context.Response.ContentType = "application/json";
            context.Response.Write(jsonResult);
            context.Response.End();
        }
コード例 #2
0
        /// <summary>
        /// 调用微信支付接口前处理数据,包括sign验证等
        /// </summary>
        /// <param name="payForWeiXin"></param>
        /// <returns></returns>
        public string DoDataForPayWeiXin(PayWeiXin payForWeiXin)
        {
            #region 处理nonce_str随机字符串,不长于 32 位(本程序生成长度为16位的)
            string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            payForWeiXin.nonce_str = RandomStr(str, 16);
            #endregion

            #region 商户信息从config文件中读取
            //商户支付密钥key
            string key = ConfigurationManager.AppSettings["key"].ToString();
            //商户号
            payForWeiXin.mch_id = ConfigurationManager.AppSettings["mch_id"].ToString();
            //商户 appid
            payForWeiXin.wxappid = ConfigurationManager.AppSettings["wxappid"].ToString();
            //提供方名称
            payForWeiXin.nick_name = ConfigurationManager.AppSettings["nick_name"].ToString();
            payForWeiXin.act_id    = "act_id";
            //红包収送者名称
            payForWeiXin.send_name = ConfigurationManager.AppSettings["send_name"].ToString();
            //红包収放总人数
            payForWeiXin.total_num = int.Parse(ConfigurationManager.AppSettings["total_num"].ToString());
            //红包祝福诧
            payForWeiXin.wishing = ConfigurationManager.AppSettings["wishing"].ToString();
            //活劢名称
            payForWeiXin.act_name = ConfigurationManager.AppSettings["act_name"].ToString();
            //备注信息
            payForWeiXin.remark = ConfigurationManager.AppSettings["remark"].ToString();
            //商户logo的url
            payForWeiXin.logo_imgurl = ConfigurationManager.AppSettings["logo_imgurl"].ToString();
            //分享文案
            payForWeiXin.share_content = ConfigurationManager.AppSettings["share_content"].ToString();
            //分享链接
            payForWeiXin.share_url = ConfigurationManager.AppSettings["share_url"].ToString();
            //分享的图片url
            payForWeiXin.share_imgurl = ConfigurationManager.AppSettings["share_imgurl"].ToString();
            //调用接口的机器 Ip 地址
            payForWeiXin.client_ip = ConfigurationManager.AppSettings["client_ip"].ToString();
            #endregion

            #region 订单信息
            //生成订单号组成: mch_id+yyyymmdd+10 位一天内不能重复的数字
            //生成10位不重复的数字
            string num       = "0123456789";
            string randomNum = RandomStr(num, 10);
            payForWeiXin.mch_billno = payForWeiXin.mch_billno + System.DateTime.Now.ToString("yyyyMMdd") + randomNum;
            #endregion

            string postData = @"<xml> 
                                 <mch_billno>{0}</mch_billno> 
                                 <mch_id>{1}</mch_id> 
                                 <wxappid>{2}</wxappid> 
                                 <nick_name>{3}</nick_name> 
                                 <send_name>{4}</send_name> 
                                 <re_openid>{5}</re_openid> 
                                 <total_amount>{6}</total_amount> 
                                 <min_value>{7}</min_value> 
                                 <max_value>{8}</max_value> 
                                 <total_num>{9}</total_num> 
                                 <wishing>{10}</wishing> 
                                 <client_ip>{11}</client_ip> 
                                 <act_name>{12}</act_name> 
                                 <act_id>{13}</act_id> 
                                 <remark>{14}</remark>
                                 <nonce_str>{15}</nonce_str>";
            postData = string.Format(postData,
                                     payForWeiXin.mch_billno,
                                     payForWeiXin.mch_id,
                                     payForWeiXin.wxappid,
                                     payForWeiXin.nick_name,
                                     payForWeiXin.send_name,
                                     payForWeiXin.re_openid,
                                     payForWeiXin.total_amount,
                                     payForWeiXin.min_value,
                                     payForWeiXin.max_value,
                                     payForWeiXin.total_num,
                                     payForWeiXin.wishing,
                                     payForWeiXin.client_ip,
                                     payForWeiXin.act_name,
                                     payForWeiXin.act_id,
                                     payForWeiXin.remark,
                                     payForWeiXin.nonce_str
                                     );


            //原始传入参数
            string[] signTemp = { "mch_billno=" + payForWeiXin.mch_billno, "mch_id=" + payForWeiXin.mch_id, "wxappid=" + payForWeiXin.wxappid, "nick_name=" + payForWeiXin.nick_name, "send_name=" + payForWeiXin.send_name, "re_openid=" + payForWeiXin.re_openid, "total_amount=" + payForWeiXin.total_amount, "min_value=" + payForWeiXin.min_value, "max_value=" + payForWeiXin.max_value, "total_num=" + payForWeiXin.total_num, "wishing=" + payForWeiXin.wishing, "client_ip=" + payForWeiXin.client_ip, "act_name=" + payForWeiXin.act_name, "act_id=" + payForWeiXin.act_id, "remark=" + payForWeiXin.remark, "nonce_str=" + payForWeiXin.nonce_str };

            List <string> signList = signTemp.ToList();

            //拼接原始字符串
            if (!string.IsNullOrEmpty(payForWeiXin.logo_imgurl))
            {
                postData += "<logo_imgurl>{0}</logo_imgurl> ";
                postData  = string.Format(postData, payForWeiXin.logo_imgurl);
                signList.Add("logo_imgurl=" + payForWeiXin.logo_imgurl);
            }
            if (!string.IsNullOrEmpty(payForWeiXin.share_content))
            {
                postData += "<share_content>{0}</share_content> ";
                postData  = string.Format(postData, payForWeiXin.share_content);
                signList.Add("share_content=" + payForWeiXin.share_content);
            }
            if (!string.IsNullOrEmpty(payForWeiXin.share_url))
            {
                postData += "<share_url>{0}</share_url> ";
                postData  = string.Format(postData, payForWeiXin.share_url);
                signList.Add("share_url=" + payForWeiXin.share_url);
            }
            if (!string.IsNullOrEmpty(payForWeiXin.share_imgurl))
            {
                postData += "<share_imgurl>{0}</share_imgurl> ";
                postData  = string.Format(postData, payForWeiXin.share_imgurl);
                signList.Add("share_imgurl=" + payForWeiXin.share_imgurl);
            }

            #region 处理支付签名
            //对signList按照ASCII码从小到大的顺序排序
            signList.Sort();

            string signOld         = string.Empty;
            string payForWeiXinOld = string.Empty;
            int    i = 0;
            foreach (string temp in signList)
            {
                signOld += temp + "&";
                i++;
            }
            signOld = signOld.Substring(0, signOld.Length - 1);
            //拼接Key
            signOld += "&key=" + key;
            //处理支付签名
            payForWeiXin.sign = Encrypt(signOld).ToUpper();
            #endregion
            postData += "<sign>{0}</sign></xml>";
            postData  = string.Format(postData, payForWeiXin.sign);
            return(postData);
        }