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; }
/// <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; }
/// <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>(); } } }
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 }
/// <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)); }
/// <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; }
/// <summary> /// 构造函数 /// </summary> /// <param name="senparcWeixinSettingForTenpayV3"></param> public BusinessCircleApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null) { _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; }
/// <summary> /// 构造函数 /// </summary> /// <param name="senparcWeixinSettingForTenpayV3"></param> public PayScoreApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null) { _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; }
/// <summary> /// 构造函数 /// </summary> /// <param name="senparcWeixinSettingForTenpayV3"></param> public TransferApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null) { _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; }
/// <summary> /// 构造函数 /// </summary> /// <param name="senparcWeixinSettingForTenpayV3"></param> public ProfitsharingApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null) { _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; }
public TenPayApiRequest(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null) { _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; }
public TenPayRealV3Controller() { _tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; _basePayApis = new BasePayApis(_tenpayV3Setting); }
/// <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)); }
/// <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)); }
/// <summary> /// 构造函数 /// </summary> /// <param name="senparcWeixinSettingForTenpayV3"></param> public ComplaintApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null) { _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; }
/// <summary> /// 构造函数 /// </summary> /// <param name="senparcWeixinSettingForTenpayV3"></param> public VehicleParkingApis(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null) { _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; }
/// <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)); }
public TenPayHttpHandler(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3 = null) { InnerHandler = new HttpClientHandler(); _tenpayV3Setting = senparcWeixinSettingForTenpayV3 ?? Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; }
/// <summary> /// 获取完整件 /// </summary> /// <param name="senparcWeixinSettingForTenpayV3">ISenparcWeixinSettingForTenpayV3,也可以直接传入 SenparcWeixinSetting</param> /// <returns></returns> public static string GetKey(ISenparcWeixinSettingForTenpayV3 senparcWeixinSettingForTenpayV3) { return(GetKey(senparcWeixinSettingForTenpayV3.TenPayV3_MchId, senparcWeixinSettingForTenpayV3.TenPayV3_SubMchId)); }
/// <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)); }
/// <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; }