/// <summary> /// 【统一收单线下交易条码支付】构造支付请求数据 /// </summary> /// <returns>请求数据集</returns> private AlipayTradePayContentBuilder BuildPayContent(string ord_id, string ord_name, string auth_coe, decimal total_amount, string partner_id) { string out_trade_no = ord_id; //扫码枪扫描到的用户手机钱包中的付款条码 AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); //收款账号 builder.seller_id = partner_id; //订单编号 builder.out_trade_no = out_trade_no; //支付场景,无需修改 builder.scene = "bar_code"; //支付授权码,付款码 builder.auth_code = auth_coe; //订单总金额 builder.total_amount = total_amount.ToString(); //订单名称 builder.subject = ord_name; //自定义超时时间 builder.timeout_express = "5m"; //订单描述 builder.body = ""; //门店编号,很重要的参数,可以用作之后的营销 //builder.store_id = "test store id"; //操作员编号,很重要的参数,可以用作之后的营销 //builder.operator_id = "test"; return(builder); }
/// <summary> /// 提交支付请求 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void sureButton_Click(object sender, EventArgs e) { string amount = WIDtotal_fee.Text.Trim(); if (string.IsNullOrEmpty(amount) || float.Parse(amount) == 0) { MessageBox.Show("支付金额不可为0,请重新填写"); return; } // AlipayTradePayContentBuilder builder = BuildPayContent(); string out_trade_no = builder.out_trade_no; AlipayF2FPayResult payResult = serviceClient.tradePay(builder); switch (payResult.Status) { case ResultEnum.SUCCESS: DoSuccessProcess(payResult); break; case ResultEnum.FAILED: DoFailedProcess(payResult); break; case ResultEnum.UNKNOWN: result = "网络异常,请检查网络配置后,更换外部订单号重试"; break; } MessageBox.Show("" + result); }
private AlipayTradePayContentBuilder BuildPayContent(Config config, PayParameter parameter) { AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); builder.out_trade_no = parameter.TradeID; builder.scene = "bar_code"; builder.auth_code = parameter.AuthCode; builder.total_amount = parameter.Amount.ToString(); builder.discountable_amount = parameter.Amount.ToString(); builder.undiscountable_amount = "0"; builder.operator_id = "test"; builder.subject = "条码支付"; if (parameter.ExpireTime != DateTime.MinValue) { var minutes = Convert.ToInt32((parameter.ExpireTime - DateTime.Now).TotalMinutes); builder.timeout_express = Math.Max(1, minutes) + "m"; } else { //默认2分钟 builder.timeout_express = "2m"; } builder.body = parameter.TradeName == null ? parameter.Description : parameter.TradeName; builder.store_id = ""; //很重要的参数,可以用作之后的营销 builder.seller_id = config.AppConfig.pid; //可以是具体的收款账号。 builder.goods_detail = new List <Com.Alipay.Model.GoodsInfo>(); //扩展参数 //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
//条码支付https://docs.open.alipay.com/194/106039/ //统一收单字段https://docs.open.alipay.com/api_1/alipay.trade.pay public JObject F2FPay(SOInfo SOInfo, string PayCode, out string Message) { var data = new AlipayTradePayContentBuilder() { subject = SOInfo.SalesOrder.BillNO, //订单名称 body = "test", //订单描述 out_trade_no = SOInfo.SalesOrder.BillNO, //订单编号 total_amount = SOInfo.SOItems.Sum(i => i.Amount).ToString("0.00"), //订单金额 scene = "bar_code", //支付场景 auth_code = PayCode, //付款条码 }; var result = serviceClient.tradePay(data); //{ //"alipay_trade_pay_response": { // "code": "10000", // "msg": "Success", // "buyer_logon_id": "j*z***@yahoo.cn", // "buyer_pay_amount": "0.01", // "buyer_user_id": "2088102549201514", // "fund_bill_list": [ // { // "amount": "0.01", // "fund_channel": "PCREDIT" // } // ], // "gmt_payment": "2019-03-19 17:00:54", // "invoice_amount": "0.01", // "out_trade_no": "SO201903191700107879", // "point_amount": "0.00", // "receipt_amount": "0.01", // "total_amount": "0.01", // "trade_no": "2019031922001401510517716161" // }, // "sign": "D020VIGsiIqygRJLlSCEBulNxzN8KBMiUS+C/wW8tKZV6PaUc4OMSxc9uAM2UDhVlPDIdPsMZoIkTZ1BsDZldAR9k28oZvG9gAPluuHkHAvdqMgLDbvhOIBY3C7qT9tYe1M2n7HkruFP9nmhw09z1mCbG8EeH8s9zPMY8CG3QnQ+lDcbmivFXveCel7YmVP+AfXxTo/DKcf937ynOhDK1sinuG16kWOgZtxHVP9iPrF1DaVBmS3OnD/dYPm10QVY4OaMfw7fsPSH8moBGSUbsk7z4p95VmTT9JDdF/1wEK40LdXt6Tyo9/zNMhIv7sjdISvIyyu9nJ3ouPCtrwNFiA==" //} var resultObject = JsonConvert.DeserializeObject <JObject>(result.response.Body); switch (result.Status) { case ResultEnum.SUCCESS: Message = null; return(resultObject); case ResultEnum.FAILED: if (resultObject["alipay_trade_pay_response"]["sub_code"].ToString() == "ACQ.TRADE_HAS_SUCCESS") { Message = null; return(resultObject); } Message = resultObject["alipay_trade_pay_response"]["sub_msg"].ToString(); return(null); case ResultEnum.UNKNOWN: Message = "网络异常,请检查网络配置后,更换外部订单号重试"; return(null); default: Message = "支付宝交易状态(" + result.Status + ")未定义"; return(null); } }
/// <summary> /// 构造支付请求数据 /// </summary> /// <returns>请求数据集</returns> private static AlipayTradePayContentBuilder BuildPayContent(AlipayTradeOrderModel model) { //线上联调时,请输入真实的外部订单号。 string out_trade_no = model.out_trade_no; //扫码枪扫描到的用户手机钱包中的付款条码 AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); //收款账号 builder.seller_id = model.seller_id; //订单编号 builder.out_trade_no = out_trade_no; //支付场景,无需修改 builder.scene = "bar_code"; //支付授权码,付款码 builder.auth_code = model.buyer_id; //订单总金额 builder.total_amount = model.total_amount; //参与优惠计算的金额 builder.discountable_amount = model.discountable_amount; //不参与优惠计算的金额 builder.undiscountable_amount = model.undiscountable_amount; //订单名称 builder.subject = model.subject; //自定义超时时间 builder.timeout_express = "10m"; //订单描述 builder.body = model.body; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = model.store_id; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = "HAND"; //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); GoodsInfo goods = new GoodsInfo(); goods.goods_id = ""; goods.goods_name = model.body; goods.price = model.total_amount; goods.quantity = "1"; gList.Add(goods); builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
private AlipayTradePayContentBuilder BuildPayContent() { //线上联调时,请输入真实的外部订单号。 string out_trade_no = ""; //if (String.IsNullOrEmpty(WIDout_request_no.Text.Trim())) if (String.IsNullOrEmpty(OrderNumber)) { out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); } else { //out_trade_no = WIDout_request_no.Text.Trim(); out_trade_no = OrderNumber; } //扫码枪扫描到的用户手机钱包中的付款条码 AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); builder.out_trade_no = out_trade_no; builder.scene = "bar_code"; builder.auth_code = WIDdynamic_id.Text.Trim(); builder.total_amount = WIDtotal_fee.Text.Trim(); builder.discountable_amount = WIDtotal_fee.Text.Trim(); builder.undiscountable_amount = "0"; builder.operator_id = "test"; builder.subject = "条码支付"; builder.timeout_express = "2m"; builder.body = "订单描述"; builder.store_id = "test store id"; //很重要的参数,可以用作之后的营销 builder.seller_id = Config.pid; //可以是具体的收款账号。 //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); GoodsInfo goods = new GoodsInfo(); goods.goods_id = "goods id"; goods.goods_name = "goods name"; goods.price = "0.01"; goods.quantity = "1"; gList.Add(goods); builder.goods_detail = gList; //扩展参数 //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
/// <summary> /// 构造支付宝条码支付请求数据 /// </summary> /// <returns>请求数据集</returns> public AlipayTradePayContentBuilder BuildPayContent(Flw_Order order, decimal amount, string subject, string authcode) { //扫码枪扫描到的用户手机钱包中的付款条码 AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); //收款账号 builder.seller_id = AliPayConfig.pid; //订单编号 builder.out_trade_no = order.OrderID; //支付场景,无需修改 builder.scene = "bar_code"; //支付授权码,付款码 builder.auth_code = authcode; //订单总金额 builder.total_amount = amount.ToString("0.00"); //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = subject; //自定义超时时间 builder.timeout_express = "2m"; //订单描述 builder.body = order.Note; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = order.StoreID; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = order.AuthorID == null ? "" : order.AuthorID.Value.ToString(); ////传入商品信息详情 //List<GoodsInfo> gList = new List<GoodsInfo>(); //GoodsInfo goods = new GoodsInfo(); //goods.goods_id = "304"; //goods.goods_name = "goods#name"; //goods.price = "0.01"; //goods.quantity = "1"; //gList.Add(goods); //builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
/// <summary> /// 构造支付请求数据 /// </summary> /// <returns>请求数据集</returns> private AlipayTradePayContentBuilder BuildPayContent() { //线上联调时,请输入真实的外部订单号。 var out_trade_no = "1"; //扫码枪扫描到的用户手机钱包中的付款条码 var builder = new AlipayTradePayContentBuilder(); //收款账号 builder.seller_id = Config.seller_id; //订单编号 builder.out_trade_no = out_trade_no; //支付场景,无需修改 builder.scene = "bar_code"; //订单总金额 builder.total_amount = "1"; //订单名称 builder.subject = "1"; //自定义超时时间 builder.timeout_express = "2m"; //订单描述 builder.body = ""; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = "test store id"; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = "test"; //传入商品信息详情 var gList = new List <GoodsInfo>(); var goods = new GoodsInfo(); goods.goods_id = "304"; goods.goods_name = "goods#name"; goods.price = "0.01"; goods.quantity = "1"; gList.Add(goods); builder.goods_detail = gList; return(builder); }
//alipay.trade.pay(统一收单线下交易条码支付) public bool Alipay_BarcodePay(string app_id, string merchant_private_key, string alipay_public_key, string ord_id, string ord_name, decimal total_amt , string auth_code, string partner_id, out string msg) { try { IAlipayTradeService sc = F2FBiz.CreateClientInstance(Config.serverUrl, app_id, merchant_private_key, Config.version, Config.sign_type, alipay_public_key, Config.charset); AlipayTradePayContentBuilder builder = BuildPayContent(ord_id, ord_name, auth_code, total_amt, partner_id); string out_trade_no = builder.out_trade_no; AlipayF2FPayResult payResult = sc.tradePay(builder); msg = ""; if (payResult.Status == ResultEnum.SUCCESS) { return(true); } else if (payResult.Status == ResultEnum.FAILED) { msg = payResult.response.Body; return(false); } else { if (payResult.response == null) { msg = "配置或网络异常,请检查后重试"; } else { msg = "网络异常,请检查网络配置后重试"; } return(false); } } catch (Exception ex) { Server.LogHelper.writeLog("PreCreate ->Alipay_BarcodePay()", ex.ToString(), ord_id, total_amt.ToString()); throw ex; } }
private AlipayTradePayContentBuilder BuildPayContent(DBDsPosOrder posOrder) { //扫码枪扫描到的用户手机钱包中的付款条码 AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); builder.out_trade_no = posOrder.SerialNumber; builder.scene = "bar_code"; builder.auth_code = posOrder.PayAuthCode; builder.total_amount = (posOrder.TotalSellValue - posOrder.PointMoney).ToString("0.00"); builder.discountable_amount = "0"; builder.undiscountable_amount = posOrder.TotalSellValue.ToString("0.00"); builder.operator_id = posOrder.Clerker; builder.subject = "条码支付"; builder.timeout_express = "2m"; builder.body = "订单商品描述"; builder.store_id = posOrder.StoreName; //很重要的参数,可以用作之后的营销 builder.seller_id = Config.pid; //可以是具体的收款账号。 //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); foreach (DsPosOrderItem posItem in posOrder.items) { GoodsInfo goods = new GoodsInfo(); goods.goods_id = posItem.ProSysNo.ToString(); goods.goods_name = posItem.ProName; goods.price = posItem.ProTotalValue.ToString("0.00"); goods.quantity = posItem.ProNum.ToString(); gList.Add(goods); } builder.goods_detail = gList; //扩展参数 //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
/// <summary> /// 提交支付请求 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Alipay_RSA_Submit(object sender, EventArgs e) { AlipayTradePayContentBuilder builder = BuildPayContent(); string out_trade_no = builder.out_trade_no; AlipayF2FPayResult payResult = serviceClient.tradePay(builder); switch (payResult.Status) { case ResultEnum.SUCCESS: DoSuccessProcess(payResult); break; case ResultEnum.FAILED: DoFailedProcess(payResult); break; case ResultEnum.UNKNOWN: result = "网络异常,请检查网络配置后,更换外部订单号重试"; break; } Response.Redirect("result.aspx?Text=" + result); }
/// <summary> /// 提交支付请求 /// </summary> /// <param name="orderName">订单名称</param> /// <param name="orderAmount">订单金额</param> /// <param name="outTradeNo">订单号</param> /// <param name="authCode">支付授权码,付款码</param> /// <returns></returns> public ActionResult ScanCodeGen(string orderName, string orderAmount, string outTradeNo, string authCode) { AlipayTradePayContentBuilder builder = BuildPayContent(orderName, orderAmount, outTradeNo, authCode); string out_trade_no = builder.out_trade_no; AlipayF2FPayResult payResult = serviceClient.tradePay(builder); switch (payResult.Status) { case ResultEnum.SUCCESS: DoSuccessProcess(payResult); break; case ResultEnum.FAILED: DoFailedProcess(payResult); break; case ResultEnum.UNKNOWN: result = "网络异常,请检查网络配置后,更换外部订单号重试"; break; } return(Json(result)); }
public static string BarCodePayOrder(string companyId, AlipayTradeOrderModel model) { try { AliPayApiConfig config = AliPayApiConfigServices.QueryAliPayConfig(companyId); if (config == null) { throw new MyException("获取支付宝配置失败"); } IAlipayTradeService serviceClient = GetDefaultF2FClient(companyId); AlipayTradePayContentBuilder builder = BuildPayContent(model); string out_trade_no = builder.out_trade_no; AlipayF2FPayResult payResult = serviceClient.tradePay(builder); TxtLogServices.WriteTxtLogEx("AliPayApiServices", string.Format("F2F支付:{0}\r\nResult:{1}", builder.ToXml(Encoding.GetEncoding("GB2312")), payResult.response.Body)); switch (payResult.Status) { case ResultEnum.SUCCESS: return(payResult.response.TradeNo); case ResultEnum.FAILED: return(""); case ResultEnum.UNKNOWN: return("-1"); } } catch (Exception ex) { TxtLogServices.WriteTxtLogEx("AliPayApiServices", string.Format("统一下单失败2:{0}", ex.Message)); } return("-2"); }
/// <summary> /// 构造支付请求数据 /// </summary> /// <param name="orderName">订单名称</param> /// <param name="orderAmount">订单金额</param> /// <param name="outTradeNo">订单编号</param> /// <returns>请求结果集</returns> private AlipayTradePayContentBuilder BuildPayContent(string orderName, string orderAmount, string outTradeNo, string authCode) { //线上联调时,请输入真实的外部订单号。 string out_trade_no = ""; if (String.IsNullOrEmpty(outTradeNo.Trim())) { out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); } else { out_trade_no = outTradeNo; } //扫码枪扫描到的用户手机钱包中的付款条码 AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); //收款账号 builder.seller_id = Config.UID; //订单编号 builder.out_trade_no = out_trade_no; //支付场景,无需修改 builder.scene = "bar_code"; //支付授权码,付款码 builder.auth_code = authCode; //订单总金额 builder.total_amount = orderAmount; //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = orderName; //自定义超时时间 builder.timeout_express = "2m"; //订单描述 builder.body = ""; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = "test store id"; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = "test"; //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); GoodsInfo goods = new GoodsInfo(); goods.goods_id = "304"; goods.goods_name = "goods#name"; goods.price = "0.01"; goods.quantity = "1"; gList.Add(goods); builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
public AlipayF2FPayResult TradePay(AlipayTradePayContentBuilder builder) { return(_alipayClient.TradePay(builder)); }
public object BarcodePay(Dictionary <string, object> dicParas) { try { string errMsg = string.Empty; string orderId = dicParas.ContainsKey("orderId") ? dicParas["orderId"].ToString() : string.Empty; string strPayChannel = dicParas.ContainsKey("payChannel") ? dicParas["payChannel"].ToString() : string.Empty; string subject = dicParas.ContainsKey("subject") ? dicParas["subject"].ToString() : string.Empty; string payType = dicParas.ContainsKey("payType") ? dicParas["payType"].ToString() : string.Empty; string authCode = dicParas.ContainsKey("authCode") ? dicParas["authCode"].ToString() : string.Empty; if (string.IsNullOrWhiteSpace(orderId)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单号无效")); } if (string.IsNullOrWhiteSpace(payType)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付方式为空")); } //支付方式 PaymentChannel PayChannel = (PaymentChannel)Convert.ToInt32(payType); Flw_Order order = Flw_OrderBusiness.GetOrderModel(orderId); if (order == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单号无效")); } Base_StoreInfo store = XCCloudStoreBusiness.GetStoreModel(order.StoreID); if (store == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单所属门店无效")); } //订单减免金额 decimal freePay = order.FreePay == null ? 0 : order.FreePay.Value; //计算订单实付金额,单位:元 decimal amount = (decimal)order.PayCount - freePay; BarcodePayModel model = new BarcodePayModel(); model.OrderId = orderId; //SelttleType selttleType = (SelttleType)store.SelttleType.Value; SelttleType selttleType = (SelttleType)Convert.ToInt32(strPayChannel); switch (selttleType) { case SelttleType.NotThird: break; case SelttleType.AliWxPay: //微信支付宝官方通道 { #region 微信支付宝官方通道 if (PayChannel == PaymentChannel.ALIPAY) //支付宝 { try { IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(AliPayConfig.serverUrl, AliPayConfig.appId, AliPayConfig.merchant_private_key, AliPayConfig.version, AliPayConfig.sign_type, AliPayConfig.alipay_public_key, AliPayConfig.charset); AliPayCommon alipay = new AliPayCommon(); AlipayTradePayContentBuilder builder = alipay.BuildPayContent(order, amount, subject, authCode); //string out_trade_no = builder.out_trade_no; AlipayF2FPayResult payResult = serviceClient.tradePay(builder); if (payResult.Status == ResultEnum.SUCCESS) { decimal payAmount = Convert.ToDecimal(payResult.response.TotalAmount); //支付成功后的处理 BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(payResult.response.OutTradeNo, payAmount, selttleType); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } else { LogHelper.SaveLog(TxtLogType.AliPay, payResult.response.SubMsg); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } } catch (Exception e) { LogHelper.SaveLog(TxtLogType.AliPay, e.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } } else if (PayChannel == PaymentChannel.WXPAY) { try { MicroPay pay = new MicroPay(); WxPayData resultData = pay.BarcodePay(orderId, subject, amount, authCode); string resule = resultData.GetValue("result_code").ToString(); if (resule == "SUCCESS") { string out_trade_no = resultData.GetValue("out_trade_no").ToString(); decimal total_fee = Convert.ToDecimal(resultData.GetValue("total_fee")); decimal payAmount = total_fee / 100; //支付成功后的处理 BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, selttleType); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } else { LogHelper.SaveLog(TxtLogType.WeiXinPay, resultData.GetValue("result_code").ToString()); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } } catch (WxPayException ex) { LogHelper.SaveLog(TxtLogType.WeiXinPay, ex.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } catch (Exception e) { LogHelper.SaveLog(TxtLogType.WeiXinPay, e.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } } #endregion } break; case SelttleType.StarPos: //新大陆 #region 新大陆 PPosPayData.MicroPay pposOrder = new PPosPayData.MicroPay(); //string tradeNo = Guid.NewGuid().ToString().Replace("-", ""); string tradeNo = order.OrderID; pposOrder.tradeNo = tradeNo; pposOrder.amount = Convert.ToInt32(amount * 100).ToString(); pposOrder.total_amount = Convert.ToInt32(amount * 100).ToString(); pposOrder.authCode = authCode; pposOrder.payChannel = PayChannel.ToString(); pposOrder.subject = subject; pposOrder.selOrderNo = tradeNo; pposOrder.txnTime = System.DateTime.Now.ToString("yyyyMMddHHmmss"); pposOrder.signValue = ""; string error = ""; PPosPayApi ppos = new PPosPayApi(); PPosPayData.MicroPayACK result = ppos.ScanPay(pposOrder, out error); if (result != null) { //SUCCESS string out_trade_no = result.tradeNo; decimal total_fee = Convert.ToDecimal(result.total_amount); decimal payAmount = total_fee / 100; //支付成功后的处理 BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, selttleType); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } else { LogHelper.SaveLog(TxtLogType.PPosPay, error); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败," + error)); } break; #endregion case SelttleType.LcswPay: //扫呗 #region 扫呗 LcswPayDate.TradePay tradePay = new LcswPayDate.TradePay(); tradePay.terminal_trace = order.OrderID; tradePay.pay_type = PayChannel.ToDescription(); tradePay.order_body = subject; tradePay.total_fee = Convert.ToInt32(amount * 100).ToString(); tradePay.auth_no = authCode; LcswPayAPI api = new LcswPayAPI(); LcswPayDate.OrderPayACK ack = api.BarcodePay(tradePay); if (ack != null) { if (ack.return_code == "01" && ack.result_code == "01") { string out_trade_no = ack.out_trade_no; decimal total_fee = Convert.ToDecimal(ack.total_fee); decimal payAmount = total_fee / 100; //支付成功后的处理 BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, SelttleType.LcswPay); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } } else { LogHelper.SaveLog(TxtLogType.LcswPay, "条码支付失败"); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } break; #endregion case SelttleType.DinPay: //智付 #region 智付 string errmsg = ""; DinPayData.MicroPay Pay = new DinPayData.MicroPay(); //scanPay.order_no = order.OrderID; Pay.order_no = Guid.NewGuid().ToString().Replace("-", ""); Pay.order_time = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); Pay.order_amount = amount.ToString("0.01"); Pay.service_type = PayChannel == PaymentChannel.WXPAY ? "weixin_micropay" : "alipay_micropay"; Pay.product_name = subject; Pay.auth_code = authCode; //Pay.return_url = "http://106.14.174.131/returnurl.aspx"; DinPayApi payApi = new DinPayApi(); string resultXml = payApi.MicroPay(Pay); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(resultXml)); //处理码 string resp_code = el.XPathSelectElement("/response/resp_code").Value; //业务结果 string result_code = el.XPathSelectElement("/response/result_code").Value; if (resp_code == "SUCCESS" && result_code == "0") { //支付成功后的处理 string out_trade_no = el.XPathSelectElement("/response/order_no").Value; decimal total_fee = Convert.ToDecimal(el.XPathSelectElement("/response/order_amount").Value); decimal payAmount = total_fee / 100; BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, SelttleType.DinPay); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } else { errmsg = el.XPathSelectElement("/response/result_desc").Value; LogHelper.SaveLog(TxtLogType.DinPay, errmsg); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败," + errmsg)); } break; #endregion } return(ResponseModelFactory <BarcodePayModel> .CreateModel(isSignKeyReturn, model)); } catch (WxPayException ex) { LogHelper.SaveLog(TxtLogType.WeiXinPay, ex.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } catch (Exception e) { LogHelper.SaveLog(TxtLogType.Api, e.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } }
/// <summary> /// 刷卡支付完整业务流程逻辑(2018-04-19写) /// </summary> /// <param name="body">商品描述</param> /// <param name="total_fee">总金额(单位为元)</param> /// <param name="auth_code">支付授权码</param> /// <returns>刷卡支付结果</returns> public static AlipayPayResponse OrderPay(string body, string total_fee, string auth_code) { IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance( F2FPayConfig.serverUrl, F2FPayConfig.appId, F2FPayConfig.merchant_private_key, F2FPayConfig.version, F2FPayConfig.sign_type, F2FPayConfig.alipay_public_key, F2FPayConfig.charset); var result = new AlipayPayResponse { Success = false, Message = "支付失败" }; //线上联调时,请输入真实的外部订单号。 result.OutTradeNo = DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); //扫码枪扫描到的用户手机钱包中的付款条码 AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); //收款账号 builder.seller_id = F2FPayConfig.pid; //订单编号 builder.out_trade_no = result.OutTradeNo; //支付场景,无需修改 builder.scene = "bar_code"; //支付授权码,付款码 builder.auth_code = auth_code.Trim(); //订单总金额 builder.total_amount = total_fee.Trim(); //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = body.Trim(); //自定义超时时间 builder.timeout_express = "2m"; //订单描述 builder.body = body.Trim(); //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = ""; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = ""; //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); GoodsInfo goods = new GoodsInfo(); goods.goods_id = "304"; goods.goods_name = "goods#name"; goods.price = total_fee.Trim(); goods.quantity = "1"; gList.Add(goods); builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; AlipayF2FPayResult payResult = serviceClient.tradePay(builder); switch (payResult.Status) { case ResultEnum.SUCCESS: result.Success = true; result.Message = "支付成功"; break; case ResultEnum.FAILED: var subMsg = payResult.response.SubMsg; if (string.IsNullOrEmpty(subMsg)) { subMsg = "支付失败"; } result.Message = subMsg; break; case ResultEnum.UNKNOWN: result.Message = "支付失败,网络异常,请检查网络配置后,更换外部订单号重试"; break; } return(result); }
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); }