public async Task <IActionResult> Pay(string out_trade_no, string subject, string total_amount, string body, string scene, string auth_code) { var model = new AlipayTradePayModel { OutTradeNo = out_trade_no, Subject = subject, Scene = scene, AuthCode = auth_code, TotalAmount = total_amount, Body = body }; var req = new AlipayTradePayRequest(); req.SetBizModel(model); var response = await _client.ExecuteAsync(req); ResponseModel responseModel = new ResponseModel() { code = HTTPResponseCode.PartialContent, data = response.Body }; if (response.IsError) { responseModel.code = HTTPResponseCode.BadRequest; responseModel.message = response.Msg; } else { responseModel.code = HTTPResponseCode.Successful; } return(Json(responseModel)); }
/// <summary> /// 条码支付 /// </summary> /// <param name="tradepayModel">请求内容</param> /// <returns></returns> public static TradepayResponseModel TradePay(TradepayModel tradepayModel) { AlipayTradePayRequest payRequst = new AlipayTradePayRequest(); payRequst.BizContent = JsonConvert.SerializeObject(tradepayModel); LogUtil.WriteAlipayLog("条码支付请求", "请求参数", payRequst.BizContent); Dictionary <string, string> paramsDict = (Dictionary <string, string>)payRequst.GetParameters(); AlipayTradePayResponse payResponse = _client.Execute(payRequst); LogUtil.WriteAlipayLog("条码支付响应", "响应参数", payResponse.Body); return(new TradepayResponseModel { msg = payResponse.Msg, code = payResponse.Code, subcode = payResponse.SubCode, submsg = payResponse.SubMsg, buyer_logon_id = payResponse.BuyerLogonId, store_name = payResponse.StoreName, buyer_pay_amount = payResponse.BuyerPayAmount, buyer_user_id = payResponse.BuyerUserId, gmt_payment = payResponse.GmtPayment, out_trade_no = payResponse.OutTradeNo, point_amount = payResponse.PointAmount, invoice_amount = payResponse.InvoiceAmount, total_amount = payResponse.TotalAmount, trade_no = payResponse.TradeNo, receipt_amount = payResponse.ReceiptAmount }); }
/// <summary> /// 条码支付 /// </summary> public void BarCodePay(decimal amount, string orderNo, string authCode, string subject, string storeId, string terminalId) { bool success = false; //组装业务参数 var model = new AlipayTradePayModel() { OutTradeNo = orderNo, TotalAmount = amount.ToString(), Scene = "bar_code", AuthCode = authCode, Subject = subject, StoreId = storeId, TerminalId = terminalId, TimeoutExpress = "2m" }; var request = new AlipayTradePayRequest(); request.SetBizModel(model); AlipayTradePayResponse response = aopClient.Execute(request); if (response != null && response.Code == "10000") { success = true; //response.TradeNo 支付宝28位交易号 } //记日志response.ToJson(); //return success; }
public AlipayTradePayResponse Pay(string content) { AlipayTradePayRequest payRequst = new AlipayTradePayRequest(); payRequst.BizContent = content; //Dictionary<string, string> paramsDict = (Dictionary<string, string>)payRequst.GetParameters(); AlipayTradePayResponse payResponse = m_Client.Execute(payRequst); return(payResponse); }
/// <summary> /// 统一收单交易支付接口 /// </summary> /// <param name="request">提交给统一下单API的参数</param> /// <param name="config"></param> /// <param name="timeOut">超时时间</param> /// <returns>成功时返回,其他抛异常</returns> public static async Task <AlipayTradePayResponse> CreateOrder(AlipayTradePayModel request, AlipayConfig config, int timeOut = 6) { IAopClient client = new AopClient(AlipayConstants.GATEWAYURL, config.AppId, config.PrivateKey, config.Format, config.Version, config.SignType, config.AliPublicKey, config.Charset, config.KeyFromFile); var requestData = new AlipayTradePayRequest(); requestData.SetNotifyUrl(config.NotifyUrl); requestData.SetReturnUrl(config.QuitUrl); requestData.SetBizModel(request); return(await client.ExecuteAsync(requestData)); }
private AlipayTradePayResponse Pay(string biz_content) { AlipayTradePayRequest payRequst = new AlipayTradePayRequest(); payRequst.BizContent = biz_content; Dictionary <string, string> paramsDict = (Dictionary <string, string>)payRequst.GetParameters(); //new DefaultAopClient(Config.serverUrl, Config.appId, Config.merchant_private_key); AlipayTradePayResponse payResponse = client.Execute(payRequst); return(payResponse); }
public AlipayTradePayResponse PayData(AlipayTradePayRequest request) { var resp = client.SdkExecute(request); string resultData = HttpHelper.Post(AliPayConfig.serverUrl, resp.Body); LogHelper.WriteLog("支付统一支付", resultData); string str = JObject.Parse(resultData)["alipay_trade_query_response"].ToString(); XmlDocument doc1 = Newtonsoft.Json.JsonConvert.DeserializeXmlNode("{\"AlipayTradeQueryResponse\":" + str + "}"); System.IO.StringReader strread = new System.IO.StringReader(doc1.OuterXml); AlipayTradePayResponse response1 = new System.Xml.Serialization.XmlSerializer(typeof(AlipayTradePayResponse)).Deserialize(strread) as AlipayTradePayResponse; LogHelper.WriteLog("支付结果model", JsonConvert.SerializeObject(response1)); return(response1); }
/// <summary> /// 条码支付 /// </summary> /// <param name="pay">条码支付实体</param> /// <param name="payBack">条码支付实体返回</param> /// <param name="message">错误信息</param> /// <returns></returns> internal bool Pay(Pay pay, out PayBack payBack, out string message) { _log.Info("条码支付 Pay 开始"); var payRequst = new AlipayTradePayRequest(); payRequst.SetNotifyUrl(AlipayConfig.NotifyUrl); payRequst.BizContent = JsonConvert.SerializeObject(pay, new Newtonsoft.Json.JsonSerializerSettings() { DefaultValueHandling = DefaultValueHandling.Ignore }).ToLower(); var payResponse = client.Execute(payRequst); if (payResponse.Code == "10000") { _log.Info("条码支付成功!"); payBack = new PayBack() { Code = payResponse.Code, Msg = payResponse.Msg, Out_Trade_No = payResponse.OutTradeNo, Sub_Code = payResponse.SubCode, Sub_Msg = payResponse.SubMsg, Buyer_Logon_Id = payResponse.BuyerLogonId, Buyer_Pay_Amount = Convert.ToDecimal(payResponse.BuyerPayAmount), Buyer_User_Id = payResponse.BuyerUserId, Card_Balance = Convert.ToDecimal(payResponse.CardBalance), Discount_Goods_Detail = payResponse.DiscountGoodsDetail, Fund_Bill_List = GetTradeFundBills(payResponse.FundBillList), Gmt_Payment = Convert.ToDateTime(payResponse.GmtPayment), Invoice_Amount = Convert.ToDecimal(payResponse.InvoiceAmount), Point_Amount = Convert.ToDecimal(payResponse.PointAmount), Receipt_Amount = Convert.ToDecimal(payResponse.ReceiptAmount), Store_Name = payResponse.StoreName, Total_Amount = payResponse.TotalAmount, Trade_No = payResponse.TradeNo, Voucher_Detail_List = GetVoucherDetails(payResponse.VoucherDetailList) }; message = ""; return(true); } else { payBack = null; message = $"{ payResponse.Msg},{payResponse.SubMsg}"; _log.Error($"条码支付失败:{message}"); return(false); } }
/// <summary> /// 当面付扫码 /// </summary> /// <param name="code"></param> /// <returns></returns> public ActionResult BarCodePay(string code) { string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmssfff"); AlipayTradePayRequest request = new AlipayTradePayRequest(); //创建API对应的request类 request.BizContent = "{" + " \"out_trade_no\":\"" + out_trade_no + "\"," + " \"scene\":\"bar_code\"," + " \"auth_code\":\"" + code + "\"," + " \"subject\":\"Iphone6 16G\"," + " \"store_id\":\"NJ_001\"," + " \"timeout_express\":\"2m\"," + " \"total_amount\":\"88.88\"" + " }"; //设置业务参数 AlipayTradePayResponse response = client.pageExecute(request); //通过alipayClient调用API,获得对应的response类 return(Content(response.Body)); }
public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel) { var model = new AlipayTradePayModel { OutTradeNo = viewModel.OutTradeNo, Subject = viewModel.Subject, Scene = viewModel.Scene, AuthCode = viewModel.AuthCode, TotalAmount = viewModel.TotalAmount, Body = viewModel.Body }; var req = new AlipayTradePayRequest(); req.SetBizModel(model); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value); return(Ok(response.Body)); }
public async Task <IActionResult> Pay(string out_trade_no, string scene, string auth_code, string subject, string total_amount, string body, string notify_url) { var model = new AlipayTradePayModel() { Scene = scene, AuthCode = auth_code, Body = body, Subject = subject, TotalAmount = total_amount, OutTradeNo = out_trade_no, }; var req = new AlipayTradePayRequest(); req.SetBizModel(model); req.SetNotifyUrl(notify_url); var response = await _client.ExecuteAsync(req); return(Ok(response.Body)); }
public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel) { var model = new AlipayTradePayModel { OutTradeNo = viewModel.OutTradeNo, Subject = viewModel.Subject, Scene = viewModel.Scene, AuthCode = viewModel.AuthCode, TotalAmount = viewModel.TotalAmount, Body = viewModel.Body }; var req = new AlipayTradePayRequest(); req.SetBizModel(model); var response = await _client.ExecuteAsync(req); ViewData["response"] = response.Body; return(View()); }
// 条码/声波支付 public async Task <AlipayTradePayResponse> Pay(PayRequest request) { var order = OrderService.Get(request.Id); var model = new AlipayTradePayModel { OutTradeNo = order.Order_SN, Subject = order.Name, Scene = "bar_code", //wave_code AuthCode = request.AuthCode, TotalAmount = order.Order_Money.ToString("n"), Body = order.Remark, ProductCode = request.ProduceCode ?? "FACE_TO_FACE_PAYMENT" }; var req = new AlipayTradePayRequest(); req.SetBizModel(model); return(await client.ExecuteAsync(req, options.Value)); }
protected void Page_Load(object sender, EventArgs e) { 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); AlipayTradePayRequest request = new AlipayTradePayRequest(); request.BizContent = "{" + "\"out_trade_no\":\"20150320010101001\"," + "\"scene\":\"bar_code\"," + "\"auth_code\":\"28763443825664394\"," + "\"product_code\":\"FACE_TO_FACE_PAYMENT\"," + "\"subject\":\"Iphone616G\"," + "\"buyer_id\":\"2088202954065786\"," + "\"seller_id\":\"2088102146225135\"," + "\"total_amount\":88.88," + "\"discountable_amount\":8.88," + "\"body\":\"Iphone616G\"," + "\"goods_detail\":[{" + "\"goods_id\":\"apple-01\"," + "\"goods_name\":\"ipad\"," + "\"quantity\":1," + "\"price\":2000," + "\"goods_category\":\"34543238\"," + "\"body\":\"特价手机\"," + "\"show_url\":\"http://www.alipay.com/xxx.jpg\"" + "}]," + "\"operator_id\":\"yx_001\"," + "\"store_id\":\"NJ_001\"," + "\"terminal_id\":\"NJ_T_001\"," + "\"extend_params\":{" + "\"sys_service_provider_id\":\"2088511833207846\"" + "}," + "\"timeout_express\":\"90m\"" + "}"; AlipayTradePayResponse response = client.Execute(request); Response.Write(response.Body); }
public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel) { if (_Interceptor != null) { return(Ok("this is _Interceptor")); } var model = new AlipayTradePayModel { OutTradeNo = viewModel.OutTradeNo, Subject = viewModel.Subject, Scene = viewModel.Scene, AuthCode = viewModel.AuthCode, TotalAmount = viewModel.TotalAmount, Body = viewModel.Body }; var req = new AlipayTradePayRequest(); req.SetBizModel(model); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value); ViewData["response"] = response.Body; return(View()); }
/// <summary> /// 扫码支付 /// </summary> /// <param name="dto"></param> /// <returns></returns> public OrderPayResult OrderPay(OrderPayDTO dto) { OrderPayResult result = new OrderPayResult(); try { AlipayTradeBarcodeDTO barcodeDto = new AlipayTradeBarcodeDTO(); barcodeDto.out_trade_no = dto.OutTradeNo; barcodeDto.operator_id = dto.OperatorId; barcodeDto.auth_code = dto.AuthCode; barcodeDto.scene = "bar_code"; barcodeDto.total_amount = dto.TotalAmount; barcodeDto.subject = dto.Title; barcodeDto.body = dto.Body; barcodeDto.store_id = dto.StoreId; barcodeDto.terminal_id = dto.TerminalId; barcodeDto.timeout_express = "30m";//限制30分钟内完成付款 AlipayTradePayRequest payRequest = new AlipayTradePayRequest(); payRequest.BizContent = barcodeDto.BuildJson(); AlipayTradePayResponse payResponse = Execute(payRequest); if (payResponse != null) { switch (payResponse.Code) { case ResultCode.SUCCESS: break; //返回支付处理中,需要进行轮询 case ResultCode.INRROCESS: AlipayTradeQueryResponse queryResponse = LoopQuery(barcodeDto.out_trade_no, 10, 3000); //用订单号trade_no进行轮询也是可以的。 //轮询结束后还是支付处理中,需要调撤销接口 if (queryResponse != null) { if (queryResponse.TradeStatus == TradeStatus.WAIT_BUYER_PAY) { CancelAndRetry(barcodeDto.out_trade_no); queryResponse.TradeStatus = TradeStatus.TRADE_CLOSED; queryResponse.SubMsg = payResponse.SubMsg + "(等待时间过长,已经撤销支付订单)"; } payResponse = toTradePayResponse(queryResponse); } break; //明确返回业务失败 case ResultCode.FAIL: break; //返回系统异常,需要调用一次查询接口,没有返回支付成功的话调用撤销接口撤销交易 case ResultCode.ERROR: AlipayTradeQueryResponse queryResponse2 = sendTradeQuery(barcodeDto.out_trade_no); if (queryResponse2 != null) { if (queryResponse2.TradeStatus == TradeStatus.WAIT_BUYER_PAY) { AlipayTradeCancelResponse cancelResponse = CancelAndRetry(barcodeDto.out_trade_no); queryResponse2.TradeStatus = TradeStatus.TRADE_CLOSED; queryResponse2.SubMsg = queryResponse2.SubMsg + "(等待时间过长,已经撤销支付订单)"; } payResponse = toTradePayResponse(queryResponse2); } break; default: break; } result.SetAlipayResult(payResponse); return(result); } else { AlipayTradeQueryResponse queryResponse3 = sendTradeQuery(barcodeDto.out_trade_no); if (queryResponse3 != null) { if (queryResponse3.TradeStatus == TradeStatus.WAIT_BUYER_PAY) { AlipayTradeCancelResponse cancelResponse = CancelAndRetry(barcodeDto.out_trade_no); queryResponse3.TradeStatus = TradeStatus.TRADE_CLOSED; queryResponse3.SubMsg = queryResponse3.SubMsg + "(等待时间过长,已经撤销支付订单)"; } payResponse = toTradePayResponse(queryResponse3); } result.SetAlipayResult(payResponse); return(result); } } catch (Exception e) { throw new F2FPayException(e.Message, e); } }
public void Post() { string Data = DataObj.GetData(); if (Data.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } JObject json = new JObject(); try { json = (JObject)JsonConvert.DeserializeObject(Data); } catch (Exception Ex) { Log.Write("[OrderF2F]:", "【Data】" + Data, Ex); } if (json == null) { DataObj.OutError("1000"); return; } OrderF2F OrderF2F = new OrderF2F(); OrderF2F = JsonToObject.ConvertJsonToModel(OrderF2F, json); UserTrack UserTrack = new UserTrack(); UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json); #region 获取并处理用户信息 Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderF2F.Token); if (baseUsers == null)//用户令牌不存在 { DataObj.OutError("2004"); return; } if (baseUsers.State != 1)//用户被锁定 { DataObj.OutError("2003"); return; } if (baseUsers.CardStae != 2)//未实名认证 { //DataObj.OutError("2006"); //return; } if (baseUsers.MiBao != 1)//未设置支付密码 { //DataObj.OutError("2008"); //return; } string NeekName = baseUsers.NeekName; if (NeekName.IsNullOrEmpty()) { NeekName = baseUsers.TrueName; } if (NeekName.IsNullOrEmpty()) { NeekName = "货款"; } #endregion if (OrderF2F.Action == "Create") { int PayWay = OrderF2F.PayWay; string Tag = ""; byte PayType = 0; string PayName = ""; if (OrderF2F.OType == 7) {//支付宝 Tag = "AliPay"; PayName = "条码付-"; } if (OrderF2F.OType == 8) {//微信 Tag = "WeiXin"; PayName = "刷卡付-"; } if (PayWay.IsNullOrEmpty()) { if (Tag == "AliPay") { PayWay = 5;//兼容老版本 } if (Tag == "WeiXin") { PayWay = 6;//兼容老版本 } } PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == PayWay && n.State == 1); //获取系统支付配置 if (PayConfig == null) { DataObj.OutError("1000"); return; } if (PayConfig.GroupType != Tag) { DataObj.OutError("1000"); return; } PayName += PayConfig.Name; int InType = 0; if (!OrderF2F.InType.IsNullOrEmpty()) { InType = 1; } SysControl SysControl = new SysControl(); #region 版本比较 升级之后比较长时间后可以考滤删除版本判断代码 bool IsNew = true; var vSysAgent = this.Entity.SysAgent.FirstOrDefault(o => o.Id == baseUsers.Agent); if (vSysAgent == null) { DataObj.OutError("1000"); return; } IsNew = BizExt.NewOrOldVersion(vSysAgent, Equipment, this.Entity); #endregion if (IsNew)//新版 { if (InType == 1) { SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay && n.LagEntryDay > 0); } else { SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay && n.LagEntryDay == 0); } } else { //旧版 SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay); if (SysControl.LagEntryDay > 0) { InType = 1; } else { InType = 0; } } //获取系统支付配置 if (SysControl == null) { DataObj.OutError("1005"); return; } if (InType == 1 && (SysControl.LagEntryDay.IsNullOrEmpty() || SysControl.LagEntryNum.IsNullOrEmpty())) { DataObj.Msg = "请升级到最新版再发起Tn到帐交易!"; DataObj.OutError("1005"); return; } SysControl syscontrol = SysControl.ChkState(); if (syscontrol.State != 1) { DataObj.OutError("1005"); return; } #region 创建订单 //处理交易地点 if (OrderF2F.X.IsNullOrEmpty() || OrderF2F.Y.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } //开始处理参数 PayId扣款码,OType通道,7支付宝,8微信 if (OrderF2F.Amoney.IsNullOrEmpty() || OrderF2F.PayId.IsNullOrEmpty() || OrderF2F.OType.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } OrderF2F.Amoney = OrderF2F.Amoney.FormatMoney(); //获取用户支付配置 UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == PayWay); if (UserPay == null) { DataObj.OutError("1000"); return; } //获取分支机构信息 SysAgent SysAgent = new SysAgent(); if (!baseUsers.Agent.IsNullOrEmpty()) { SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent); } OrderF2F.PayWay = PayWay; //获取系统配置 SysSet SysSet = Entity.SysSet.FirstOrDefault(); if (InType == 1) {//客户端传来T+N但是系统没开启时无效 if (SysSet.LagEntry == 0) { InType = 0; } } if (InType == 1) { //手续费 OrderF2F.Poundage = 0; //商户费率 OrderF2F.UserRate = 0; //T+n时,代理佣金为 交易金额*费率 decimal AgentPayGet = OrderF2F.Amoney * SysSet.AgentGet; OrderF2F.AgentPayGet = (Double)AgentPayGet; //佣金舍位 OrderF2F.AgentPayGet = OrderF2F.AgentPayGet.Floor(); } else { //手续费 OrderF2F.Poundage = OrderF2F.Amoney * (decimal)UserPay.Cost; //手续费取进 OrderF2F.Poundage = OrderF2F.Poundage.Ceiling(); //商户费率 OrderF2F.UserRate = UserPay.Cost; //分支机构佣金设置为0,待分润计算后再写入 OrderF2F.AgentPayGet = 0; } OrderF2F.UId = baseUsers.Id; //到帐金额=支付金额-手续费 OrderF2F.PayMoney = OrderF2F.Amoney - OrderF2F.Poundage; //第三方支付通道率 OrderF2F.SysRate = (double)PayConfig.Cost; //这里是利润计算========== //利润=总金额-到帐-支付手续费 decimal GetAll = OrderF2F.Amoney - OrderF2F.PayMoney - OrderF2F.Amoney * (decimal)OrderF2F.SysRate; //利润舍位 GetAll = GetAll.Floor(); //总利润 OrderF2F.AIdPayGet = (double)GetAll; OrderF2F.Agent = SysAgent.Id;//分支机构Id OrderF2F.AId = baseUsers.AId; OrderF2F.FId = 0; OrderF2F.OrderState = 1; OrderF2F.PayState = 0; OrderF2F.AgentState = 0; OrderF2F.AddTime = DateTime.Now; //写入前,判断交易金额限制 if (OrderF2F.Amoney < syscontrol.SNum || OrderF2F.Amoney > syscontrol.ENum) { DataObj.OutError("1006"); return; } //写入订单总表 Orders Orders = new Orders(); Orders.UId = OrderF2F.UId; Orders.TName = NeekName; Orders.PayType = PayType; Orders.PayName = PayName; Orders.RUId = 0; Orders.RName = string.Empty; Orders.TType = OrderF2F.OType; Orders.TState = 1; Orders.Amoney = OrderF2F.Amoney; Orders.Poundage = OrderF2F.Poundage; Orders.AddTime = DateTime.Now; Orders.PayState = 0; Orders.PayWay = PayConfig.Id; Orders.Agent = OrderF2F.Agent; Orders.AgentState = 0; Orders.AId = OrderF2F.AId; Orders.FId = 0; Orders.ComeWay = 1; string OrderAddress = OrderF2F.OrderAddress; if (OrderAddress.IsNullOrEmpty()) { OrderAddress = Utils.GetAddressByGPS(OrderF2F.X, OrderF2F.Y); } Orders.OrderAddress = OrderAddress; Orders.X = OrderF2F.X; Orders.Y = OrderF2F.Y; if (InType == 1) { if (IsNew)//新版 { Orders.LagEntryDay = SysControl.LagEntryDay; Orders.LagEntryNum = SysControl.LagEntryNum; } else { Orders.LagEntryDay = SysSet.LagEntryDay; Orders.LagEntryNum = SysSet.LagEntryNum; } } else { Orders.LagEntryDay = 0; Orders.LagEntryNum = 0; } Entity.Orders.AddObject(Orders); Entity.SaveChanges(); Entity.Refresh(RefreshMode.StoreWins, Orders); OrderF2F.OId = Orders.TNum; Entity.OrderF2F.AddObject(OrderF2F); Entity.SaveChanges(); //======================================= UserTrack.ENo = DataObj.ENo; UserTrack.OPType = Orders.PayName; UserTrack.UserName = Orders.TNum; UserTrack.GPSAddress = Orders.OrderAddress; UserTrack.GPSX = Orders.X; UserTrack.GPSY = Orders.Y; if (!OrderF2F.IP.IsNullOrEmpty()) { UserTrack.IP = OrderF2F.IP; } Orders.SeavGPSLog(UserTrack, Entity); //======================================= #endregion if (PayConfig.DllName == "AliPay") { #region 支付宝调用支付 string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 商户号,密钥,支付宝号 if (PayConfigArr.Length != 3) { DataObj.OutError("9999"); return; } if (AlipayVer == "1.0") { #region 1.0老接口 Submit Submit = new Submit(); Submit.pid = PayConfigArr[0]; Submit.key = PayConfigArr[1]; //卖家支付宝帐户 string seller_email = PayConfigArr[2]; //订单业务类型 string product_code = "BARCODE_PAY_OFFLINE"; //SOUNDWAVE_PAY_OFFLINE:声波支付,FINGERPRINT_FAST_PAY:指纹支付,BARCODE_PAY_OFFLINE:条码支付 string dynamic_id_type = "qrcode"; //动态ID类型 soundwave:声波,qrcode:二维码,barcode:条码 //////////////////////////////////////////////////////////////////////////////////////////////// //把请求参数打包成数组 SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>(); sParaTemp.Add("partner", Submit.pid); sParaTemp.Add("_input_charset", "utf-8"); sParaTemp.Add("service", "alipay.acquire.createandpay"); sParaTemp.Add("seller_email", seller_email); sParaTemp.Add("out_trade_no", OrderF2F.OId); sParaTemp.Add("subject", Orders.TName + ":" + OrderF2F.OId); sParaTemp.Add("total_fee", OrderF2F.Amoney.ToString("F2")); sParaTemp.Add("product_code", product_code); sParaTemp.Add("dynamic_id_type", dynamic_id_type); sParaTemp.Add("dynamic_id", OrderF2F.PayId); sParaTemp.Add("notify_url", NoticePath + "/PayCenter/AliPay/Notice.html"); //建立请求 string sHtmlText = Submit.BuildRequest(sParaTemp); //Utils.WriteLog(sHtmlText); try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(sHtmlText); string is_success = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText; if (is_success == "T") { string trade_no = xmlDoc.SelectSingleNode("/alipay/response/alipay/trade_no").InnerText; string result_code = xmlDoc.SelectSingleNode("/alipay/response/alipay/result_code").InnerText; if (result_code == "ORDER_SUCCESS_PAY_SUCCESS") { //成功 OrderF2F.Trade_no = trade_no; Entity.SaveChanges(); Orders = Orders.PaySuccess(Entity); } else if (result_code == "ORDER_SUCCESS_PAY_INPROCESS") //返回支付处理中,需要进行轮询 { //此处立马返回 OrderF2F.Trade_no = trade_no; Entity.SaveChanges(); } else { AliPayApi Api = new AliPayApi(); Api.AlipayCancel(Orders.TNum, Submit.pid, Submit.key); //交易异常,取消交易 Orders.TState = 0; OrderF2F.OrderState = 0; Entity.SaveChanges(); } } else { Orders.TState = 0; OrderF2F.OrderState = 0; Entity.SaveChanges(); } } catch (Exception Ex) { //Utils.WriteLog(Ex.ToString()); Orders.TState = 0; OrderF2F.OrderState = 0; Entity.SaveChanges(); } #endregion } if (AlipayVer == "2.0") { #region 2.0新接口 ALF2FPAY ALF2FPAY = new ALF2FPAY(); ALF2FPAY.pid = PayConfigArr[0]; ALF2FPAY.appId = PayConfigArr[2]; IAopClient client = new DefaultAopClient(ALF2FPAY.serverUrl, ALF2FPAY.appId, ALF2FPAY.merchant_private_key, "json", ALF2FPAY.version, ALF2FPAY.sign_type, ALF2FPAY.alipay_public_key, ALF2FPAY.charset); StringBuilder sb = new StringBuilder(); sb.Append("{\"out_trade_no\":\"" + OrderF2F.OId + "\","); sb.Append("\"scene\":\"bar_code\","); sb.Append("\"auth_code\":\"" + OrderF2F.PayId + "\","); sb.Append("\"total_amount\":\"" + OrderF2F.Amoney.ToMoney() + "\","); sb.Append("\"subject\":\"" + Orders.TName + ":" + OrderF2F.OId + "\","); string expire_time = System.DateTime.Now.AddMinutes(30).ToString("yyyy-MM-dd HH:mm:ss"); sb.Append("\"time_expire\":\"" + expire_time + "\"}"); AlipayTradePayRequest payRequst = new AlipayTradePayRequest(); payRequst.BizContent = sb.ToString(); Dictionary <string, string> paramsDict = (Dictionary <string, string>)payRequst.GetParameters(); AlipayTradePayResponse payResponse = client.Execute(payRequst); if (payResponse != null) { payResponse.SaveLog(Entity); //保存记录 switch (payResponse.Code) { case "10000": //成功 OrderF2F.Trade_no = payResponse.TradeNo; Entity.SaveChanges(); Orders = Orders.PaySuccess(Entity); break; case "10003": //返回支付处理中,需要进行轮询 OrderF2F.Trade_no = payResponse.TradeNo; Entity.SaveChanges(); break; case "20000": //交易异常,取消交易 string CancelStr = "{\"out_trade_no\":\"" + Orders.TNum + "\"}"; ALF2FPAYObj ObjCancel = new ALF2FPAYObj(); ObjCancel.BizCode = CancelStr; ObjCancel.Client = client; AliPayApi Api = new AliPayApi(); Api.AlipayCancel(ObjCancel); Orders.TState = 0; OrderF2F.OrderState = 0; Entity.SaveChanges(); break; case "40004": //返回失败 Orders.TState = 0; OrderF2F.OrderState = 0; Entity.SaveChanges(); break; } } #endregion } #endregion } if (PayConfig.DllName == "WeiXin") { #region 微信调用支付 //初始化支付配置 WxPayConfig WxPayConfig = new WxPayConfig(); string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 appid,mchid,key,appsecret if (PayConfigArr.Length != 4 && PayConfigArr.Length != 5) { DataObj.OutError("9999"); return; } string ServerIp = ConfigurationManager.AppSettings["ServerIp"].ToString(); string Wx_Cert_Path = ConfigurationManager.AppSettings["Wx_Cert_Path"].ToString(); string Wx_Cert_PWD = ConfigurationManager.AppSettings["Wx_Cert_PWD"].ToString(); WxPayConfig.IP = ServerIp; WxPayConfig.APPID = PayConfigArr[0]; WxPayConfig.MCHID = PayConfigArr[1]; WxPayConfig.KEY = PayConfigArr[2]; WxPayConfig.APPSECRET = PayConfigArr[3]; if (PayConfigArr.Length == 5) { WxPayConfig.SubMCHID = PayConfigArr[4]; } WxPayConfig.SSLCERT_PATH = Wx_Cert_Path; WxPayConfig.SSLCERT_PASSWORD = Wx_Cert_PWD; //支付配置结束 WxPayData data = new WxPayData(); data.SetValue("auth_code", OrderF2F.PayId); //授权码 data.SetValue("body", Orders.TName + ":" + OrderF2F.OId); //商品描述 string total_fee = (OrderF2F.Amoney * 100).ToString("F0"); data.SetValue("total_fee", total_fee); //总金额 data.SetValue("out_trade_no", OrderF2F.OId); //产生随机的商户订单号 WxPayData result = WxPayApi.Micropay(data, WxPayConfig, 10); //提交被扫支付,接收返回结果 result.SaveLog(Entity); if (!result.IsSet("return_code") || result.GetValue("return_code").ToString() == "FAIL") { //支付失败 Orders.TState = 0; OrderF2F.OrderState = 0; Entity.SaveChanges(); } else { if (!result.CheckSign(WxPayConfig.KEY)) { //签名失败,取消订单 Orders.TState = 0; OrderF2F.OrderState = 0; Entity.SaveChanges(); } else { if (result.GetValue("return_code").ToString() == "SUCCESS" && result.GetValue("result_code").ToString() == "SUCCESS") { //直接支付成功 OrderF2F.Trade_no = result.GetValue("transaction_id").ToString(); Entity.SaveChanges(); Orders = Orders.PaySuccess(Entity); } else { if (result.GetValue("err_code").ToString() != "USERPAYING" && result.GetValue("err_code").ToString() != "SYSTEMERROR") { //业务明确失败 Orders.TState = 0; OrderF2F.OrderState = 0; Entity.SaveChanges(); } else { //需要查单 } } } } #endregion } #region 提交好付 if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin") { string NoticeUrl = ""; string Action = ""; if (PayConfig.DllName == "HFAliPay") { NoticeUrl = NoticePath + "/PayCenter/HFAliPay/Notice.html"; Action = "AliCode"; } if (PayConfig.DllName == "HFWeiXin") { NoticeUrl = NoticePath + "/PayCenter/HFWeiXin/Notice.html"; Action = "WxCode"; } string[] PayConfigArr = PayConfig.QueryArray.Split(','); if (PayConfigArr.Length != 3) { DataObj.OutError("1000"); return; } //提交结算中心 string merId = PayConfigArr[0]; //商户号 string merKey = PayConfigArr[1]; //商户密钥 string JsPayWay = PayConfigArr[2]; //绑定通道 string orderId = Orders.TNum; //商户流水号 decimal money = Orders.Amoney * 100; long intmoney = Int64.Parse(money.ToString("F0")); string OrderMoney = intmoney.ToString();//金额,以分为单 string PostJson = "{\"action\":\"" + Action + "\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"payway\":\"" + JsPayWay + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\",\"code\":\"" + OrderF2F.PayId + "\"}"; string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8"); string Sign = (DataBase64 + merKey).GetMD5(); DataBase64 = HttpUtility.UrlEncode(DataBase64); string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign); string HF_Url = "https://api.zhifujiekou.com/api/mpgateway"; string Ret = Utils.PostRequest(HF_Url, PostData, "utf-8"); JObject JS = new JObject(); try { JS = (JObject)JsonConvert.DeserializeObject(Ret); } catch (Exception Ex) { Log.Write("[Order_HF]:", "【Ret】" + Ret, Ex); } if (JS == null) { DataObj.OutError("1000"); return; } string resp = JS["resp"].ToString(); Ret = LokFuEncode.Base64Decode(resp, "utf-8"); try { JS = (JObject)JsonConvert.DeserializeObject(Ret); } catch (Exception Ex) { Log.Write("[Order_HF]:", "【Ret2】" + Ret, Ex); } if (JS == null) { DataObj.OutError("1000"); return; } string respcode = JS["respcode"].ToString(); if (respcode != "00") { string respmsg = JS["respmsg"].ToString(); DataObj.OutError("1000"); Utils.WriteLog("[Order_HF_Err]:【" + respcode + "】" + respmsg, "orderface"); return; } } #endregion DataObj.Data = Orders.OutJson(); DataObj.Code = "0000"; DataObj.OutString(); } if (OrderF2F.Action == "GET")//获取订交易信息 { //开始处理参数 if (OrderF2F.OId.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == OrderF2F.OId && n.UId == baseUsers.Id); if (Orders == null) { DataObj.OutError("1000"); return; } OrderF2F Orderf2f = Entity.OrderF2F.FirstOrDefault(n => n.OId == OrderF2F.OId && n.UId == baseUsers.Id); PayConfig PayConfig = Entity.PayConfig.FirstOrNew(n => n.Id == Orders.PayWay); if (Orders.TState == 1 && Orders.PayState == 0) { if (PayConfig.DllName == "AliPay") { #region 支付宝处理 string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 商户号,密钥,APPId if (PayConfigArr.Length != 3) { DataObj.OutError("9999"); return; } if (AlipayVer == "1.0") { #region 1.0老接口 string pid = PayConfigArr[0]; string key = PayConfigArr[1]; int queryTimes = 10; //查询次数计数器 int Run = 0; while (queryTimes > 0 && Run != 1) { AliPayApi Api = new AliPayApi(); int succResult = Api.AliPayQuery(Orderf2f.OId, pid, key); //如果需要继续查询,则等待2s后继续 if (succResult == 2) { //Thread.Sleep(5000); //continue; Run = 1; //跳出循环,20160420 } //查询成功,返回订单查询接口返回的数据 else if (succResult == 1) { Orders = Orders.PaySuccess(Entity); Run = 1; } //订单交易失败 else { Orders.TState = 0; Orderf2f.OrderState = 0; Entity.SaveChanges(); } queryTimes--; } #endregion } if (AlipayVer == "2.0") { #region 2.0新接口 ALF2FPAY ALF2FPAY = new ALF2FPAY(); ALF2FPAY.pid = PayConfigArr[0]; ALF2FPAY.appId = PayConfigArr[2]; IAopClient client = new DefaultAopClient(ALF2FPAY.serverUrl, ALF2FPAY.appId, ALF2FPAY.merchant_private_key, "json", ALF2FPAY.version, ALF2FPAY.sign_type, ALF2FPAY.alipay_public_key, ALF2FPAY.charset); string QueryStr = "{\"out_trade_no\":\"" + Orders.TNum + "\"}"; ALF2FPAYObj ObjQuery = new ALF2FPAYObj(); ObjQuery.BizCode = QueryStr; ObjQuery.Client = client; ObjQuery.Entity = Entity; AliPayApi Api = new AliPayApi(); AlipayTradeQueryResponse queryResponse = Api.LoopAlipayQuery(ObjQuery); if (queryResponse != null) { if (queryResponse.Code == "10000") { if (queryResponse.TradeStatus == "TRADE_FINISHED" || queryResponse.TradeStatus == "TRADE_SUCCESS") { Orders = Orders.PaySuccess(Entity); } } } #endregion } #endregion } if (PayConfig.DllName == "WeiXin") { #region 微信处理 //初始化支付配置 WxPayConfig WxPayConfig = new WxPayConfig(); string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 appid,mchid,key,appsecret if (PayConfigArr.Length != 4 && PayConfigArr.Length != 5) { DataObj.OutError("9999"); return; } string ServerIp = ConfigurationManager.AppSettings["ServerIp"].ToString(); string Wx_Cert_Path = ConfigurationManager.AppSettings["Wx_Cert_Path"].ToString(); string Wx_Cert_PWD = ConfigurationManager.AppSettings["Wx_Cert_PWD"].ToString(); WxPayConfig.IP = ServerIp; WxPayConfig.APPID = PayConfigArr[0]; WxPayConfig.MCHID = PayConfigArr[1]; WxPayConfig.KEY = PayConfigArr[2]; WxPayConfig.APPSECRET = PayConfigArr[3]; if (PayConfigArr.Length == 5) { WxPayConfig.SubMCHID = PayConfigArr[4]; } WxPayConfig.SSLCERT_PATH = Wx_Cert_Path; WxPayConfig.SSLCERT_PASSWORD = Wx_Cert_PWD; //支付配置结束 int queryTimes = 10; //查询次数计数器 int Run = 0; while (queryTimes > 0 && Run != 1) { int succResult = 0;//查询结果 MicroPay MicroPay = new MicroPay(); WxPayData queryResult = MicroPay.WXQuery(Orderf2f.OId, WxPayConfig, Entity, out succResult); //如果需要继续查询,则等待2s后继续 if (succResult == 2) { //Thread.Sleep(5000); //continue; Run = 1; //跳出循环,20160420 } //查询成功,返回订单查询接口返回的数据 else if (succResult == 1) { Orderf2f.Trade_no = queryResult.GetValue("transaction_id").ToString(); int ret = Entity.SaveChanges(); Orders = Orders.PaySuccess(Entity); Run = 1; } //订单交易失败 else { Orders.TState = 0; Orderf2f.OrderState = 0; Entity.SaveChanges(); } queryTimes--; } #endregion } if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin") { #region 好付处理 string[] QueryArr = PayConfig.QueryArray.Split(','); if (QueryArr.Length == 3) { //提交结算中心 string merId = QueryArr[0]; //商户号 string merKey = QueryArr[1]; //商户密钥 string orderId = Orders.TNum; //商户流水号 string PostJson = "{\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\"}"; string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8"); string Sign = (DataBase64 + merKey).GetMD5(); DataBase64 = HttpUtility.UrlEncode(DataBase64); string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign); string HF_Url = "https://api.zhifujiekou.com/api/query"; string Ret = Utils.PostRequest(HF_Url, PostData, "utf-8"); JObject JS = new JObject(); try { JS = (JObject)JsonConvert.DeserializeObject(Ret); } catch (Exception Ex) { Log.Write("[Order_HFQuery]:", "【Ret】" + Ret, Ex); } if (JS == null) { DataObj.OutError("1000"); return; } string resp = JS["resp"].ToString(); Ret = LokFuEncode.Base64Decode(resp, "utf-8"); try { JS = (JObject)JsonConvert.DeserializeObject(Ret); } catch (Exception Ex) { Log.Write("[Order_HFQuery]:", "【Ret2】" + Ret, Ex); } if (JS == null) { DataObj.OutError("1000"); return; } string respcode = JS["respcode"].ToString(); if (respcode != "00") { string respmsg = JS["respmsg"].ToString(); DataObj.OutError("1000"); Utils.WriteLog("[Order_HFQuery_Err]:【" + respcode + "】" + respmsg, "orderface"); return; } string resultcode = JS["resultcode"].ToString(); if (resultcode == "0000" || resultcode == "1002" || resultcode == "1004") { string txnamt = JS["txnamt"].ToString(); int factmoney = int.Parse(txnamt); if (((int)(Orders.Amoney * 100)) == factmoney) { Orders = Orders.PaySuccess(Entity); } } } #endregion } } DataObj.Data = Orders.OutJson(); DataObj.Code = "0000"; DataObj.OutString(); } if (OrderF2F.Action == "Cancel")//取消交易 { //开始处理参数 if (OrderF2F.OId.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == OrderF2F.OId && n.UId == baseUsers.Id); if (Orders == null) { DataObj.OutError("1000"); return; } OrderF2F Orderf2f = Entity.OrderF2F.FirstOrDefault(n => n.OId == OrderF2F.OId && n.UId == baseUsers.Id); if (Orders.TState == 1 && Orders.PayState == 0) { PayConfig PayConfig = Entity.PayConfig.FirstOrNew(n => n.Id == Orders.PayWay); if (PayConfig.DllName == "AliPay") { #region 支付宝处理 string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 商户号,密钥,支付宝号 if (PayConfigArr.Length != 3) { DataObj.OutError("9999"); return; } if (AlipayVer == "1.0") { #region 1.0老接口 string pid = PayConfigArr[0]; string key = PayConfigArr[1]; AliPayApi Api = new AliPayApi(); Api.AlipayCancel(Orders.TNum, pid, key); #endregion } if (AlipayVer == "2.0") { #region 2.0新接口 ALF2FPAY ALF2FPAY = new ALF2FPAY(); ALF2FPAY.pid = PayConfigArr[0]; ALF2FPAY.appId = PayConfigArr[2]; IAopClient client = new DefaultAopClient(ALF2FPAY.serverUrl, ALF2FPAY.appId, ALF2FPAY.merchant_private_key, "json", ALF2FPAY.version, ALF2FPAY.sign_type, ALF2FPAY.alipay_public_key, ALF2FPAY.charset); string CancelStr = "{\"out_trade_no\":\"" + Orders.TNum + "\"}"; ALF2FPAYObj ObjCancel = new ALF2FPAYObj(); ObjCancel.BizCode = CancelStr; ObjCancel.Client = client; ObjCancel.Entity = Entity; AliPayApi Api = new AliPayApi(); Api.AlipayCancel(ObjCancel); #endregion } #endregion } if (PayConfig.DllName == "WeiXin") { #region 微信处理 //初始化支付配置 WxPayConfig WxPayConfig = new WxPayConfig(); string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 appid,mchid,key,appsecret if (PayConfigArr.Length != 4 && PayConfigArr.Length != 5) { DataObj.OutError("9999"); return; } string ServerIp = ConfigurationManager.AppSettings["ServerIp"].ToString(); string Wx_Cert_Path = ConfigurationManager.AppSettings["Wx_Cert_Path"].ToString(); string Wx_Cert_PWD = ConfigurationManager.AppSettings["Wx_Cert_PWD"].ToString(); WxPayConfig.IP = ServerIp; WxPayConfig.APPID = PayConfigArr[0]; WxPayConfig.MCHID = PayConfigArr[1]; WxPayConfig.KEY = PayConfigArr[2]; WxPayConfig.APPSECRET = PayConfigArr[3]; if (PayConfigArr.Length == 5) { WxPayConfig.SubMCHID = PayConfigArr[4]; } WxPayConfig.SSLCERT_PATH = Wx_Cert_Path; WxPayConfig.SSLCERT_PASSWORD = Wx_Cert_PWD; //支付配置结束 MicroPay MicroPay = new MicroPay(); MicroPay.WXCancel(OrderF2F.OId, WxPayConfig, Entity); //取消订单,重试10次 #endregion } if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin") { #region 好付处理 string[] QueryArr = PayConfig.QueryArray.Split(','); if (QueryArr.Length == 3) { //提交结算中心 string merId = QueryArr[0]; //商户号 string merKey = QueryArr[1]; //商户密钥 string orderId = Orders.TNum; //商户流水号 string PostJson = "{\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\"}"; string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8"); string Sign = (DataBase64 + merKey).GetMD5(); DataBase64 = HttpUtility.UrlEncode(DataBase64); string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign); string HF_Url = "https://api.zhifujiekou.com/api/cancel"; string Ret = Utils.PostRequest(HF_Url, PostData, "utf-8"); JObject JS = new JObject(); try { JS = (JObject)JsonConvert.DeserializeObject(Ret); } catch (Exception Ex) { Log.Write("[Order_HFCancel]:", "【Ret】" + Ret, Ex); } if (JS == null) { DataObj.OutError("1000"); return; } string resp = JS["resp"].ToString(); Ret = LokFuEncode.Base64Decode(resp, "utf-8"); try { JS = (JObject)JsonConvert.DeserializeObject(Ret); } catch (Exception Ex) { Log.Write("[Order_HFCancel]:", "【Ret2】" + Ret, Ex); } if (JS == null) { DataObj.OutError("1000"); return; } string respcode = JS["respcode"].ToString(); if (respcode != "00") { string respmsg = JS["respmsg"].ToString(); DataObj.OutError("1000"); Utils.WriteLog("[Order_HFQuery_Err]:【" + respcode + "】" + respmsg, "orderface"); return; } } #endregion } Orders.TState = 0; Orderf2f.OrderState = 0; Entity.SaveChanges(); } DataObj.Data = Orders.OutJson(); DataObj.Code = "0000"; DataObj.OutString(); } }
private void GetZfb() { IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", "app_id", "merchant_private_key", "json", "RSA", "alipay_public_key", "GBK"); AlipayTradePayRequest request = new AlipayTradePayRequest(); request.BizContent = "{" + " \"out_trade_no\":\"20150320010101001\"," + " \"scene\":\"bar_code,wave_code\"," + " \"auth_code\":\"28763443825664394\"," + " \"subject\":\"Iphone6 16G\"," + " \"seller_id\":\"2088102146225135\"," + " \"total_amount\":88.88," + " \"discountable_amount\":8.88," + " \"undiscountable_amount\":80.00," + " \"body\":\"Iphone6 16G\"," + " \"goods_detail\":[{" + " \"goods_id\":\"apple-01\"," + " \"alipay_goods_id\":\"20010001\"," + " \"goods_name\":\"ipad\"," + " \"quantity\":1," + " \"price\":2000," + " \"goods_category\":\"34543238\"," + " \"body\":\"特价手机\"," + " \"show_url\":\"http://www.alipay.com/xxx.jpg\"" + " }]," + " \"operator_id\":\"yx_001\"," + " \"store_id\":\"NJ_001\"," + " \"terminal_id\":\"NJ_T_001\"," + " \"alipay_store_id\":\"2016041400077000000003314986\"," + " \"extend_params\":{" + " \"sys_service_provider_id\":\"2088511833207846\"," + " \"hb_fq_num\":\"3\"," + " \"hb_fq_seller_percent\":\"100\"" + " }," + " \"timeout_express\":\"90m\"," + " \"royalty_info\":{" + " \"royalty_type\":\"ROYALTY\"," + " \"royalty_detail_infos\":[{" + " \"serial_no\":1," + " \"trans_in_type\":\"userId\"," + " \"batch_no\":\"123\"," + " \"out_relation_id\":\"20131124001\"," + " \"trans_out_type\":\"userId\"," + " \"trans_out\":\"2088101126765726\"," + " \"trans_in\":\"2088101126708402\"," + " \"amount\":0.1," + " \"desc\":\"分账测试1\"," + " \"amount_percentage\":\"100\"" + " }]" + " }," + " \"sub_merchant\":{" + " \"merchant_id\":\"19023454\"" + " }" + " }"; AlipayTradePayResponse response = client.Execute(request); if (!response.IsError) { Console.WriteLine("调用成功"); } else { Console.WriteLine("调用失败"); } }
public ActionResult MicroPay(int?CompanyId, string storeId, string autoCode, string paySN, decimal totalPrice) { var op = new OpResult(); AlipayTradePayResponse payResponse = null; try { var setting = paySetBLL.GetPaymentSettingBystoreId(1, storeId, CompanyId); client = new DefaultAopClient(qrcode._2.Config.serverUrl, setting.AppId, qrcode._2.Config.merchant_private_key, "", qrcode._2.Config.version, qrcode._2.Config.sign_type, qrcode._2.Config.alipay_public_key, qrcode._2.Config.charset); var orderno = qrcode.wx.WxPayApi.GenerateOutTradeNo(setting.AppId); StringBuilder sb = new StringBuilder(); sb.Append("{\"out_trade_no\":\"" + orderno + "\","); sb.Append("\"scene\":\"bar_code\","); sb.Append("\"auth_code\":\"" + autoCode + "\","); sb.Append("\"total_amount\":\"" + totalPrice + "\",\"discountable_amount\":\"0.00\","); sb.Append("\"subject\":\"订单编号 " + paySN + "\",\"body\":\"\","); string expire_time = System.DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"); sb.Append("\"time_expire\":\"" + expire_time + "\"}"); AlipayTradePayRequest payRequst = new AlipayTradePayRequest(); payRequst.BizContent = sb.ToString(); Dictionary <string, string> paramsDict = (Dictionary <string, string>)payRequst.GetParameters(); payResponse = client.Execute(payRequst); switch (payResponse.Code) { case qrcode._2.ResultCode.SUCCESS: op.Message = payResponse.TradeNo; op.Successed = true; break; case qrcode._2.ResultCode.INRROCESS: StringBuilder sb1 = new StringBuilder(); sb1.Append("{\"out_trade_no\":\"" + orderno + "\"}"); //返回支付处理中,需要进行轮询 AlipayTradeQueryResponse queryResponse = LoopQuery(sb1.ToString()); if (queryResponse != null) { op.Message = queryResponse.TradeNo; op.Successed = true; } else { var cancel1 = Cancel(sb1.ToString()); op.Message = cancel1.Code == qrcode._2.ResultCode.SUCCESS ? "订单支付失败,已撤销!" : (cancel1.SubMsg ?? cancel1.Msg); } break; case qrcode._2.ResultCode.FAIL: StringBuilder sb2 = new StringBuilder(); sb2.Append("{\"out_trade_no\":\"" + orderno + "\"}"); Cancel(sb2.ToString()); //不撤销防止同订单号时产生退款 op.Message = payResponse.SubMsg ?? payResponse.Msg; break; default: op.Message = payResponse.SubMsg ?? payResponse.Msg; break; } } catch (Exception ex) { op.Message = ex.Message; new Sys.LogEngine().WriteError("支付宝当面付失败!" + payResponse.Body, ex); } Pharos.Component.qrcode.Log.Debug(this.GetType().Name, "支付宝当面付,返回结果:" + payResponse.Body); return(new JsonNetResult(op)); }
public AlipayF2FPayResult tradePay(AlipayTradePayContentBuilder builder) { AlipayF2FPayResult payResult = new AlipayF2FPayResult(); try { AlipayTradePayRequest payRequest = new AlipayTradePayRequest(); payRequest.BizContent = builder.BuildJson(); AlipayTradePayResponse payResponse = client.Execute(payRequest); //payRequest.SetBizModel(""); if (payResponse != null) { switch (payResponse.Code) { case ResultCode.SUCCESS: break; //返回支付处理中,需要进行轮询 case ResultCode.INRROCESS: AlipayTradeQueryResponse queryResponse = LoopQuery(builder.out_trade_no, 10, 3000); //用订单号trade_no进行轮询也是可以的。 //轮询结束后还是支付处理中,需要调撤销接口 if (queryResponse != null) { if (queryResponse.TradeStatus == "WAIT_BUYER_PAY") { CancelAndRetry(builder.out_trade_no); payResponse.Code = ResultCode.FAIL; } payResponse = toTradePayResponse(queryResponse); } break; //明确返回业务失败 case ResultCode.FAIL: break; //返回系统异常,需要调用一次查询接口,没有返回支付成功的话调用撤销接口撤销交易 case ResultCode.ERROR: AlipayTradeQueryResponse queryResponse2 = sendTradeQuery(builder.out_trade_no); if (queryResponse2 != null) { if (queryResponse2.TradeStatus == TradeStatus.WAIT_BUYER_PAY) { AlipayTradeCancelResponse cancelResponse = CancelAndRetry(builder.out_trade_no); payResponse.Code = ResultCode.FAIL; } payResponse = toTradePayResponse(queryResponse2); } break; default: payResult.response = payResponse; break; } payResult.response = payResponse; return(payResult); } else { AlipayTradeQueryResponse queryResponse3 = sendTradeQuery(builder.out_trade_no); if (queryResponse3 != null) { if (queryResponse3.TradeStatus == TradeStatus.WAIT_BUYER_PAY) { AlipayTradeCancelResponse cancelResponse = CancelAndRetry(builder.out_trade_no); payResponse.Code = ResultCode.FAIL; } payResponse = toTradePayResponse(queryResponse3); } payResult.response = payResponse; return(payResult); } //return payResult; } catch (Exception e) { AlipayTradePayResponse payResponse = new AlipayTradePayResponse(); payResponse.Code = ResultCode.FAIL; payResponse.Body = e.Message; payResult.response = payResponse; return(payResult); } }
/// <summary> /// 直接付款,适合条码支付 /// </summary> /// <param name="parameter"></param> public virtual string StartPay(PayParameter parameter) { if (parameter.AuthCode.IsNullOrEmpty()) { throw new Exception("条码为空"); } if (parameter.TradeID.IsNullOrEmpty()) { throw new Exception("交易编号为空"); } try { Config config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayBarcode, parameter.TradeID)); //创建提交的内容 AlipayTradePayContentBuilder builder = BuildPayContent(config, parameter); var client = config.AppConfig.CreateAopClient(); AlipayTradePayRequest payRequest = new AlipayTradePayRequest(); payRequest.BizContent = builder.BuildJson(); AlipayTradePayResponse payResponse = client.Execute(payRequest); PayFactory.OnLog(parameter.TradeID, payResponse.Body); string[] errorCodes = new string[] { "20000", "20001", "40001", "40002", "40003", "40004", "40006" };//明确一定是错误的代码 if (errorCodes.Contains(payResponse.Code)) { PayFactory.OnPayFailed(parameter.TradeID, payResponse.SubMsg, payResponse.Body); } else if (payResponse.Code == ResultCode.SUCCESS) { PayFactory.OnPaySuccessed(parameter.TradeID, payResponse.Body); } else { //到这里,不能确定支付结果,循环30秒确定 int checkTimes = parameter.Timeout / 2; Thread.Sleep(1000); for (int i = 0; i < checkTimes; i++) { if (checkPayStateByConfig(parameter, config)) { break; } if (i + 1 == checkTimes) { break; } Thread.Sleep(2000); } } } catch (Exception ex) { } return(null); }