public SenparcWeixinSettingItem(ISenparcWeixinSettingForTenpayV3 setting, bool isDebug = false)
        {
            ItemKey = setting.ItemKey;

            TenPayV3_AppId              = setting.TenPayV3_AppId;
            TenPayV3_AppSecret          = setting.TenPayV3_AppSecret;
            TenPayV3_CertPath           = setting.TenPayV3_CertPath;
            TenPayV3_CertSecret         = setting.TenPayV3_CertSecret;
            TenPayV3_Key                = setting.TenPayV3_Key;
            TenPayV3_MchId              = setting.TenPayV3_MchId;
            TenPayV3_SubAppId           = setting.TenPayV3_SubAppId;
            TenPayV3_SubAppSecret       = setting.TenPayV3_SubAppSecret;
            TenPayV3_SubMchId           = setting.TenPayV3_SubMchId;
            TenPayV3_TenpayNotify       = setting.TenPayV3_TenpayNotify;
            TenPayV3_WxOpenTenpayNotify = setting.TenPayV3_WxOpenTenpayNotify;
        }
示例#2
0
 /// <summary>
 /// 微信支付 V3 参数 构造函数
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3">已经填充过微信支付参数的 SenparcWeixinSetting 对象</param>
 public TenPayV3Info(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
     : this(senparcWeixinSettingForTenpayV3.TenPayV3_AppId,
            senparcWeixinSettingForTenpayV3.TenPayV3_AppSecret,
            senparcWeixinSettingForTenpayV3.TenPayV3_MchId,
            senparcWeixinSettingForTenpayV3.TenPayV3_Key,
            senparcWeixinSettingForTenpayV3.TenPayV3_CertPath,
            senparcWeixinSettingForTenpayV3.TenPayV3_CertSecret,
            senparcWeixinSettingForTenpayV3.TenPayV3_SubAppId,
            senparcWeixinSettingForTenpayV3.TenPayV3_SubAppSecret,
            senparcWeixinSettingForTenpayV3.TenPayV3_SubMchId,
            senparcWeixinSettingForTenpayV3.TenPayV3_TenpayNotify,
            senparcWeixinSettingForTenpayV3.TenPayV3_WxOpenTenpayNotify,
            senparcWeixinSettingForTenpayV3.TenPayV3_PrivateKey,
            senparcWeixinSettingForTenpayV3.TenPayV3_SerialNumber,
            senparcWeixinSettingForTenpayV3.TenPayV3_APIv3Key
            )
 {
     //_tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
 }
示例#3
0
        /// <summary>
        /// 构造函数
        /// 注意:.NetCore环境必须传入HttpContext实例,不能传Null,这个接口调试特别困难,千万别出错!
        /// </summary>
        /// <param name="httpContext"></param>
        /// <param name="senparcWeixinSettingForTenpayV3"></param>
        public TenPayNotifyHandler(HttpContext httpContext, ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
        {
            _ = httpContext ?? throw new ArgumentNullException(nameof(httpContext));

            _httpContext     = httpContext;
            _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;

            // 获得body
            if (_httpContext.Request.Method == "POST" ||
                _httpContext.Request.Method == "PUT" ||
                _httpContext.Request.Method == "PATCH")
            {
                using (var reader = new StreamReader(_httpContext.Request.Body))
                {
                    Body          = reader.ReadToEndAsync().GetAwaiter().GetResult();
                    NotifyRequest = Body.GetObject <NotifyRequest>();
                }
            }
        }
示例#4
0
        public TenPayHttpClient(SenparcHttpClient httpClient, ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null, CertType certType = CertType.RSA)
        {
            this._httpClient = httpClient;
            _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;

            //从工厂获得签名和验签的方法类
            _signer   = TenPayCertFactory.GetSigner(certType);
            _verifier = TenPayCertFactory.GetVerifier(certType);

            #region 配置UA

            //ACCEPT header
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));

            //User-Agent header
            var userAgentValues = UserAgentValues.Instance;
            _client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Senparc.Weixin.TenPayV3-C#", userAgentValues.TenPayV3Version));
            _client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue($"(Senparc.Weixin {userAgentValues.SenparcWeixinVersion})"));
            _client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(".NET", userAgentValues.RuntimeVersion));
            _client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue($"({userAgentValues.OSVersion})"));

            #endregion
        }
