コード例 #1
0
        public async Task CreateUnifedOrderTestAsync()
        {
            if (string.IsNullOrEmpty(_wechatConfig.MerchantId) || string.IsNullOrEmpty(_wechatConfig.MerchantSecret))
            {
                return;
            }

            var wechatPay = new WeChatPayService(_wechatConfig);
            var model     = new WeChatPayOrderModel {
                OpenId    = _openId,
                AppId     = _wechatConfig.MobilePlatformAppId,
                IPAddress = "127.0.0.1",
                Body      = "Test",
                Amount    = 0.01m,
                NotifyUrl = "https://bigfridge.xingyisoftware.com/pay/callback/wechat",
            };

            //JsApi
            model.TradeType = WeChatPayTradeType.JsApi;
            model.OrderNo   = OrderIdGen.New();

            var result1 = await wechatPay.CreateUnifedOrderAsync(model);

            Assert.IsTrue(result1.Ok);
            Assert.IsNotNull(result1.Data.PrepayId);

            //Native
            model.TradeType = WeChatPayTradeType.Native;
            model.OrderNo   = OrderIdGen.New();

            var result2 = await wechatPay.CreateUnifedOrderAsync(model);

            Assert.IsTrue(result2.Ok);
            Assert.IsNotNull(result2.Data.PrepayId);
        }
コード例 #2
0
        public async Task <Result <WeChatPayOrderCreationResult> > CreateUnifedOrderAsync(WeChatPayOrderModel model)
        {
            var apiUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";

            var now        = DateTime.Now;
            var parameters = GetCommonParameters(model.AppId);
            var more       = new Dictionary <string, string> {
                { "time_start", now.ToString("yyyyMMddHHmmss") },
                { "time_expire", now.Add(model.Expiration).ToString("yyyyMMddHHmmss") },
                { "device_info", model.Device },
                { "trade_type", model.TradeType.ToUpper() },
                { "spbill_create_ip", model.IPAddress },
                { "out_trade_no", model.OrderNo },
                { "notify_url", model.NotifyUrl },
                { "openid", model.OpenId },
                { "total_fee", (model.Amount * 100).ToString("f0") },
                { "body", model.Body },
            };

            foreach (var i in more)
            {
                parameters.Add(i.Key, i.Value);
            }
            if (!model.AllowCreditCard)
            {
                parameters.Add("limit_pay", "no_credit");
            }
            if (!string.IsNullOrEmpty(model.Attach))
            {
                parameters.Add("attach", model.Attach);
            }

            try {
                var xml = await PostThenGetResultXmlAsync(apiUrl, parameters);

                if (!IsSuccess(xml))
                {
                    return(new Failure <WeChatPayOrderCreationResult>(GetErrorDescription(xml)));
                }
                return(new Success <WeChatPayOrderCreationResult> {
                    Data = new WeChatPayOrderCreationResult {
                        PrepayId = GetContent(xml, "prepay_id"),
                        CodeUrl = GetContent(xml, "code_url"),
                        OriginalResult = xml
                    }
                });
            }
            catch (Exception e) {
                return(new Failure <WeChatPayOrderCreationResult>(e.Message));
            };
        }