Exemple #1
0
 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());;
 }
Exemple #2
0
 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);
 }
Exemple #4
0
 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());
 }
Exemple #6
0
 /// <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);
 }
Exemple #7
0
 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);
        }
Exemple #9
0
        /// <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));
        }
Exemple #11
0
        /// <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);
        }
Exemple #14
0
 /// <summary>
 /// 初始化参数生成器
 /// </summary>
 /// <param name="builder">参数生成器</param>
 /// <param name="param">支付参数</param>
 protected abstract void InitBuilder(WechatPayParameterBuilder builder, TPayParam param);
Exemple #15
0
 protected override void InitBuilder(WechatPayParameterBuilder builder, WechatCloseOrderRequest param)
 {
     builder.OutTradeNo(param.OutTradeNo);//.Remove(WechatPayConst.NotifyUrl);
 }
Exemple #16
0
 protected override void InitBuilder(WechatPayParameterBuilder builder, WechatPublicKeyRequest param)
 {
 }
Exemple #17
0
        /// <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);
        }
Exemple #18
0
        /// <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);
 }
Exemple #20
0
        protected virtual WechatPayParameterBuilder CreateParameterBuilder()
        {
            var builder = new WechatPayParameterBuilder(Config);

            return(builder);
        }
Exemple #21
0
        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);
        }
Exemple #22
0
 protected override void InitBuilder(WechatPayParameterBuilder builder, WechatQueryPayBankRequest param)
 {
     builder.Add(WechatPayConst.PartnerTradeNo, param.PartnerTradeNo);
 }
Exemple #23
0
 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);
 }
Exemple #24
0
 /// <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);;
 }
Exemple #30
0
 protected override void InitBuilder(WechatPayParameterBuilder builder, WechatReverseOrderRequest param)
 {
     builder.TransactionId(param.TransactionId).OutTradeNo(param.OutTradeNo);
 }