后台

  public ActionResult WxAddVoucher_Center(double money)

        {

          

            int money= int.Parse((money * 100).ToString());

            String ip = Request.UserHostAddress;

            //随机商品ID

            String id = "";

            Random rd = new Random();

            for (int i = 1; i < 16; i++)

            {

                id += (rd.Next(0, 9)).ToString();

            }

PayMent pm=new PayMent();

            String WeixinAPI = pm.JSAPIPayMent("商品描述", openid, ip, money, id);

            return Content(WeixinAPI);

          

        }



配置微信支付的必须参数

public class Wxconfig{

        public const string appid = "";//公众号ID

        public const string secret = "";//微信公众号的secret

        public const string url = "";//回调url

        public const string mch_id = "";//商户号

        public const string paysignkey = "";//证书密匙

}

//  定义返回JSON数据类型的微信支付方法

public class PayMent

    ///

        /// 微信支付

      ///

      /// 商品描述

      /// 商户号

      /// 用户openid

      /// 终端IP

      /// 金额

      /// 商户订单号

      ///

       public String JSAPIPayMent( string boby,  string openid, string spbill_create_ip, int total_fee, string out_trade_no)

       {

           UnifiedOrder order = new UnifiedOrder();

           order.appid = WXconfig.appid;

           order.attach = "vinson";

           order.body = boby;

           order.device_info = "";

           order.mch_id = WXconfig.mch_id;

           order.nonce_str = TenpayUtil.getNoncestr();

           order.notify_url = WXconfig.url;

           order.openid = openid;

           order.out_trade_no = out_trade_no;

           order.trade_type = "JSAPI";

           order.spbill_create_ip = spbill_create_ip;

           order.total_fee = total_fee;

           TenpayUtil tenpay = new TenpayUtil();

           string paySignKey = WXconfig.paysignkey;

           string prepay_id = tenpay.getPrepay_id(order, paySignKey);       

           string timeStamp = TenpayUtil.getTimestamp();

           string nonceStr = TenpayUtil.getNoncestr();

           SortedDictionary sParams = new SortedDictionary();

           sParams.Add("appId", WXconfig.appid);

           sParams.Add("timeStamp", timeStamp);

           sParams.Add("nonceStr", nonceStr);

           sParams.Add("package", "prepay_id=" + prepay_id);

           sParams.Add("signType", "MD5");

           string paySign = tenpay.getsign(sParams, paySignKey);

           string package = "prepay_id=" + prepay_id;

           return MD5Util.toJson(WXconfig.appid, timeStamp, nonceStr, package, "MD5", paySign);

       }

}

//-------TenpayUtil类

  public    class TenpayUtil

    {

        ///

        /// 统一支付接口

        ///

        const string UnifiedPayUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";        

        ///

        /// 随机串

        ///

        public static string getNoncestr()

        {

            Random random = new Random();

            return MD5Util.GetMD5(random.Next(1000).ToString(), "GBK").ToLower().Replace("s", "S");

        }

        ///

        /// 时间截,自1970年以来的秒数

        ///

        public static string getTimestamp()

        {

            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);

            return Convert.ToInt64(ts.TotalSeconds).ToString();

        }

        ///

        /// 获取微信签名

        ///

        ///

        ///

        public string getsign(SortedDictionary sParams, string key)

        {

            int i = 0;

            string sign = string.Empty;

            StringBuilder sb = new StringBuilder();

            foreach (KeyValuePair temp in sParams)

            {

                if (temp.Value.ToString() == "" || temp.Value == null || temp.Key.ToLower() == "sign")

                {

                    continue;

                }

                i++;

                sb.Append(temp.Key.Trim() + "=" + temp.Value.ToString() + "&");

            }

            sb.Append("key=" + key.Trim() + "");

            string signkey = sb.ToString();

            sign = MD5Util.GetMD5(signkey, "utf-8");

            //utf-8


            return sign;

        }


        ///

        /// post数据到指定接口并返回数据

        ///

        public string PostXmlToUrl(string url, string postData)

        {

            string returnmsg = "";

            //Byte[] temp = Encoding.UTF8.GetBytes(postData);

            //string dataGBK = Encoding.GetEncoding("GBK").GetString(temp);

            using (System.Net.WebClient wc = new System.Net.WebClient())

            {


                returnmsg = wc.UploadString(url, "POST", postData);

            }

            return returnmsg;

        }

        ///

        /// 获取prepay_id

        ///

        public string getPrepay_id(UnifiedOrder order, string key)

        {

            string prepay_id = "";

            

                string post_data = getUnifiedOrderXml(order, key);

                string request_data = PostXmlToUrl(UnifiedPayUrl, post_data);

               

           //Log.WriteLog1(request_data);


                SortedDictionary requestXML = GetInfoFromXml(request_data);


                foreach (KeyValuePair k in requestXML)

                {

               

                    

                    if (k.Key == "prepay_id")

                    {

                        prepay_id = k.Value.ToString();

                        break;

                    }

                }          

            return prepay_id;

        }


        ///

        /// 把XML数据转换为SortedDictionary集合

        ///

        ///

        ///

        protected SortedDictionary GetInfoFromXml(string xmlstring)

        {

            SortedDictionary sParams = new SortedDictionary();

            try

            {

                XmlDocument doc = new XmlDocument();

                doc.LoadXml(xmlstring);

                XmlElement root = doc.DocumentElement;

                int len = root.ChildNodes.Count;

                for (int i = 0; i < len; i++)

                {

                    string name = root.ChildNodes[i].Name;

                    if (!sParams.ContainsKey(name))

                    {

                        sParams.Add(name.Trim(), root.ChildNodes[i].InnerText.Trim());

                    }

                }

            }

            catch { }

            return sParams;

        }



      

        ///

        /// 微信统一下单接口xml参数整理

        ///

        /// 微信支付参数实例

        /// 密钥

        ///

        protected string getUnifiedOrderXml(UnifiedOrder order, string key)

        {

            string return_string = string.Empty;

            SortedDictionary sParams = new SortedDictionary();

            sParams.Add("appid", order.appid);

            sParams.Add("attach", order.attach);

            sParams.Add("body", order.body);

            sParams.Add("device_info", order.device_info);

            sParams.Add("mch_id", order.mch_id);

            sParams.Add("nonce_str", order.nonce_str);

            sParams.Add("notify_url", order.notify_url);

            sParams.Add("openid", order.openid);

            sParams.Add("out_trade_no", order.out_trade_no);

            sParams.Add("spbill_create_ip", order.spbill_create_ip);

            sParams.Add("total_fee", order.total_fee);

            sParams.Add("trade_type", order.trade_type);

            order.sign = getsign(sParams, key);

            sParams.Add("sign", order.sign);

           

            //拼接成XML请求数据

            StringBuilder sbPay = new StringBuilder();

            foreach (KeyValuePair k in sParams)

            {

                if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")

                {

                    sbPay.Append("<" + k.Key + ">");

                }

                else

                {

                    sbPay.Append("<" + k.Key + ">" + k.Value + "");

                }

            }

            return_string = string.Format("{0}", sbPay.ToString());

            byte[] byteArray = Encoding.UTF8.GetBytes(return_string);

            return_string = Encoding.GetEncoding("GBK").GetString(byteArray);

            Byte[] temp = Encoding.UTF8.GetBytes(return_string);

            string dataGBK = Encoding.GetEncoding("utf-8").GetString(temp);         

            return return_string;

            //  GBK

        }

    }