示例#5
0
        /// <summary>
        /// 根据 SenparcWeixinSetting 自动注册微信支付Tenpay(注意:新注册账号请使用 UseYoYoSenparcTenpayV3!
        /// </summary>
        /// <param name="registerService">RegisterService</param>
        /// <param name="weixinSettingForTenpayV3">ISenparcWeixinSetting</param>
        /// <param name="name">统一标识,如果为null,则使用 SenparcWeixinSetting.ItemKey </param>
        /// <param name="userId"></param>
        /// <param name="tenantId"></param>
        /// <returns></returns>
        public static IRegisterService UseYoYoSenparcTenpayV3 <UserKeyType, TenantKeyType>(this IRegisterService registerService, ISenparcWeixinSettingForTenpayV3 weixinSettingForTenpayV3, string name, UserKeyType userId = default(UserKeyType), TenantKeyType tenantId = default(TenantKeyType))
        {
            RegisterV3InfoCollection <UserKeyType, TenantKeyType> .Register(userId, tenantId, weixinSettingForTenpayV3.TenPayV3_MchId);

            return(registerService.RegisterTenpayV3(weixinSettingForTenpayV3, name));
        }
示例#6
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3"></param>
 public BasePayApis2(SenparcHttpClient httpClient, ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null, CertType certType = CertType.RSA)
 {
     this._httpClient = httpClient;
     _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
     this._certType   = certType;
 }
示例#7
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3"></param>
 public BusinessCircleApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
 {
     _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
 }
示例#8
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3"></param>
 public PayScoreApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
 {
     _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
 }
示例#9
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3"></param>
 public TransferApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
 {
     _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
 }
示例#10
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3"></param>
 public ProfitsharingApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
 {
     _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
 }
