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); }
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)); }; }