zoukankan      html  css  js  c++  java
  • 微信支付 jsapi接口

            /// <summary>
            /// 微信支付成功,返回信息
            /// </summary>
            /// <returns></returns>
            public void WxZhifuInfo()
            {
                string post = "";
                HttpRequestBase request = Request;
                using (System.IO.Stream stream = request.InputStream)
                {
                    Byte[] postBytes = new Byte[stream.Length];
                    stream.Read(postBytes, 0, (Int32)stream.Length);
                  post =  System.Text.Encoding.UTF8.GetString(postBytes);
                }
    
                writeLogs.writelog("支付成功,返回信息:" + post);
                Response.Write("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>");
                                   // "<return_msg><![CDATA[]]></return_msg></xml>");
                Response.End();
            }
        /// <summary>
        /// 提交微信支付
        /// </summary>
        /// <param name="orderid">订单编号</param>
        /// <param name="title">商品标题</param>
        /// <param name="openid">用户编号</param>
        /// <param name="weiId">公众号</param>
        /// <returns></returns>
            public string WxZhifuApi(string orderid,string title,string openid,string weiId)
            {
                try {
    
                    SignCode sign = new SignCode();
                    //获取商户的配置参数
                    string sql = "select * from pay_info where Enable=1";//必须保证是一条数据否则默认失败
                    DataTable dt = SQLiteDBHelper.GetDataTable(sql, weiId);
                    if (dt.Rows.Count > 0)//查看是否存在数据
                    {
                        sign.appid = dt.Rows[0]["appid"].ToString();
                        sign.mch_id = dt.Rows[0]["Mchid"].ToString();
                        Setkey = dt.Rows[0]["KeyValue"].ToString();
                    }
                    else {
                        writeLogs.writelog("查询商户配置参数错误,请检查参数是否正确");   
                        return "{"errcode":"3"}";//商户未设置支付参数
                    }
                    string Time = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString();
                    sign.body = title;
                    sign.nonce_str = "abcdefghijklmnopqrstuvwxyzqqqqqq";//随机数固定不变
                    sign.openid = openid; //"oaR7LjvZ5qFcoD0q4_zAhhTruqwY";
                    sign.out_trade_no = orderid; //"D"+Time;
                    sign.spbill_create_ip = "127.0.0.1";
                    //使用订单编号查询订单总价格
                    sql = "select * from order_info where orderid="+orderid+" and openid='"+openid+"'  ";
                    dt = SQLiteDBHelper.GetDataTable(sql, weiId);
                    if (dt.Rows.Count > 0)
                    {
    
                        sign.total_fee = Convert.ToString( float.Parse(dt.Rows[0]["Receivables"].ToString()) * 100); //测试阶段价格写1 ,单位:分    
                    }
                    else {
                        writeLogs.writelog("查询订单编号价格错误");
                        return "{"errcode":"4"}";//订单编号错误或订单不存在
                    }
                    
                    sign.notify_url = string.Format("http://shop.bcowei.com/Template/WxZhifuInfo");// string.Format("shop.bcowei.com/Template/orderpay?weiId={0}&openid={1}&pay={2}&orderId={3}",weiId,openid,"1",orderid);//接受微信支付成功信息
                    string code = WxSign(sign);
                    string url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
                    prepay p = new prepay();
                    string result = System.Web.PostAndGet.PostWebRequest(url, code, "utf-8");
                    XmlSerializer xml = new XmlSerializer(typeof(prepay));
                    StringReader reader = new StringReader(result);
                    prepay prepay = xml.Deserialize(reader) as prepay;
                    if (prepay.result_code == null || prepay.result_code == "")
                    {
                        writeLogs.writelog("prepay_id获取失败,检查参数配置是否正确,参数内容:"+code);
                        //Response.Redirect(string.Format("/ordererror/Template?weiId={0}&openid={1}&errcode=11",weiId,openid));
                        return "{"errcode":"1"}";
                    }
                    string prepayid =  string.Format("prepay_id={0}", prepay.prepay_id);
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    dic.Add("appId", sign.appid);
                    dic.Add("timeStamp",Time);
                    dic.Add("nonceStr",sign.nonce_str);
                    dic.Add("package", prepayid);
                    dic.Add("signType", "MD5");
                   //Template/index1?appid={0}&timeStamp={1}&nonceStr={2}&package={3}&signType={4}&paySign={5}",sign.appid,Time,sign.nonce_str,prepayid,"MD5",WxSignCreate(dic)));
                    ViewBag.appid = sign.appid;
                    ViewBag.time = Time;
                    ViewBag.noncestr = sign.nonce_str;
                    ViewBag.package = prepayid;
                    ViewBag.signType = "MD5";
                    ViewBag.paySign = WxSignCreate(dic);
                    ViewBag.weiId = weiId;
                    ViewBag.openid = openid;
                    ViewBag.orderid = orderid;
                    return "{"errcode":"0","+
                           ""appid":"" + sign.appid + "","+
                           ""time":"" + Time + "","+
                           ""noncestr":"" + sign.nonce_str + "","+
                           ""package":""+prepayid+"","+
                           ""signType":"MD5","+
                           ""paySign":""+WxSignCreate(dic)+"""+
                           "}";
                    
                       
                }
                catch (Exception e)
                {
                   // Response.Redirect(string.Format("/ordererror/Template?weiId={0}&openid={1}&errcode=15", weiId, openid));
                    return "{"errcode":"1"}";
                }
               
            }
            /// <summary>
            /// key值
            /// </summary>
            /// <returns></returns>
            public static string Setkey { get; set; }
            /// <summary>
            /// 生成签名
            /// </summary>
            /// <param name="body">商品描述</param>
            /// <param name="openid">用户标识</param>
            /// <param name="out_trade_no">订单编号</param>
            /// <param name="total_fee">价钱</param>
            /// <param name="notify_url">成功跳转路径</param>
            /// <param name="spbill_create_ip">设备IP</param>
            /// <returns></returns>
            public string WxSign(SignCode code)
            {
                //string appid,string mch_id,string nonce_str,string body, string openid, string out_trade_no, string total_fee, string notify_url, string spbill_create_ip
                Dictionary<string, string> sign = new Dictionary<string, string>();//字典建值对
                try {
    
                    sign.Add("appid",code.appid);//公众号标识,1
                    sign.Add("body", code.body);//商品描述,0
                    sign.Add("mch_id", code.mch_id);//商户编号,1
                    sign.Add("nonce_str",code.nonce_str);//随机字符串,1
                    sign.Add("openid", code.openid);//微信用户编号,0
                    sign.Add("out_trade_no", code.out_trade_no);//订单编号,0
                    sign.Add("spbill_create_ip", code.spbill_create_ip);//设备IP,0
                    sign.Add("total_fee", code.total_fee);//价钱 单位:分,0
                    sign.Add("notify_url", code.notify_url);//请求成功跳转地址,0
                    sign.Add("trade_type", "JSAPI");//支付方式,1
                    sign.Add("sign", WxSignCreate(sign));//签名
    
                
                }
                catch (Exception e)
                {
                    writeLogs.writelog("参数键值对异常:"+e.Message);
                    return "参数键值对异常:" + e.Message;
                }
                string ddd = WxXml(sign);
                return WxXml(sign);//参数转化xml
            }
            public class getPay {
                public string appId { get; set; }
                public string timeStamp { get; set; }
                public string nonceStr { get; set; }
                public string package { get; set; }
                public string signType { get; set; }
                public string paySign { get; set; }
            }
            /// <summary>
            /// 签名参数
            /// </summary>
            public class SignCode {
                public string appid { get; set; }
                public string mch_id { get; set; }
                public string nonce_str { get; set; }
                public string body { get; set; }
                public string openid { get; set; }
                public string out_trade_no { get; set; }
                public string total_fee { get; set; }
                public string notify_url { get; set; }
                public string spbill_create_ip { get; set; }
            }
            /// <summary>
            /// 转换xml格式
            /// </summary>
            /// <param name="dic"></param>
            /// <returns></returns>
            public string WxXml(Dictionary<string,string> dic)
            {
                StringBuilder sb = new StringBuilder();
                try {
                    sb.Append("<xml>");
                    foreach (var key in dic.Keys)
                    { 
                        //<appid>wx2421b1c4370ec43b</appid
                        sb.Append("<"+key+">"+dic[key]+"</"+key+">");
                    }
                    sb.Append("</xml>");
                }
                catch (Exception e)
                {
                    writeLogs.writelog("参数转换xml异常:"+e.Message);
                    return null;
                }
                return sb.ToString();
            }
            /// <summary>
            /// 拼接签名生成
            /// </summary>
            /// <param name="Sign"></param>
            /// <returns></returns>
            public string WxSignCreate(Dictionary<string,string> Sign)
            {
                string create = "";//拼接字符串
                try {
                  
                    var result = from i in Sign orderby i.Key select i;
                    foreach(KeyValuePair<string,string> pair in result)
                    {
                        string key = pair.Key;
                        string value = pair.Value;
                        create += key + "=" + value + "&";
                    }
                    create = create.TrimEnd('&');
                    
                }
                catch (Exception e)
                {
                    writeLogs.writelog("签名拼接异常:"+e.Message);
                    return "签名拼接异常:" + e.Message;
                }
                return WxSignMD5(create);
            }
            /// <summary>
            /// 请求签名MD5
            /// </summary>
            /// <param name="sign"></param>
            /// <returns></returns>
            public string WxSignMD5(string sign)
            {
                string Signstr = sign + "&key=" + Setkey;
                    return MD5(Signstr).ToUpper();//MD5转换
            }
            /// <summary>
            /// 签名MD5
            /// </summary>
            /// <param name="s"></param>
            /// <returns></returns>
            public static String MD5(String s)
            {
                char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
    					'A', 'B', 'C', 'D', 'E', 'F' };
                try
                {
    
                    byte[] btInput = System.Text.Encoding.UTF8.GetBytes(s);
                    // 获得MD5摘要算法的 MessageDigest 对象
                  System.Security.Cryptography.MD5 mdInst = System.Security.Cryptography.MD5.Create();
                    // 使用指定的字节更新摘要
                    mdInst.ComputeHash(btInput);
                    // 获得密文
                    byte[] md = mdInst.Hash;
                    // 把密文转换成十六进制的字符串形式
                    int j = md.Length;
                    char[] str = new char[j * 2];
                    int k = 0;
                    for (int i = 0; i < j; i++)
                    {
                        byte byte0 = md[i];
                        str[k++] = hexDigits[(int)(((byte)byte0) >> 4) & 0xf];
                        str[k++] = hexDigits[byte0 & 0xf];
                    }
                    return new string(str);//编码转换
                }
                catch (Exception e)
                {
                    writeLogs.writelog("调用签名md5异常:"+e.Message);
                    return null;
                }
            }
    

      

  • 相关阅读:
    5 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之生产环境下drbd裂脑处理
    elk系列8之logstash+redis+es的架构来收集apache的日志
    elk系列7之通过grok分析apache日志
    elk系列6之tcp模块的使用
    elk系列5之syslog的模块使用
    elk系列4之kibana图形化操作
    elk系列3之通过json格式采集Nginx日志
    elk系列2之multiline模块的使用
    Docker探索系列2之镜像打包与DockerFile
    elk系列1之入门安装与基本操作
  • 原文地址:https://www.cnblogs.com/xuemykisskui/p/4150950.html
Copyright © 2011-2022 走看看