/// <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="precreateResult">二维码串</param> private void DoWaitProcess(AlipayF2FPrecreateResult precreateResult) { //打印出 preResponse.QrCode 对应的条码 Bitmap bt; string enCodeString = precreateResult.response.QrCode; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; qrCodeEncoder.QRCodeScale = 3; qrCodeEncoder.QRCodeVersion = 8; bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString() + ".jpg"; bt.Save(Server.MapPath("~/images/") + filename); this.Image1.ImageUrl = "~/images/" + filename; //轮询订单结果 //根据业务需要,选择是否新起线程进行轮询 //ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery); //Thread myThread = new Thread(ParStart); //object o = precreateResult.response.OutTradeNo; //myThread.Start(o); }
/// <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 string CreateQR(AlipayF2FPrecreateResult precreateResult, bool ForTool = false) { Bitmap bt; string filePath, virtualPath; string enCodeString = precreateResult.response.QrCode; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; qrCodeEncoder.QRCodeScale = 3; qrCodeEncoder.QRCodeVersion = 8; bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString() + ".jpg"; filePath = ConfigurationManager.AppSettings["QR_F2F_FP"] + filename; if (ForTool) { filePath = "/Content/QR/Tools/" + filename; } virtualPath = filePath; filePath = System.Web.HttpContext.Current.Server.MapPath(filePath); bt.Save(filePath); if (ForTool) { return(virtualPath); } // string ds = DeQR(filePath); return(filePath); }
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> /// <param name="precreateResult">二维码串</param> private string DoWaitProcess(AlipayF2FPrecreateResult precreateResult) { //打印出 preResponse.QrCode 对应的条码 Bitmap bt; string enCodeString = precreateResult.response.QrCode; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; qrCodeEncoder.QRCodeScale = 3; qrCodeEncoder.QRCodeVersion = 8; bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); //pictureBox1.Image = bt; //string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString() // + ".jpg"; //bt.Save(Server.MapPath("~/images/") + filename); //this.Image1.ImageUrl = "~/images/" + filename; //轮询订单结果 //根据业务需要,选择是否新起线程进行轮询 ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery); Thread myThread = new Thread(ParStart); myThread.IsBackground = true; object o = precreateResult.response.OutTradeNo; myThread.Start(o); return("data:image/jpeg;base64," + ImgToBase64String(bt)); }
/// <summary> /// 生成二维码并展示到页面上 /// </summary> /// <param name="precreateResult">二维码串</param> private void DoWaitProcess(AlipayF2FPrecreateResult precreateResult) { //打印出 preResponse.QrCode 对应的条码 Bitmap bt; string enCodeString = precreateResult.response.QrCode; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; qrCodeEncoder.QRCodeScale = 3; qrCodeEncoder.QRCodeVersion = 8; bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString() + ".jpg"; string vPath = string.Format("/Images/QrCode/AliPay/{0}/{1}", DateTime.Now.ToString("yyyy-MM-dd"), filename); string pPath = WebFunctions.MapServerResourcePath(vPath); WebFunctions.CreateDirectory(pPath); bt.Save(pPath); var relativelyPath = WebFunctions.ResourceMapRoot + vPath; qrCodeUrl = WebFunctions.ToAbsoluteResourceUrl(relativelyPath.TrimStart('~')); //轮询订单结果 //根据业务需要,选择是否新起线程进行轮询 //ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery); //Thread myThread = new Thread(ParStart); //object o = precreateResult.response.OutTradeNo; //myThread.Start(o); }
/// <summary> /// 生成二维码并展示到页面上 /// </summary> /// <param name="precreateResult">二维码串</param> private void DoWaitProcess(AlipayF2FPrecreateResult precreateResult) { //打印出 preResponse.QrCode 对应的条码 Bitmap bt; string enCodeString = precreateResult.response.QrCode; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; qrCodeEncoder.QRCodeScale = 3; qrCodeEncoder.QRCodeVersion = 8; bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString() + ".jpg"; string path = System.Windows.Forms.Application.StartupPath; string folder = System.IO.Path.Combine(path, "images"); bt.Save(folder + filename); this.pictureBox1.Image = Image.FromFile(folder + filename);//"~/images/" + filename; //轮询订单结果 //根据业务需要,选择是否新起线程进行轮询 ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery); Thread myThread = new Thread(ParStart); object o = precreateResult.response.OutTradeNo; myThread.Start(o); }
public string CreateQR_ForR(AlipayF2FPrecreateResult precreateResult, ETool_QR qr) { Bitmap bt; string filePath, virtualPath; string enCodeString = precreateResult.response.QrCode; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; qrCodeEncoder.QRCodeScale = 3; qrCodeEncoder.QRCodeVersion = 8; bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString() + ".jpg"; filePath = "/Content/QR/Tools/" + filename; Bitmap bkImg = new Bitmap(160, 180); Graphics g = Graphics.FromImage(bkImg); //获取水印位置设置 ArrayList loca = new ArrayList(); int x = 0; int y = 0; x = 5; y = 6; // x = bkImg.Width / 2 - waterimg.Width / 2 - 90; // y = MainImg.Height / 2 - 260; loca.Add(x); loca.Add(y); g.DrawImage(bt, new Rectangle(int.Parse(loca[0].ToString()), int.Parse(loca[1].ToString()), 149, 149)); string s = "输入金额:" + qr.InputAmt; FontFamily ff = new FontFamily("黑体"); Font f = new Font(ff, 10); SolidBrush b = new SolidBrush(Color.Black); g.DrawString(s, f, b, 5, 155); // Bitmap finImg = ImgHelper.ImageWatermark(bkImg, bt); virtualPath = filePath; filePath = System.Web.HttpContext.Current.Server.MapPath(filePath); bkImg.Save(filePath); bkImg.Dispose(); bt.Dispose(); return(virtualPath); }
/// <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); }
//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; } }
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); }
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 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"); }
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")); }
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> /// <param name="precreateResult">二维码串</param> private void DoWaitProcess(AlipayF2FPrecreateResult precreateResult) { //打印出 preResponse.QrCode 对应的条码 Bitmap bt; string enCodeString = precreateResult.response.QrCode; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; qrCodeEncoder.QRCodeScale = 3; qrCodeEncoder.QRCodeVersion = 8; bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString() + ".jpg"; bt.Save(Server.MapPath("images/") + filename); //this.Image1.ImageUrl = "images/" + filename; Bitmap image = new Bitmap(Server.MapPath("images/") + filename); //清除该页输出缓存,设置该页无缓存 Response.Buffer = true; Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); Response.Expires = 0; Response.CacheControl = "no-cache"; Response.AppendHeader("Pragma", "No-Cache"); //将验证码图片写入内存流,并将其以"image/Jpeg" 格式输出 MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Jpeg); Response.ClearContent(); Response.ContentType = "image/Jpeg"; Response.BinaryWrite(ms.ToArray()); //轮询订单结果 //根据业务需要,选择是否新起线程进行轮询 //ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery); //Thread myThread = new Thread(ParStart); //object o = precreateResult.response.OutTradeNo; //myThread.Start(o); }
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 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"); }
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; } }
/// <summary> /// 面对面支付生成支付二维码 /// </summary> /// <param name="input">支付数据</param> /// <param name="asyncNotifyUrl">异步通知地址,为空则表示为同步轮询模式</param> /// <param name="loopQueryAction">同步轮询回调函数</param> /// <param name="fTFConfig">面对面支付其它配置</param> /// <returns></returns> private async Task <FTFOutput> FTFGenQRCode(AlipayTradePrecreateContentBuilder input, string asyncNotifyUrl, Action <AlipayF2FPrecreateResult> loopQueryAction, FTFConfig fTFConfig) { // 参数检测 var isAsyncNotify = !asyncNotifyUrl.IsNullOrWhiteSpace(); if (!isAsyncNotify && loopQueryAction == null) { throw new NullReferenceException("轮询模式下 loopQueryAction 不能为空!"); } // 收款账号检测,如果为空则默认填入全局配置的Uid if (input.seller_id.IsNullOrWhiteSpace()) { input.seller_id = this._alipayService.Options.Uid; } Bitmap bitmap = null; MemoryStream memoryStream = null; var message = string.Empty; //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 AlipayF2FPrecreateResult precreateResult = null; // 异步通知 if (isAsyncNotify) { precreateResult = await _alipayF2FService.TradePrecreateAsync(input, asyncNotifyUrl); }// 同步轮询 else { precreateResult = await _alipayF2FService.TradePrecreateAsync(input); } switch (precreateResult.Status) { case F2FResultEnum.SUCCESS: // 将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。 bitmap = RenderQrCode(precreateResult.response.QrCode); // 同步轮询模式,触发轮询回调函数 if (!isAsyncNotify) { loopQueryAction.Invoke(precreateResult); } break; case F2FResultEnum.FAILED: message = $"生成二维码失败: {precreateResult.response.Body}"; break; case F2FResultEnum.UNKNOWN: message = "生成二维码失败:" + (precreateResult.response == null ? "配置或网络异常,请检查后重试" : "系统异常,请更新外部订单后重新发起请求"); break; } // 如果位图为空,则生成错误提示二维码 if (bitmap == null) { bitmap = new Bitmap(fTFConfig == null ? this._fTFConfig?.QRCodeGenErrorImageFullPath : fTFConfig.QRCodeGenErrorImageFullPath); } // 转换成字节数组 memoryStream = new MemoryStream(); bitmap.Save(memoryStream, ImageFormat.Png); var imgBuffer = memoryStream.GetBuffer(); // 释放资源 memoryStream.Dispose(); bitmap.Dispose(); return(new FTFOutput() { QRCodeImageBuffer = imgBuffer, IsSuccess = precreateResult.Status == F2FResultEnum.SUCCESS, Message = message }); }
//获取支付宝账号的基本信息 /// <summary> /// 获取支付宝支付二维码 /// </summary> /// <param name="nonce_str">本次支付的随机字符串 注意,如果是同一次支付,则随机字符串固定32位</param> /// <param name="body">药品描述</param> /// <param name="out_trade_no">商户系统内部的订单号 需要保持唯一性</param> /// <param name="total_fee">订单总金额,单位为分</param> /// <param name="notify_url">接收支付宝支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数</param> /// /// <param name="detail">药品详情</param> /// <param name="fee_type">符合ISO 4217标准的三位字母代码,默认人民币:CNY</param> /// <returns></returns> public async Task <dynamic> Get2DCodeAsync(string nonce_str, string body, string out_trade_no, int total_fee, string notify_url, IEnumerable <GoodsInfo> detail = null, string fee_type = "CNY") { try { AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder(); //收款账号 builder.seller_id = _alipayService.Options.Uid; //订单编号 builder.out_trade_no = out_trade_no + "_ALIQR"; //订单总金额 builder.total_amount = (total_fee / 100m).ToString("#0.00");//注意支付宝的总金额是元为基准的,腾讯是分为基准的 //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = "东莞天使健康平台账单"; //自定义超时时间 builder.timeout_express = "5m"; //订单描述 builder.body = body; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = "tsjkit"; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = "admin"; //传入商品信息详情 if (detail != null && detail.Count() > 0) { builder.goods_detail = detail.ToList(); } AlipayF2FPrecreateResult precreateResult = _alipayF2FService.TradePrecreate(builder, notify_url); await Task.Delay(10); switch (precreateResult.Status) { case ResultEnum.SUCCESS: return(new { rlt = true, msg = "", code_url = precreateResult.response.QrCode, //prepay_id = precreateResult.response.sub, //trade_type = precreateResult.response., payOrderId = precreateResult.response.OutTradeNo.Replace("_ALIQR", ""), total_fee = total_fee }); case ResultEnum.FAILED: throw new Exception(precreateResult.response.Msg); case ResultEnum.UNKNOWN: throw new Exception("生成二维码失败:" + (precreateResult.response == null ? "配置或网络异常,请检查后重试" : "系统异常,请更新外部订单后重新发起请求")); default: throw new Exception("未知返回状态"); } } catch (Exception ex) { if (ex is PayException) { var exx = ex as PayException; return(new { rlt = false, msg = ex.Message, errId = exx.ExceptionId, payOrderId = out_trade_no }); } return(new { rlt = false, msg = ex.Message }); } }
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 })); } }