private AlipayTradePrecreateContentBuilder BuildPrecreateContent(Config config, PayParameter parameter) { AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); builder.out_trade_no = parameter.TradeID; builder.total_amount = parameter.Amount.ToString(); builder.undiscountable_amount = "0"; builder.operator_id = "test"; builder.subject = "扫码支付"; if (parameter.ExpireTime != DateTime.MinValue) { builder.time_expire = parameter.ExpireTime.ToString("yyyy-MM-dd HH:mm:ss"); } else { //默认10分钟 builder.time_expire = System.DateTime.Now.AddMinutes(10).ToString("yyyy-MM-dd HH:mm:ss");; } builder.body = parameter.TradeName == null ? parameter.Description : parameter.TradeName; builder.store_id = ""; //很重要的参数,可以用作之后的营销 builder.seller_id = config.AppConfig.pid; //可以是具体的收款账号。 builder.goods_detail = new List <GoodsInfo>(); //扩展参数 //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
/// <summary> /// 创建支付 /// </summary> /// <returns>返回二维码内容</returns> public override string StartPay(PayParameter parameter) { if (parameter.TradeID.IsNullOrEmpty()) { throw new Exception("交易编号为空"); } Config config = new Alipay.Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayScanQRCode, parameter.TradeID)); IAlipayTradeService serviceClient = config.AppConfig.CreateClientInstance(); AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(config, parameter); string out_trade_no = builder.out_trade_no; //回掉通知页面 string notifyUrl = string.Format("http://{0}/{1}", HttpContext.Current.Request.Url.Authority, Alipay_ScanPay_HttpModule.NotifyPageName); AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notifyUrl); PayFactory.OnLog(parameter.TradeID, precreateResult.response.Body); if (precreateResult.response.QrCode.IsNullOrEmpty()) { //如果没有生成二维码内容,认为失败 throw new Exception(precreateResult.response.SubMsg); } if (precreateResult.Status == ResultEnum.FAILED) { throw new Exception(precreateResult.response.SubMsg); } return(precreateResult.response.QrCode); }
/// <summary> /// 获得支付二维码 /// </summary> /// <param name="aoM">支付宝支付订单对象</param> /// <returns>支付二维码</returns> public Bitmap GetPayQRCode(AlipayOrderModel aoM) { AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(aoM); string out_trade_no = builder.out_trade_no; AlipayF2FPrecreateResult precreateResult = _serviceClient.tradePrecreate(builder, aoM.NotifyUrl); Bitmap img; if (precreateResult.Status == ResultEnum.SUCCESS) { img = EncryptionManager.QRCodeEncode(precreateResult.response.QrCode); } else if (precreateResult.Status == ResultEnum.FAILED) { throw new MAlipayException(precreateResult.response.Body); } else { if (precreateResult.response == null) { throw new MAlipayException("配置或网络异常,请检查后重试"); } else { throw new MAlipayException("系统异常,请更新外部订单后重新发起请求"); } } return(img); }
public override bool TradePrecreate(MyOrder order) { IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(AliPayConfig.serverUrl, AliPayConfig.appId, AliPayConfig.merchant_private_key, AliPayConfig.version, AliPayConfig.sign_type, AliPayConfig.alipay_public_key, AliPayConfig.charset); AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(order); string out_trade_no = builder.out_trade_no; AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, AliPayConfig.notifyUrl); switch (precreateResult.Status) { case ResultEnum.SUCCESS: DoWaitProcess(precreateResult); return(true); case ResultEnum.FAILED: precreateMessage = precreateResult.response.Body; return(false); case ResultEnum.UNKNOWN: if (precreateResult.response == null) { precreateMessage = "配置或网络异常,请检查后重试"; } else { precreateMessage = "系统异常,请更新外部订单后重新发起请求"; } return(false); default: precreateMessage = "未定义的结果"; return(false); } }
/// <summary> /// 构造支付请求数据 /// </summary> /// <returns>请求数据集</returns> private AlipayTradePrecreateContentBuilder BuildPrecreateContent() { //线上联调时,请输入真实的外部订单号。 string out_trade_no = ""; if (String.IsNullOrEmpty(WIDout_request_no.Text.Trim())) { out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); } else { out_trade_no = WIDout_request_no.Text.Trim(); } AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = AlipayConfig.pid; //订单编号 builder.out_trade_no = out_trade_no; //订单总金额 builder.total_amount = WIDtotal_fee.Text.Trim(); //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = WIDsubject.Text.Trim(); //自定义超时时间 builder.timeout_express = "5m"; //订单描述 builder.body = ""; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = "test store id"; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = "test"; //传入商品信息详情 List <AlipayGoodsInfo> gList = new List <AlipayGoodsInfo>(); AlipayGoodsInfo goods = new AlipayGoodsInfo(); 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); }
public AlipayTradePrecreateContentBuilder BuildPrecreateContent(EAliPayApplication app, EUserInfo AgentUi, string sellerid, string TotalAmt) { //线上联调时,请输入真实的外部订单号。 _OrderNo = StringHelper.GenerateOrderNo(); _SellerId = sellerid; AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = _SellerId; // builder.store_id = _SellerId; //订单编号 builder.out_trade_no = OrderNo; //订单总金额 builder.total_amount = TotalAmt; //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = "#" + AgentUi.Name + "收银台"; //自定义超时时间 // builder.timeout_express = "5m"; //订单描述 builder.body = "#" + app.AppName + "-商品"; //门店编号,很重要的参数,可以用作之后的营销 // builder.store_id = "test store id"; //操作员编号,很重要的参数,可以用作之后的营销 // builder.operator_id = "test"; //传入商品信息详情 //List<GoodsInfo> gList = new List<GoodsInfo>(); //GoodsInfo goods = new GoodsInfo(); //goods.goods_id = "爱钱吧商品"; //goods.goods_name = "爱钱吧商品"; //goods.price = TotalAmt; //goods.quantity = "1"; //gList.Add(goods); //List<GoodsInfo> gList = AliPayManager.GetGoodsList(TotalAmt); //builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sys_service_provider_id = app.AppId; //builder.extend_params = exParam; return(builder); }
/// <summary> /// 预下单 /// </summary> /// <returns></returns> public Result PreCreate(string account, string fileCoverId) { Result result = new Result(); try { IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(Config.serverUrl, Config.appId, Config.merchant_private_key, Config.version, Config.sign_type, Config.alipay_public_key, Config.charset); AlipayTradePrecreateContentBuilder builder = Common.Common.BuildPrecreateContent(account, fileCoverId); string out_trade_no = builder.out_trade_no; AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); switch (precreateResult.Status) { case ResultEnum.SUCCESS: result.IsOK = true; result = Common.Common.RecordPreRenewal(account, fileCoverId, out_trade_no); break; case ResultEnum.FAILED: result.Description = precreateResult.response.Body; result.IsOK = false; break; case ResultEnum.UNKNOWN: if (precreateResult.response == null) { result.Description = "配置或网络异常,请检查后重试"; } else { result.Description = precreateResult.response.Body; // "系统异常,请更新外部订单后重新发起请求"; } result.IsOK = false; break; } if (!result.IsOK) { return(result); } result.ExtData = precreateResult.response.QrCode; result.Description = "预下单成功"; // result.SucceedDescription = out_trade_no; } catch (Exception ex) { LogHelper.WriteLog(GetType()).Info(ex.StackTrace); result.IsOK = false; result.Description = ex.Message; } return(result); }
/// <summary> /// 构造支付请求数据 /// </summary> /// <param name="aoM">支付宝支付订单对象</param> /// <returns>请求数据集</returns> private AlipayTradePrecreateContentBuilder BuildPrecreateContent(AlipayOrderModel aoM) { //线上联调时,请输入真实的外部订单号。 string out_trade_no = aoM.ID;//订单号 AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder { //收款账号 seller_id = _config.PID, //订单编号 out_trade_no = out_trade_no, //订单总金额 total_amount = aoM.TotalPrice.ToString(), //参与优惠计算的金额 discountable_amount = aoM.DiscounPrice.ToString(), //不参与优惠计算的金额 undiscountable_amount = aoM.UnDiscounPrice.ToString(), //订单名称 subject = aoM.Name, //自定义超时时间 timeout_express = "5m", //订单描述 body = aoM.Description, //门店编号,很重要的参数,可以用作之后的营销 store_id = aoM.StoreID, //操作员编号,很重要的参数,可以用作之后的营销 operator_id = aoM.OperatorId }; //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); GoodsInfo goods; foreach (AlipayProductModel item in aoM.Items) { goods = new GoodsInfo { goods_id = item.ID, goods_name = item.Name, price = item.Price.ToString(), quantity = item.Nubmer.ToString() }; gList.Add(goods); } builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 ExtendParams exParam = new ExtendParams { sys_service_provider_id = aoM.NotifyParams }; builder.extend_params = exParam; return(builder); }
/// <summary> /// 构造支付请求数据 /// </summary> /// <param name="orderName">订单名称</param> /// <param name="orderAmount">订单金额</param> /// <param name="outTradeNo">订单编号</param> /// <returns>请求结果集</returns> private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string orderName, string orderAmount, string outTradeNo) { //线上联调时,请输入真实的外部订单号。 if (string.IsNullOrEmpty(outTradeNo)) { outTradeNo = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); } AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder { //收款账号 seller_id = APPID, //订单编号 out_trade_no = outTradeNo, //订单总金额 total_amount = orderAmount, //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 subject = orderName, //自定义超时时间 timeout_express = "5m", //订单描述 body = "", //门店编号,很重要的参数,可以用作之后的营销 store_id = "test store id", //操作员编号,很重要的参数,可以用作之后的营销 operator_id = "test" }; //传入商品信息详情 List <Alipay.AopSdk.F2FPay.Model.GoodsInfo> gList = new List <Alipay.AopSdk.F2FPay.Model.GoodsInfo>(); Alipay.AopSdk.F2FPay.Model.GoodsInfo goods = new Alipay.AopSdk.F2FPay.Model.GoodsInfo { goods_id = "goods id", goods_name = "goods name", price = "9.99", quantity = "1" }; gList.Add(goods); builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
//alipay.trade.precreate(统一收单线下交易预创建) public bool Alipay_PreCreate(string app_id, string merchant_private_key, string alipay_public_key, string ord_id, string ord_name, decimal total_amt , string partner_id, out string barcode, 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); AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(ord_id, ord_name, total_amt, partner_id); string out_trade_no = builder.out_trade_no; //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); string notify_url = Server.Appsetting.ali_notify_url; //商户接收异步通知的地址 AlipayF2FPrecreateResult precreateResult = sc.tradePrecreate(builder, notify_url); //以下返回结果的处理供参考。 //payResponse.QrCode即二维码对于的链接 //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。 msg = ""; barcode = ""; if (precreateResult.Status == ResultEnum.SUCCESS) { barcode = precreateResult.response.QrCode; return(true); } else if (precreateResult.Status == ResultEnum.FAILED) { msg = precreateResult.response.Body; return(false); } else { if (precreateResult.response == null) { msg = "配置或网络异常,请检查后重试"; } else { msg = "系统异常,请更新外部订单后重新发起请求"; } return(false); } } catch (Exception ex) { Server.LogHelper.writeLog("PreCreate ->Alipay_PreCreate()", ex.ToString(), ord_id, total_amt.ToString()); throw ex; } }
/// <summary> /// 构造支付请求数据 /// </summary> /// <param name="orderName">订单名称</param> /// <param name="orderAmount">订单金额</param> /// <param name="outTradeNo">订单编号</param> /// <returns>请求结果集</returns> private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string orderName, string orderAmount, string outTradeNo) { //线上联调时,请输入真实的外部订单号。 if (string.IsNullOrEmpty(outTradeNo)) { outTradeNo = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); } AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = _alipayService.Options.Uid; //订单编号 builder.out_trade_no = outTradeNo; //订单总金额 builder.total_amount = orderAmount; //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = orderName; //自定义超时时间 builder.timeout_express = "5m"; //订单描述 builder.body = ""; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = "tsjkit"; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = "admin"; //传入商品信息详情 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> private AlipayTradePrecreateContentBuilder BuildPrecreateContent(Orders orderInfo) { //线上联调时,请输入真实的外部订单号。 string out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); orderInfo.order_id = out_trade_no; AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = Config.pid; //订单编号 builder.out_trade_no = out_trade_no; //订单总金额 builder.total_amount = orderInfo.order_price.ToString(); //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = $"《{orderInfo.order_title}》封面 - {orderInfo.order_price.ToString()}元档"; //自定义超时时间 builder.timeout_express = "5m"; //订单描述 builder.body = $"《{orderInfo.order_title}》封面 - {orderInfo.order_price.ToString()}元档"; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = Config.pid; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = "docover"; //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); GoodsInfo goods = new GoodsInfo(); goods.goods_id = orderInfo.order_id; goods.goods_name = orderInfo.order_title; goods.price = orderInfo.order_price.ToString(); goods.quantity = "1"; gList.Add(goods); builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
private void button1_Click(object sender, EventArgs e) { this.pictureBox1.Visible = true; this.lblSuccess.Visible = false; this.lblCz.Visible = false; this.lblBt.Visible = false; AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(); string out_trade_no = builder.out_trade_no; WIDout_request_no.Text = out_trade_no; //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); //string notify_url = "http://10.5.21.14/notify_url.aspx"; //商户接收异步通知的地址 //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url); //以下返回结果的处理供参考。 //payResponse.QrCode即二维码对于的链接 //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。 string result = ""; switch (precreateResult.Status) { case ResultEnum.SUCCESS: DoWaitProcess(precreateResult); break; case ResultEnum.FAILED: result = precreateResult.response.Body; //Response.Redirect("result.aspx?Text=" + result); break; case ResultEnum.UNKNOWN: if (precreateResult.response == null) { result = "配置或网络异常,请检查后重试"; } else { result = "系统异常,请更新外部订单后重新发起请求"; } //Response.Redirect("result.aspx?Text=" + result); break; } }
public string PayF2F(EAliPayApplication app, EUserInfo AgentUi, EStoreInfo storeInfo, float TotalAmount, out ResultEnum status) { string result = ""; string NotifyUrl = ConfigurationManager.AppSettings["Main_SiteUrl"] + "AliPay/PayNotify"; /* * IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(AliPayConfig.serverUrl, AliPayConfig.appId, AliPayConfig.merchant_private_key, AliPayConfig.version, * AliPayConfig.sign_type, AliPayConfig.alipay_public_key, AliPayConfig.charset); */ IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(app.ServerUrl, app.AppId, app.Merchant_Private_Key, app.Version, app.SignType, app.Merchant_Public_key, app.Charset); _handler = new F2FPayHandler(); AlipayTradePrecreateContentBuilder builder = _handler.BuildPrecreateContent(app, AgentUi, storeInfo.AliPayAccount, TotalAmount.ToString()); AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, NotifyUrl); status = precreateResult.Status; switch (precreateResult.Status) { case ResultEnum.SUCCESS: result = _handler.CreateQR(precreateResult); result = _handler.DeQR(result); break; case ResultEnum.FAILED: result = precreateResult.response.Body; break; case ResultEnum.UNKNOWN: if (precreateResult.response == null) { result = "配置或网络异常,请检查后重试"; } else { result = "系统异常,请更新外部订单后重新发起请求"; } break; } return(result); }
public AlipayF2FPrecreateResult tradePrecreate(AlipayTradePrecreateContentBuilder builder) { AlipayF2FPrecreateResult payResult = new AlipayF2FPrecreateResult(); try { AlipayTradePrecreateRequest payRequest = new AlipayTradePrecreateRequest(); payRequest.BizContent = builder.BuildJson(); payResult.response = client.Execute(payRequest); return(payResult); } catch { payResult.response = null; return(payResult); } }
public String ScanCodeGen(string orderName, string orderAmount, string outTradeNo) { AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(orderName, orderAmount, outTradeNo); //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); //string notify_url = "http://10.5.21.14/Pay/Notify"; //商户接收异步通知的地址 //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url); //以下返回结果的处理供参考。 //payResponse.QrCode即二维码对于的链接 //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。 String Result = ""; switch (precreateResult.Status) { case ResultEnum.SUCCESS: Result = "{'code':'1','msg':'"; Result += precreateResult.response.QrCode + "," + precreateResult.response.OutTradeNo + "'"; //轮询订单结果 //根据业务需要,选择是否新起线程进行轮询 //ParameterizedThreadStart parStart = new ParameterizedThreadStart(LoopQuery); //Thread myThread = new Thread(parStart); //object o = precreateResult.response.OutTradeNo; //myThread.Start(o); break; case ResultEnum.FAILED: Result = "{'code':'2','msg':'"; // Console.WriteLine("生成二维码失败:" + precreateResult.response.Body); Result += "生成二维码失败:" + precreateResult.response.Body + "'}"; // break; case ResultEnum.UNKNOWN: Result = "{'code':'2','msg':'"; Result += "生成二维码失败:" + (precreateResult.response == null ? "配置或网络异常,请检查后重试" : "系统异常,请更新外部订单后重新发起请求") + "'}"; break; // //Console.WriteLine("生成二维码失败:" + (precreateResult.response == null ? "配置或网络异常,请检查后重试" : "系统异常,请更新外部订单后重新发起请求")); break; } return(Result); //MemoryStream ms = new MemoryStream(); //bitmap.Save(ms, ImageFormat.Png); //byte[] bytes = ms.GetBuffer(); //return File(bytes, "image/png"); }
/// <summary> /// 构造支付请求数据 /// </summary> /// <returns>请求数据集</returns> private AlipayTradePrecreateContentBuilder BuildPrecreateContent(MyOrder order) { string out_trade_no = order.ORDER_NUMBER; AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = AliPayConfig.pid; //订单编号 builder.out_trade_no = out_trade_no; //订单总金额 builder.total_amount = order.PRICE_PAY.Value.ToString(); //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = order.NAME; //自定义超时时间 builder.timeout_express = "5m"; //订单描述 builder.body = ""; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = "001"; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = order.Customer.MOBILE; //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); GoodsInfo goods = new GoodsInfo(); goods.goods_id = order.OnlineCourse.id.ToString(); goods.goods_name = order.OnlineCourse.name; goods.price = order.OnlineCourse.price.ToString(); goods.quantity = "1"; gList.Add(goods); builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
public AlipayF2FPrecreateResult tradePrecreate(AlipayTradePrecreateContentBuilder builder, string notify_url) { AlipayF2FPrecreateResult payResult = new AlipayF2FPrecreateResult(); try { AlipayTradePrecreateRequest payRequest = new AlipayTradePrecreateRequest(); payRequest.BizContent = builder.BuildJson(); payRequest.SetNotifyUrl(notify_url); payResult.response = client.Execute(payRequest); return(payResult); } catch (Exception ex) { payResult.response = null; return(payResult); } }
public async Task <IActionResult> ScanCodeGen(string orderName, string orderAmount, string outTradeNo) { AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(orderName, orderAmount, outTradeNo); //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 AlipayF2FPrecreateResult precreateResult = _alipayF2FService.TradePrecreate(builder); //string notify_url = "http://10.5.21.14/Pay/Notify"; //商户接收异步通知的地址 //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url); //以下返回结果的处理供参考。 //payResponse.QrCode即二维码对于的链接 //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。 var bitmap = new Bitmap(Path.Combine(_hostingEnvironment.WebRootPath, "FTFPay/images/error.png")); switch (precreateResult.Status) { case ResultEnum.SUCCESS: bitmap.Dispose(); bitmap = RenderQrCode(precreateResult.response.QrCode); //轮询订单结果 //根据业务需要,选择是否新起线程进行轮询 ParameterizedThreadStart parStart = new ParameterizedThreadStart(LoopQuery); Thread myThread = new Thread(parStart); object o = precreateResult.response.OutTradeNo; myThread.Start(o); break; case ResultEnum.FAILED: Console.WriteLine("生成二维码失败:" + precreateResult.response.Body); break; case ResultEnum.UNKNOWN: Console.WriteLine("生成二维码失败:" + (precreateResult.response == null ? "配置或网络异常,请检查后重试" : "系统异常,请更新外部订单后重新发起请求")); break; } MemoryStream ms = new MemoryStream(); bitmap.Save(ms, ImageFormat.Png); byte[] bytes = ms.GetBuffer(); ms.Close(); return(File(bytes, "image/png")); }
/// <summary> /// 构造支付请求数据 /// </summary> /// <param name="orderName">订单名称</param> /// <param name="orderAmount">订单金额</param> /// <param name="outTradeNo">订单编号</param> /// <returns>请求结果集</returns> private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string paymentId, string description, decimal amount) { AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 //builder.seller_id = _configuration.Uid; //订单编号 builder.out_trade_no = paymentId; //订单总金额 builder.total_amount = amount.ToString(); //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = description; //自定义超时时间 builder.timeout_express = "2h"; //订单描述 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 = description; goods.goods_name = description; goods.price = amount.ToString(); goods.quantity = "1"; gList.Add(goods); builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
public async Task <AlipayF2FPrecreateResult> TradePrecreateAsync(AlipayTradePrecreateContentBuilder builder, string notify_url) { AlipayF2FPrecreateResult payResult = new AlipayF2FPrecreateResult(); try { AlipayTradePrecreateRequest payRequest = new AlipayTradePrecreateRequest(); payRequest.BizContent = builder.BuildJson(); payRequest.SetNotifyUrl(notify_url); payResult.response = await client.ExecuteAsync(payRequest); return(payResult); } catch { payResult.response = null; return(payResult); } }
/// <summary> /// 构造支付请求数据 /// </summary> /// <returns>请求数据集</returns> public AlipayTradePrecreateContentBuilder BuildPrecreateContent(Flw_Order order, decimal amount, string subject) { AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = AliPayConfig.pid; //订单编号 builder.out_trade_no = order.OrderID; //订单总金额 builder.total_amount = amount.ToString("0.00"); //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = subject; //自定义超时时间 //builder.timeout_express = "5m"; //订单描述 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 = "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); }
public string PayF2F_ForR(EAliPayApplication app, string SellerId, string amount, ETool_QR qr, out ResultEnum status) { string result = ""; IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(app.ServerUrl, app.AppId, app.Merchant_Private_Key, app.Version, app.SignType, app.Merchant_Public_key, app.Charset); _handler = new F2FPayHandler(); AlipayTradePrecreateContentBuilder builder = _handler.BuildPrecreateContent_ForR(app, "", amount); AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); status = precreateResult.Status; switch (precreateResult.Status) { case ResultEnum.SUCCESS: result = _handler.CreateQR_ForR(precreateResult, qr); break; case ResultEnum.FAILED: result = precreateResult.response.Body; break; case ResultEnum.UNKNOWN: if (precreateResult.response == null) { result = "配置或网络异常,请检查后重试"; } else { result = "系统异常,请更新外部订单后重新发起请求"; } break; } return(result); }
protected void Alipay_RSA_Submit(object sender, EventArgs e) { AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(); string out_trade_no = builder.out_trade_no; //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); string notify_url = "http://www.1777ka.com/Zhifu/notify_url.aspx"; //商户接收异步通知的地址 AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url); //以下返回结果的处理供参考。 //payResponse.QrCode即二维码对于的链接 //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。 string result = ""; switch (precreateResult.Status) { case ResultEnum.SUCCESS: DoWaitProcess(precreateResult); break; case ResultEnum.FAILED: result = precreateResult.response.Body; Response.Write("<script>alert('" + result + "')</script>"); break; case ResultEnum.UNKNOWN: if (precreateResult.response == null) { result = "配置或网络异常,请检查后重试"; } else { result = "系统异常,请更新外部订单后重新发起请求"; } Response.Write("<script>alert('" + result + "')</script>"); break; } }
/// <summary> /// 【统一收单线下交易预创建】构造支付请求数据 /// </summary> /// <returns>请求数据集</returns> private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string ord_id, string ord_name, decimal total_amount, string partner_id) { AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = partner_id; //订单编号 builder.out_trade_no = ord_id; //订单总金额 builder.total_amount = total_amount.ToString(); //订单名称 builder.subject = ord_name; //自定义超时时间:m表示分钟 builder.timeout_express = "5m"; //订单描述 //builder.body = ""; //门店编号,很重要的参数,可以用作之后的营销 //builder.store_id = ""; //操作员编号,很重要的参数,可以用作之后的营销 //builder.operator_id = ""; //传入商品信息详情 /* * 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); }
public async Task <CreatePaymentResponse> CreatePaymentAsync(CreatePaymentRequest request) { var result = new CreatePaymentResponse(); AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(request.PaymentId, request.Description, request.Amount); //支付回调 string tenPayNotify = string.Concat(_configuration.ServerAddress, _configuration.NotifyUrl); AlipayF2FPrecreateResult precreateResult = _alipayF2FService.TradePrecreate(builder, tenPayNotify); //AlipayF2FPrecreateResult precreateResult = _alipayF2FService.TradePrecreate(builder); switch (precreateResult.Status) { case ResultEnum.SUCCESS: result.AdditionalData.Add("CodeUrl", precreateResult.response.QrCode); break; default: _logger.Error(L("Payments.Alipay.PayFail", precreateResult.response.SubCode, precreateResult.response.SubMsg)); break; } return(await Task.FromResult(result)); }
public AlipayF2FPrecreateResult TradePrecreate(AlipayTradePrecreateContentBuilder builder, string notify_url) { return(AsyncHelper.RunSync(async() => await TradePrecreateAsync(builder, notify_url))); }
/// <summary> /// 构造支付请求数据 /// </summary> /// <returns>请求数据集</returns> private AlipayTradePrecreateContentBuilder BuildPrecreateContent() { //线上联调时,请输入真实的外部订单号。 string out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); string total_fee = "1"; string subject = "test"; if (!string.IsNullOrEmpty(Request.QueryString["tid"])) { out_trade_no = Request.QueryString["tid"]; } OrderViewModel order = BOrder.SearchByTradeNo(out_trade_no); if (order != null) { subject = BProduct.ExecuteSql("select Name from Products where Id=" + order.Product_Id).ToString(); total_fee = (order.Price * order.Count).ToString(); } //if (String.IsNullOrEmpty(WIDout_request_no.Text.Trim())) //{ // out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString(); //} //else //{ //out_trade_no = "WF87212910290"; //} AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = Config.pid; //订单编号 builder.out_trade_no = out_trade_no; //订单总金额 builder.total_amount = total_fee; //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = subject; //自定义超时时间 builder.timeout_express = "5m"; //订单描述 builder.body = ""; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = "test store id"; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = "test"; //传入商品信息详情 List <GoodsInfo> gList = new List <GoodsInfo>(); if (order != null) { GoodsInfo goods = new GoodsInfo(); goods.goods_id = order.Product_Id.ToString(); goods.goods_name = subject; goods.price = order.Price.ToString(); goods.quantity = order.Count.ToString();; gList.Add(goods); } else { GoodsInfo goods = new GoodsInfo(); goods.goods_id = "520"; goods.goods_name = "捐助"; goods.price = "0.1"; goods.quantity = "1"; gList.Add(goods); } builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
public object getPayQRcode(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 payType = dicParas.ContainsKey("payType") ? dicParas["payType"].ToString() : string.Empty; string subject = dicParas.ContainsKey("subject") ? dicParas["subject"].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; PayQRcodeModel model = new PayQRcodeModel(); 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(); AlipayTradePrecreateContentBuilder builder = alipay.BuildPrecreateContent(order, amount, subject); //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); //AliPayConfig.notify_url //商户接收异步通知的地址 AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, AliPayConfig.notify_url); switch (precreateResult.Status) { case ResultEnum.SUCCESS: model.QRcode = precreateResult.response.QrCode; break; case ResultEnum.FAILED: LogHelper.SaveLog(TxtLogType.AliPay, precreateResult.response.Body); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, precreateResult.response.Body)); case ResultEnum.UNKNOWN: if (precreateResult.response == null) { LogHelper.SaveLog(TxtLogType.AliPay, "配置或网络异常,请检查后重试"); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败")); } else { LogHelper.SaveLog(TxtLogType.AliPay, "系统异常,请更新外部订单后重新发起请求"); 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) //微信 { NativePay native = new NativePay(); try { WxPayData resultData = native.GetPayUrl(order, amount, subject); if (resultData.GetValue("result_code") != null) { string resule = resultData.GetValue("result_code").ToString(); if (resule == "SUCCESS") { model.QRcode = resultData.GetValue("code_url").ToString(); //获得统一下单接口返回的二维码链接 } else { LogHelper.SaveLog(TxtLogType.WeiXinPay, resultData.GetValue("err_code_des").ToString()); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + resultData.GetValue("err_code_des").ToString())); } } else { LogHelper.SaveLog(TxtLogType.WeiXinPay, resultData.GetValue("return_msg").ToString()); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + resultData.GetValue("return_msg").ToString())); } } 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 新大陆 { string error = ""; PPosPayData.OrderPay pposOrder = new PPosPayData.OrderPay(); pposOrder.txnTime = System.DateTime.Now.ToString("yyyyMMddHHmmss"); pposOrder.tradeNo = order.OrderID; //pposOrder.tradeNo = Guid.NewGuid().ToString().Replace("-", ""); pposOrder.amount = Convert.ToInt32(amount * 100).ToString(); //实际付款 pposOrder.total_amount = Convert.ToInt32(amount * 100).ToString(); //订单总金额 pposOrder.subject = subject; pposOrder.payChannel = PayChannel.ToString(); PPosPayApi ppos = new PPosPayApi(); PPosPayData.OrderPayACK result = ppos.OrderPay(pposOrder, out error); if (result == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + error)); } model.QRcode = result.payCode; } break; #endregion case SelttleType.LcswPay: //扫呗 #region 扫呗 { string qrcode = ""; LcswPayDate.OrderPay payInfo = new LcswPayDate.OrderPay(); //payInfo.terminal_trace = Guid.NewGuid().ToString().Replace("-", ""); payInfo.terminal_trace = order.OrderID; payInfo.pay_type = PayChannel.ToDescription(); payInfo.order_body = subject; payInfo.total_fee = Convert.ToInt32(amount * 100).ToString(); LcswPayAPI api = new LcswPayAPI(); if (api.OrderPay(payInfo, out qrcode)) { model.QRcode = qrcode; } else { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败")); } } break; #endregion case SelttleType.DinPay: //智付 #region 智付 string errmsg = ""; DinPayData.ScanPay scanPay = new DinPayData.ScanPay(); //scanPay.order_no = order.OrderID; scanPay.order_no = Guid.NewGuid().ToString().Replace("-", ""); scanPay.order_time = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); scanPay.order_amount = amount.ToString("0.01"); scanPay.service_type = PayChannel == PaymentChannel.WXPAY ? "weixin_scan" : "alipay_scan"; scanPay.product_name = subject; scanPay.product_desc = subject; DinPayApi payApi = new DinPayApi(); string payCode = payApi.GetQRcode(scanPay, out errmsg); if (payCode == "") { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + errmsg)); } model.QRcode = payCode; break; #endregion } return(ResponseModelFactory <PayQRcodeModel> .CreateModel(isSignKeyReturn, model)); } catch (Exception e) { throw e; } }
public string CreateOrder(string data) { try { Orders orderInfo = JsonConvert.DeserializeObject <Orders>(data); if (orderInfo == null) { return(JsonConvert.SerializeObject(new ReturnResponse(21500, "参数错误"))); } AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(orderInfo); string out_trade_no = builder.out_trade_no; using (var db = new DoCoverEntities()) { orderInfo.order_status = 2; db.Orders.Add(orderInfo); string a = ""; db.Database.Log = (c) => { a = c; }; db.SaveChanges(); } AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); //以下返回结果的处理供参考。 //payResponse.QrCode即二维码对于的链接 //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。 string result = ""; int code = 0; string message = ""; switch (precreateResult.Status) { case ResultEnum.SUCCESS: code = 200; result = DoWaitProcess(precreateResult); message = "生成订单成功"; break; case ResultEnum.FAILED: code = 500; message = "生成订单失败"; break; case ResultEnum.UNKNOWN: code = 500; if (precreateResult.response == null) { message = "配置或网络异常,请检查后重试"; } else { message = "系统异常,请更新外部订单后重新发起请求"; } break; } return(JsonConvert.SerializeObject(new ReturnResponse() { code = code, message = message, result = new { order_id = out_trade_no, money = orderInfo.order_price, data = result } })); } catch (Exception ex) { return(JsonConvert.SerializeObject(new ReturnResponse() { code = 15001, message = ex.Message })); } }