/// <summary> /// 获取扫码支付的二维码图片链接(将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付) /// </summary> public string GetQrCodePayLink(decimal amount, string orderNo, string subject, string body, string storeId, string operatorId) { string link = string.Empty; //组装业务参数 var model = new AlipayTradePrecreateModel() { Body = body, Subject = subject, TotalAmount = amount.ToString(), OutTradeNo = orderNo, StoreId = storeId, //商户门店编号 OperatorId = operatorId }; var request = new AlipayTradePrecreateRequest(); request.SetBizModel(model); //不推荐使用异步通知,避免单边账问题发生。推荐使用轮询撤销机制 //对所有唤起收银台的交易(支付宝返回状态10003(等待用户支付))发起轮询,并且建议轮询总时间设为30秒,轮询平均间隔设为3秒。在让用户再次支付前,必须通过查询确认当前订单的状态。 //request.SetNotifyUrl(NotifyUrl); AlipayTradePrecreateResponse response = aopClient.Execute(request); if (response != null && response.Code == "10000") { link = response.QrCode; } //记日志response.ToJson(); return(link); }
public async Task <IActionResult> PreCreate(string out_trade_no, string subject, string total_amount, string body, string notify_url = "") { var model = new AlipayTradePrecreateModel { OutTradeNo = out_trade_no, Subject = subject, TotalAmount = total_amount, Body = body }; var req = new AlipayTradePrecreateRequest(); req.SetBizModel(model); req.SetNotifyUrl(notify_url); 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)); }
public AlipayTradePrecreateResponse BuildNew(EAliPayApplication app, EStoreInfo store, EUserInfo AgentUI, string TotalAmt, bool needNotifyUrl = true, bool needControl = true) { string NotifyUrl = ConfigurationManager.AppSettings["Main_SiteUrl"] + "AliPay/PayNotify"; _OrderNo = StringHelper.GenerateOrderNo(); IAopClient aliyapClient = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app.AppId, app.Merchant_Private_Key, "json", "1.0", "RSA2", app.Merchant_Public_key, "GBK", false); AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); AlipayTradePrecreateModel model = new AlipayTradePrecreateModel(); model.SellerId = store.AliPayAccount; NLogHelper.InfoTxt("当面付OrderNo:" + _OrderNo); model.OutTradeNo = _OrderNo; model.TotalAmount = TotalAmt; model.Subject = "#" + AgentUI.Name + " 收银台"; model.Body = app.AppName + "-商品"; model.ExtendParams = new Aop.Api.Domain.ExtendParams(); model.ExtendParams.SysServiceProviderId = app.AppId; if (needControl) { model.DisablePayChannels = "balance,moneyFund,creditCard,creditCardExpress,creditCardCartoon,debitCardExpress,point,bankPay"; } request.SetBizModel(model); if (needNotifyUrl) { request.SetNotifyUrl(NotifyUrl); } AlipayTradePrecreateResponse response = aliyapClient.Execute(request, null, store.AliPayAuthToke); return(response); }
public AlipayTradePrecreateResponse BuildPartyPay(EAliPayApplication app, EStoreInfo store, EUserInfo AgentUI, string TotalAmt, bool needNotifyUrl = true) { string NotifyUrl = ConfigurationManager.AppSettings["Main_SiteUrl"] + "AliPay/PayNotify"; _OrderNo = StringHelper.GenerateOrderNo(); IAopClient aliyapClient = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app.AppId, app.Merchant_Private_Key, "json", "1.0", "RSA2", app.Merchant_Public_key, "GBK", false); AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); AlipayTradePrecreateModel model = new AlipayTradePrecreateModel(); model.SellerId = store.AliPayAccount; model.OutTradeNo = _OrderNo; model.TotalAmount = TotalAmt; model.Subject = "#" + AgentUI.Name + " 收银台"; model.Body = app.AppName + "-商品"; model.ExtendParams.HbFqNum = "3"; model.ExtendParams.HbFqSellerPercent = "0"; request.SetBizModel(model); if (needNotifyUrl) { request.SetNotifyUrl(NotifyUrl); } AlipayTradePrecreateResponse response = aliyapClient.Execute(request, null, store.AliPayAuthToke); return(response); }
public async Task <IActionResult> PreCreate(AlipayTradePreCreateViewModel viewModel) { if (_Interceptor != null) { return(Ok("this is _Interceptor")); } var model = new AlipayTradePrecreateModel { OutTradeNo = viewModel.OutTradeNo, Subject = viewModel.Subject, TotalAmount = viewModel.TotalAmount, Body = viewModel.Body }; var req = new AlipayTradePrecreateRequest(); req.SetBizModel(model); req.SetNotifyUrl(viewModel.NotifyUrl); //var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value); var response = await _client.ExecuteAsync(req, _optionsAccessor.Value); ViewData["qrcode"] = response.QrCode; ViewData["response"] = response.Body; return(View()); }
//扫码支付 public override async Task <AlipayReponse> ExecuteAsync(TradeModel request, ServerCallContext context) { var model = new AlipayTradePrecreateModel { OutTradeNo = request.OutTradeNo, Subject = request.Subject, TotalAmount = request.TotalAmount, Body = request.Body }; var req = new AlipayTradePrecreateRequest(); req.SetBizModel(model); req.SetNotifyUrl("http://domain.com/alipay/notify/precreate"); var response = await _client.ExecuteAsync(req, _optionsAccessor.Value); return(new AlipayReponse { Message = response.Body, Qrcode = response.QrCode }); //return base.ExecuteAsync(request, context); }
/// <summary> /// 获取扫码支付的二维码图片链接 /// </summary> /// <param name="orderNo">商户订单号,64个字符以内、只能包含字母、数字、下划线;需保证在商户端不重复</param> /// <param name="amount">订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】</param> /// <param name="subject">订单标题</param> /// <param name="body">商品描述信息</param> /// <param name="storeId">商户门店编号</param> /// <returns></returns> public string GetQrCodeUrl(string orderNo, decimal amount, string subject, string body, string storeId) { string link = string.Empty; //组装业务参数 var model = new AlipayTradePrecreateModel() { Body = body, Subject = subject, TotalAmount = amount.ToString(), OutTradeNo = orderNo, StoreId = storeId //商户门店编号 }; var request = new AlipayTradePrecreateRequest(); request.SetBizModel(model); request.SetNotifyUrl(NotifyUrl); AlipayTradePrecreateResponse response = aopClient.Execute(request); if (response != null && response.Code == "10000") { link = response.QrCode; } return(link); }
/// <summary> /// 预付统一下单 /// </summary> /// <param name="request">提交给统一下单API的参数</param> /// <param name="config"></param> /// <param name="accessToken">用户授权码</param> /// <param name="timeOut">超时时间</param> /// <returns>成功时返回,其他抛异常</returns> public static async Task <AlipayTradePrecreateResponse> CreateOrderAsync(AlipayTradePrecreateModel request, AlipayConfig config, string accessToken = null, 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 AlipayTradePrecreateRequest(); requestData.SetNotifyUrl(config.NotifyUrl); requestData.SetBizModel(request); return(await client.ExecuteAsync(requestData, accessToken)); }
public async Task <IActionResult> PreCreate(string out_trade_no, string subject, string total_amount, string body, string notify_url) { var model = new AlipayTradePrecreateModel() { Body = body, Subject = subject, TotalAmount = total_amount, OutTradeNo = out_trade_no, }; var req = new AlipayTradePrecreateRequest(); req.SetBizModel(model); req.SetNotifyUrl(notify_url); var response = await _client.ExecuteAsync(req); return(Ok(response.Body)); }
// 当面付/扫码支付 public async Task <AlipayTradePrecreateResponse> PreCreate(PayRequest request) { var order = OrderService.Get(request.Id); var model = new AlipayTradePrecreateModel { OutTradeNo = order.Order_SN, Subject = order.Name, TotalAmount = order.Order_Money.ToString("n"), Body = order.Remark }; var req = new AlipayTradePrecreateRequest(); req.SetBizModel(model); req.SetNotifyUrl(request.NotifyUrl); return(await client.ExecuteAsync(req, options.Value)); }
public async Task <IActionResult> PreCreate(AlipayTradePreCreateViewModel viewModel) { var model = new AlipayTradePrecreateModel() { OutTradeNo = viewModel.OutTradeNo, Subject = viewModel.Subject, TotalAmount = viewModel.TotalAmount, Body = viewModel.Body, }; var req = new AlipayTradePrecreateRequest(); req.SetBizModel(model); req.SetNotifyUrl(viewModel.NotifyUrl); var response = await _client.ExecuteAsync(req); ViewData["qrcode"] = response.QrCode; ViewData["response"] = response.Body; return(View()); }
public ActionResult FaceToPay(string orderName, string orderAmount, string outTradeNo, bool pin = false) { //域名 IAopClient client = new DefaultAopClient(URL, APPID, APP_PRIVATE_KEY, FORMAT, "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如: AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类 //SDK已经封装掉了公共参数,这里只需要传入业务参数 Random ran = new Random(); int RandKey = ran.Next(100, 999); AlipayTradePayModel model = new AlipayTradePayModel { OutTradeNo = outTradeNo + RandKey, TotalAmount = orderAmount, Subject = orderName, //StoreId = "NJ_001", TimeoutExpress = "90m" }; request.SetBizModel(model); //此次只是参数展示,未进行字符串转义,实际情况下请转义 //request.BizContent = "{" + // " \"out_trade_no\":\"20150320010101002\"," + // " \"total_amount\":\"88.88\"," + // " \"subject\":\"Iphone6 16G\"," + // " \"store_id\":\"NJ_001\"," + // " \"timeout_express\":\"90m\"}"; AlipayTradePrecreateResponse response = client.Execute(request); AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(model.Subject, model.TotalAmount, model.OutTradeNo); //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 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即二维码对于的链接 //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。 var bitmap = new Bitmap(Path.Combine(_hostingEnvironment.WebRootPath, "images/error.png")); //调用成功,则处理业务逻辑 if (!response.IsError) { bitmap.Dispose(); bitmap = RenderQrCode(response.QrCode); //轮询订单结果 //根据业务需要,选择是否新起线程进行轮询 ParameterizedThreadStart parStart = new ParameterizedThreadStart(LoopQuery); //Thread myThread = new Thread(parStart); //object o = precreateResult.response.OutTradeNo; //myThread.Start(o); var res = new { success = true, out_trade_no = response.OutTradeNo, tot = model.TotalAmount, suj = model.Subject, qr_code = response.QrCode //发现返回的是一个网址,后续需要用这个网址字符串创建二维码 }; if (pin) { return(Json(res)); } else { MemoryStream ms = new MemoryStream(); bitmap.Save(ms, ImageFormat.Png); byte[] bytes = ms.GetBuffer(); return(File(bytes, "image/png")); } } else { //return Content("调用失败,原因:" + response.Msg + "," + response.SubMsg); var res = new { success = false, }; return(Json(res)); } ////以下返回结果的处理供参考。 ////payResponse.QrCode即二维码对于的链接 ////将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付 //var bitmap = new Bitmap(Path.Combine(_hostingEnvironment.WebRootPath, "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(); //return File(bytes, "image/png"); }