public void Test1() { var config = new AlipayConfig { NotifyUrl = "", AppId = "", PrivateKey = "", AliPublicKey = "" }; var request = new AlipayTradeAppPayModel { Body = "产品", Subject = "产品", OutTradeNo = "202007297777", TimeoutExpress = "15m", TotalAmount = $"{10:0.##}", ProductCode = AlipayConstants.QUICK_MSECURITY_PAY }; var response = AlipayClient.CreateOrder(request, config); if (string.IsNullOrEmpty(response.Body)) { Assert.Fail(); } else { Assert.Pass(); } }
/// <summary> /// 生成RSA签名后的订单字符串,给客户端用的 /// </summary> /// <param name="body"></param> /// <param name="subject"></param> /// <param name="out_trade_no"></param> /// <param name="timeout_express"></param> /// <param name="total_amount"></param> /// <param name="product_code"></param> /// <param name="notify_url"></param> /// <returns></returns> public static string CreateRSASignedOrderString(string body, string subject, string out_trade_no, string timeout_express, string total_amount) { //从pem文件中读取 APP_PRIVATE_KEY = GetCurrentPathByAbs() + "rsa_private_key.pem"; ALIPAY_PUBLIC_KEY = GetCurrentPathByAbs() + "rsa_alipay_public_key.pem"; //最后一个参数为false直接将私钥内容写入代码,true从pem文件中读取 IAopClient client = new DefaultAopClient(gateway, APPID, APP_PRIVATE_KEY, format, version, sign_type, ALIPAY_PUBLIC_KEY, CHARSET, true); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = body; model.Subject = subject; model.TotalAmount = total_amount; model.ProductCode = product_code; model.OutTradeNo = out_trade_no; model.TimeoutExpress = timeout_express; request.SetBizModel(model); request.SetNotifyUrl(notify_url); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); string resp = response.Body; return(resp); }
public ApiMessage <string> Alipay(PayModel pm) { var api = new ApiMessage <string>(); IAopClient client = new DefaultAopClient(URL, APPID, APP_PRIVATE_KEY, "json", "1.0", RSA2, ALIPAY_PUBLIC_KEY, CHARSET, false); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); var res = bll.CkeckData(pm, UserInfo); if (!res.Success) { api.Success = false; api.Msg = res.Msg; return(api); } var oData = res.Data; model.Body = oData.Body; model.Subject = oData.Subject; model.TotalAmount = oData.TotalAmount.ToString(); model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = oData.OutTradeNo; AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); request.SetBizModel(model); request.SetNotifyUrl(ConfigHelper.WebSiteUrl + "/api/payment/updateorder/alipay"); AlipayTradeAppPayResponse response = client.SdkExecute(request); api.Data = response.Body; return(api); }
public string appid = ConfigurationManager.AppSettings["aliAppId"];//应用2.0签约2017120190774565 #endregion /// <summary> /// .NET服务端SDK生成APP支付订单信息示例 /// </summary> /// //.NET服务端SDK生成APP支付订单信息示例(https://docs.open.alipay.com/54/106370/)根据文档上的说法,这样就行了。 /// <summary> /// 这个行了 /// </summary> /// <param name="totalAmount"></param> /// <param name="outTradeNo"></param> /// <param name="notifyUrl"></param> /// <returns></returns> public string CreateAlipayOrder(string totalAmount, string outTradeNo, string notifyUrl) { IAopClient client = new DefaultAopClient(gateway, appid, app_private_key, "json", "1.0", "RSA2", alipay_public_key, charset, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 request.SetApiVersion("1.0"); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "body"; model.Subject = "App支付"; model.TotalAmount = totalAmount; model.ProductCode = "QUICK_MSECURITY_PAY"; //订单号 model.OutTradeNo = outTradeNo; model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl(notifyUrl); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 var a = response.Body; return(response.Body); //return HttpUtility.HtmlEncode(response.Body).Replace("&","&"); //Response.Write(HttpUtility.HtmlEncode(response.Body)); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 }
/// <summary> /// 获取APP支付参数 /// </summary> public string GetAppPayParameter(decimal amount, string orderNo, string subject, string body, string passbackParams = null) { string parameter = string.Empty; //组装业务参数 var model = new AlipayTradeAppPayModel() { TotalAmount = amount.ToString(), OutTradeNo = orderNo, Subject = subject, Body = body, ProductCode = ProductCode, PassbackParams = passbackParams.IsNullOrEmpty() ? passbackParams : HttpUtility.UrlEncode(passbackParams) }; //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay var request = new AlipayTradeAppPayRequest(); request.SetBizModel(model); request.SetNotifyUrl(NotifyUrl); AlipayTradeAppPayResponse response = aopClient.SdkExecute(request); if (response != null && response.Code == "10000") { parameter = response.Body; } Console.WriteLine(response.ToJson()); //记日志response.ToJson(); return(parameter); }
public ActionResult AlipayOrder(string orderNo) { IAopClient client = new DefaultAopClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.APP_PRIVATE_KEY, "json", "1.0", "RSA", AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, true); ////实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "我是测试数据"; model.Subject = "App支付测试DoNet"; model.TotalAmount = "0.01"; model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = "sadfa" + DateTime.Now.ToString("yyyyMMddHHmmssfff"); // model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl(AlipayConfig.NOTIFY_URL); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); return(Json(new ResultMessage() { Code = 0, Msg = HttpUtility.HtmlEncode(response.Body) })); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 // Response.Write(HttpUtility.HtmlEncode(response.Body)); //log4netHelper.Info(string.Format("支付宝订单参数:{0}", HttpUtility.HtmlDecode(response.Body))); //bool flag = AlipaySignature.RSACheckV1(GetRequestPost(), AlipayConfig.APP_PUBLIC_KEY, AlipayConfig.CHARSET, "RSA", false); //log4netHelper.Info(string.Format("验签结果:{0}", flag)); //return Json(new Result(0, HttpUtility.HtmlEncode(response.Body))); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 }
/// <summary> /// 生成APP支付订单信息 /// </summary> /// <returns></returns> public static string GetAlipayOrderInfo(decimal amount, string orderNumber) { IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", Config.APPID, Config.APP_PRIVATE_KEY, "json", "1.0", "RSA2", Config.ALIPAY_PUBLIC_KEY, Config.CHARSET, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "订单付款{0}".FormatWith(orderNumber); model.Subject = "五福天下商城订单付款"; model.TotalAmount = amount.ToString(); model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = orderNumber; model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl("http://m.wftx666.com"); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 //return HttpUtility.HtmlEncode(response.Body); return(response.Body); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 }
public async Task <IActionResult> AppPay(string out_trade_no, string subject, string total_amount, string body, string product_code, string notify_url = "") { var model = new AlipayTradeAppPayModel { OutTradeNo = out_trade_no, Subject = subject, ProductCode = product_code, TotalAmount = total_amount, Body = body }; var req = new AlipayTradeAppPayRequest(); req.SetBizModel(model); req.SetNotifyUrl(notify_url); var response = await _client.SdkExecuteAsync(req); //将response.Body给 ios/android端 由其去调起支付宝APP(https://docs.open.alipay.com/204/105296/ https://docs.open.alipay.com/204/105295/) ResponseModel responseModel = new ResponseModel() { code = HTTPResponseCode.PartialContent, data = response.Body }; if (response.IsError) { responseModel.code = HTTPResponseCode.BadRequest; responseModel.message = response.Msg; } else { responseModel.code = HTTPResponseCode.Successful; } return(Json(responseModel)); }
/// <summary> /// 支付宝新版APP参数生成 /// </summary> /// <param name="orderNo">订单号</param> /// <param name="subject">订单标题</param> /// <param name="body">订单内容</param> /// <param name="payAmount">金额(元)</param> /// <param name="timeoutMinute">请求超时时间</param> /// <returns></returns> public string BuildAppParam(string orderNo, string subject, string body, decimal payAmount, int timeoutMinute) { var appId = System.Configuration.ConfigurationManager.AppSettings["ALIPAY_APPID"]; var privatePem = System.Configuration.ConfigurationManager.AppSettings["ALIPay_RSA2_PRIVATEKEY"]; var aliPublishPem = System.Configuration.ConfigurationManager.AppSettings["ALIPay_RSA2_ALI_PUBLICKEY"]; IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", appId, privatePem, "json", "1.0", "RSA2", aliPublishPem, "utf-8", false);//改成RSA,方便异步回调验签 AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = body; model.Subject = subject; model.TotalAmount = payAmount.ToString("0.00"); model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = orderNo; model.TimeoutExpress = timeoutMinute + "m"; request.SetBizModel(model); request.SetNotifyUrl(System.Configuration.ConfigurationManager.AppSettings["ALIPay_NotifyURL"]); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); if (response != null && !response.IsError) { return(response.Body); } else { return("error"); } }
public object getAliMiniAppPaySign(Dictionary <string, object> dicParas) { try { int coins = 0; string orderNo = string.Empty; string errMsg = string.Empty; string mobileToken = dicParas.ContainsKey("mobileToken") ? dicParas["mobileToken"].ToString() : string.Empty; string storeId = dicParas.ContainsKey("storeId") ? dicParas["storeId"].ToString() : string.Empty; string productName = dicParas.ContainsKey("productName") ? dicParas["productName"].ToString() : string.Empty; string payPriceStr = dicParas.ContainsKey("payPrice") ? dicParas["payPrice"].ToString() : string.Empty; string buyType = dicParas.ContainsKey("buyType") ? dicParas["buyType"].ToString() : string.Empty; string coinsStr = dicParas.ContainsKey("coins") ? dicParas["coins"].ToString() : string.Empty; decimal payPrice = 0; if (!decimal.TryParse(payPriceStr, out payPrice)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付金额不正确")); } if (!int.TryParse(coinsStr, out coins)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "购买币数不正确")); } MobileTokenModel mobileTokenModel = (MobileTokenModel)(dicParas[Constant.MobileTokenModel]); //生成服务器订单号 orderNo = PayOrderHelper.CreateXCGameOrderNo(storeId, payPrice, 0, (int)(OrderType.Ali), productName, mobileTokenModel.Mobile, buyType, coins); IAopClient client = new DefaultAopClient(AliPayConfig.serverUrl, AliPayConfig.miniAppId, AliPayConfig.merchant_miniapp_private_key, "json", "1.0", "RSA2", AliPayConfig.alipay_miniapp_public_key, AliPayConfig.charset, false); AlipayTradeAppPayModel builder = new AlipayTradeAppPayModel(); builder.Body = "莘拍档-" + buyType; builder.Subject = productName; builder.OutTradeNo = orderNo; builder.TotalAmount = payPrice.ToString("0.00"); builder.ProductCode = "QUICK_MSECURITY_PAY"; builder.TimeoutExpress = "10m"; AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); request.SetBizModel(builder); request.SetNotifyUrl(AliPayConfig.AliMiniAppNotify_url); AlipayTradeAppPayResponse response = client.SdkExecute(request); //string strSign = HttpUtility.HtmlEncode(response.Body); AlipayMiniAppSignModel model = new AlipayMiniAppSignModel(); model.OrderId = orderNo; model.PaySign = response.Body; return(ResponseModelFactory <AlipayMiniAppSignModel> .CreateModel(isSignKeyReturn, model)); } catch (Exception e) { throw e; } }
/// <summary> /// App统一下单 /// </summary> /// <param name="request">提交给统一下单API的参数</param> /// <param name="config"></param> /// <param name="timeOut">超时时间</param> /// <returns>成功时返回,其他抛异常</returns> public static AlipayTradeAppPayResponse CreateOrder(AlipayTradeAppPayModel request, AlipayConfig config, int timeOut = 6) { IAopClient client = new AopClient(AlipayConstants.GATEWAYURL, config.AppId, config.PrivateKey, config.Format, config.Version, config.SignType, config.AliPublicKey, config.Charset, config.KeyFromFile); var requestData = new AlipayTradeAppPayRequest(); requestData.SetNotifyUrl(config.NotifyUrl); requestData.SetBizModel(request); return(client.SdkExecute(requestData)); }
/// <summary> /// 订单编号 /// </summary> /// <param name="oidStr"></param> /// <returns></returns> public ActionResult AliPay(string oidStr) { #region 验证订单有效 if (string.IsNullOrEmpty(oidStr)) { return(Json(false, "OrderError")); } //int[] oIds = Serialize.JsonTo<int[]>(oidStr); decimal payPrice = 0.01M; ///订单验证,统计订单总金额 #endregion #region 统一下单 try { var notify_url = WeixinConfig.notify_url; var return_url = WeixinConfig.return_url; IAopClient client = Utility.AliPay.AliPay.GetAlipayClient(); AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Subject = "商品购买"; model.TotalAmount = payPrice.ToString("F2"); model.ProductCode = "QUICK_MSECURITY_PAY"; Random rd = new Random(); var payNum = DateTime.Now.ToString("yyyyMMddHHmmss") + rd.Next(0, 1000).ToString().PadLeft(3, '0'); model.OutTradeNo = payNum; model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl(notify_url); //request.SetReturnUrl(return_url); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //统一下单 //OrderBll.Value.UpdateOrderApp(oIds, payNum); //return Json(true, new {response.Body}, "OK"); return(null); } catch (Exception ex) { return(Json(new { Result = false, msg = "缺少参数" })); } #endregion }
/// <summary> /// 获取APP支付宝支付订单参数 /// </summary> /// <param name="orderCode">平台订单号</param> /// <param name="money">金额</param> /// <param name="timeOut">订单支付超时时间</param> /// <returns></returns> private ApiResultModel <string> GetAppAliPayParam(string orderCode, decimal money, int?timeOut) { IAopClient client = new DefaultAopClient(AliPayConfig.gatewayUrl, AliPayConfig.AppId, AliPayConfig.privatekey, "json", "1.0", AliPayConfig.sign_type, AliPayConfig.alipublickey, AliPayConfig.charset, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel pmodel = new AlipayTradeAppPayModel { Subject = Subject, TotalAmount = decimal.Round(money, 2).ToString("f2"), ProductCode = "QUICK_MSECURITY_PAY", OutTradeNo = orderCode, // TimeoutExpress = "30m" TimeoutExpress = (timeOut ?? PayTimeOut).ToString() + "m", }; request.SetBizModel(pmodel); request.SetNotifyUrl(NotifyUrl); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = null; var reqTime = DateTime.Now; //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 try { response = client.SdkExecute(request); //记录支付宝调用的日志 //WritePostThirdApi(ThirdPlatformBusinessType.Payment, orderCode, ThirdPlatformType.Alipay, AliPayConfig.gatewayUrl, request.ToJsonString(), reqTime, response.Body, DateTime.Now, true); } catch (Exception ex) { //LogHelper.LogError("提交支付宝预付款订单 SubmitPay", ex.ToString()); ////记录支付宝调用的日志 //WritePostThirdApi(ThirdPlatformBusinessType.Payment, orderCode, ThirdPlatformType.Alipay, AliPayConfig.gatewayUrl, request.ToJsonString(), reqTime, // response.IsNull() ? ex.ToString() : response.Body, DateTime.Now, true); } var res = new ApiResultModel <string>() { Code = ApiResultCode.Success, Message = response.Body }; return(res); }
private void btnCreateOrder_Press(object sender, EventArgs e) { if (string.IsNullOrEmpty(tradeNo) == true) { btnOutOrder_Press(null, null); } IAopClient client = GetAPOClient(); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "请支持0.01元"; //支付描述 model.Subject = "支付"; //支付标题 model.TotalAmount = "0.01"; //支付金额 model.ProductCode = "QUICK_MSECURITY_PAY"; //产品码 model.OutTradeNo = tradeNo; //外部编号,外部编号在支付成功时,只能使用一次 model.TimeoutExpress = "30m"; //超时时间 request.SetBizModel(model); //有条件可设置回调地址,支付宝在支付完成后会POST此地址。或通过查询的方式。 //request.SetNotifyUrl(""); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 System.Diagnostics.Debug.WriteLine(response.Body); //注意,第一个参数是苹果支付需要的格式为ap应用编号,android可设置为空 this.aliPay1.AppPay("ap" + appid, response.Body, (obj, args) => { if (args.isError == true) { MessageBox.Show(args.error); } else { string result = ""; foreach (KeyValuePair <string, object> item in args.result) { result += string.Format("{0}/{1}" + Environment.NewLine, item.Key, item.Value); } MessageBox.Show(result); } }); }
public Dictionary <string, string> BuildPayParams() { IAopClient alipayClient = GetAopClient(); AlipayTradeAppPayRequest alipayRequest = new AlipayTradeAppPayRequest(); alipayRequest.SetReturnUrl(Merchant.ReturnUrl.ToString()); alipayRequest.SetNotifyUrl(Merchant.NotifyUrl.ToString()); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Subject = Order.Subject; model.OutTradeNo = Order.OrderNo; model.TimeoutExpress = "30m"; model.TotalAmount = Order.OrderAmount.ToString(); model.ProductCode = "QUICK_MSECURITY_PAY"; alipayRequest.SetBizModel(model); Dictionary <string, string> resParam = new Dictionary <string, string>(); resParam.Add("body", alipayClient.pageExecute(alipayRequest).Body); return(resParam); }
public async Task <IActionResult> AppPay(AlipayTradeAppPayViewModel viewModel) { var model = new AlipayTradeAppPayModel { OutTradeNo = viewModel.OutTradeNo, Subject = viewModel.Subject, ProductCode = viewModel.ProductCode, TotalAmount = viewModel.TotalAmount, Body = viewModel.Body }; var req = new AlipayTradeAppPayRequest(); req.SetBizModel(model); req.SetNotifyUrl(viewModel.NotifyUrl); var response = await _client.SdkExecuteAsync(req, _optionsAccessor.Value); //将response.Body给 ios/android端 由其去调起支付宝APP(https://docs.open.alipay.com/204/105296/ https://docs.open.alipay.com/204/105295/) return(Ok(response.Body)); }
/// <summary> /// 创建Sdk支付链接串(蚂蚁金服) /// </summary> /// <param name="directInfo">支付信息</param> /// <param name="config">config</param> /// <returns>请求连接</returns> public static string CreateDirectSdkPayByUser(DirectInfo directInfo, SdkPay.Config config) { const string url = SdkPay.Config.ServerUrl; string appId = config.GetAppId(); string privateKeyPem = config.GetPrivateKeyPem(); const string format = SdkPay.Config.Format; const string version = SdkPay.Config.Version; const string signType = SdkPay.Config.SignType; string publicKeyPem = config.GetPublicKeyPem(); const string charset = SdkPay.Config.Charset; const string productCode = SdkPay.Config.ProductCode; string pid = config.GetPid(); IAopClient client = new DefaultAopClient(url, appId, privateKeyPem, format, version, signType, publicKeyPem, charset, false); AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); if (!string.IsNullOrWhiteSpace(directInfo.Notify)) { request.SetNotifyUrl(directInfo.Notify); } if (!string.IsNullOrWhiteSpace(directInfo.Return)) { request.SetReturnUrl(directInfo.Return); } AlipayTradeAppPayModel model = new AlipayTradeAppPayModel { Body = directInfo.ExtraCommonParam, Subject = directInfo.Subject, TotalAmount = directInfo.TotalFee.ToString("0.00"), ProductCode = productCode, OutTradeNo = directInfo.OutTradeNo, TimeoutExpress = "30m", SellerId = pid }; request.SetBizModel(model); AlipayTradeAppPayResponse response = client.SdkExecute(request); var body = response.Body; return(body); }
public string GeneratePayInfo(string subject, string totalAmount) { var config = ConfigUtil.GetConfig <DataApiAppSettings>("AppSettings"); IAopClient client = new DefaultAopClient(config.AlipayServer, config.AlipayAppId, config.AlipayPrivateKey, "json", "1.0", "RSA2", config.AlipayPublicKey, "UTF-8", false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "惠及万家支付"; model.Subject = subject; model.TotalAmount = totalAmount; model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = PrimaryKey.Current.ID.ToString(); model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl(config.AlipayNotifyUrl); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); return(response.Body); }
// APP支付(集成SDK) public async Task <AlipayTradeAppPayResponse> AppPay(PayRequest request) { var order = OrderService.Get(request.Id); var model = new AlipayTradeAppPayModel { OutTradeNo = order.Order_SN, Subject = order.Name, TotalAmount = order.Order_Money.ToString("n"), Body = order.Remark, ProductCode = request.ProduceCode ?? "QUICK_MSECURITY_PAY" }; var req = new AlipayTradeAppPayRequest(); req.SetBizModel(model); req.SetNotifyUrl(request.NotifyUrl); // 将response.ResponseBody ios/android端 由其去调起支付宝APP // https://docs.open.alipay.com/204/105296/ // https://docs.open.alipay.com/204/105295/ return(await client.SdkExecuteAsync(req, options.Value)); }
/// <summary> /// 生成APP支付订单信息 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <ResultDto> GetPayInfo(GetPayInfoInput input) { var request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 var model = new AlipayTradeAppPayModel(); model.Body = "报名费用。"; model.Subject = "报名缴费"; model.TotalAmount = "0.00"; model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = "123456"; model.TimeoutExpress = "15m"; request.SetNotifyUrl(ServerPath + "/Handlers/AlipayNotify.ashx"); request.SetBizModel(model); //这里和普通的接口调用不同,使用的是sdkExecute var response = _client.SdkExecute(request); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 return(new ResultDto { Code = 0, Message = "生成APP支付订单信息", Data = HttpUtility.HtmlEncode(response.Body).Replace("amp;", "") }); }
public ApiResult GetZfbInfo(int money) { var zFBResDto = new ZFBResDto(); zFBResDto.OrderId = GetRandom(); if (_service.AddComeOutRecord(zFBResDto.OrderId, money, 2, (int)this.UserInfo.UserId)) { notifyUrl = ApiHost + "/api/Recharge/AsyncPay"; LogHelper.Info("notifyUrl=" + notifyUrl); IAopClient client = new DefaultAopClient(apiUrl, app_id, merchant_private_key, format, version, sign_type, alipay_public_key, charset, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "金币充值"; model.Subject = "金币充值"; model.TotalAmount = money.ToString(); model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = zFBResDto.OrderId; model.TimeoutExpress = "5m"; request.SetBizModel(model); request.SetNotifyUrl(notifyUrl); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 zFBResDto.ResponseBody = response.Body; //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 var result = new ApiResult <ZFBResDto>(); result.Data = zFBResDto; return(result); } else { return(new ApiResult(10000, "生成订单失败")); } }
/// <summary> /// APP支付 /// </summary> /// <param name="input"></param> /// <returns></returns> public Task <AppPayOutput> AppPay(AppPayInput input) { var client = GetClient(); var request = new AlipayTradeAppPayRequest(); var model = new AlipayTradeAppPayModel { Body = input.Body, DisablePayChannels = input.DisablePayChannels, EnablePayChannels = input.EnablePayChannels, //ExtendParams = input.ex GoodsType = input.GoodsType, OutTradeNo = input.TradeNo ?? Guid.NewGuid().ToString("N"), PassbackParams = WebUtility.UrlEncode(input.PassbackParams), ProductCode = "QUICK_MSECURITY_PAY", PromoParams = input.PromoParams, //SpecifiedChannel StoreId = input.StoreId, Subject = input.Subject, TimeoutExpress = input.TimeoutExpress, TotalAmount = input.TotalAmount.ToString() }; request.SetBizModel(model); request.SetNotifyUrl(input.NotifyUrl ?? alipaySettings.Notify); var response = client.SdkExecute(request); if (response.IsError) { LoggerAction?.Invoke("Error", "支付宝支付请求参数错误:" + JsonConvert.SerializeObject(model)); throw new AlipayExcetion("支付宝支付请求参数错误,请检查!"); } return(Task.FromResult(new AppPayOutput { Response = response })); }
public async Task <IActionResult> AppPay(AlipayTradeAppPayViewModel viewModel) { var model = new AlipayTradeAppPayModel { OutTradeNo = viewModel.OutTradeNo, Subject = viewModel.Subject, ProductCode = viewModel.ProductCode, TotalAmount = viewModel.TotalAmount, Body = viewModel.Body }; var req = new AlipayTradeAppPayRequest(); req.SetBizModel(model); req.SetNotifyUrl(viewModel.NotifyUrl); var response = await _client.SdkExecuteAsync(req, _optionsAccessor.Value); // 将response.Body给 ios、android端,由其去完成调起支付宝APP。 // 客户端 Android 集成流程: https://opendocs.alipay.com/open/204/105296/ // 客户端 iOS 集成流程: https://opendocs.alipay.com/open/204/105295/ ViewData["response"] = response.Body; return(View()); }
public void should_return_correct_signed_order_string() { IAopClient client = new DefaultAopClient(TestAccount.Sandbox.Gateway, TestAccount.Sandbox.AppId, TestAccount.Sandbox.AppPrivateKey, "json", "1.0", "RSA2", TestAccount.Sandbox.AlipayPublicKey, "utf-8", false); AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "我是测试数据"; model.Subject = "App支付测试DoNet"; model.TotalAmount = "0.01"; model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = "20170216test01"; model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl("http://www.test.notify"); AlipayTradeAppPayResponse response = client.SdkExecute(request); String orderString = response.Body; // 必须拥有正确的签名串 Assert.AreEqual(orderString.Contains("&sign="), true); }
/// <summary> /// 请求支付参数:https://docs.open.alipay.com/204/105465/ /// </summary> /// <returns>客户端向安卓层(支付宝客户端SDK)请求的字符串</returns> public string GetAliPayParameter(AlipayTradeAppPayModel alipaymode) { if (client == null) { client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", appid, APP_Private_Key, "JSON", "1.0", "RSA2", AliPay_Public_Key, "UTF-8", false); } //参数对照: https://docs.open.alipay.com/204/105465/ //用于请求的对象 request = new AlipayTradeAppPayRequest(); request.SetBizModel(alipaymode); //请求的数据模型 request.SetNotifyUrl(aliPayResultListenerUrl); //设置支付结果通知的地址 //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //(不用理这句注释)HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 //通过Body获取到返回的参数 return(response.Body); }
public void ProcessRequest(HttpContext context) { HttpRequest req = context.Request; Stream stream = req.InputStream; if (stream.Length != 0) { var OutTradeNo = req["out_trade_no"]; var TotalAmount = req["total_fee"]; string APPID = AlipayConstants.app_id; string APP_PRIVATE_KEY = AlipayConstants.private_key; string ALIPAY_PUBLIC_KEY = AlipayConstants.alipay_public_key; string CHARSET = "utf-8"; IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", APPID, APP_PRIVATE_KEY, "json", "1.0", "RSA", ALIPAY_PUBLIC_KEY, CHARSET, false); AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "微特众包-商家充值"; model.Subject = "微特众包-商家充值"; model.TotalAmount = TotalAmount; model.ProductCode = "1"; model.OutTradeNo = OutTradeNo; model.TimeoutExpress = "30m"; request.SetNotifyUrl(AlipayConstants.notify_url); request.SetBizModel(model); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 context.Response.Write(HttpUtility.HtmlEncode(response.Body)); //context.Response.Write(response.Body); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 } else { context.Response.Write(""); } }
private static readonly string AlipayPublicKey = AliPayConfig.AlipayPublicKey; //支付宝公钥 /// <summary> /// 签名订单 /// </summary> /// <param name="body">订单描述</param> /// <param name="subject">商品标题</param> /// <param name="totalAmount">订单总金额</param> /// <param name="outTradeNo">订单号</param> /// <param name="passbackParams">公共回传参数</param> /// <returns>签名</returns> public static string Signature(string body, string subject, string totalAmount, string outTradeNo, string passbackParams) { IAopClient client = new DefaultAopClient(ServerUrl, AppId, AppPrivateKey, "json", "1.0", SignType, AlipayPublicKey, Charset, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel almodel = new AlipayTradeAppPayModel(); almodel.Body = body; almodel.Subject = subject; almodel.TotalAmount = String.Format("{0:0.00}", totalAmount); almodel.ProductCode = "QUICK_MSECURITY_PAY"; almodel.OutTradeNo = outTradeNo; almodel.TimeoutExpress = "30m"; almodel.PassbackParams = System.Web.HttpUtility.UrlEncode(passbackParams); request.SetBizModel(almodel); request.SetNotifyUrl(NotifyUrl); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 return(response.Body); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 }
/// <summary> /// app支付 /// </summary> /// <param name="orderName">订单名称</param> /// <param name="orderAmount">订单金额</param> /// <param name="outTradeNo">订单号</param> /// <returns></returns> public ActionResult ScanCodeGen(string orderName, string orderAmount, string outTradeNo) { IAopClient client = new DefaultAopClient(Config.gatewayUrl, Config.app_id, Config.private_key, "json", "1.0", "RSA2", Config.alipay_public_key, "utf-8", false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "我是测试数据"; model.Subject = orderName; model.TotalAmount = orderAmount; model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = "20170216test01"; model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl("http://19171zn332.imwork.net:22070/AppPay/Notify"); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 // Response.Write(HttpUtility.HtmlEncode(response.Body)); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 return(Json(response.Body)); }
public Return AliPay(AliPayPicture payModel) { var resultReturn = new Return(); var orderId = Guid.NewGuid().ToString(); var countAmout = payModel.Description * Convert.ToDecimal( System.Configuration.ConfigurationManager.AppSettings["PicturePrice"]); //连接数据库 var conn = new SqlConnection(@"server=47.106.183.2,1433;database=Picture;user id=sa;password=BigMaster@2018"); conn.Open(); SqlCommand sqlcmd = new SqlCommand(); sqlcmd.CommandText = "select * from WhiteList where androidId = '" + payModel.Phone + "' and isUseful=1"; sqlcmd.Connection = conn; SqlDataAdapter adp = new SqlDataAdapter(sqlcmd); DataTable dt = new DataTable(); adp.Fill(dt); if (dt.Rows.Count == 0) {//白名单用户可跳过价格监测 if (countAmout < 298 && payModel.Amout != countAmout) { resultReturn.Content = "订单支付失败,因为价格输入错误!"; return(resultReturn); } } else //白名单用户价格特殊 { payModel.Amout = Convert.ToDecimal(dt.Rows[0]["price"].ToString()); } try { var aopClient = new DefaultAopClient(AliPayConfig.GatewayUrl, AliPayConfig.AppId, AliPayConfig.PrivateKey, "json", "1.0", AliPayConfig.SignType, AliPayConfig.AlipayPublicKey, AliPayConfig.Charset, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay var request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 var model = new AlipayTradeAppPayModel { Body = payModel.Body, //描述 Subject = payModel.Subject, //标题 TotalAmount = payModel.Amout.ToString(CultureInfo.InvariantCulture), //订单金额 ProductCode = "QUICK_MSECURITY_PAY", OutTradeNo = orderId //商户网站唯一订单号 }; request.SetBizModel(model); request.SetNotifyUrl(AliPayConfig.PictureNotifyUrl); var response = aopClient.SdkExecute(request); var resultDic = new Dictionary <string, object> { { "OrderId", orderId }, { "content", response.Body } }; resultReturn.Content = resultDic; //查询 //AlipayTradeQueryRequest request2 = new AlipayTradeQueryRequest();//创建API对应的request类 //var model2 = new AlipayTradeAppPayModel //{ // OutTradeNo = orderId, //标题 //}; //request2.SetBizModel(model2); //AlipayTradeQueryResponse response2 = aopClient.Execute(request2);//通过alipayClient调用API,获得对应的response类 var sqlCmd = conn.CreateCommand(); sqlCmd.CommandText = "INSERT INTO A (Id,Price,Number,FilePath,Phone,Response) VALUES ('" + orderId + "','" + payModel.Amout + "','" + payModel.Description + "','" + payModel.FilePath + "','" + payModel.Phone + "','" + response.Body + "');"; sqlCmd.ExecuteNonQuery(); conn.Close(); sqlCmd.Dispose(); } catch (AopException aopEx) { LogService.InsertLog(aopEx); resultReturn.SetWrong(); } return(resultReturn); }
public ActionResult ZYOrderAliPay(Enums.Enums.OrderType body, string ordercode, string userID) { try { var ordermodel = db.zyorder.FirstOrDefault(s => s.OrderCode == ordercode);//查询订单信息 if (!db.tb_userinfos.Any(s => s.UserID == userID)) { return(Json(Comm.ToJsonResult("Error", "用户不存在"), JsonRequestBehavior.AllowGet)); } if (body != Enums.Enums.OrderType.Recharge && body != Enums.Enums.OrderType.OrderPay) { return(Json(Comm.ToJsonResult("Error", "请求参数错误"), JsonRequestBehavior.AllowGet)); } if (ordermodel == null) { return(Json(Comm.ToJsonResult("Error", "订单不存在"), JsonRequestBehavior.AllowGet)); } string appid = AliPayConfig.appid; //appid string app_private_key = AliPayConfig.app_private_key; //私钥 string alipay_public_key = AliPayConfig.app_public_key; //公钥 string charset = "utf-8"; string outtradeno = AliPayConfig.GenerateOutTradeNo(); //订单号 string notifyurl = AliPayConfig.notifyurl; //回调通知页面地址 IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", appid, app_private_key.Trim(), "json", "1.0", "RSA2", alipay_public_key.Trim(), charset, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = ((Enums.Enums.OrderType)body).GetDisplayName(); model.Subject = "自营订单支付"; model.TotalAmount = ordermodel.total_fee.ToString(); //type.GetDisplayName(); model.ProductCode = AliPayConfig.productcode; model.OutTradeNo = outtradeno; model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl(notifyurl); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 //Response.Write(HttpUtility.HtmlEncode(response.Body)); string resultcode = HttpUtility.HtmlEncode(response.Body); if (!string.IsNullOrWhiteSpace(resultcode)) { //保存下单信息到数据库 PayOrder paymodel = new PayOrder(); paymodel.OrderState = Enums.Enums.OrderState.UnHandle; paymodel.out_trade_no = outtradeno; paymodel.Paynoncestr = string.Empty; paymodel.PayPrepay_id = outtradeno; paymodel.settlement_total_fee = ordermodel.total_fee; paymodel.CreateTime = DateTime.Now; paymodel.Sign = resultcode; paymodel.total_fee = ordermodel.total_fee; paymodel.User_ID = userID; paymodel.OrderType = body; paymodel.RelationID = ordermodel.ID; db.PayOrders.Add(paymodel); int resultrow = db.SaveChanges(); if (resultrow > 0) { string tempresult = resultcode.Replace("amp;", ""); var returndata = new { result = tempresult, prepay_id = outtradeno }; return(Json(Comm.ToJsonResult("Success", "成功", returndata), JsonRequestBehavior.AllowGet)); } else { return(Json(Comm.ToJsonResult("Error", "下单失败"), JsonRequestBehavior.AllowGet)); } } else { return(Json(Comm.ToJsonResult("Error", "下单失败"), JsonRequestBehavior.AllowGet)); } } catch (Exception ex) { return(Json(Comm.ToJsonResult("Error", ex.Message), JsonRequestBehavior.AllowGet)); } }