Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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("&amp;","&");

            //Response.Write(HttpUtility.HtmlEncode(response.Body));
            //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        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 可以直接给客户端请求,无需再做处理。
        }
Exemplo n.º 7
0
        /// <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 可以直接给客户端请求,无需再做处理。
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
        /// <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");
            }
        }
Exemplo n.º 10
0
        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;
            }
        }
Exemplo n.º 11
0
        /// <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));
        }
Exemplo n.º 12
0
        /// <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
        }
Exemplo n.º 13
0
        /// <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);
        }
Exemplo n.º 14
0
        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);
                }
            });
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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));
        }
Exemplo n.º 17
0
        /// <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);
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        // 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));
        }
Exemplo n.º 20
0
        /// <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;", "")
            });
        }
Exemplo n.º 21
0
        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, "生成订单失败"));
            }
        }
Exemplo n.º 22
0
        /// <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
            }));
        }
Exemplo n.º 23
0
        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());
        }
Exemplo n.º 24
0
        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);
        }
Exemplo n.º 25
0
        /// <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);
        }
Exemplo n.º 26
0
        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("");
            }
        }
Exemplo n.º 27
0
        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 可以直接给客户端请求,无需再做处理。
        }
Exemplo n.º 28
0
        /// <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));
        }
Exemplo n.º 29
0
        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);
        }
Exemplo n.º 30
0
 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));
     }
 }