/// <summary> /// 请求参数,获取结果 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <param name="data">如果为 GET 请求,此参数可为 null</param> /// <returns></returns> public async Task <T> RequestAsync <T>(string url, object data, int timeOut = Config.TIME_OUT, ApiRequestMethod requestMethod = ApiRequestMethod.POST, bool checkSign = true, Func <T> createDefaultInstance = null) where T : ReturnJsonBase/*, new()*/ { T result = null; try { HttpResponseMessage responseMessage = await GetHttpResponseMessageAsync(url, data, timeOut, requestMethod); //获取响应结果 string content = await responseMessage.Content.ReadAsStringAsync();//TODO:如果不正确也要返回详情 //检查响应代码 TenPayApiResultCode resutlCode = TenPayApiResultCode.TryGetCode(responseMessage.StatusCode, content); if (resutlCode.Success) { //TODO:待测试 //验证微信签名 //result.Signed = VerifyTenpaySign(responseMessage.Headers, content); var wechatpayTimestamp = responseMessage.Headers.GetValues("Wechatpay-Timestamp").First(); var wechatpayNonce = responseMessage.Headers.GetValues("Wechatpay-Nonce").First(); var wechatpaySignatureBase64 = responseMessage.Headers.GetValues("Wechatpay-Signature").First();//后续需要base64解码 var wechatpaySerial = responseMessage.Headers.GetValues("Wechatpay-Serial").First(); result = content.GetObject <T>(); if (checkSign) { try { var pubKey = await TenPayV3InfoCollection.GetAPIv3PublicKeyAsync(this._tenpayV3Setting, wechatpaySerial); result.VerifySignSuccess = TenPaySignHelper.VerifyTenpaySign(wechatpayTimestamp, wechatpayNonce, wechatpaySignatureBase64, content, pubKey); } catch (Exception ex) { throw new TenpayApiRequestException("RequestAsync 签名验证失败:" + ex.Message, ex); } } } else { result = createDefaultInstance?.Invoke() ?? GetInstance <T>(true); resutlCode.Additional = content; } //T result = resutlCode.Success ? (await responseMessage.Content.ReadAsStringAsync()).GetObject<T>() : new T(); result.ResultCode = resutlCode; return(result); } catch (Exception ex) { SenparcTrace.BaseExceptionLog(ex); result = createDefaultInstance?.Invoke() ?? GetInstance <T>(false); if (result != null) { result.ResultCode = new() { ErrorMessage = ex.Message }; } return(result); } }
/// <summary> /// 注册微信支付TenpayV3 /// </summary> /// <param name="registerService">RegisterService</param> /// <param name="tenPayV3Info">微信支付(新版本 V3)参数</param> /// <param name="name">公众号唯一标识名称</param> /// <returns></returns> public static IRegisterService RegisterTenpayRealV3(this IRegisterService registerService, Func <TenPayV3Info> tenPayV3Info, string name) { TenPayV3InfoCollection.Register(tenPayV3Info(), name); return(registerService); }