public ActionResult WxPay(int productId, string payMethod) { pay_order order = this.CreateOrder(productId, payMethod); module_product product = entity.module_product.FirstOrDefault(p => p.id == order.product_id); var setting = entity.lay_setting; WxPayData data = new WxPayData(); data.SetValue("body", setting.FirstOrDefault(p => p.key == "sitename").value + product.name); //商品描述 data.SetValue("attach", "attach"); //附加数据 data.SetValue("out_trade_no", order.number); //随机字符串 data.SetValue("total_fee", (int)Math.Ceiling(order.price.Value * 100)); //总金额 //data.SetValue("total_fee", 1);//总金额 data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss")); //交易起始时间 data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); //交易结束时间 data.SetValue("goods_tag", "goods_tag"); //商品标记 data.SetValue("trade_type", "NATIVE"); //交易类型 data.SetValue("product_id", order.product_id); //商品ID WxPayData result = WxPayApi.UnifiedOrder(data); //调用统一下单接口 string url = QRTool.CreateQR(result.GetValue("code_url").ToString()); //获得统一下单接口返回的二维码链接 ViewBag.url = url; ViewBag.name = product.name; ViewBag.price = product.price; ViewBag.logo = setting.FirstOrDefault(p => p.key == "logo").value; ViewBag.sitename = setting.FirstOrDefault(p => p.key == "sitename").value; return(View()); }
public ActionResult WxPayNotify() { WxPayData notifyData = GetNotifyData(); //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); HttpContext.Response.Write(res.ToXml()); HttpContext.Response.End(); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { //若订单查询失败,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); HttpContext.Response.Write(res.ToXml()); HttpContext.Response.End(); } //查询订单成功 else { WxPayData res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); HttpContext.Response.Write(res.ToXml()); HttpContext.Response.End(); //本地业务处理 string number = notifyData.GetValue("out_trade_no").ToString(); pay_order order = entity.pay_order.FirstOrDefault(p => p.number == number); module_product product = entity.module_product.FirstOrDefault(p => p.id == order.product_id); if (order.state_pay != true) { order.pay_time = DateTime.Now; order.state_pay = true; int result = entity.SaveChanges(); MessageTool.SendMessage(order.member_id.Value, "购买通知", "您已成功购买【" + product.name + "】!"); //页面同步跳转 //var hub = GlobalHost.ConnectionManager.GetHubContext<WxPayHub>().Clients.Client("12");//此处需要找到一种方法进行一对一通讯,暂时没想到办法 var hub = GlobalHost.ConnectionManager.GetHubContext <WxPayHub>().Clients; hub.All.payResult("success"); } } return(null); }
public ActionResult AliPayNotify() { /* 实际验证过程建议商户添加以下校验。 * 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号, * 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), * 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email) * 4、验证app_id是否为该商户本身。 */ Dictionary <string, string> sArray = GetRequestPost(); //本地业务处理 string number = sArray["out_trade_no"]; pay_order order = entity.pay_order.FirstOrDefault(p => p.number == number); module_product product = entity.module_product.FirstOrDefault(p => p.id == order.product_id); if (order.state_pay != true) { order.pay_time = DateTime.Now; order.state_pay = true; int result = entity.SaveChanges(); MessageTool.SendMessage(order.member_id.Value, "购买通知", "您已成功购买【" + product.name + "】!"); } //本地业务处理 结束 if (sArray.Count != 0) { bool flag = AlipaySignature.RSACheckV1(sArray, Config.alipay_public_key, Config.charset, Config.sign_type, false); if (flag) { //交易状态 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 //如果有做过处理,不执行商户的业务程序 //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 string trade_status = Request.Form["trade_status"]; Response.Write("success"); } else { Response.Write("fail"); } } return(null); }
public ActionResult AliPay(int productId, string payMethod) { pay_order order = this.CreateOrder(productId, payMethod); module_product product = entity.module_product.FirstOrDefault(p => p.id == order.product_id); var setting = entity.lay_setting; DefaultAopClient client = new DefaultAopClient(Config.gatewayUrl, Config.app_id, Config.private_key, "json", "1.0", Config.sign_type, Config.alipay_public_key, Config.charset, false); // 外部订单号,商户网站订单系统中唯一的订单号 string out_trade_no = order.number; // 订单名称 string subject = setting.FirstOrDefault(p => p.key == "sitename").value + product.name; // 付款金额 //string total_amout = Math.Ceiling(order.price.Value * 100).ToString(); string total_amout = 0.01.ToString(); // 商品描述 string body = setting.FirstOrDefault(p => p.key == "sitename").value + product.name; // 组装业务参数model AlipayTradePagePayModel model = new AlipayTradePagePayModel(); model.Body = body; model.Subject = subject; model.TotalAmount = total_amout; model.OutTradeNo = out_trade_no; model.ProductCode = "FAST_INSTANT_TRADE_PAY"; AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 设置同步回调地址 request.SetReturnUrl(HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Host + "/Member/Index"); // 设置异步通知接收地址 request.SetNotifyUrl(HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Host + "/Pay/AliPayNotify"); // 将业务model载入到request request.SetBizModel(model); AlipayTradePagePayResponse response = null; try { response = client.pageExecute(request, null, "post"); Response.Write(response.Body); } catch (Exception exp) { throw exp; } return(null); }
public PayOrderBag(pay_order payOrder, AccountBag payer, AccountBag receiver, PayOrderTypeEnum payOrderType, PaymentTypeEnum paymentType, int payNum) { Payer = payer; Receiver = receiver; PayOrder = payOrder; //payer.Expense(payNum); //receiver.Charge(payNum); //PayOrder = new pay_order //{ // PO_ID = PO_ID, // PayerAccID = payer.Account.AccountID, // ReceiverAccID = receiver.Account.AccountID, // CreateTime = DateTime.Now, // PayNum = payNum, // PayOrderTypeID = payOrderType.ToString(), // PaymentTypeID = paymentType.ToString(), // PayStateID = PayStateEnum.Created.ToString() //}; }
private pay_order CreateOrder(int productId, string payMethod) { int id = MemberManager.GetMember().id; module_product product = entity.module_product.FirstOrDefault(p => p.id == productId); pay_order order = new pay_order() { member_id = id, product_id = productId, pay_time = null, price = product.price, delete = false, number = id.ToString().PadRight(15, '0') + DateTime.Now.ToString("yyyyMMddHHmmssfff"), pay_method = payMethod, remark = null, state_pay = false, sys_datetime = DateTime.Now, }; entity.pay_order.Add(order); entity.SaveChanges(); return(order); }
public PayOrderBag(AccountBag payer, AccountBag receiver, PayOrderTypeEnum payOrderType, PaymentTypeEnum paymentType, double payNum) { //取2位有效数字 var money = (int)(payNum * 100); Payer = payer; Receiver = receiver; //payer.Expense(payNum); //receiver.Charge(payNum); PayOrder = new pay_order { PO_ID = //DateTime.Now.FormatTime(false)+"-"+ DateTime.Now.Random(), PayerAccID = payer.Account.AccountID, ReceiverAccID = receiver.Account.AccountID, CreateTime = DateTime.Now, PayNum = money, PayOrderTypeID = payOrderType.ToString(), PaymentTypeID = paymentType.ToString(), PayStateID = PayStateEnum.Created.ToString() }; }
public PayOrderBag(pay_order payOrder) { PayOrder = payOrder; }