示例#11
0
 public TenPayApiRequest(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
 {
     _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
 }
示例#12
0
 public TenPayRealV3Controller()
 {
     _tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
     _basePayApis     = new BasePayApis(_tenpayV3Setting);
 }
示例#13
0
        /// <summary>
        /// 检验签名,以确保回调是由微信支付发送。
        /// 签名规则见微信官方文档 https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml。
        /// return bool
        /// </summary>
        /// <param name="wechatpayTimestamp">HTTP头中的应答时间戳</param>
        /// <param name="wechatpayNonce">HTTP头中的应答随机串</param>
        /// <param name="wechatpaySignature">HTTP头中的应答签名</param>
        /// <param name="content">应答报文主体</param>
        /// <param name="pubKey">平台公钥 可为空</param>
        /// <returns></returns>
        public static async Task <bool> VerifyTenpaySign(string wechatpayTimestamp, string wechatpayNonce, string wechatpaySignature, string content, string serialNumber, ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3)
        {
            //string contentForSign = $"{wechatpayTimestamp}\n{wechatpayNonce}\n{content}\n";

            var tenpayV3InfoKey = TenPayHelper.GetRegisterKey(senparcWeixinSettingForTenpayV3.TenPayV3_MchId, senparcWeixinSettingForTenpayV3.TenPayV3_SubMchId);
            var pubKey          = await TenPayV3InfoCollection.Data[tenpayV3InfoKey].GetPublicKeyAsync(serialNumber, senparcWeixinSettingForTenpayV3);

            return(VerifyTenpaySign(wechatpayTimestamp, wechatpayNonce, wechatpaySignature, content, pubKey));
        }
示例#14
0
 /// <summary>
 /// 根据 SenparcWeixinSetting 自动注册微信支付Tenpay(注意:新注册账号请使用 UseYoYoSenparcTenpayV3!
 /// </summary>
 /// <param name="registerService">RegisterService</param>
 /// <param name="weixinSettingForTenpayV3">ISenparcWeixinSetting</param>
 /// <param name="name">统一标识,如果为null,则使用 SenparcWeixinSetting.ItemKey </param>
 /// <param name="userId"></param>
 /// <param name="tenantId"></param>
 /// <returns></returns>
 public static IRegisterService UseYoYoSenparcTenpayV3(this IRegisterService registerService, ISenparcWeixinSettingForTenpayV3 weixinSettingForTenpayV3, string name, long userId, long tenantId)
 {
     RegisterV3InfoCollection.Register(userId, tenantId, weixinSettingForTenpayV3.TenPayV3_MchId);
     return(registerService.RegisterTenpayV3(weixinSettingForTenpayV3, name));
 }
 /// <summary>
 /// 根据 SenparcWeixinSetting 自动注册微信支付Tenpay(注意:新注册账号请使用 UseYoYoSenparcTenpayV3!
 /// </summary>
 /// <param name="registerService">RegisterService</param>
 /// <param name="weixinSettingForTenpayV3">ISenparcWeixinSetting</param>
 /// <param name="name">统一标识,如果为null,则使用 SenparcWeixinSetting.ItemKey </param>
 /// <returns></returns>
 public static IRegisterService UseYoYoSenparcTenpayV3(this IRegisterService registerService, ISenparcWeixinSettingForTenpayV3 weixinSettingForTenpayV3, string name)
 {
     return(registerService.RegisterTenpayV3(weixinSettingForTenpayV3, name));
 }
示例#16
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3"></param>
 public ComplaintApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
 {
     _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
 }
示例#17
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3"></param>
 public VehicleParkingApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
 {
     _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
 }
示例#18
0
        /// <summary>
        /// 获取调起支付所需的签名
        /// </summary>
        /// <param name="timeStamp">时间戳</param>
        /// <param name="nonceStr">随机串</param>
        /// <param name="package">格式:prepay_id={0}</param>
        /// <param name="senparcWeixinSettingForTenpayV3">可为空 为空将从Senparc.Weixin.Config获取</param>
        /// <returns></returns>
        public static string CreatePaySign(string timeStamp, string nonceStr, string package, ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
        {
            senparcWeixinSettingForTenpayV3 ??= Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;

            var appId      = senparcWeixinSettingForTenpayV3.TenPayV3_AppId;
            var privateKey = senparcWeixinSettingForTenpayV3.TenPayV3_PrivateKey;

            return(CreatePaySign(timeStamp, nonceStr, package, appId, privateKey));
        }
示例#19
0
        public TenPayHttpHandler(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null)
        {
            InnerHandler = new HttpClientHandler();

            _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
        }
示例#20
0
 /// <summary>
 /// 获取完整件
 /// </summary>
 /// <param name="senparcWeixinSettingForTenpayV3">ISenparcWeixinSettingForTenpayV3,也可以直接传入 SenparcWeixinSetting</param>
 /// <returns></returns>
 public static string GetKey(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3)
 {
     return(GetKey(senparcWeixinSettingForTenpayV3.TenPayV3_MchId, senparcWeixinSettingForTenpayV3.TenPayV3_SubMchId));
 }
示例#21
0
        /// <summary>
        /// 根据 SenparcWeixinSetting 自动注册微信支付Tenpay(注意:新注册账号请使用RegisterTenpayV3!
        /// </summary>
        /// <param name="registerService">RegisterService</param>
        /// <param name="weixinSettingForTenpayV3">ISenparcWeixinSetting</param>
        /// <param name="name">统一标识,如果为null,则使用 SenparcWeixinSetting.ItemKey </param>
        /// <returns></returns>
        public static IRegisterService RegisterTenpayV3(this IRegisterService registerService, ISenparcWeixinSettingForTenpayV3 weixinSettingForTenpayV3, string name)
        {
            Func <TenPayV3Info> func = () => new TenPayV3Info(weixinSettingForTenpayV3);

            return(RegisterTenpayV3(registerService, func, name ?? weixinSettingForTenpayV3.ItemKey));
        }
示例#22
0
        /// <summary>
        /// 根据 SenparcWeixinSetting 自动注册微信支付Tenpay(注意:新注册账号请使用RegisterTenpayV3!
        /// </summary>
        /// <param name="registerService">RegisterService</param>
        /// <param name="weixinSettingForTenpayV3">ISenparcWeixinSetting</param>
        /// <param name="name">统一标识,如果为null,则使用 SenparcWeixinSetting.ItemKey </param>
        /// <returns></returns>
        public static IRegisterService RegisterTenpayV3(this IRegisterService registerService, ISenparcWeixinSettingForTenpayV3 weixinSettingForTenpayV3, string name)
        {
            //配置全局参数
            if (!string.IsNullOrWhiteSpace(name))
            {
                Config.SenparcWeixinSetting[name] = new SenparcWeixinSettingItem(weixinSettingForTenpayV3);
            }

            Func <TenPayV3Info> func = () => new TenPayV3Info(weixinSettingForTenpayV3);

            return(RegisterTenpayV3(registerService, func, name ?? weixinSettingForTenpayV3.ItemKey));
        }
 public TenPayRealV3Controller(SenparcHttpClient httpClient)
 {
     _tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting;
     _basePayApis     = new BasePayApis(_tenpayV3Setting);
     this._httpClient = httpClient;
 }