微信支付 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;
            }
        }

  

时间: 2024-08-04 20:51:33

微信支付 jsapi接口的相关文章

微信支付现金红包接口

微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果.具体能力如下: 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领奖流程,带给用户微信支付原生的流畅体验 微信红包发送规则 1. 发送频率规则 ◆ 每分钟发送红包数量不得超过1800个: ◆

微信支付现金红包接口(转)

微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果.具体能力如下: 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领奖流程,带给用户微信支付原生的流畅体验    微信红包发送规则 1. 发送频率规则 ◆ 每分钟发送红包数量不得超过1800个

微信支付-JSAPI支付V3-查询订单

接口链接 https://api.mch.weixin.qq.com/pay/orderquery 请求参数: 字段名 变量名 必填 类型 示例值 描述 公众账号ID appid 是 String(32) wx8888888888888888 微信分配的公众账号ID 商户号 mch_id 是 String(32) 1900000109 微信支付分配的商户号 微信订单号 transaction_id 否 String(32) 013467007045764 微信的订单号,优先使用 商户订单号 ou

微信支付JsAPI

https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip 下载获取微信支付demo压缩包 打开压缩包,并将其中 WxpayAPI_php_v3\example下的 jsapi.php log.php WxPay.JsApiPay.php WxPay.MicroPay.php WxPay.NativePay.php 解压缩到根目录 tellingtent/ 打开 WxPay.JsApiPay.php WxPay.Micr

微信支付JSAPI模式及退款CodeIgniter集成篇

微信支付接口文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 首先你得知道这个jsapi是不能离开微信进行调用支付的,明白了这个道理我们好下手,页面是在微信内显示并通过jsapi调用微信支付组件进行支付. 可以看看我们上一篇文章,主要是Native扫码支付模式二 我们仍然继续使用wechatpay.php这个支付集成类,简单方便好理解,不过如果应用jsapi的话这个类有个bug 在我们构造jsapi需要的参数时有个时间

微信支付-JSAPI支付V3-发起一次支付请求

JSAPI支付业务流程:图片来源于:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=7_4 准备工作:需要先在项目中引用Senparc.WeiXin.dll和Senparc.WeiXin.MP.dll,开源项目见:https://github.com/JeffreySu/WeiXinMPSDK 第一步:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 第二步:引入JS文件 在需要调用JS接口的

php 微信支付jsapi 转的,好像能用。。

首先你们公司开通微信支付功能后,会收到一份邮件,里面有账户相关信息,一般有:微信支付商户号,商户平台登录帐号,商户平台登录密码,申请对应的公众号,公众号APPID. 1.下载demo:用上面信息登陆"微信商户平台",>>>(右上角开发文档)>>>公众号支付>>>sdk下载>>>选php 2.下载证书:账户中心>>>api安全  当然证书如果不做扫码支付是用的到的 3.将下载的证书中的所有文件解压到

关于IOS调用微信支付jsapi不起作用的解决方法

微信支付时,安卓机调用 jsapi可以支付,IOS就不行,点击立即支付,直接返回原立即支付页面,跟刷新页面差不多,解决方案很简单:两句话而已. 不得不说,微信支付坑太多了,我擦..... <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <asp:Button ID="btnSubmit" runat="server" Text

微信支付-JSAPI支付V3-关闭订单

接口链接 https://api.mch.weixin.qq.com/pay/closeorder 请求参数 字段名 变量名 必填 类型 示例值 描述 公众账号ID appid 是 String(32) wx8888888888888888 微信分配的公众账号ID 商户号 mch_id 是 String(32) 1900000109 微信支付分配的商户号 商户订单号 out_trade_no 否 String(32) 1217752501201407033233368018 商户系统内部的订单号