public async Task <(bool, GetH5PaymentBeforeResponseDto)> GetH5PaymentBeforeAsync(GetH5PaymentBeforeResquestDto requstDto) { //微信下单 //随机字符串参数 string nonceStr = WeChatUtils.GetRandomString(16, false, true, true, false, string.Empty); var unifiedOrderRequestDto = new UnifiedOrderRequestDto { AppId = PlatformSettings.CDClientAppId, MerchantId = requstDto.MerchantId, Body = requstDto.Body, OutTradeNo = requstDto.OutTradeNo, TotalFee = requstDto.TotalFee, //支付金额,单位分 NotifyUrl = requstDto.NotifyUrl, //支付通知回调 OpenId = requstDto.OpenId, MerchantSecret = requstDto.MerchantSecret, NonceStr = nonceStr }; var unifiedRes = await UnifiedOrderAsync(unifiedOrderRequestDto); if (!unifiedRes.IsReturnCodeSuccess() || !unifiedRes.IsResultCodeSuccess()) { var errMsg = new StringBuilder(); errMsg.Append($"微信支付下单失败:return_msg-{unifiedRes.return_msg}|err_code-{unifiedRes.err_code}|err_code_des-{unifiedRes.err_code_des}"); errMsg.Append($"{Environment.NewLine}at SenparcPayBiz.GetH5PaymentBeforeAsync({JsonConvert.SerializeObject(requstDto)})"); Logger.Error(errMsg.ToString()); return(false, null); } var result = new GetH5PaymentBeforeResponseDto { AppId = unifiedOrderRequestDto.AppId, TimeStamp = WeChatUtils.GetTimestamp(), NonceStr = unifiedOrderRequestDto.NonceStr, Package = $"prepay_id={unifiedRes.prepay_id}", SignType = "MD5" }; result.Sign = TenPayV3.GetJsPaySign( unifiedOrderRequestDto.AppId, result.TimeStamp, result.NonceStr, result.Package, unifiedOrderRequestDto.MerchantSecret, "MD5"); return(true, result); }
/// <summary> /// 获取JS-SDK权限验证的签名Signature /// </summary> /// <param name="appId"></param> /// <param name="appSecret"></param> /// <param name="url">当前网页的URL,不包含#及其后面部分</param> /// <returns></returns> public static async Task <WeChatJsSDKSignatureResponse> GetSignatureAsync(string appId, string appSecret, string url) { var ticketResponse = await WeChartApi.GetJsAPITicket(appId, appSecret); string ticket = ticketResponse.Ticket; string noncestr = WeChatUtils.GetNoncestr(); string timestamp = WeChatUtils.GetTimestamp(); Hashtable val = new Hashtable(); val.Add("jsapi_ticket", ticket); val.Add("noncestr", noncestr); val.Add("timestamp", timestamp); val.Add("url", url); return(new WeChatJsSDKSignatureResponse { AppId = appId, NonceStr = noncestr, Timestamp = timestamp, Signature = CreateSha1(val) }); }
public static BaseWeChatXmlMsg CreateMessage(string xml) { if (_queue == null) { _queue = new List <BaseWeChatXmlMsg>(); } else if (_queue.Count >= 50) { _queue = _queue.Where(q => { return(q.CreatedTime.AddSeconds(20) > DateTime.Now); }).ToList();//保留20秒内未响应的消息 } XElement xdoc = XElement.Parse(xml); var msgtype = xdoc.Element("MsgType").Value.ToUpper(); var FromUserName = xdoc.Element("FromUserName").Value; var CreateTime = xdoc.Element("CreateTime").Value; WeChartMsgType type = (WeChartMsgType)Enum.Parse(typeof(WeChartMsgType), msgtype); if (type != WeChartMsgType.EVENT) { var MsgId = xdoc.Element("MsgId").Value; if (_queue.FirstOrDefault(m => { return(m.MsgFlag == MsgId); }) == null) { _queue.Add(new BaseWeChatXmlMsg { CreatedTime = DateTime.Now, FromUserName = FromUserName, MsgFlag = MsgId }); } else { return(null); } } else { if (_queue.FirstOrDefault(m => { return(m.MsgFlag == CreateTime && m.FromUserName == FromUserName); }) == null) { _queue.Add(new BaseWeChatXmlMsg { CreatedTime = DateTime.Now, FromUserName = FromUserName, MsgFlag = CreateTime }); } else { return(null); } } switch (type) { case WeChartMsgType.TEXT: return(WeChatUtils.ConvertXmlToObj <WeChatXmlTextMsg>(xml)); case WeChartMsgType.IMAGE: return(WeChatUtils.ConvertXmlToObj <BaseWeChatXmlMsg>(xml)); case WeChartMsgType.VOICE: return(WeChatUtils.ConvertXmlToObj <BaseWeChatXmlMsg>(xml)); case WeChartMsgType.VIDEO: return(WeChatUtils.ConvertXmlToObj <BaseWeChatXmlMsg>(xml)); case WeChartMsgType.LOCATION: return(WeChatUtils.ConvertXmlToObj <BaseWeChatXmlMsg>(xml)); case WeChartMsgType.LINK: return(WeChatUtils.ConvertXmlToObj <BaseWeChatXmlMsg>(xml)); case WeChartMsgType.EVENT: var enumEventType = (WeChartEvent)Enum.Parse(typeof(WeChartEvent), xdoc.Element("Event").Value.ToUpper()); switch (enumEventType) { case WeChartEvent.CLICK: return(WeChatUtils.ConvertXmlToObj <WeChatXmlNormalMenuEventMsg>(xml)); case WeChartEvent.VIEW: return(WeChatUtils.ConvertXmlToObj <WeChatXmlNormalMenuEventMsg>(xml)); case WeChartEvent.LOCATION: return(WeChatUtils.ConvertXmlToObj <BaseWeChatEventXmlMsg>(xml)); case WeChartEvent.LOCATION_SELECT: return(WeChatUtils.ConvertXmlToObj <BaseWeChatEventXmlMsg>(xml)); case WeChartEvent.SCAN: return(WeChatUtils.ConvertXmlToObj <WeChatScanEventMessage>(xml)); case WeChartEvent.SUBSCRIBE: return(WeChatUtils.ConvertXmlToObj <WeChatSubEventXmlMsg>(xml)); case WeChartEvent.UNSUBSCRIBE: return(WeChatUtils.ConvertXmlToObj <BaseWeChatEventXmlMsg>(xml)); case WeChartEvent.SCANCODE_WAITMSG: return(WeChatUtils.ConvertXmlToObj <BaseWeChatEventXmlMsg>(xml)); default: return(WeChatUtils.ConvertXmlToObj <BaseWeChatEventXmlMsg>(xml)); } default: return(WeChatUtils.ConvertXmlToObj <BaseWeChatXmlMsg>(xml)); } }