public async Task <IActionResult> Wechatpay()
        {
            var config = new WechatpayConfig
            {
                AppId   = "wxefd7e95dd1ec11ae",
                SignKey = "I2lgA4cnK75mHULNqAaoZ3o4SSHMAY48",
                MchId   = "1495057202"
            };

            var request = new WechatTradeAppPayRequest
            {
                TotalFee   = 100,
                OutTradeNo = $"test_{DateTime.Now.ToString("yyyyMMddHHmmss")}",
                ProductId  = $"test_{DateTime.Now.ToString("yyyyMMddHHmmss")}",
                Body       = "产品",
                Detail     = "产品",
                TimeExpire = DateTime.Now.AddHours(2).ToString("yyyyMMddHHmmss"),
                TradeType  = WechatConstants.MWEB,
                TimeStart  = DateTime.Now.ToString("yyyyMMddHHmmss"),
                NotifyUrl  = "http://mobiletest.emoney.cn/mdata/payment/api/wechat/wechatnotity"
            };

            var response = await WechatpayClient.CreateOrderAsync(request, config);

            var ms = Convert.FromBase64String((await GetImage(response.CodeUrl)).Replace("data:image/jpeg;base64,", ""));

            return(File(ms, "image/png"));
        }
Example #2
0
        public async Task Test1()
        {
            var config = new WechatpayConfig();

            var request = new WechatTradeAppPayRequest
            {
                TotalFee   = 100,
                OutTradeNo = "202007297777",
                Body       = "产品",
                Detail     = "产品",
                TimeExpire = DateTime.Now.AddDays(15).ToString("yyyyMMddHHmmss"),
                TradeType  = WechatConstants.APP,
                TimeStart  = DateTime.Now.ToString("yyyyMMddHHmmss"),
                NotifyUrl  = ""
            };

            var response = await WechatpayClient.CreateOrderAsync(request, config);

            if (string.IsNullOrEmpty(response.Body))
            {
                Assert.Fail();
            }
            else
            {
                Assert.Pass();
            }
        }
        /// <summary>
        /// 统一下单
        /// </summary>
        /// <param name="request">提交给统一下单API的参数</param>
        /// <param name="config"></param>
        /// <param name="timeOut">超时时间</param>
        /// <returns>成功时返回,其他抛异常</returns>
        public static async Task <WechatTradeAppPayResponse> CreateOrderAsync(WechatTradeAppPayRequest request, WechatpayConfig config, int timeOut = 6)
        {
            //检测必填参数
            if (string.IsNullOrEmpty(request.OutTradeNo))
            {
                throw new Exception("缺少统一支付接口必填参数out_trade_no!");
            }
            else if (string.IsNullOrEmpty(request.Body))
            {
                throw new Exception("缺少统一支付接口必填参数body!");
            }
            else if (request.TotalFee <= 0)
            {
                throw new Exception("缺少统一支付接口必填参数total_fee!");
            }
            else if (string.IsNullOrEmpty(request.TradeType))
            {
                throw new Exception("缺少统一支付接口必填参数trade_type!");
            }

            //关联参数
            if (request.TradeType == "JSAPI" && string.IsNullOrEmpty(request.OpenId))
            {
                throw new Exception("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!");
            }
            if (request.TradeType == "NATIVE" && string.IsNullOrEmpty(request.ProductId))
            {
                throw new Exception("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!");
            }

            //异步通知url未设置,则使用配置文件中的url
            if (string.IsNullOrEmpty(request.NotifyUrl))
            {
                throw new Exception("缺少统一支付接口必填参数notify_url");
            }

            var result = await HttpService.ExecuteAsync(request, config, WechatConstants.UnifiedOrderUrl);

            if (result.ReturnCode != WechatConstants.SUCCESS && result.ResultCode != WechatConstants.SUCCESS)
            {
                throw new Exception(result.ReturnMsg);
            }
            var data = HttpService.GetAppData(config, result.PrepayId, request.TradeType, result.CodeUrl);

            result.Body = data.ToXml();
            return(result);
        }