protected override void InitBuilder(WechatPayParameterBuilder builder, WechatTransfersRequest param) { builder.Add(WechatPayConst.MchAppId, Config.AppId).Add(WechatPayConst.MchId, Config.MerchantId).Add(WechatPayConst.DeviceInfo, param.DeviceInfo) .Add(WechatPayConst.PartnerTradeNo, param.PartnerTradeNo).OpenId(param.OpenId) .Add(WechatPayConst.CheckName, param.CheckName?.ToString()).Add(WechatPayConst.ReUserName, param.ReUserName) .Add(WechatPayConst.Amount, (param.Amount * 100).ToInt()).Add(WechatPayConst.Desc, param.Desc).SpbillCreateIp(Server.GetLanIp());; }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatPapPayApplyRequest param) { builder.Body(param.Body).Detail(param.Detail).Attach(param.Attach) .OutTradeNo(param.OutTradeNo).TotalFee(param.TotalFee).FeeType(param.FeeType) .GoodsTag(param.GoodsTag).NotifyUrl(param.NotifyUrl).TradeType("PAP").Add("contract_id", param.ContractId) .Receipt(param.Receipt); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatRefundOrderRequest param) { builder.TransactionId(param.TransactionId).OutTradeNo(param.OutTradeNo) .OutRefundNo(param.OutRefundNo).TotalFee(param.TotalFee).RefundFeeType(param.RefundFeeType) .RefundFee(param.RefundFee).NotifyUrl(param.NotifyUrl).Add(WechatPayConst.RefundDesc, param.RefundDesc) .RefundAccount(param.RefundAccount).Remove(WechatPayConst.NotifyUrl); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatH5EntrustWebRequest param) { builder.Add("plan_id", param.PlanId).Add("contract_code", param.ContractCode) .Add("request_serial", param.RequestSerial).Add("contract_display_account", param.ContractDisplayAccount) .NotifyUrl(param.NotifyUrl).Add("version", "1.0").Timestamp().Add("clientip", Server.GetLanIp()).Add("return_appid", param.ReturnAppId) .Remove(WechatPayConst.SignType).Remove(WechatPayConst.NonceStr); }
/// <summary> /// 初始化参数生成器 /// </summary> /// <param name="builder">参数生成器</param> /// <param name="param">支付参数</param> protected override void InitBuilder(WechatPayParameterBuilder builder, WechatPayPayRequestBase param) { builder.Body(param.Body).OutTradeNo(param.OutTradeNo).DeviceInfo(param.DeviceInfo).TradeType(GetTradeType()) .TotalFee(param.TotalFee).NotifyUrl(param.NotifyUrl).Attach(param.Attach) .Detail(param.Detail).FeeType(param.FeeType).TimeStart(param.TimeStart) .TimeExpire(param.TimeExpire).GoodsTag(param.GoodsTag).ProductId(param.ProductId) .LimitPay(param.LimitPay).Receipt(param.Receipt).ProfitSharing(param.ProfitSharing).SceneInfo(param.SceneInfo) .OpenId(param.OpenId).SpbillCreateIp(Server.GetLanIp()); }
/// <summary> /// 初始化参数生成器 /// </summary> /// <param name="builder">参数生成器</param> /// <param name="param">支付参数</param> protected override void InitBuilder(WechatPayParameterBuilder builder, WechatPayMicroPayRequest param) { builder.Body(param.Body).OutTradeNo(param.OutTradeNo) .TotalFee(param.TotalFee).NotifyUrl(param.NotifyUrl).Attach(param.Attach) .Detail(param.Detail).FeeType(param.FeeType).TimeStart(param.TimeStart) .TimeExpire(param.TimeExpire).GoodsTag(param.GoodsTag).LimitPay(param.LimitPay) .Receipt(param.Receipt).ProfitSharing(param.ProfitSharing).SceneInfo(param.SceneInfo) .AuthCode(param.AuthCode).Remove(WechatPayConst.NotifyUrl); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatContractOrderRequest param) { builder.Add("contract_mchid", Config.MerchantId).Add("contract_appid", Config.AppId).OutTradeNo(param.OutTradeNo) .DeviceInfo(param.DeviceInfo).Body(param.Body).Detail(param.Detail).Attach(param.Attach).NotifyUrl(param.NotifyUrl) .TotalFee(param.TotalFee).TimeStart(param.TimeStart).TimeExpire(param.TimeExpire).GoodsTag(param.GoodsTag) .TradeType(param.TradeType).ProductId(param.ProductId).LimitPay(param.LimitPay).OpenId(param.OpenId).Add("plan_id", param.PlanId) .Add("contract_code", param.ContractCode).Add("request_serial", param.RequestSerial).Add("contract_display_account", param.ContractDisplayAccount) .Add("contract_notify_url", param.ContractNotifyUrl); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatSendRedPackRequest param) { builder.Remove(WechatPayConst.AppId).Remove(WechatPayConst.SignType) .Add(WechatPayConst.WxAppid, Config.AppId).Add(WechatPayConst.ClientIp, Server.GetLanIp()) .Add(WechatPayConst.MchBillNo, param.MchBillNo).Add(WechatPayConst.SendName, param.SendName).Add(WechatPayConst.ReOpenid, param.ReOpenId) .Add(WechatPayConst.TotalAmount, (param.TotalAmount * 100).ToInt().ToString()).Add(WechatPayConst.TotalNum, param.TotalNum.ToString()) .Add(WechatPayConst.Wishing, param.Wishing).Add(WechatPayConst.ActName, param.ActName).Add(WechatPayConst.Remark, param.Remark) .Add(WechatPayConst.SceneId, param.SceneId?.ToString()).Add(WechatPayConst.RiskInfo, param.RiskInfo); }
/// <summary> /// 写日志 /// </summary> protected virtual void WriteLog <TResponse>(WechatPayConfig config, WechatPayParameterBuilder builder, WechatPayResult <TResponse> result) where TResponse : WechatPayResponse { var logContent = LogContentBuilder.CreateLogContentBuilder() .SetEventId(Guid.NewGuid()).SetMoudle(GetType().FullName).SetTitle("微信支付") .AddContent($"支付方式 : {GetType()}") .AddContent($"支付网关 : {config.GetOrderUrl()}") .AddContent($"原始响应:{result?.Raw}") .Build(); Logger.LogInfo(logContent); }
public Task <string> BuildUrl(WechatPayNativePayOneRequest request) { string url = GetRequestUrl(Config); var builder = new WechatPayParameterBuilder(Config); if (_extParam != null && _extParam.Any()) { foreach (var item in _extParam) { builder.Add(item.Key, item.Value); } } InitBuilder(builder, request); url = $"{url}?{builder.ToUrl()}"; return(Task.FromResult <string>(url)); }
/// <summary> /// 发送请求 /// </summary> protected async Task <string> Request(WechatPayConfig config, WechatPayParameterBuilder builder) { //先这样处理把,看看有什么好的优化方案,实在不行通过反射把数据绑定上去, //暂时不用IHttpClientFactory //var client = HttpClientFactory.CreateClient("wechat"); var handler = new HttpClientHandler() { ClientCertificateOptions = ClientCertificateOption.Manual, SslProtocols = SslProtocols.Tls12, }; if (UseCertificate()) { if (config.CertificateData != null) { var certificate = new X509Certificate2(config.CertificateData, config.CertificatePwd, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); handler.ClientCertificates.Add(certificate); handler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls; handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true; } else { throw new Exception($"请求{GetRequestUrl(config)}需要证书"); } } var client = new HttpClient(handler); if (_extParam != null && _extParam.Any()) { foreach (var item in _extParam) { builder.Add(item.Key, item.Value); } } HttpResponseMessage response = await Web.Client(client) .Post(GetRequestUrl(config)) .Data(BuildHttpContent(builder)) .ResultAsync(); return(await response?.Content?.ReadAsStringAsync()); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatPayBankRequest param) { var wechatPublicKeyResponse = _wechatPublicKeyService.GetPublicKey(new WechatPublicKeyRequest() { }).GetAwaiter().GetResult(); string publicKey = null; if (wechatPublicKeyResponse.GetResultCode() == WechatPayConst.Success && wechatPublicKeyResponse.GetReturnCode() == WechatPayConst.Success) { publicKey = wechatPublicKeyResponse?.Data?.PubKey; } publicKey.CheckNull($"获取公钥失败,错误原因:{wechatPublicKeyResponse.GetReturnMessage()}"); param.EncBankNo = Encrypt.Rsa2Sign(param.EncBankNo, publicKey); param.EncTrueName = Encrypt.Rsa2Sign(param.EncTrueName, publicKey); builder.Add(WechatPayConst.PartnerTradeNo, param.PartnerTradeNo) .Add(WechatPayConst.EncBankNo, param.EncBankNo) .Add(WechatPayConst.EncTrueName, param.EncTrueName) .Add(WechatPayConst.BankCode, param.BankCode).Add(WechatPayConst.Desc, param.Desc); }
public async Task <HttpResponseMessage> ReturnMessage(WechatPayNativePayRequest request) { HttpResponseMessage response = null; var validationResultCollection = await ValidateAsync(); if (validationResultCollection.IsValid) { var result = await NativePayService.PayAsync(request); WechatPayParameterBuilder paramBuilder = new WechatPayParameterBuilder(Config); paramBuilder.Init(); paramBuilder.PrepayId(result.Data?.PrepayId); paramBuilder.ReturnCode(result.Data?.ReturnCode); paramBuilder.ResultCode(result.Data?.ResultCode); paramBuilder.Add(WechatPayConst.ErrorCodeDescription, result.Data?.ReturnMsg); string xmlContent = paramBuilder.ToXml(); response = xmlContent.XmlToHttpResponseMessage(); } else { throw new PayException(validationResultCollection); } return(response); }
/// <summary> /// 初始化参数生成器 /// </summary> /// <param name="builder">参数生成器</param> /// <param name="param">支付参数</param> protected abstract void InitBuilder(WechatPayParameterBuilder builder, TPayParam param);
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatCloseOrderRequest param) { builder.OutTradeNo(param.OutTradeNo);//.Remove(WechatPayConst.NotifyUrl); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatPublicKeyRequest param) { }
/// <summary> /// 请求结果 /// </summary> protected async Task <WechatPayResult <TResponse> > RequstResult <TResponse>(WechatPayConfig config, WechatPayParameterBuilder builder) where TResponse : WechatPayResponse { var result = await CreateWechatPayResult <TResponse>(config, builder); WriteLog(config, builder, result); await ValidateResult(result); return(result); }
/// <summary> /// 请求类型 /// </summary> /// <returns></returns> protected virtual HttpContent BuildHttpContent(WechatPayParameterBuilder wechatPayParameterBuilder) { string content = wechatPayParameterBuilder.ToJson(true, wechatPayParameterBuilder.Get(WechatPayConst.SignType).ToPaySignType()); return(new StringContent(content, Encoding.UTF8, "text/xml")); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatDownloadfundflowRequest param) { builder.BillDate(param.BillDate).AccountType(param.AccountType).TarType(param.TarType).SignType(param.SignType) .Remove(WechatPayConst.NonceStr); }
protected virtual WechatPayParameterBuilder CreateParameterBuilder() { var builder = new WechatPayParameterBuilder(Config); return(builder); }
protected async Task <WechatPayResult <TResponse> > CreateWechatPayResult <TResponse>(WechatPayConfig config, WechatPayParameterBuilder builder) where TResponse : WechatPayResponse { var result = new WechatPayResult <TResponse>(Config, await Request(config, builder)); await ResoveResult(result); return(result); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatQueryPayBankRequest param) { builder.Add(WechatPayConst.PartnerTradeNo, param.PartnerTradeNo); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatGetTransferInfoRequest param) { builder.AppId(Config.AppId).Add("mch_id", Config.MerchantId).NonceStr(Id.GetId()).Add(WechatPayConst.PartnerTradeNo, param.PartnerTradeNo); }
/// <summary> /// 初始化请求参数配置 /// </summary> /// <param name="builder">参数生成器</param> /// <param name="param">支付参数</param> protected void BuildConfig(WechatPayParameterBuilder builder, TPayParam param) { builder.Init(); InitBuilder(builder, param); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatBatchquerycommentRequest param) { builder.SignType(param.SignType).BeginTime(param.BeginTime).EndTime(param.EndTime).Offset(param.Offset).Limit(param.Limit.ToString()) .Remove(WechatPayConst.NonceStr); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatQueryContractRequest param) { builder.Add("contract_id", param.ContractId).Add("plan_id", param.PlanId).Add("contract_code", param.ContractCode) .Add("version", "1.0").Remove(WechatPayConst.NonceStr); }
protected virtual void InitBuilder(WechatPayParameterBuilder builder, WechatPayNativePayOneRequest param) { builder.AppId(Config.AppId).MerchantId(Config.MerchantId).Add("time_stamp", DateTime.Now.GetUnixTimestamp()) .ProductId(param.ProductId).NonceStr(Id.GetId()); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatDownloadbillRequest param) { builder.BillDate(param.BillDate).BillType(param.BillType).TarType(param.TarType) .Remove(WechatPayConst.NonceStr); }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatRefundQueryRequest param) { builder.TransactionId(param.TransactionId).OutTradeNo(param.OutTradeNo) .OutRefundNo(param.OutRefundNo).RefundId(param.RefundId).Offset(param.Offset) .Remove(WechatPayConst.NotifyUrl);; }
protected override void InitBuilder(WechatPayParameterBuilder builder, WechatReverseOrderRequest param) { builder.TransactionId(param.TransactionId).OutTradeNo(param.OutTradeNo); }