//---微信统一接口请求实体对象

///

    /// 微信统一接口请求实体对象

    ///

    [Serializable]

    public class UnifiedOrder

    {

        ///

        /// 公众号ID(微信分配的公众账号 ID)

        ///

        public string appid = "";

        ///

        /// 商户号(微信支付分配的商户号)

        ///

        public string mch_id = "";

        ///

        /// 微信支付分配的终端设备号

        ///

        public string device_info = "";

        ///

        /// 随机字符串,不长于 32 位

        ///

        public string nonce_str = "";

        ///

        /// 签名

        ///

        public string sign = "";

        ///

        /// 商品描述

        ///

        public string body = "";

        ///

        /// 附加数据,原样返回

        ///

        public string attach = "";

        ///

        /// 商户系统内部的订单号,32个字符内、可包含字母,确保在商户系统唯一,详细说明

        ///

        public string out_trade_no = "";

        ///

        /// 订单总金额,单位为分,不能带小数点

        ///

        public int total_fee = 0;

        ///

        /// 终端IP

        ///

        public string spbill_create_ip = "";

        ///

        /// 订 单 生 成 时 间 , 格 式 为yyyyMMddHHmmss,如 2009 年12 月 25 日 9 点 10 分 10 秒表示为 20091225091010。时区为 GMT+8 beijing。该时间取自商户服务器

        ///

        public string time_start = "";

        ///

        /// 交易结束时间

        ///

        public string time_expire = "";

        ///

        /// 商品标记 商品标记,该字段不能随便填,不使用请填空,使用说明详见第 5 节

        ///

        public string goods_tag = "";

        ///

        /// 接收微信支付成功通知

        ///

        public string notify_url = "";

        ///

        /// JSAPI、NATIVE、APP

        ///

        public string trade_type = "";

        ///

        /// 用户标识 trade_type 为 JSAPI时,此参数必传

        ///

        public string openid = "";

        ///

        /// 只在 trade_type 为 NATIVE时需要填写。

        ///

        public string product_id = "";

    }

  // 转JSon对象

    ///

        /// json

        ///

        ///

        public static  String toJson(string appId, string timeStamp, string nonceStr, string packageA, string signType, string paySign)

        {

            String json = "{";

            json += "\"appId\":" + "\"" + appId + "\",";

            json += "\"timeStamp\":" + "\"" + timeStamp + "\",";

            json += "\"nonceStr\":" + "\"" + nonceStr + "\",";

            json += "\"package\":" + "\"" + packageA + "\",";

            json += "\"signType\":" + "\"" + signType + "\",";

            json += "\"paySign\":" + "\"" + paySign + "\"";

            json += "}";

            return json;

        }




前端代码

 

项目地址:https://gitee.com/qq-w/wechat.git