public string Get_signature() { //加密/校验流程: //string noncestr = "noncestr=Wm3WZYTPz0wzccnW"; //string timestamp = "timestamp=1414587457"; //string jsapi_ticket = "jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg"; string noncestr = "noncestr=" + TenpayUtil.getNoncestr(); string timestamp = "timestamp=" + TenpayUtil.getTimestamp(); string jsapi_ticket = ""; if (HttpRuntime.Cache["jsapi_ticket"] == null) { //重新获取jsapi_ticket } else { jsapi_ticket = "jsapi_ticket=" + HttpRuntime.Cache["jsapi_ticket"].ToString(); } //string url = "url=http://mp.weixin.qq.com?params=value"; string url = "url=" + Request.Url.ToString(); //1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后, //使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1 string[] ArrTmp = { noncestr, timestamp, jsapi_ticket, url }; Array.Sort(ArrTmp);//字典排序 //2.将三个参数字符串拼接成一个字符串进行sha1加密 string tmpStr = string.Join("&", ArrTmp); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); return(tmpStr); }
/// <summary> /// 第一种扫码生成二维码----生成二维码 /// </summary> /// <returns></returns> public string GetCode() { // weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX string appid = tenpay.WeChartConfigItem.appid; string mch_id = tenpay.WeChartConfigItem.mch_id; string product_id = "888654444"; string time_stamp = TenpayUtil.getTimestamp(); string nonce_str = TenpayUtil.getNoncestr(); SortedDictionary <string, string> dic = new SortedDictionary <string, string>(); dic.Add("appid", appid); dic.Add("mch_id", mch_id); dic.Add("product_id", product_id); dic.Add("time_stamp", time_stamp); dic.Add("nonce_str", nonce_str); string sign = TenpayUtil.getsign(dic, "43804496F28A4F0FBF1195AA0F1Abcde"); return("weixin://wxpay/bizpayurl?sign=" + sign + "&appid=" + appid + "&mch_id=" + mch_id + "&product_id=" + product_id + "&time_stamp=" + time_stamp + "&nonce_str=" + nonce_str); }
public static string unifiedorder(string appid, string mch_id, string openid, string key, string body, string notify_url, string out_trade_no, int total_fee) { //string appId = this.accessToken.AppId; //string parameterValue = this.partnerId; var spbill_create_ip = "127.0.0.1"; string noncestr = TenpayUtil.getNoncestr(); string parameterValue2 = "JSAPI"; RequestHandler requestHandler = new RequestHandler(Encoding.UTF8); requestHandler.setKey(key); requestHandler.setParameter("appid", appid); requestHandler.setParameter("body", body); requestHandler.setParameter("mch_id", mch_id); requestHandler.setParameter("nonce_str", noncestr); requestHandler.setParameter("notify_url", notify_url); requestHandler.setParameter("openid", openid); requestHandler.setParameter("out_trade_no", out_trade_no); requestHandler.setParameter("spbill_create_ip", spbill_create_ip); requestHandler.setParameter("total_fee", total_fee.ToString()); requestHandler.setParameter("trade_type", parameterValue2); string text = requestHandler.createMd5Sign(); string data = requestHandler.parseXML(); string address = "https://api.mch.weixin.qq.com/pay/unifiedorder"; string xml = new WebClient { Encoding = Encoding.UTF8 }.UploadString(address, "post", data); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xml); XmlElement[] source = xmlDocument.FirstChild.ChildNodes.Cast <XmlElement>().ToArray <XmlElement>(); string innerText = source.Single((XmlElement o) => o.Name == "return_code").InnerText; if (!(innerText != "SUCCESS")) { return(source.Single((XmlElement o) => o.Name == "prepay_id").InnerText); } string text2 = ( from o in source where o.Name == "err_code" select o.InnerText).SingleOrDefault <string>(); string text3 = ( from o in source where o.Name == "err_code_des" select o.InnerText).SingleOrDefault <string>(); if (text2 != null && text3 != null) { throw Error.WeiXinError(text2, text3); } string msg = ( from o in source where o.Name == "return_msg" select o.InnerText).SingleOrDefault <string>() ?? "ERROR"; throw Error.WeiXinError(innerText, msg); }
protected void Page_Load(object sender, EventArgs e) { string sp_billno = Request["order_no"]; //当前时间 yyyyMMdd string date = DateTime.Now.ToString("yyyyMMdd"); if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenpayUtil.BuildRandomStr(4); } else { sp_billno = Request["order_no"].ToString(); } sp_billno = TenpayUtil.partner + sp_billno; RequestHandler outParams = new RequestHandler(Context); outParams.init(); string productid = sp_billno; string timeStamp = TenpayUtil.getTimestamp(); string nonceStr = TenpayUtil.getNoncestr(); RequestHandler Params = new RequestHandler(Context); Params.setParameter("appid", TenpayUtil.appid); Params.setParameter("appkey", TenpayUtil.appkey); Params.setParameter("noncestr", nonceStr); Params.setParameter("timestamp", timeStamp); Params.setParameter("productid", productid); string sign = Params.createSHA1Sign(); Params.setParameter("sign", sign); parm = "weixin://wxpay/bizpayurl?sign=" + sign + "&appid=" + TenpayUtil.appid + "&productid=" + productid + "&timeStamp=" + timeStamp + "&nonceStr=" + nonceStr; parm = QRfromGoogle(parm); }
/// <summary> /// NATIVE第二种扫码支付 /// </summary> /// <returns></returns> public string Code() { //根据什么生成订单号 价格 商品名称 附加信息 UnifiedOrder order = new UnifiedOrder(); order.appid = tenpay.WeChartConfigItem.appid; order.attach = "vinson1"; order.body = "极客美家NATIVE支付正式测试";//订单描述 order.device_info = ""; order.mch_id = tenpay.WeChartConfigItem.mch_id; order.nonce_str = TenpayUtil.getNoncestr(); //随机字符串 order.notify_url = "http://mobile.mj100.com/test/h?id=100"; //回调网址 order.out_trade_no = "20156666978542323" + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); //订单号 order.trade_type = "NATIVE"; order.spbill_create_ip = Request.UserHostAddress; order.total_fee = 1; //order.total_fee = 1; string Code_url = tenpay.TenpayUtil.getCode_url(order, tenpay.WeChartConfigItem.key);//商户key return(Code_url); }
public int isSetVisitDate = 0; //是否指定日期使用 public void Page_Load(object sender, EventArgs e) { string u = Request.ServerVariables["HTTP_USER_AGENT"]; bo = detectmobilebrowser.HttpUserAgent(u); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "Request.Url:" + Request.Url.ToString()); id = Request["id"].ConvertTo <string>(""); string temp_id = Request["id"].ConvertTo <string>(""); string temp_id_speciid = "0"; if (id.Contains("_"))//检验是否为购物车订单 { cart = 1; var id_arr = id.Replace('_', ','); //如果包含规格产品 var prospeciid = new B2bOrderData().SearchCartListBycartid(id_arr); if (prospeciid != null) { if (prospeciid.Count == 0) { //没有此购物车,跳转购物车重新选择产品 Response.Redirect("/h5/order/cart.aspx"); } id = ""; for (int i = 0; i < prospeciid.Count; i++) { id += prospeciid[i].Id + ","; id_speciid += prospeciid[i].Speciid + ","; temp_id = prospeciid[i].Id.ToString(); pro_id = temp_id; temp_id_speciid = prospeciid[i].Speciid.ToString(); } } else { //没有此购物车,跳转购物车重新选择产品 Response.Redirect("/h5/order/cart.aspx"); } } else { if (id.Contains("g"))//检验是否带规格 { var id_arr = id.Split('g'); id = id_arr[0]; //只针对直销单产品顶哦故 if (id_arr[1].Contains("s")) { var ids_arr = id_arr[1].Split('s'); id_speciid = ids_arr[0]; temp_id_speciid = ids_arr[0]; serverid = ids_arr[1]; serverid = serverid.Replace("A", ","); } else { id_speciid = id_arr[1]; temp_id_speciid = id_arr[1]; } temp_id = id_arr[0]; pro_id = id_arr[0]; } } //对规格默认赋值为0 if (temp_id_speciid == "") { temp_id_speciid = "0"; } if (Request.Cookies["temp_userid"] != null) { userid = Request.Cookies["temp_userid"].Value; } else { userid = Domain_def.HuoQu_Temp_UserId(); //Response.Cookies("userid").val(); HttpCookie cookie = new HttpCookie("temp_userid"); //实例化HttpCookie类并添加值 cookie.Value = userid; cookie.Expires = DateTime.Now.AddDays(365); Response.Cookies.Add(cookie); } num = Request["num"].ConvertTo <int>(1); string aRequestUrl = Request.ServerVariables["SERVER_NAME"].ToLower(); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "aRequestUrl:" + aRequestUrl); if (Domain_def.Domain_yanzheng(aRequestUrl))//如果符合shop101.etown.cn的格式 { //先通过正则表达式获取COMid comid = Int32.Parse(Domain_def.Domain_Huoqu(aRequestUrl).ToString()); } if (comid == 0)//如果非标准格式,查询 是否有绑定的域名 { var domaincomid = B2bCompanyData.GetComId(RequestUrl); if (domaincomid != null) { comid = domaincomid.Com_id; } } //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "comid:" + comid); #region 判断是否含有微信端传递过来的code值,不含有自刷新 code = Request.QueryString["code"].ConvertTo <string>(""); if (code == "") { selfrefreshurl = WeiXinJsonData.GetFollowOpenLinkUrlAboutPay(comid, "http://shop" + comid + ".etown.cn/wxpay/micromart_pay_" + num + "_" + id + ".aspx"); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "selfrefreshurl:" + selfrefreshurl); //Response.Redirect(refreshurl); } #endregion //buyuid = Request["buyuid"].ConvertTo<int>(0); //tocomid = Request["tocomid"].ConvertTo<int>(0); //uid = Request["uid"].ConvertTo<int>(0); //获取IP地址 uip = CommonFunc.GetRealIP(); nowdate = DateTime.Now.ToString("yyyy-MM-dd"); nowtoday = DateTime.Now; if (temp_id != "") { //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "a"); B2b_com_pro pro = new B2bComProData().GetProById(temp_id); if (pro == null) { //没有查询到产品,跳转购物车重新选择产品 Response.Redirect("/h5/order/cart.aspx"); } if (pro != null) { //判断微信 是否是认证服务号 WeiXinBasic mbasic = new WeiXinBasicData().GetWxBasicByComId(pro.Com_id); if (mbasic == null) { iswxsubscribenum = false; } else { if (mbasic.Weixintype == 1 || mbasic.Weixintype == 2) { iswxsubscribenum = true; } else { iswxsubscribenum = false; } } #region 微信端 共享收货地址接口 参数获取 //根据产品判断商家是否含有自己的微信支付:a.含有的话支付到商家;b.没有的话支付到平台的微信公众号账户中 B2b_finance_paytype model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(pro.Com_id); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "b"); if (model != null) { //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "c"); //商家微信支付的所有参数都存在 if (model.Wx_appid != "" && model.Wx_appkey != "" && model.Wx_partnerid != "" && model.Wx_paysignkey != "") { appId = model.Wx_appid; appsecret = model.Wx_appkey; //appkey = model.Wx_paysignkey; //mchid = model.Wx_partnerid; //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "d"); issetfinancepaytype = true; if (code != "") { string url = string.Format( "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, appsecret, code); string returnStr = HttpUtil.Send("", url); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "returnStr:" + returnStr); var obj = JsonConvert.DeserializeObject <ModelOpenID>(returnStr); if (obj.openid == null) { //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "微信转发页面打开的,returnStr:" + returnStr); selfrefreshurl = WeiXinJsonData.GetFollowOpenLinkUrlAboutPay(comid, "http://shop" + comid + ".etown.cn/wxpay/micromart_pay_" + num + "_" + id + ".aspx"); Response.Redirect(selfrefreshurl); } if (obj != null) { timeStamp = TenpayUtil.getTimestamp(); nonceStr = TenpayUtil.getNoncestr(); access_tokenstring = obj.access_token; openid = obj.openid; HttpCookie newCookie = new HttpCookie("openid"); //往Cookie里面添加值,均为键/值对。Cookie可以根据关键字寻找到相应的值 newCookie.Values.Add("openid", openid); newCookie.Expires = DateTime.Now.AddDays(365); //Cookie的设置页面要用Response Response.AppendCookie(newCookie); //签名字段:appId、url(当前网页url)、timestamp、noncestr、accessToken var paySignReqHandler = new RequestHandler(Context); paySignReqHandler.setParameter("appid", appId); paySignReqHandler.setParameter("timestamp", timeStamp); paySignReqHandler.setParameter("noncestr", nonceStr); paySignReqHandler.setParameter("url", Request.Url.ToString()); paySignReqHandler.setParameter("accesstoken", obj.access_token); //addrSign = paySignReqHandler.CreateAddrSign(); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", appId + ";" + timeStamp + ";" + nonceStr + ";" + Request.Url.ToString() + ";" + obj.access_token + ";" + addrSign); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "Request.Url:" + Request.Url.ToString()); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "addrSign:" + addrSign); } } } } #endregion //票务产品,判断 是否抢购/限购,是的话 作废超时未支付订单,完成回滚操作 if (pro_servertype == 1) { if (pro.Ispanicbuy == 1 || pro.Ispanicbuy == 2) { int rs = new B2bComProData().CancelOvertimeOrder(pro); } } iscanbook = new B2bComProData().IsYouxiao(pro.Id, pro.Server_type, pro.Pro_start, pro.Pro_end, pro.Pro_state);//判断产品是否有效:1.票务,直接判断有效期 和产品上线状态2.酒店,跟团游,当地游 则判断是否含有有效的房态/团期 以及产品上下线状态 pro_servertype = pro.Server_type; pickuppoint = pro.pickuppoint; dropoffpoint = pro.dropoffpoint; issetidcard = pro.issetidcard; isSetVisitDate = pro.isSetVisitDate; childreduce = pro.Childreduce; pro_start = pro.Pro_start; pro_end = pro.Pro_end; } if (pro.Ispanicbuy == 1) { panic_begintime = pro.Panic_begintime; panicbuy_endtime = pro.Panicbuy_endtime; TimeSpan tss = pro.Panic_begintime - nowtoday; var day = tss.Days * 24 * 3600;; //这是相差的天数 var h = tss.Hours * 3600; //这是相差的小时数, var m = tss.Minutes * 60; var s = tss.Seconds; shijiacha = day + h + m + s; } projectid = pro.Projectid; comid = pro.Com_id; if (temp_id_speciid != "0") //如果规格非默认值,有规格传递,查询规格的价格 及名称 { //如果含有规格 B2b_com_pro prospeciid = new B2bComProData().GetProspeciidById(temp_id, int.Parse(temp_id_speciid)); if (prospeciid != null) { pro_name = pro.Pro_name + prospeciid.Pro_name; price = prospeciid.Advise_price; } } else { pro_name = pro.Pro_name; price = pro.Advise_price; } //如果有服务,增加服务价格 if (serverid != "") { var server_arr = serverid.Split(','); for (int i = 0; i < server_arr.Length; i++) { if (server_arr[i] != "") { var rentsrever = new RentserverData().Rentserverbyidandproid(int.Parse(server_arr[i]), int.Parse(temp_id)); if (rentsrever != null) { price += rentsrever.saleprice + rentsrever.serverDepositprice; } } } } imgurl = FileSerivce.GetImgUrl(pro.Imgurl); if (price == 0) { price = 0; } else { CommonFunc.OperTwoDecimal(price.ToString()); //price = price.IndexOf(".") != -1 ? price.Substring(0, price.IndexOf(".")) : price; } nowdate = DateTime.Now.ToString("yyyy-MM-dd"); if (pro.Service_Contain != "") { summary = "包含服务:" + pro.Service_Contain; } if (pro.Service_NotContain != "") { sumaryend = summary + "</br> 不包含服务:" + pro.Service_NotContain + "</br> 注意事项:" + pro.Precautions; } if (pro.Precautions != "") { sumaryend = summary + "</br> 注意事项:" + pro.Precautions; } //如果服务类型是 票务; 则备注信息中 显示 电子码使用限制 if (pro.Server_type == 1) { if (pro.Iscanuseonsameday == 0)//电子码当天不可用 { sumaryend = "此产品当天预订不可用<br>" + sumaryend; } if (pro.Iscanuseonsameday == 1)//电子码当天可用 { sumaryend = "此产品当天预订可用<br>" + sumaryend; } if (pro.Iscanuseonsameday == 2)//电子码出票2小时内不可用 { sumaryend = "此产品出票2小时内不可用<br>" + sumaryend; } } if (summary.Length > 30) { summary = summary.Substring(0, 30); } if (summary.Length > 150) { summary = summary.Substring(0, 150) + "..."; } remark = pro.Pro_Remark; pro_num = pro.Pro_number; if (pro_num == 0) { pro_max = 100; pro_min = 1; } else { pro_min = 1; pro_max = pro_num; } pro_explain = pro.Pro_explain; #region 产品有效期判定(微信模板--门票订单预订成功通知 中也有用到) provalidatemethod = pro.ProValidateMethod; //判断 1按产品有效期,2指定有效期 appointdate = pro.Appointdata; //1=一星期,,2=1个月,3=3个月,4=6个月,5=一年 iscanuseonsameday = pro.Iscanuseonsameday; //1当天可用,0当天不可用 pro_end = pro.Pro_end; //返回有效期 pro_youxiaoqi = new B2bComProData().GetPro_Youxiaoqi(pro.Pro_start, pro.Pro_end, provalidatemethod, appointdate, iscanuseonsameday); #endregion var commodel = B2bCompanyData.GetCompany(comid); if (commodel != null) { if (commodel.B2bcompanyinfo != null) { Wxfocus_url = commodel.B2bcompanyinfo.Wxfocus_url; Wxfocus_author = commodel.B2bcompanyinfo.Wxfocus_author;; } } var saleset = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); if (saleset != null) { phone = saleset.Service_Phone; } //查询项目电话,如果有项目电话调取项目电话 var projectdata = new B2b_com_projectData(); var projectmodel = projectdata.GetProject(projectid, comid); if (projectmodel != null) { if (projectmodel.Mobile != "") { phone = projectmodel.Mobile; } } //从cookie中得到微信号 if (Request.Cookies["openid"] != null) { openid = Request.Cookies["openid"].Value; } B2bCrmData b2b_crm = new B2bCrmData(); if (openid != "") { B2b_crm b2bmodle = b2b_crm.b2b_crmH5(openid, comid); if (b2bmodle != null) { Imprest = b2bmodle.Imprest; Integral = b2bmodle.Integral; } } } //如果是购物车产品,整体更换计算方式,以上至是读一个产品信息,并且读取用户的分销信息等 if (cart == 1) { cart_num = ""; //数量 price = 0; //单价 //获取购物车 的用户ID if (Request.Cookies["temp_userid"] != null) { userid = Request.Cookies["temp_userid"].Value; } cart_id = id; //赋值方便区分 if (userid != "") { var list = new B2bOrderData().SearchUserCartList(comid, userid, cart_id, id_speciid); if (list != null) { cart_id = ""; for (int i = 0; i < list.Count; i++) { cart_num += list[i].U_num + ","; cart_id += list[i].Id + ","; if (list[i].Speciid == 0) { price += list[i].U_num * list[i].Advise_price; //重新计算价格 } else { B2b_com_pro prospeciid = new B2bComProData().GetProspeciidById(list[i].Id.ToString(), list[i].Speciid);//如果含有规格参数 读取规格 if (prospeciid != null) { price += list[i].U_num * prospeciid.Advise_price; //重新计算价格 } } } if (cart_num != "") { if (cart_num.Substring(cart_num.Length - 1, 1) == ",") { cart_num = cart_num.Substring(0, cart_num.Length - 1); } } if (cart_id != "") { if (cart_id.Substring(cart_id.Length - 1, 1) == ",") { cart_id = cart_id.Substring(0, cart_id.Length - 1); } } } } } if (Domain_def.Domain_yanzheng(RequestUrl))//如果符合shop101.etown.cn的格式,则从多微信商户基本信息表中获取comid { //先通过正则表达式获取COMid comid = Int32.Parse(Domain_def.Domain_Huoqu(RequestUrl).ToString()); if (comid == 0) { comid = new WeiXinBasicData().GetWeiXinBasicByDomain(RequestUrl).Comid; } if (comid != 0) { var commodel = B2bCompanyData.GetCompany(comid); if (commodel != null) { if (commodel.B2bcompanyinfo != null) { Wxfocus_url = commodel.B2bcompanyinfo.Wxfocus_url; Wxfocus_author = commodel.B2bcompanyinfo.Wxfocus_author; weixinname = commodel.B2bcompanyinfo.Weixinname; Scenic_intro = commodel.B2bcompanyinfo.Scenic_intro; } title = commodel.Com_name; } B2b_company_saleset pro = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); if (pro != null) { comlogo = FileSerivce.GetImgUrl(pro.Smalllogo.ConvertTo <int>(0)); logoimg = comlogo; } ////获取微信平台端code //string weixincode = Request["code"].ConvertTo<string>(""); ////获取微信号和一次性密码 //openid = Request["openid"].ConvertTo<string>(""); //string weixinpass = Request["weixinpass"].ConvertTo<string>(""); ////获得会员信息 //GetCrmInfo(weixincode, openid, weixinpass); } } //获取BANNER,及logo //if (comid != 0) //{ // //根据公司id得到 直销设置 // B2b_company_saleset saleset = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); // if (saleset != null) // { // logoimg = FileSerivce.GetImgUrl(saleset.Smalllogo.ConvertTo<int>(0)); // } //} //微信转发访问归属渠道 if (uid != 0)//必须记录转发用户信息才能继续统计 { //判断有转发人的渠道 var crmdata = new B2bCrmData(); var pro = crmdata.Readuser(uid, comid);//读取转发人用户信息 string zhuanfa_phone = ""; if (pro != null) { zhuanfa_phone = pro.Phone; } if (zhuanfa_phone != "") { //转发人手机存在 MemberChannelData channeldata = new MemberChannelData(); var channeinfo = channeldata.GetPhoneComIdChannelDetail(zhuanfa_phone, comid); //查询渠道 if (channeinfo != null) { //转发人渠道记录COOKI HttpCookie cookie = new HttpCookie("ZF_ChanneId"); //实例化HttpCookie类并添加值 cookie.Value = channeinfo.Id.ToString(); cookie.Expires = DateTime.Now.AddDays(120); Response.Cookies.Add(cookie); } } } }
/// <summary> /// 支付 /// </summary> public ActionResult Pay() { //订单id int oid = WebHelper.GetQueryInt("oid"); //订单信息 OrderInfo orderInfo = Orders.GetOrderByOid(oid); if (orderInfo == null || orderInfo.OrderState != (int)OrderState.WaitPaying) { return(Content("")); } #region 支付操作============================ #region 基本参数=========================== //商户订单号 string outTradeNo = orderInfo.Oid.ToString() + Randoms.CreateRandomValue(10, false); //订单名称 string subject = BSPConfig.ShopConfig.SiteTitle + "购物"; //付款金额 string totalFee = ((int)(orderInfo.SurplusMoney * 100)).ToString(); //时间戳 string timeStamp = TenpayUtil.getTimestamp(); //随机字符串 string nonceStr = TenpayUtil.getNoncestr(); //服务器异步通知页面路径 string notifyUrl = string.Format("http://{0}/app/wechat/notify", BSPConfig.ShopConfig.SiteUrl); LogUtil.WriteLog("totalFee" + totalFee); //string access_token = ""; //string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", PayConfig.AppId, PayConfig.AppSecret); //string returnStr = HttpUtil.Get_Http(url, 120000); //LogUtil.WriteLog("returnStr 页面 returnStr:" + returnStr); //if (!returnStr.Contains("access_token")) //{ // return Content(""); //} //else //{ // string[] list = returnStr.Split(','); // access_token = list[0].Split(':')[1].Trim('"'); //} //LogUtil.WriteLog("access_token 页面 access_token:" + access_token); //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(System.Web.HttpContext.Current); //初始化 packageReqHandler.init(); //设置package订单参数 具体参数列表请参考官方pdf文档,请勿随意设置 packageReqHandler.setParameter("appid", PayConfig.AppId); packageReqHandler.setParameter("body", subject); //商品信息 127字符 packageReqHandler.setParameter("mch_id", PayConfig.MchId); packageReqHandler.setParameter("nonce_str", nonceStr.ToLower()); packageReqHandler.setParameter("notify_url", notifyUrl); packageReqHandler.setParameter("out_trade_no", outTradeNo); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", totalFee); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "APP"); //if (!string.IsNullOrEmpty(this.Attach)) // packageReqHandler.setParameter("attach", this.Attach);//自定义参数 127字符 #endregion #region sign=============================== string sign = packageReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 sign:" + sign); #endregion #region 获取package包====================== packageReqHandler.setParameter("sign", sign); string data = packageReqHandler.parseXML(); LogUtil.WriteLog("WeiPay 页面 package(XML):" + data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); LogUtil.WriteLog("WeiPay 页面 package(Back_XML):" + prepayXml); //获取预支付ID string prepayId = ""; string package = ""; XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { prepayId = xnl[7].InnerText; package = string.Format("prepay_id={0}", prepayId); LogUtil.WriteLog("WeiPay 页面 package:" + package); } #endregion #region 设置支付参数 输出页面 该部分参数请勿随意修改 ============== nonceStr = TenpayUtil.getNoncestr(); RequestHandler paySignReqHandler = new RequestHandler(System.Web.HttpContext.Current); paySignReqHandler.setParameter("appid", PayConfig.AppId); paySignReqHandler.setParameter("noncestr", nonceStr.ToLower()); paySignReqHandler.setParameter("package", "Sign=WXPay"); paySignReqHandler.setParameter("partnerid", PayConfig.MchId); paySignReqHandler.setParameter("prepayid", prepayId); paySignReqHandler.setParameter("timestamp", timeStamp); string paySign = paySignReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 paySign:" + paySign); #endregion #endregion return(Content(string.Format("{0}\"appId\":\"{1}\",\"partnerId\":\"{2}\",\"prepayId\":\"{3}\",\"packageValue\":\"{4}\",\"nonceStr\":\"{5}\",\"timeStamp\":\"{6}\",\"sign\":\"{7}\"{8}", "{", PayConfig.AppId, PayConfig.MchId, prepayId, "Sign=WXPay", nonceStr.ToLower(), timeStamp, paySign, "}"))); }
public void Page_Load(object sender, EventArgs e) { string u = Request.ServerVariables["HTTP_USER_AGENT"]; bo = detectmobilebrowser.HttpUserAgent(u); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "Request.Url:" + Request.Url.ToString()); id = Request["id"].ConvertTo <string>(""); string temp_id = Request["id"].ConvertTo <string>(""); if (Request.Cookies["temp_userid"] != null) { userid = Request.Cookies["temp_userid"].Value; } else { userid = Domain_def.HuoQu_Temp_UserId(); //Response.Cookies("userid").val(); HttpCookie cookie = new HttpCookie("temp_userid"); //实例化HttpCookie类并添加值 cookie.Value = userid; cookie.Expires = DateTime.Now.AddDays(365); Response.Cookies.Add(cookie); } //取消超时订单 B2b_com_pro pro_cannelorder = new B2b_com_pro(); pro_cannelorder.Server_type = 0; int rs_cannelorder = new B2bComProData().CancelOvertimeOrder(pro_cannelorder); num = Request["num"].ConvertTo <int>(1); string aRequestUrl = Request.ServerVariables["SERVER_NAME"].ToLower(); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "aRequestUrl:" + aRequestUrl); if (Domain_def.Domain_yanzheng(aRequestUrl))//如果符合shop101.etown.cn的格式 { //先通过正则表达式获取COMid comid = Int32.Parse(Domain_def.Domain_Huoqu(aRequestUrl).ToString()); } if (comid == 0)//如果非标准格式,查询 是否有绑定的域名 { var domaincomid = B2bCompanyData.GetComId(RequestUrl); if (domaincomid != null) { comid = domaincomid.Com_id; } } //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "comid:" + comid); #region 判断是否含有微信端传递过来的code值,不含有自刷新 code = Request.QueryString["code"].ConvertTo <string>(""); if (code == "") { selfrefreshurl = WeiXinJsonData.GetFollowOpenLinkUrlAboutPay(comid, "http://shop" + comid + ".etown.cn/wxpay/micromart_pay_" + num + "_" + id + ".aspx"); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "selfrefreshurl:" + selfrefreshurl); //Response.Redirect(refreshurl); } #endregion //buyuid = Request["buyuid"].ConvertTo<int>(0); //tocomid = Request["tocomid"].ConvertTo<int>(0); //uid = Request["uid"].ConvertTo<int>(0); //获取IP地址 uip = CommonFunc.GetRealIP(); nowdate = DateTime.Now.ToString("yyyy-MM-dd"); nowtoday = DateTime.Now; if (temp_id != "") { B2bOrderData orderdata = new B2bOrderData(); var pro = orderdata.GetOrderById(int.Parse(temp_id)); if (pro != null) { orderstatus = EnumUtils.GetName((OrderStatus)pro.Order_state); order_state = pro.Order_state; subtime = pro.U_subdate.ToString("yyyy/MM/dd hh:mm:ss"); paystate = pro.Pay_state; #region 微信端 共享收货地址接口 参数获取 //根据产品判断商家是否含有自己的微信支付:a.含有的话支付到商家;b.没有的话支付到平台的微信公众号账户中 B2b_finance_paytype model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(pro.Comid); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "b"); if (model != null) { //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "c"); //商家微信支付的所有参数都存在 if (model.Wx_appid != "" && model.Wx_appkey != "" && model.Wx_partnerid != "" && model.Wx_paysignkey != "") { appId = model.Wx_appid; appsecret = model.Wx_appkey; //appkey = model.Wx_paysignkey; //mchid = model.Wx_partnerid; //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "d"); issetfinancepaytype = true; if (code != "") { string url = string.Format( "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, appsecret, code); string returnStr = HttpUtil.Send("", url); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "returnStr:" + returnStr); var obj = JsonConvert.DeserializeObject <ModelOpenID>(returnStr); if (obj.openid == null) { //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "微信转发页面打开的,returnStr:" + returnStr); selfrefreshurl = WeiXinJsonData.GetFollowOpenLinkUrlAboutPay(comid, "http://shop" + comid + ".etown.cn/wxpay/micromart_pay_" + num + "_" + id + ".aspx"); Response.Redirect(selfrefreshurl); } if (obj != null) { timeStamp = TenpayUtil.getTimestamp(); nonceStr = TenpayUtil.getNoncestr(); access_tokenstring = obj.access_token; openid = obj.openid; HttpCookie newCookie = new HttpCookie("openid"); //往Cookie里面添加值,均为键/值对。Cookie可以根据关键字寻找到相应的值 newCookie.Values.Add("openid", openid); newCookie.Expires = DateTime.Now.AddDays(365); //Cookie的设置页面要用Response Response.AppendCookie(newCookie); //签名字段:appId、url(当前网页url)、timestamp、noncestr、accessToken var paySignReqHandler = new RequestHandler(Context); paySignReqHandler.setParameter("appid", appId); paySignReqHandler.setParameter("timestamp", timeStamp); paySignReqHandler.setParameter("noncestr", nonceStr); paySignReqHandler.setParameter("url", Request.Url.ToString()); paySignReqHandler.setParameter("accesstoken", obj.access_token); //addrSign = paySignReqHandler.CreateAddrSign(); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", appId + ";" + timeStamp + ";" + nonceStr + ";" + Request.Url.ToString() + ";" + obj.access_token + ";" + addrSign); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "Request.Url:" + Request.Url.ToString()); //TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\Log.txt", "addrSign:" + addrSign); } } } } #endregion address = pro.U_name + " " + pro.U_phone + "<br>" + pro.Province + " " + pro.City + " " + pro.Address; if (pro.Shopcartid == 0) { B2b_com_pro proinfo = new B2bComProData().GetProById(pro.Pro_id.ToString(), pro.Speciid, pro.channelcoachid); if (proinfo != null) { pro_name = proinfo.Pro_name; imgurl = FileSerivce.GetImgUrl(proinfo.Imgurl); Ispanicbuy = proinfo.Ispanicbuy; Server_type = proinfo.Server_type; } else { pro_name = "对订单进行支付"; } pay_price = Math.Round(pro.Pay_price, 2); pro_price = Math.Round(pro.Pay_price * pro.U_num, 2); price = Math.Round(pro.Pay_price * pro.U_num - pro.Integral1 - pro.Imprest1 + pro.Express, 2); num = pro.U_num; Express = Math.Round(pro.Express, 2); } else { //如果是购物车订单,必须一起支付 cart_id = pro.Shopcartid; cart = 1; price = Math.Round(orderdata.GetCartOrderMoneyById(pro.Id), 2); pro_name = orderdata.GetCartOrderProById(pro.Id); Express = Math.Round(orderdata.GetCartOrderExpressMoneyById(pro.Id), 2); num = 1; var shopcart = orderdata.shopcartorder(pro.Shopcartid); if (shopcart != null) { for (int i = 0; i < shopcart.Count; i++) { pro_price += shopcart[i].Pay_price * shopcart[i].U_num; proid += shopcart[i].Pro_id + ","; } } pro_price = Math.Round(pro_price, 2); } } if (price == 0) { price = 0; } else { CommonFunc.OperTwoDecimal(price.ToString()); //price = price.IndexOf(".") != -1 ? price.Substring(0, price.IndexOf(".")) : price; } nowdate = DateTime.Now.ToString("yyyy-MM-dd"); if (summary.Length > 30) { summary = summary.Substring(0, 30); } if (summary.Length > 150) { summary = summary.Substring(0, 150) + "..."; } var commodel = B2bCompanyData.GetCompany(comid); if (commodel != null) { if (commodel.B2bcompanyinfo != null) { Wxfocus_url = commodel.B2bcompanyinfo.Wxfocus_url; Wxfocus_author = commodel.B2bcompanyinfo.Wxfocus_author;; } } var saleset = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); if (saleset != null) { phone = saleset.Service_Phone; } //查询项目电话,如果有项目电话调取项目电话 var projectdata = new B2b_com_projectData(); var projectmodel = projectdata.GetProject(projectid, comid); if (projectmodel != null) { if (projectmodel.Mobile != "") { phone = projectmodel.Mobile; } } //从cookie中得到微信号 if (Request.Cookies["openid"] != null) { openid = Request.Cookies["openid"].Value; } B2bCrmData b2b_crm = new B2bCrmData(); if (openid != "") { B2b_crm b2bmodle = b2b_crm.b2b_crmH5(openid, comid); if (b2bmodle != null) { Imprest = b2bmodle.Imprest; Integral = b2bmodle.Integral; } } } if (Domain_def.Domain_yanzheng(RequestUrl))//如果符合shop101.etown.cn的格式,则从多微信商户基本信息表中获取comid { //先通过正则表达式获取COMid comid = Int32.Parse(Domain_def.Domain_Huoqu(RequestUrl).ToString()); if (comid == 0) { comid = new WeiXinBasicData().GetWeiXinBasicByDomain(RequestUrl).Comid; } if (comid != 0) { var commodel = B2bCompanyData.GetCompany(comid); if (commodel != null) { if (commodel.B2bcompanyinfo != null) { Wxfocus_url = commodel.B2bcompanyinfo.Wxfocus_url; Wxfocus_author = commodel.B2bcompanyinfo.Wxfocus_author; weixinname = commodel.B2bcompanyinfo.Weixinname; Scenic_intro = commodel.B2bcompanyinfo.Scenic_intro; } title = commodel.Com_name; } B2b_company_saleset pro = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); if (pro != null) { comlogo = FileSerivce.GetImgUrl(pro.Smalllogo.ConvertTo <int>(0)); } ////获取微信平台端code //string weixincode = Request["code"].ConvertTo<string>(""); ////获取微信号和一次性密码 //openid = Request["openid"].ConvertTo<string>(""); //string weixinpass = Request["weixinpass"].ConvertTo<string>(""); ////获得会员信息 //GetCrmInfo(weixincode, openid, weixinpass); } } //获取BANNER,及logo if (comid != 0) { //根据公司id得到 直销设置 B2b_company_saleset saleset = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); if (saleset != null) { logoimg = FileSerivce.GetImgUrl(saleset.Smalllogo.ConvertTo <int>(0)); } } //微信转发访问归属渠道 if (uid != 0)//必须记录转发用户信息才能继续统计 { //判断有转发人的渠道 var crmdata = new B2bCrmData(); var pro = crmdata.Readuser(uid, comid);//读取转发人用户信息 string zhuanfa_phone = ""; if (pro != null) { zhuanfa_phone = pro.Phone; } if (zhuanfa_phone != "") { //转发人手机存在 MemberChannelData channeldata = new MemberChannelData(); var channeinfo = channeldata.GetPhoneComIdChannelDetail(zhuanfa_phone, comid); //查询渠道 if (channeinfo != null) { //转发人渠道记录COOKI HttpCookie cookie = new HttpCookie("ZF_ChanneId"); //实例化HttpCookie类并添加值 cookie.Value = channeinfo.Id.ToString(); cookie.Expires = DateTime.Now.AddDays(120); Response.Cookies.Add(cookie); } } } }
/// <summary> /// 生成欲支付订单 /// </summary> private void PayMoney() { #region 支付操作============================ #region 基本参数=========================== //时间戳 TimeStamp = TenpayUtil.getTimestamp(); //随机字符串 NonceStr = TenpayUtil.getNoncestr(); //创建支付应答对象 var packageReqHandler = new RequestHandler(Context); //初始化 packageReqHandler.init(); Random ra = new Random(); DateTime timeNow = System.DateTime.Now; orderCode = "MB" + nID + timeNow.ToString("yyyyMMddhhmmss") + ra.Next(0, 1000).ToString(); ordercode.Value = orderCode; //var pr = StringDelHTML.PriceToIntUp(proPrice); //设置package订单参数 具体参数列表请参考官方pdf文档,请勿随意设置 packageReqHandler.setParameter("body", "MissBeauty视频购买"); //商品信息 127字符 packageReqHandler.setParameter("appid", PayConfig.AppId); packageReqHandler.setParameter("mch_id", PayConfig.MchId); packageReqHandler.setParameter("nonce_str", NonceStr.ToLower()); packageReqHandler.setParameter("notify_url", PayConfig.NotifyUrl); packageReqHandler.setParameter("openid", this.UserOpenId); packageReqHandler.setParameter("out_trade_no", orderCode); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", (orderprice.Value).ToString()); //商品金额,以分为单位(money * 100).ToString()//Convert.ToInt32(0.01)*100).ToString() packageReqHandler.setParameter("trade_type", "JSAPI"); if (!string.IsNullOrEmpty(nID)) { string fatherid = Request.QueryString["agent"] == null ? "0" : Request.QueryString["agent"].ToString() == "" ? "0" : Request.QueryString["agent"].ToString(); string attach = nID + "," + fatherid + "," + proPrice + "," + orderCode + "," + pID; packageReqHandler.setParameter("attach", attach);//自定义参数 127字符 } #endregion #region sign=============================== Sign = packageReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 sign:" + Sign); #endregion #region 获取package包====================== packageReqHandler.setParameter("sign", Sign); string data = packageReqHandler.parseXML(); LogUtil.WriteLog("WeiPay 页面 package(XML):" + data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); LogUtil.WriteLog("WeiPay 页面 package(Back_XML):" + prepayXml); //获取预支付ID var xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { PrepayId = xnl[7].InnerText; Package = string.Format("prepay_id={0}", PrepayId); LogUtil.WriteLog("WeiPay 页面 package:" + Package); } #endregion #region 设置支付参数 输出页面 该部分参数请勿随意修改 ============== var paySignReqHandler = new RequestHandler(Context); paySignReqHandler.setParameter("appId", PayConfig.AppId); paySignReqHandler.setParameter("timeStamp", TimeStamp); paySignReqHandler.setParameter("nonceStr", NonceStr); paySignReqHandler.setParameter("package", Package); paySignReqHandler.setParameter("signType", "MD5"); PaySign = paySignReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 paySign:" + PaySign); #endregion #endregion }
/// <summary> /// 发红包啊 /// </summary> /// <returns></returns> public string FHB() { tenpay.RedPacket p = new RedPacket() { nonce_str = TenpayUtil.getNoncestr(), mch_billno = "201411111234567" + DateTime.Now.Hour.ToSafeString() + DateTime.Now.Minute.ToSafeString() + DateTime.Now.Second.ToSafeString(), mch_id = tenpay.WeChartConfigItem.mch_id, wxappid = tenpay.WeChartConfigItem.appid, nick_name = "极客美家", send_name = "极客美家", re_openid = "o8r91jjmQWUqO8zrq4rxL0QVTEYs", total_amount = "100", min_value = "100", max_value = "100", total_num = "1", wishing = "1", client_ip = "118.144.76.61", act_name = "1", remark = "1" }; string s = tenpay.TenpayUtil.Fhb(p, tenpay.WeChartConfigItem.key); System.IO.File.AppendAllText(HttpContext.Server.MapPath("") + "红包.txt", s + DateTime.Now.ToSafeString() + "\r\n\r\n"); return(s); #region MyRegion // return TenpayUtil.PostXmlToUrl("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack", @"<xml> //// <sign></sign> //// <mch_billno></mch_billno> //// <mch_id></mch_id> //// <wxappid></wxappid> //// <nick_name></nick_name> //// <send_name></send_name> //// <re_openid></re_openid> //// <total_amount></total_amount> //// <min_value></min_value> //// <max_value></max_value> //// <total_num></total_num> //// <wishing></wishing> //// <client_ip></client_ip> //// <act_name></act_name> //// <act_id></act_id> //// <remark></remark> //// <logo_imgurl></logo_imgurl> //// <share_content></share_content> //// <share_url></share_url> //// <share_imgurl></share_imgurl> //// <nonce_str></nonce_str> //// </xml>"); ; // return ProcessRequest(@"<xml> // <sign></sign> // <mch_billno></mch_billno> // <mch_id></mch_id> // <wxappid></wxappid> // <nick_name></nick_name> // <send_name></send_name> // <re_openid></re_openid> // <total_amount></total_amount> // <min_value></min_value> // <max_value></max_value> // <total_num></total_num> // <wishing></wishing> // <client_ip></client_ip> // <act_name></act_name> // <act_id></act_id> // <remark></remark> // <logo_imgurl></logo_imgurl> // <share_content></share_content> // <share_url></share_url> // <share_imgurl></share_imgurl> // <nonce_str></nonce_str> // </xml>"); #endregion }
protected void Page_Load(object sender, EventArgs e) { //RequestUrl = Request.ServerVariables["SERVER_NAME"].ToLower(); string u = Request.ServerVariables["HTTP_USER_AGENT"]; bool bo = detectmobilebrowser.HttpUserAgent(u); if (Request.QueryString["code"] != null) { orderid = Request["orderid"].ConvertTo <int>(0); Returnmd5 = EncryptionHelper.ToMD5(orderid.ToString() + "lixh1210", "UTF-8"); if (orderid != 0) { //根据订单id得到订单信息 B2bOrderData dataorder = new B2bOrderData(); B2b_order modelb2border = dataorder.GetOrderById(orderid); orderstatus = EnumUtils.GetName((OrderStatus)modelb2border.Order_state); paystatus = modelb2border.Pay_state;//1未支付;2已支付 order_type = modelb2border.Order_type; //根据产品id得到产品信息 B2bComProData datapro = new B2bComProData(); B2b_com_pro modelcompro = datapro.GetProById(modelb2border.Pro_id.ToString(), modelb2border.Speciid, modelb2border.channelcoachid); if (modelcompro != null) { servertype = modelcompro.Server_type; } cart = modelb2border.Shopcartid;//购物车 #region 正常订单 if (modelb2border.Order_type == 1) { if (modelcompro != null) { #region 务类型订单金额 p_totalprice1 = new B2bOrderData().GetOrderTotalPrice(modelcompro, modelb2border, out price, out pricedetail); if (p_totalprice1 == 0 || price == "0") { Response.Write("<script>alert('订单金额不可为0');</script>"); Response.End(); return; } #endregion proname = modelcompro.Pro_name; u_name = modelb2border.U_name.Substring(0, 1) + "**"; u_mobile = modelb2border.U_phone.Substring(0, 4) + "****" + modelb2border.U_phone.Substring(modelb2border.U_phone.Length - 3, 3); travel_date = modelb2border.U_traveldate.ToString(); buy_num = modelb2border.U_num; u_youxiaoqi = modelcompro.Pro_start.ToString() + " - " + modelcompro.Pro_end.ToString(); p_totalprice = CommonFunc.OperTwoDecimal(p_totalprice1.ToString()); wxp_totalprice = (p_totalprice1 * 100).ToString("F0"); price = modelb2border.Pay_price.ToString(); price = CommonFunc.OperTwoDecimal(price); comid = modelcompro.Com_id; var saleset = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); if (saleset != null) { phone = saleset.Service_Phone; } } } #endregion #region 充值订单 if (modelb2border.Order_type == 2) { //ordertype=2 充值订单会传递过来值 comid = modelb2border.Comid; p_totalprice1 = modelb2border.U_num * modelb2border.Pay_price; p_totalprice = CommonFunc.OperTwoDecimal(p_totalprice1.ToString()); wxp_totalprice = (p_totalprice1 * 100).ToString("F0"); //获得商户电话 var saleset = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); if (saleset != null) { phone = saleset.Service_Phone; } } #endregion #region 统一获得商户名称 和 微信支付链接 if (comid != 0) { comName = B2bCompanyData.GetCompany(comid).Com_name; } #endregion #region 写入支付数据库,先判定是否有此订单支付 B2bPayData datapay = new B2bPayData(); B2b_pay modelb2pay = datapay.GetPayByoId(orderid); if (modelb2pay != null) { //对已完成支付的,再次提交支付,跳转到订单也或显示此订单已支付 if (modelb2pay.Trade_status == "TRADE_SUCCESS") { Response.Write("订单已经支付过!"); Response.End(); return; } } #endregion #region 微信支付 //根据产品判断商家是否含有自己的微信支付:a.含有的话支付到商家;b.没有的话支付到平台的微信公众号账户中 B2b_finance_paytype model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(comid); if (model != null) { //商家微信支付的所有参数都存在 if (model.Wx_appid != "" && model.Wx_appkey != "" && model.Wx_partnerid != "" && model.Wx_paysignkey != "") { appId = model.Wx_appid; appsecret = model.Wx_appkey; appkey = model.Wx_paysignkey; mchid = model.Wx_partnerid; } else { model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(106); if (model.Wx_appid != "" && model.Wx_appkey != "" && model.Wx_partnerid != "" && model.Wx_paysignkey != "") { appId = model.Wx_appid; appsecret = model.Wx_appkey; appkey = model.Wx_paysignkey; mchid = model.Wx_partnerid; } } } else { model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(106); if (model.Wx_appid != "" && model.Wx_appkey != "" && model.Wx_partnerid != "" && model.Wx_paysignkey != "") { appId = model.Wx_appid; appsecret = model.Wx_appkey; appkey = model.Wx_paysignkey; mchid = model.Wx_partnerid; } } #region 获取用户openid code = Request.QueryString["code"]; string url = string.Format( "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, appsecret, code); string returnStr = HttpUtil.Send("", url); var obj = JsonConvert.DeserializeObject <ModelOpenID>(returnStr); if (obj.openid == null) { //WriteFile(Server.MapPath("") + "\\Log.txt", "code:" + code + "\r\n------------------------------\r\n returnStr:" + returnStr); url = string.Format( "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1}", appId, obj.refresh_token); returnStr = HttpUtil.Send("", url); obj = JsonConvert.DeserializeObject <ModelOpenID>(returnStr); } //WriteFile(Server.MapPath("") + "\\Log.txt", "access_token:" + obj.access_token + "\r\n" + "--openid:" + obj.openid); //url = string.Format( // "https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}", // obj.access_token, obj.openid); //returnStr = HttpUtil.Send("", url); //WriteFile(Server.MapPath("") + "\\Log.txt", returnStr); #endregion //创建支付应答对象 var packageReqHandler = new RequestHandler(Context); //初始化 packageReqHandler.init(); timeStamp = TenpayUtil.getTimestamp(); nonceStr = TenpayUtil.getNoncestr(); //设置package订单参数 string productname = ""; if (modelb2border.Order_type == 1) { productname = modelcompro.Pro_name.Replace("\"", "").Replace("“", "").Replace("'", "").Replace("‘", "").Replace(";", "").Replace(";", ""); if (productname.Length > 50) { productname = productname.Substring(0, 50); } } if (modelb2border.Order_type == 2) { productname = "预付款充值"; } packageReqHandler.setParameter("body", productname); //商品信息 127字符 packageReqHandler.setParameter("appid", appId); packageReqHandler.setParameter("mch_id", mchid); packageReqHandler.setParameter("nonce_str", nonceStr.ToLower()); packageReqHandler.setParameter("notify_url", "http://shop" + comid + ".etown.cn/wxpay/backpaynotice.aspx"); packageReqHandler.setParameter("openid", obj.openid); packageReqHandler.setParameter("out_trade_no", orderid.ToString()); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", wxp_totalprice); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "JSAPI"); //获取package包 sign = packageReqHandler.CreateMd5Sign("key", appkey); //WriteFile(Server.MapPath("") + "\\Log.txt", sign); packageReqHandler.setParameter("sign", sign); string data = packageReqHandler.parseXML(); //WriteFile(Server.MapPath("") + "\\Log.txt", "package包签名:" + sign + "-----\r\n向统一支付接口发送的xml:" + data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); //WriteFile(Server.MapPath("") + "\\Log.txt", "统一支付接口返回xml:" + prepayXml); //获取预支付ID var xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { prepayId = xnl[7].InnerText; package = string.Format("prepay_id={0}", prepayId); //WriteFile(Server.MapPath("") + "\\Log.txt", "预支付id:" + package); } //设置支付参数 var paySignReqHandler = new RequestHandler(Context); paySignReqHandler.setParameter("appId", appId); paySignReqHandler.setParameter("timeStamp", timeStamp); paySignReqHandler.setParameter("nonceStr", nonceStr); paySignReqHandler.setParameter("package", package); paySignReqHandler.setParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", appkey); //WriteFile(Server.MapPath("") + "\\Log.txt", "支付签名" + paySign); #endregion #region 订单提交支付信息 if (modelb2pay == null) { B2b_pay eticket = new B2b_pay() { Id = 0, Oid = orderid, Pay_com = "wx", Pay_name = modelb2border.U_name, Pay_phone = modelb2border.U_phone, Total_fee = p_totalprice1, Trade_no = "", Trade_status = "trade_pendpay", Uip = "", comid = model.Com_id }; int payid = datapay.InsertOrUpdate(eticket); } else { //对已完成支付的,再次提交支付,跳转到订单也或显示此订单已支付 if (modelb2pay.Trade_status != "TRADE_SUCCESS") { //防止金额有所改动 modelb2pay.comid = model.Com_id; modelb2pay.Pay_com = "wx"; modelb2pay.Total_fee = p_totalprice1; datapay.InsertOrUpdate(modelb2pay); } } #endregion } } }
/// <summary> /// 支付 /// </summary> public ActionResult Pay() { //订单id int oid = WebHelper.GetQueryInt("oid"); //订单信息 OrderInfo orderInfo = Orders.GetOrderByOid(oid); if (orderInfo == null || orderInfo.OrderState != (int)OrderState.WaitPaying) { return(Redirect("/mob")); } string code = Request.QueryString["code"]; if (string.IsNullOrEmpty(code)) { string code_url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=lk#wechat_redirect", PayConfig.AppId, string.Format("http://{0}/mob/wechat/pay?oid=" + oid, BSPConfig.ShopConfig.SiteUrl)); LogUtil.WriteLog("code_url:" + code_url); return(Redirect(code_url)); } LogUtil.WriteLog(" ============ 开始 获取微信用户相关信息 ====================="); #region 获取支付用户 OpenID================ string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", PayConfig.AppId, PayConfig.AppSecret, code); string returnStr = HttpUtil.Send("", url); LogUtil.WriteLog("Send 页面 returnStr 第一个:" + returnStr); OpenModel openModel = JsonConvert.DeserializeObject <OpenModel>(returnStr); url = string.Format("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1}", PayConfig.AppId, openModel.refresh_token); returnStr = HttpUtil.Send("", url); openModel = JsonConvert.DeserializeObject <OpenModel>(returnStr); LogUtil.WriteLog("Send 页面 access_token:" + openModel.access_token); LogUtil.WriteLog("Send 页面 openid=" + openModel.openid); //url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}", obj.access_token, obj.openid); //returnStr = HttpUtil.Send("", url); //LogUtil.WriteLog("Send 页面 returnStr:" + returnStr); #endregion LogUtil.WriteLog(" ============ 结束 获取微信用户相关信息 ====================="); LogUtil.WriteLog("============ 单次支付开始 ==============="); #region 支付操作============================ #region 基本参数=========================== //商户订单号 string outTradeNo = orderInfo.Oid.ToString() + Randoms.CreateRandomValue(10, false); //订单名称 string subject = BSPConfig.ShopConfig.SiteTitle + "购物"; //付款金额 string totalFee = ((int)(orderInfo.SurplusMoney * 100)).ToString(); //openId string openId = openModel.openid; //时间戳 string timeStamp = TenpayUtil.getTimestamp(); //随机字符串 string nonceStr = TenpayUtil.getNoncestr(); //服务器异步通知页面路径 string notifyUrl = string.Format("http://{0}/mob/wechat/notify", BSPConfig.ShopConfig.SiteUrl); LogUtil.WriteLog("totalFee" + totalFee); //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(System.Web.HttpContext.Current); //初始化 packageReqHandler.init(); //设置package订单参数 具体参数列表请参考官方pdf文档,请勿随意设置 packageReqHandler.setParameter("body", subject); //商品信息 127字符 packageReqHandler.setParameter("appid", PayConfig.AppId); packageReqHandler.setParameter("mch_id", PayConfig.MchId); packageReqHandler.setParameter("nonce_str", nonceStr.ToLower()); packageReqHandler.setParameter("notify_url", notifyUrl); packageReqHandler.setParameter("openid", openId); packageReqHandler.setParameter("out_trade_no", outTradeNo); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", totalFee); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "JSAPI"); //if (!string.IsNullOrEmpty(this.Attach)) // packageReqHandler.setParameter("attach", this.Attach);//自定义参数 127字符 #endregion #region sign=============================== string sign = packageReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 sign:" + sign); #endregion #region 获取package包====================== packageReqHandler.setParameter("sign", sign); string data = packageReqHandler.parseXML(); LogUtil.WriteLog("WeiPay 页面 package(XML):" + data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); LogUtil.WriteLog("WeiPay 页面 package(Back_XML):" + prepayXml); //获取预支付ID string prepayId = ""; string package = ""; XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { prepayId = xnl[7].InnerText; package = string.Format("prepay_id={0}", prepayId); LogUtil.WriteLog("WeiPay 页面 package:" + package); } #endregion #region 设置支付参数 输出页面 该部分参数请勿随意修改 ============== RequestHandler paySignReqHandler = new RequestHandler(System.Web.HttpContext.Current); paySignReqHandler.setParameter("appId", PayConfig.AppId); paySignReqHandler.setParameter("timeStamp", timeStamp); paySignReqHandler.setParameter("nonceStr", nonceStr); paySignReqHandler.setParameter("package", package); paySignReqHandler.setParameter("signType", "MD5"); string paySign = paySignReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 paySign:" + paySign); #endregion #endregion Dictionary <string, string> model = new Dictionary <string, string>(); model.Add("oid", orderInfo.Oid.ToString()); model.Add("timeStamp", timeStamp); model.Add("nonceStr", nonceStr); model.Add("package", package); model.Add("paySign", paySign); return(PartialView("~/plugins/BrnShop.PayPlugin.WeChat/views/wechat/pay.cshtml", model)); }
/// <summary> /// native扫码支付 /// </summary> /// <returns></returns> public string Code3() { string postStr = @"<xml><appid><![CDATA[wx2c2f2e7b5b62daa1]]></appid> <openid><![CDATA[o8r91jjmQWUqO8zrq4rxL0QVTEYs]]></openid> <mch_id><![CDATA[1246407101]]></mch_id> <is_subscribe><![CDATA[Y]]></is_subscribe> <nonce_str><![CDATA[x20MklmXIxrD7cGE]]></nonce_str> <product_id><![CDATA[888654444]]></product_id> <sign><![CDATA[77B6BAE35570D78DE1BA99B99CD7803B]]></sign> </xml> "; System.IO.File.AppendAllText(HttpContext.Server.MapPath("") + "native.txt", postStr + ":" + DateTime.Now.ToSafeString() + "\r\n\r\n"); SortedDictionary <string, string> dic = TenpayUtil.GetInfoFromXml(postStr); string osign = dic["sign"];//微信sign string sign = TenpayUtil.getsign(dic, "43804496F28A4F0FBF1195AA0F1Abcde");//自己加密后的sign #region 取到的各种值 string appid = dic["appid"]; string openid = dic["openid"]; string mach_id = dic["mch_id"]; string is_subscribe = dic["is_subscribe"]; string nonce_str = dic["nonce_str"]; string product_id = dic["product_id"]; #endregion System.IO.File.AppendAllText(HttpContext.Server.MapPath("") + "native.txt", product_id + ":" + DateTime.Now.ToSafeString() + "\r\n\r\n"); #region 统一下单 UnifiedOrder order = new UnifiedOrder(); order.appid = "wx2c2f2e7b5b62daa1"; order.attach = "vinson1"; order.body = "微信扫码回调测试product_id:" + product_id;//订单描述 order.device_info = ""; order.mch_id = "1246407101"; order.nonce_str = TenpayUtil.getNoncestr(); //随机字符串 order.notify_url = "http://mobile.mj100.com/test/h?id=100"; //回调网址 order.openid = openid; order.out_trade_no = "20156666978542323" + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); //订单号 order.trade_type = "NATIVE"; order.spbill_create_ip = Request.UserHostAddress; order.total_fee = 1; //order.total_fee = 1; string prepay_id = tenpay.TenpayUtil.getPrepay_id(order, "43804496F28A4F0FBF1195AA0F1Abcde");//商户key #endregion System.IO.File.AppendAllText(HttpContext.Server.MapPath("") + "native.txt", prepay_id + ":" + DateTime.Now.ToSafeString() + "\r\n\r\n"); #region 响应请求 SortedDictionary <string, string> pdic = new SortedDictionary <string, string>(); pdic.Add("return_code", "SUCCESS"); pdic.Add("return_msg", ""); pdic.Add("appid", appid); pdic.Add("mch_id", mach_id); pdic.Add("nonce_str", nonce_str); pdic.Add("prepay_id", prepay_id); pdic.Add("result_code", "SUCCESS"); pdic.Add("err_code_des", ""); string nesign = TenpayUtil.getsign(pdic, "43804496F28A4F0FBF1195AA0F1Abcde"); pdic.Add("sign", nesign); StringBuilder sbPay = new StringBuilder(); foreach (KeyValuePair <string, string> k in pdic) { if (k.Key == "attach" || k.Key == "body" || k.Key == "sign") { sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">"); } else { sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">"); } } string return_string = string.Format("<xml>{0}</xml>", sbPay.ToString().TrimEnd(',')); #endregion System.IO.File.AppendAllText(HttpContext.Server.MapPath("") + "native.txt", return_string + ":" + DateTime.Now.ToSafeString() + "\r\n\r\n"); return(return_string); }
/// <summary> /// native第一种扫码支付 /// </summary> /// <returns></returns> public string Code2() { try { #region 获取到请求的值 Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); string postStr = Encoding.UTF8.GetString(b); #endregion SortedDictionary <string, string> dic = TenpayUtil.GetInfoFromXml(postStr); string osign = dic["sign"];//微信sign string sign = TenpayUtil.getsign(dic, tenpay.WeChartConfigItem.key);//自己加密后的sign #region 取到的各种值 string appid = dic["appid"]; string openid = dic["openid"]; string mach_id = dic["mch_id"]; string is_subscribe = dic["is_subscribe"]; string nonce_str = dic["nonce_str"]; string product_id = dic["product_id"];//产品id或者订单号 #endregion // System.IO.File.AppendAllText(HttpContext.Server.MapPath("") + "native.txt", product_id + ":" + DateTime.Now.ToSafeString() + "\r\n\r\n"); #region 统一下单 UnifiedOrder order = new UnifiedOrder(); order.appid = tenpay.WeChartConfigItem.appid; order.attach = "vinson1"; order.body = "微信扫码回调测试product_id:" + product_id;//订单描述 order.device_info = ""; order.mch_id = tenpay.WeChartConfigItem.mch_id; order.nonce_str = TenpayUtil.getNoncestr(); //随机字符串 order.notify_url = "http://mobile.mj100.com/test/h?id=100"; //回调网址 order.openid = openid; order.out_trade_no = "20156666978542323" + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); //订单号 order.trade_type = "NATIVE"; order.spbill_create_ip = Request.UserHostAddress; order.total_fee = 1; //order.total_fee = 1; string prepay_id = tenpay.TenpayUtil.getPrepay_id(order, tenpay.WeChartConfigItem.key);//商户key #endregion // System.IO.File.AppendAllText(HttpContext.Server.MapPath("") + "native.txt", prepay_id + ":" + DateTime.Now.ToSafeString() + "\r\n\r\n"); #region 响应请求 SortedDictionary <string, string> pdic = new SortedDictionary <string, string>(); pdic.Add("return_code", "SUCCESS"); pdic.Add("return_msg", ""); pdic.Add("appid", appid); pdic.Add("mch_id", mach_id); pdic.Add("nonce_str", nonce_str); pdic.Add("prepay_id", prepay_id); pdic.Add("result_code", "SUCCESS"); pdic.Add("err_code_des", ""); string nesign = TenpayUtil.getsign(pdic, tenpay.WeChartConfigItem.key); pdic.Add("sign", nesign); StringBuilder sbPay = new StringBuilder(); foreach (KeyValuePair <string, string> k in pdic) { if (k.Key == "attach" || k.Key == "body" || k.Key == "sign") { sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">"); } else { sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">"); } } string return_string = string.Format("<xml>{0}</xml>", sbPay.ToString().TrimEnd(',')); #endregion return(return_string); } catch (Exception e) { System.IO.File.AppendAllText(HttpContext.Server.MapPath("") + "native.txt", e.Message + ":" + DateTime.Now.ToSafeString() + "\r\n\r\n"); return(""); } }
protected void Page_Load(object sender, EventArgs e) { webinfo = new TravelAgent.BLL.WebInfo().loadConfig(Server.MapPath(ConfigurationManager.AppSettings["WebInfoConfig"].ToString())); if (webinfo == null) { Response.Write("配置信息获取错误!"); Response.End(); } this.BindData(); LogUtil.WriteLog("============ 单次支付开始 ==============="); LogUtil.WriteLog(string.Format("传递支付参数:OrderSN={0}、Body={1}、TotalFee={2}、Attach={3}、UserOpenId={4}", this.OrderSN, this.Body, this.TotalFee, this.Attach, this.UserOpenId)); #region 支付操作============================ #region 基本参数=========================== //时间戳 TimeStamp = TenpayUtil.getTimestamp(); //随机字符串 NonceStr = TenpayUtil.getNoncestr(); //创建支付应答对象 var packageReqHandler = new RequestHandler(Context); //初始化 packageReqHandler.init(); //设置package订单参数 具体参数列表请参考官方pdf文档,请勿随意设置 packageReqHandler.setParameter("body", this.Body); //商品信息 127字符 packageReqHandler.setParameter("appid", webinfo.AppID); packageReqHandler.setParameter("mch_id", webinfo.Mchid); packageReqHandler.setParameter("nonce_str", NonceStr.ToLower()); packageReqHandler.setParameter("notify_url", webinfo.WebDomain + "/mTravel/weipay/Notify.aspx"); packageReqHandler.setParameter("openid", this.UserOpenId); packageReqHandler.setParameter("out_trade_no", this.OrderSN); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", (Convert.ToInt32(this.TotalFee) * 100).ToString()); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "JSAPI"); if (!string.IsNullOrEmpty(this.Attach)) { packageReqHandler.setParameter("attach", this.Attach);//自定义参数 127字符 } #endregion #region sign=============================== Sign = packageReqHandler.CreateMd5Sign("key", webinfo.Key); LogUtil.WriteLog("WeiPay 页面 sign:" + Sign); #endregion #region 获取package包====================== packageReqHandler.setParameter("sign", Sign); string data = packageReqHandler.parseXML(); LogUtil.WriteLog("WeiPay 页面 package(XML):" + data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); LogUtil.WriteLog("WeiPay 页面 package(Back_XML):" + prepayXml); //获取预支付ID var xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { PrepayId = xnl[7].InnerText; Package = string.Format("prepay_id={0}", PrepayId); LogUtil.WriteLog("WeiPay 页面 package:" + Package); } #endregion #region 设置支付参数 输出页面 该部分参数请勿随意修改 ============== var paySignReqHandler = new RequestHandler(Context); paySignReqHandler.setParameter("appId", webinfo.AppID); paySignReqHandler.setParameter("timeStamp", TimeStamp); paySignReqHandler.setParameter("nonceStr", NonceStr); paySignReqHandler.setParameter("package", Package); paySignReqHandler.setParameter("signType", "MD5"); PaySign = paySignReqHandler.CreateMd5Sign("key", webinfo.Key); LogUtil.WriteLog("WeiPay 页面 paySign:" + PaySign); #endregion #endregion }
/// <summary> /// 构造支付 /// </summary> /// <param name="trade">交易业务实体</param> /// <returns></returns> public PrePay Create_url(TenPayTrade trade) { string s = ""; if (trade.OrderInfo.OrderID.Count > 0) { StringBuilder builder = new StringBuilder(); foreach (string str2 in trade.OrderInfo.OrderID) { builder.Append(str2 + ","); } if (builder.Length > 0) { builder.Remove(builder.Length - 1, 1); } Attach model = new Attach(); model.Key = "OId"; model.Value = builder.ToString(); trade.AttachList.Add(model); model = null; } s = trade.AttachList.ToString(); RequestHandler handler = new RequestHandler(HttpContext.Current); handler.init(); handler.setKey(TenPaySystem.Key); handler.setParameter("mch_id", TenPaySystem.BargainorId); handler.setParameter("trade_type", "JSAPI"); handler.setParameter("out_trade_no", trade.OutTradeNo); handler.setParameter("total_fee", (trade.Totalfee * 100M).ToString("F0")); handler.setParameter("notify_url", TenPaySystem.NotifyUrl); handler.setParameter("body", trade.OrderInfo.Body /*trade.OrderInfo.Subject*/); handler.setParameter("spbill_create_ip", trade.UserIP); handler.setParameter("openid", trade.OPENID); handler.setParameter("appid", TenPaySystem.appid); handler.setParameter("nonce_str", TenpayUtil.getNoncestr()); handler.createMd5Sign(); string xml = Toolkit.request.post("https://api.mch.weixin.qq.com/pay/unifiedorder", handler.parseXML(), ""); var xrss = XElement.Parse(xml); var return_code = Toolkit.StringExtensions.GetXElement(xrss, "return_code").Value; var return_msg = Toolkit.StringExtensions.GetXElement(xrss, "return_msg").Value; var result_code = Toolkit.StringExtensions.GetXElement(xrss, "result_code").Value; var prepay_id = Toolkit.StringExtensions.GetXElement(xrss, "prepay_id").Value; var nonce_str = Toolkit.StringExtensions.GetXElement(xrss, "nonce_str").Value; var sign = Toolkit.StringExtensions.GetXElement(xrss, "sign").Value; PrePay Pay = new PrePay(); if (return_code == "SUCCESS") { Pay.ReqState = true; } if (result_code == "SUCCESS") { Pay.IsSuccess = true; } string timeStamp = TenpayUtil.getTimestamp(); string Noncestr = TenpayUtil.getNoncestr(); RequestHandler reponse = new RequestHandler(HttpContext.Current); reponse.init(); reponse.setKey(TenPaySystem.Key); reponse.setParameter("appId", TenPaySystem.appid); reponse.setParameter("timeStamp", timeStamp); reponse.setParameter("package", "prepay_id=" + prepay_id); reponse.setParameter("nonceStr", Noncestr); reponse.setParameter("signType", "MD5"); sign = reponse.createMd5Sign(); Pay.ReturnMsg = return_msg; Pay.NonceStr = Noncestr; Pay.PrepayId = prepay_id; Pay.Sign = sign; Pay.TimeStamp = timeStamp; return(Pay); }
public string pricedetail = ""; //价格详情(暂时只有用来描述旅游) protected void Page_Load(object sender, EventArgs e) { //RequestUrl = Request.ServerVariables["SERVER_NAME"].ToLower(); string u = Request.ServerVariables["HTTP_USER_AGENT"]; bool bo = detectmobilebrowser.HttpUserAgent(u); if (Request.QueryString["code"] != null) { #region 获取用户openid code = Request.QueryString["code"]; string url = string.Format( "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, appsecret, code); string returnStr = HttpUtil.Send("", url); var obj = JsonConvert.DeserializeObject <ModelOpenID>(returnStr); url = string.Format( "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1}", appId, obj.refresh_token); returnStr = HttpUtil.Send("", url); obj = JsonConvert.DeserializeObject <ModelOpenID>(returnStr); WriteFile(Server.MapPath("") + "\\Log.txt", obj.access_token); WriteFile(Server.MapPath("") + "\\Log.txt", obj.openid); //url = string.Format( // "https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}", // obj.access_token, obj.openid); //returnStr = HttpUtil.Send("", url); //WriteFile(Server.MapPath("") + "\\Log.txt", returnStr); #endregion /////////////////////////////////////////////////////////////////////////////////////////////// orderid = Request["orderid"].ConvertTo <int>(0); if (orderid != 0) { //根据订单id得到订单信息 B2bOrderData dataorder = new B2bOrderData(); B2b_order modelb2border = dataorder.GetOrderById(orderid); //根据产品id得到产品信息 B2bComProData datapro = new B2bComProData(); B2b_com_pro modelcompro = datapro.GetProById(modelb2border.Pro_id.ToString()); if (modelb2border != null && modelcompro != null) { #region 务类型订单金额 servertype = modelcompro.Server_type; //如果服务类型是“酒店客房”,则根据酒店扩展订单表中房态信息,获取支付金额 if (modelcompro.Server_type == 9) { B2b_order_hotel hotelorder = new B2b_order_hotelData().GetHotelOrderByOrderId(orderid); if (hotelorder != null) { string fangtai = hotelorder.Fangtai; DateTime start_data = hotelorder.Start_date; DateTime end_data = hotelorder.End_date; int bookdaynum = hotelorder.Bookdaynum; decimal everyroomprice = 0; string[] ftstr = fangtai.Split(','); for (int i = 0; i < ftstr.Length; i++) { if (ftstr[i].ConvertTo <decimal>(0) > 0) { everyroomprice += ftstr[i].ConvertTo <decimal>(0); } } price = everyroomprice.ToString(); p_totalprice1 = (modelb2border.U_num * everyroomprice - modelb2border.Integral1 - modelb2border.Imprest1); } else { } } else if (servertype == 2 || servertype == 8)//当地游;跟团游 { string outdate = modelb2border.U_traveldate.ToString("yyyy-MM-dd"); //读取団期价格,根据实际选择的団期报价 B2b_com_LineGroupDate linemode = new B2b_com_LineGroupDateData().GetLineDayGroupDate(DateTime.Parse(outdate), modelcompro.Id); if (linemode != null) { price = linemode.Menprice.ToString(); decimal childreduce = modelcompro.Childreduce; decimal childprice = decimal.Parse(price) - childreduce; if (childprice < 0) { childprice = 0; } pricedetail = modelb2border.U_num + "成人," + modelb2border.Child_u_num + "儿童(成人" + price + "元/人,儿童" + childprice + "元/人)"; p_totalprice1 = (modelb2border.U_num * (linemode.Menprice) + (modelb2border.Child_u_num) * childprice - modelb2border.Integral1 - modelb2border.Imprest1); } } else //票务 { p_totalprice1 = (modelb2border.U_num * modelcompro.Advise_price - modelb2border.Integral1 - modelb2border.Imprest1); price = modelcompro.Advise_price.ToString(); //modelb2border.Pay_price.ToString(); if (price == "0.00" || price == "0") { price = ""; } else { price = CommonFunc.OperTwoDecimal(price); } } #endregion proname = modelcompro.Pro_name; u_name = modelb2border.U_name.Substring(0, 1) + "**"; u_mobile = modelb2border.U_phone.Substring(0, 4) + "****" + modelb2border.U_phone.Substring(modelb2border.U_phone.Length - 3, 3); travel_date = modelb2border.U_traveldate.ToString(); buy_num = modelb2border.U_num; u_youxiaoqi = modelcompro.Pro_start.ToString() + " - " + modelcompro.Pro_end.ToString(); p_totalprice = CommonFunc.OperTwoDecimal(p_totalprice1.ToString()); wxp_totalprice = (p_totalprice1 * 100).ToString("F0"); price = modelb2border.Pay_price.ToString(); price = CommonFunc.OperTwoDecimal(price); comid = modelcompro.Com_id; if (comid != 0) { comName = B2bCompanyData.GetCompany(comid).Com_name; if (bo == false) { Response.Redirect("http://shop" + comid + ".etown.cn"); } } if ((int)modelb2border.Order_state != (int)OrderStatus.WaitPay) { order_status = EnumUtils.GetName((OrderStatus)modelb2border.Order_state); return; } var saleset = B2bCompanySaleSetData.GetDirectSellByComid(comid.ToString()); if (saleset != null) { phone = saleset.Service_Phone; } //写入支付数据库,先判定是否有此订单支付 B2bPayData datapay = new B2bPayData(); B2b_pay modelb2pay = datapay.GetPayByoId(orderid); #region 微信支付 //根据产品判断商家是否含有自己的微信支付:a.含有的话支付到商家;b.没有的话支付到平台的微信公众号账户中 B2b_finance_paytype model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(modelcompro.Com_id); if (model != null) { //商家微信支付的所有参数都存在 if (model.Wx_appid != "" && model.Wx_appkey != "" && model.Wx_partnerid != "" && model.Wx_paysignkey != "") { appId = model.Wx_appid; appsecret = model.Wx_appkey; appkey = model.Wx_paysignkey; mchid = model.Wx_partnerid; } else { return; } } else { return; } //创建支付应答对象 var packageReqHandler = new RequestHandler(Context); //初始化 packageReqHandler.init(); timeStamp = TenpayUtil.getTimestamp(); nonceStr = TenpayUtil.getNoncestr(); //设置package订单参数 string productname = modelcompro.Pro_name.Replace("\"", "").Replace("“", "").Replace("'", "").Replace("‘", "").Replace(";", "").Replace(";", ""); packageReqHandler.setParameter("body", productname); //商品信息 127字符 packageReqHandler.setParameter("appid", appId); packageReqHandler.setParameter("mch_id", mchid); packageReqHandler.setParameter("nonce_str", nonceStr.ToLower()); packageReqHandler.setParameter("notify_url", "http://shop" + modelcompro.Com_id + ".etown.cn/wxpay/backpaynotice.aspx"); packageReqHandler.setParameter("openid", obj.openid); packageReqHandler.setParameter("out_trade_no", orderid.ToString()); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", wxp_totalprice); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "JSAPI"); //获取package包 sign = packageReqHandler.CreateMd5Sign("key", appkey); WriteFile(Server.MapPath("") + "\\Log.txt", sign); packageReqHandler.setParameter("sign", sign); string data = packageReqHandler.parseXML(); WriteFile(Server.MapPath("") + "\\Log.txt", data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); WriteFile(Server.MapPath("") + "\\Log.txt", prepayXml); //获取预支付ID var xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { prepayId = xnl[7].InnerText; package = string.Format("prepay_id={0}", prepayId); WriteFile(Server.MapPath("") + "\\Log.txt", package); } //设置支付参数 var paySignReqHandler = new RequestHandler(Context); paySignReqHandler.setParameter("appId", appId); paySignReqHandler.setParameter("timeStamp", timeStamp); paySignReqHandler.setParameter("nonceStr", nonceStr); paySignReqHandler.setParameter("package", package); paySignReqHandler.setParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", appkey); WriteFile(Server.MapPath("") + "\\Log.txt", paySign); #endregion //订单提交支付信息 if (modelb2pay == null) { B2b_pay eticket = new B2b_pay() { Id = 0, Oid = orderid, Pay_com = "wx", Pay_name = modelb2border.U_name, Pay_phone = modelb2border.U_phone, Total_fee = p_totalprice1, Trade_no = "", Trade_status = "trade_pendpay", Uip = "" }; int payid = datapay.InsertOrUpdate(eticket); } else { //对已完成支付的,再次提交支付,跳转到订单也或显示此订单已支付 if (modelb2pay.Trade_status != "TRADE_SUCCESS") { //防止金额有所改动 modelb2pay.Pay_com = "wx"; modelb2pay.Total_fee = p_totalprice1; datapay.InsertOrUpdate(modelb2pay); } } } } } }
protected string UserOpenId = ""; //微信用户openid protected void Page_Load(object sender, EventArgs e) { this.BindData(); LogUtil.WriteLog("============ 单次支付开始 ==============="); LogUtil.WriteLog(string.Format("传递支付参数:OrderSN={0}、Body={1}、TotalFee={2}、Attach={3}、UserOpenId={4}", this.OrderSN, this.Body, this.TotalFee, this.Attach, this.UserOpenId)); #region 支付操作============================ #region 基本参数=========================== //时间戳 TimeStamp = TenpayUtil.getTimestamp(); //随机字符串 NonceStr = TenpayUtil.getNoncestr(); int wid = MyCommFun.RequestInt("wid"); BLL.wx_payment_wxpay wxPayBll = new BLL.wx_payment_wxpay(); Model.wx_payment_wxpay paymentInfo = wxPayBll.GetModelByWid(wid); //创建支付应答对象 var packageReqHandler = new RequestHandler(Context); //初始化 packageReqHandler.init(); //设置package订单参数 具体参数列表请参考官方pdf文档,请勿随意设置 packageReqHandler.setParameter("body", this.Body); //商品信息 127字符 packageReqHandler.setParameter("appid", PayConfig.AppId); packageReqHandler.setParameter("mch_id", PayConfig.MchId); packageReqHandler.setParameter("nonce_str", NonceStr.ToLower()); packageReqHandler.setParameter("notify_url", PayConfig.NotifyUrl); packageReqHandler.setParameter("openid", this.UserOpenId); packageReqHandler.setParameter("out_trade_no", this.OrderSN); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Page.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", this.TotalFee); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "JSAPI"); if (!string.IsNullOrEmpty(this.Attach)) { packageReqHandler.setParameter("attach", this.Attach);//自定义参数 127字符 } #endregion #region sign=============================== Sign = packageReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 sign:" + Sign); #endregion #region 获取package包====================== packageReqHandler.setParameter("sign", Sign); string data = packageReqHandler.parseXML(); LogUtil.WriteLog("WeiPay 页面 package(XML):" + data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); LogUtil.WriteLog("WeiPay 页面 package(Back_XML):" + prepayXml); //获取预支付ID var xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { PrepayId = xnl[7].InnerText; Package = string.Format("prepay_id={0}", PrepayId); LogUtil.WriteLog("WeiPay 页面 package:" + Package); } #endregion #region 设置支付参数 输出页面 该部分参数请勿随意修改 ============== var paySignReqHandler = new RequestHandler(Context); paySignReqHandler.setParameter("appId", PayConfig.AppId); paySignReqHandler.setParameter("timeStamp", TimeStamp); paySignReqHandler.setParameter("nonceStr", NonceStr); paySignReqHandler.setParameter("package", Package); paySignReqHandler.setParameter("signType", "MD5"); PaySign = paySignReqHandler.CreateMd5Sign("key", PayConfig.AppKey); LogUtil.WriteLog("WeiPay 页面 paySign:" + PaySign); #endregion #endregion }
/// <summary> /// 支付 /// </summary> public ActionResult Pay() { /*微信支付三步:统一下单》调起支付接口》支付结果通知*/ string result = WebHelper.GetPostStr(); NameValueCollection parmas = WebHelper.GetParmList(result); //if (parmas.Keys.Count < 5) //{ // return AjaxResult("error", "缺少请求参数"); //} #region 支付操作============================ #region 基本参数=========================== //商户订单号 string outTradeNo = "hmk" + DateTime.Now.ToString("yyMMdd") + Randoms.CreateRandomValue(6, true); //订单名称 string subject = BSPConfig.ShopConfig.SiteTitle; //付款金额 string totalFee = (double.Parse(parmas["totalfee"]) * 100).ToString(); //时间戳 string timeStamp = TenpayUtil.getTimestamp(); //随机字符串 string nonceStr = TenpayUtil.getNoncestr(); //服务器异步通知页面路径 string notifyUrl = string.Format("{0}/appwechat/notify", BSPConfig.ShopConfig.SiteUrl); //记录充值信息 OWZX.Model.RechargeModel rech = new OWZX.Model.RechargeModel { Out_trade_no = outTradeNo, Account = parmas["account"], SuiteId = parmas["vossuiteid"], PlatForm = "微信", Type = int.Parse(parmas["type"]), Role = int.Parse(parmas["role"]) }; bool addres = Recharge.AddRecharge(rech); if (!addres) { return(AjaxResult("error", "记录充值信息失败")); } //string access_token = ""; //string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", PayConfig.AppId, PayConfig.AppSecret); //string returnStr = HttpUtil.Get_Http(url, 120000); //LogUtil.WriteLog("returnStr 页面 returnStr:" + returnStr); //if (!returnStr.Contains("access_token")) //{ // return Content(""); //} //else //{ // string[] list = returnStr.Split(','); // access_token = list[0].Split(':')[1].Trim('"'); //} //LogUtil.WriteLog("access_token 页面 access_token:" + access_token); //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(System.Web.HttpContext.Current); //初始化 packageReqHandler.init(); //设置package订单参数 具体参数列表请参考官方pdf文档,请勿随意设置 packageReqHandler.setParameter("appid", PayConfig.AppId); packageReqHandler.setParameter("body", subject); //商品信息 127字符 packageReqHandler.setParameter("mch_id", PayConfig.MchId); packageReqHandler.setParameter("nonce_str", nonceStr.ToLower()); packageReqHandler.setParameter("notify_url", notifyUrl); packageReqHandler.setParameter("out_trade_no", outTradeNo); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", totalFee); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "APP"); //if (!string.IsNullOrEmpty(this.Attach)) // packageReqHandler.setParameter("attach", this.Attach);//自定义参数 127字符 #endregion #region sign=============================== string sign = packageReqHandler.CreateMd5Sign("key", PayConfig.AppKey); #endregion #region 获取package包====================== packageReqHandler.setParameter("sign", sign); string data = packageReqHandler.parseXML(); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); //LogUtil.WriteLog("WeiPay 页面 prepayXml:" + prepayXml); //获取预支付ID string prepayId = ""; string package = ""; XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; if (xnl.Count > 7) { prepayId = xnl[7].InnerText; package = string.Format("prepay_id={0}", prepayId); //LogUtil.WriteLog("WeiPay 页面 package:" + package); } if (xnl[0].InnerText.Trim() == "FAIL") { return(AjaxResult("error", "微信下单失败 " + xnl[1].InnerText)); } #endregion #region 设置支付参数 输出页面 该部分参数请勿随意修改 ============== nonceStr = TenpayUtil.getNoncestr(); RequestHandler paySignReqHandler = new RequestHandler(System.Web.HttpContext.Current); paySignReqHandler.setParameter("appid", PayConfig.AppId); paySignReqHandler.setParameter("noncestr", nonceStr.ToLower()); paySignReqHandler.setParameter("package", "Sign=WXPay"); paySignReqHandler.setParameter("partnerid", PayConfig.MchId); paySignReqHandler.setParameter("prepayid", prepayId); paySignReqHandler.setParameter("timestamp", timeStamp); string paySign = paySignReqHandler.CreateMd5Sign("key", PayConfig.AppKey); //LogUtil.WriteLog("WeiPay 页面 paySign:" + paySign); #endregion #endregion return(AjaxResult("success", string.Format("{0}\"appId\":\"{1}\",\"partnerId\":\"{2}\",\"prepayId\":\"{3}\",\"package\":\"{4}\",\"nonceStr\":\"{5}\",\"timeStamp\":\"{6}\",\"sign\":\"{7}\"{8}", "{", PayConfig.AppId, PayConfig.MchId, prepayId, "Sign=WXPay", nonceStr.ToLower(), timeStamp, paySign, "}"), true)); }
/// <summary> /// 实际支付页 /// </summary> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> public ActionResult Xd(string code, string state) { // Session["auth"] = auth;//标识用户登录 MJAPI.Controllers.WechartController.authorization auth = null; if (Session["auth"] != null) { auth = Session["auth"] as MJAPI.Controllers.WechartController.authorization; } else { Response.Redirect("http://mobile.mj100.com/wechart/login"); } #region 发送预支付单 UnifiedOrder order = new UnifiedOrder(); order.appid = tenpay.WeChartConfigItem.appid; order.attach = "vinson1"; order.body = "极客美家支付正式测试";//订单描述 order.device_info = ""; order.mch_id = tenpay.WeChartConfigItem.mch_id; order.nonce_str = TenpayUtil.getNoncestr(); //随机字符串 order.notify_url = "http://mobile.mj100.com/test/h?id=100"; //回调网址 order.openid = auth.openid; //每一个微信号的唯一标识都不一样 order.out_trade_no = "20156666978542323" + DateTime.Now.Day + DateTime.Now.Minute + DateTime.Now.Second; //订单号 order.trade_type = "JSAPI"; order.spbill_create_ip = Request.UserHostAddress; order.total_fee = 1; string prepay_id = tenpay.TenpayUtil.getPrepay_id(order, tenpay.WeChartConfigItem.key);//商户key #endregion #region 得到paySign string timeStamp = TenpayUtil.getTimestamp(); string nonceStr = TenpayUtil.getNoncestr().ToUpper(); SortedDictionary <string, string> sParams = new SortedDictionary <string, string>(); sParams.Add("appId", tenpay.WeChartConfigItem.appid); sParams.Add("timeStamp", timeStamp); sParams.Add("nonceStr", nonceStr); sParams.Add("package", "prepay_id=" + prepay_id); sParams.Add("signType", "MD5"); string paySign = TenpayUtil.getsign(sParams, tenpay.WeChartConfigItem.key); #endregion ViewBag.appId = "wx2c2f2e7b5b62daa1"; ViewBag.timeStamp = timeStamp; ViewBag.nonceStr = nonceStr; ViewBag.prepay_id = prepay_id; ViewBag.paySign = paySign; ViewBag.openid = paySign + "我是paySign"; return(View()); }
/// <summary> /// 授权回调 /// </summary> /// <returns></returns> public ActionResult LoginOk(string code, string state) { string post_data = "appid=" + "wx2c2f2e7b5b62daa1" + "&secret=" + "ed815afc669a9201a6070677d1771166" + "&code=" + code + "&grant_type=authorization_code"; string requestData = tenpay.TenpayUtil.PostXmlToUrl(tenpay.TenpayUtil.getAccess_tokenUrl(), post_data); JavaScriptSerializer js = new JavaScriptSerializer(); //实例化一个能够序列化数据的类 authorization auth = js.Deserialize <authorization>(requestData); //将json数据转化为对象类型并赋值给auth Session["auth"] = auth; //标识用户登录 UnifiedOrder order = new UnifiedOrder(); order.appid = "wx2c2f2e7b5b62daa1"; order.attach = "vinson"; order.body = "100拍币"; order.device_info = ""; order.mch_id = "1246407101"; order.nonce_str = TenpayUtil.getNoncestr(); order.notify_url = "http://mobile.mj100.com"; //回调网址 order.openid = auth.openid; order.out_trade_no = "2015666697854232"; //订单号 order.trade_type = "JSAPI"; order.spbill_create_ip = Request.UserHostAddress; order.total_fee = 100; //order.total_fee = 1; string prepay_id = tenpay.TenpayUtil.getPrepay_id(order, "43804496F28A4F0FBF1195AA0F1Abcde"); string timeStamp = TenpayUtil.getTimestamp(); string nonceStr = TenpayUtil.getNoncestr(); SortedDictionary <string, string> sParams = new SortedDictionary <string, string>(); sParams.Add("appId", "wx2c2f2e7b5b62daa1"); sParams.Add("timeStamp", timeStamp); sParams.Add("nonceStr", nonceStr); sParams.Add("package", "prepay_id=" + prepay_id); sParams.Add("signType", "MD5"); string paySign = TenpayUtil.getsign(sParams, "43804496F28A4F0FBF1195AA0F1Abcde"); //var appId = "<%=appId %>"; //var timeStamp = "<%=timeStamp %>"; //var nonceStr = "<%=nonceStr %>"; //var prepay_id = "<%=prepay_id %>"; //var paySign = "<%=paySign %>"; ViewBag.appId = "wx2c2f2e7b5b62daa1"; ViewBag.timeStamp = timeStamp; ViewBag.nonceStr = nonceStr; ViewBag.prepay_id = prepay_id; ViewBag.paySign = paySign; ViewBag.openid = paySign + "我是paySign"; return(View()); }
private void WxPayJS() { string siteUrl = MojoCube.Web.Site.Cache.GetDomain(strLanguage); //获取网站的域名 MojoCube.Web.Payment.List payment = new MojoCube.Web.Payment.List(); payment.GetDataByType(2); MojoCube.Web.Order.List order = new MojoCube.Web.Order.List(); order.GetData(int.Parse(ViewState["pk_Order"].ToString())); if (order.pk_Order == 0 || order.StatusID > 0 || order.fk_Member.ToString() != Session["Member_UserID"].ToString()) { Response.Redirect(MojoCube.Web.Site.Cache.GetUrlExtension("Order", strLanguage)); } appId = payment.AppID; string partnerId = payment.PartnerID; string key = payment.KeyCode; string secret = payment.Secret; int price = (int)(order.Amount * 100); string body = order.Description; if (body.Length > 20) { body = body.Substring(0, 20); } //调用【网页授权获取用户信息】接口获取用户的openid和access_token GetOpenidAndAccessToken(appId, secret); UnifiedOrder order1 = new UnifiedOrder(); order1.appid = appId; order1.mch_id = partnerId; order1.nonce_str = TenpayUtil.getNoncestr(); order1.body = body; order1.out_trade_no = order.OrderNumber; order1.total_fee = price; order1.spbill_create_ip = Page.Request.UserHostAddress; order1.notify_url = siteUrl + MojoCube.Web.Site.Cache.GetUrlExtension("WxPay_Notify", strLanguage); order1.trade_type = "JSAPI"; if (ViewState["OpenID"] != null) { order1.openid = ViewState["OpenID"].ToString(); //JSAPI必须传入openid } TenpayUtil tu = new TenpayUtil(); prepayId = tu.getPrepay_id(order1, key); nonceStr = order1.nonce_str; timeStamp = TenpayUtil.getTimestamp(); SortedDictionary <string, string> sParams = new SortedDictionary <string, string>(); sParams.Add("appId", appId); sParams.Add("nonceStr", nonceStr); sParams.Add("package", "prepay_id=" + prepayId); sParams.Add("signType", "MD5"); sParams.Add("timeStamp", timeStamp); sign = tu.getsign(sParams, key); }
public HttpResponseMessage WxPaySign(string MemberCode, string AppID, string openid, string CardNo, string type) { var response = new MyHttpResponseMessage(); response.apiNumber = "C027_SysController_PaySign"; try { var model = sysManager.WxConfigSQLSugar.GetById(AppID); if (model == null) { response.SetContent(HttpStatus.ok, "appid不在配置中", "", ResponseType.josn); return(response); } var order_no = CardNo; //订单号 var order_amount = 0M; //订单金额 var user_name = ""; //支付用户名 var subject = ""; //备注说明 var UserOpenId = openid; //备注说明 var trans_type = string.Empty; //交易类型1实物2虚拟 if (type == "card") { subject = "购买套餐卡"; var Card = mb.mb_CardList.GetList(p => p.CardNo == order_no).First(); if (Card == null) { response.SetContent(HttpStatus.ok, "订单记录不存在", "", ResponseType.josn); return(response); } order_amount = Card.Amount.ToDecimal(); user_name = Card.MemberCode; } if (type == "Balance") { subject = "充值余额"; var Balance = crd.crd_BalanceLogSQLSugar.GetList(p => p.BalanceNo == order_no).First(); if (Balance == null) { response.SetContent(HttpStatus.ok, "订单记录不存在", "", ResponseType.josn); return(response); } order_amount = Balance.OriginalBalance.ToDecimal(); user_name = Balance.MemberCode; } //===============================请求参数================================== //时间戳 var TimeStamp = TenpayUtil.getTimestamp(); //随机字符串 var NonceStr = TenpayUtil.getNoncestr(); //创建支付应答对象 var packageReqHandler = new RequestHandler(System.Web.HttpContext.Current); //初始化 packageReqHandler.init(); //设置package订单参数 具体参数列表请参考官方pdf文档,请勿随意设置 packageReqHandler.setParameter("body", subject); //商品信息 127字符 packageReqHandler.setParameter("appid", model.AppID); packageReqHandler.setParameter("mch_id", model.MchID); packageReqHandler.setParameter("nonce_str", NonceStr.ToLower()); packageReqHandler.setParameter("notify_url", model.Notify_url); packageReqHandler.setParameter("openid", UserOpenId); packageReqHandler.setParameter("out_trade_no", order_no); //商家订单号 packageReqHandler.setParameter("spbill_create_ip", System.Web.HttpContext.Current.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP packageReqHandler.setParameter("total_fee", (order_amount * 100).ToInt32().ToString()); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.setParameter("trade_type", "JSAPI"); if (!string.IsNullOrEmpty(subject)) { packageReqHandler.setParameter("attach", subject);//自定义参数 127字符 } #region sign=============================== var Sign = packageReqHandler.CreateMd5Sign("key", model.MchSecret); // LogUtil.WriteLog("WeiPay 页面 sign:" + Sign); #endregion #region 获取package包====================== packageReqHandler.setParameter("sign", Sign); string data = packageReqHandler.parseXML(); // LogUtil.WriteLog("WeiPay 页面 package(XML):" + data); LogManager.Logs["微信支付"].WriteLine("data:" + data); string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder"); // LogUtil.WriteLog("WeiPay 页面 package(Back_XML):" + prepayXml); LogManager.Logs["微信支付"].WriteLine("prepayXml:" + prepayXml); //获取预支付ID var xdoc = new XmlDocument(); xdoc.LoadXml(prepayXml); XmlNode xn = xdoc.SelectSingleNode("xml"); XmlNodeList xnl = xn.ChildNodes; var Package = ""; if (xnl.Count > 7) { var PrepayId = xnl[7].InnerText; Package = string.Format("prepay_id={0}", PrepayId); } if (string.IsNullOrEmpty(Package)) { response.SetContent(HttpStatus.error, "支付包生成失败", "", ResponseType.josn); return(response); } LogManager.Logs["微信支付"].WriteLine("Package:" + Package); #endregion #region 设置支付参数 输出页面 该部分参数请勿随意修改 ============== var paySignReqHandler = new RequestHandler(System.Web.HttpContext.Current); paySignReqHandler.setParameter("appId", model.AppID); paySignReqHandler.setParameter("timeStamp", TimeStamp); paySignReqHandler.setParameter("nonceStr", NonceStr); paySignReqHandler.setParameter("package", Package); paySignReqHandler.setParameter("signType", "MD5"); var PaySign = paySignReqHandler.CreateMd5Sign("key", model.MchSecret); LogManager.Logs["微信支付"].WriteLine("PaySign:" + PaySign); var rbj = new { appId = model.AppID, package = Package, timeStamp = TimeStamp, nonceStr = NonceStr, PaySign = PaySign }; response.SetContent(HttpStatus.ok, "获取支付参数成功", rbj, ResponseType.josn); #endregion } catch (Exception ex) { AddErrorLog(LogEnum.sys, ex.Message, ex.StackTrace); response.SetContent(HttpStatus.error, ex.Message, null, ResponseType.josn); } return(response); }