public async Task <T> ExecuteAsync <T>(IQPayRequest <T> request) where T : QPayResponse { // 字典排序 var sortedTxtParams = new QPayDictionary(request.GetParameters()) { { MCHID, Options.MchId }, { NONCE_STR, Guid.NewGuid().ToString("N") } }; if (string.IsNullOrEmpty(sortedTxtParams.GetValue(APPID))) { sortedTxtParams.Add(APPID, Options.AppId); } sortedTxtParams.Add(SIGN, QPaySignature.SignWithKey(sortedTxtParams, Options.Key)); var content = HttpClientEx.BuildContent(sortedTxtParams); Logger?.LogTrace(0, "Request:{content}", content); var body = await Client.DoPostAsync(request.GetRequestUrl(), content); Logger?.LogTrace(1, "Response:{body}", body); var parser = new QPayXmlParser <T>(); var rsp = parser.Parse(body); CheckResponseSign(rsp); return(rsp); }
public async Task <T> ExecuteAsync <T>(IWeChatPayRequest <T> request) where T : WeChatPayResponse { // 字典排序 var sortedTxtParams = new WeChatPayDictionary(request.GetParameters()) { { APPID, Options.AppId }, { MCH_ID, Options.MchId }, { NONCE_STR, Guid.NewGuid().ToString("N") } }; sortedTxtParams.Add(SIGN, WeChatPaySignature.SignWithKey(sortedTxtParams, Options.Key)); var content = HttpClientEx.BuildContent(sortedTxtParams); Logger.LogInformation(0, "Request Content:{content}", content); var rspContent = await Client.DoPostAsync(request.GetRequestUrl(), content); Logger.LogInformation(1, "Response Content:{content}", rspContent); var parser = new WeChatPayXmlParser <T>(); var rsp = parser.Parse(rspContent); CheckResponseSign(rsp); return(rsp); }
public async Task <T> ExecuteAsync <T>(IWeChatPayRequest <T> request) where T : WeChatPayResponse { try { // 字典排序 var sortedTxtParams = new WeChatPayDictionary(request.GetParameters()) { { mch_id, Options.MchId }, { nonce_str, Guid.NewGuid().ToString("N") }, { notify_url, Options.NotifyUrl } }; if (string.IsNullOrEmpty(sortedTxtParams.GetValue(appid))) { sortedTxtParams.Add(appid, Options.AppId); } sortedTxtParams.Add(sign, WeChatPaySignature.SignWithKey(sortedTxtParams, Options.Key)); var content = HttpClientEx.BuildContent(sortedTxtParams); var body = await Client.DoPostAsync(request.GetRequestUrl(), content); var parser = new WeChatPayXmlParser <T>(); var rsp = parser.Parse(body); CheckResponseSign(rsp); return(rsp); } catch (Exception ex) { logger?.LogError($"{DateTime.Now} ExecuteAsync(1)", ex.Message); return(null); } }
public async Task <T> ExecuteAsync <T>(IWeChatPayCertificateRequest <T> request) where T : WeChatPayResponse { try { var signType = true; // ture:MD5,false:HMAC-SHA256 var excludeSignType = true; if (CertificateClient == null) { throw new ArgumentNullException(nameof(Options.Certificate)); } // 字典排序 var sortedTxtParams = new WeChatPayDictionary(request.GetParameters()); if (request is WeChatPayTransfersRequest) { if (string.IsNullOrEmpty(sortedTxtParams.GetValue(mch_appid))) { sortedTxtParams.Add(mch_appid, Options.AppId); } sortedTxtParams.Add(mchid, Options.MchId); } else if (request is WeChatPayGetPublicKeyRequest) { sortedTxtParams.Add(mch_id, Options.MchId); sortedTxtParams.Add(sign_type, "MD5"); excludeSignType = false; } else if (request is WeChatPayPayBankRequest) { if (PublicKey == null) { throw new ArgumentNullException(nameof(Options.RsaPublicKey)); } var no = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Encrypt(sortedTxtParams.GetValue(enc_bank_no), PublicKey); sortedTxtParams.SetValue(enc_bank_no, no); var name = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Encrypt(sortedTxtParams.GetValue(enc_true_name), PublicKey); sortedTxtParams.SetValue(enc_true_name, name); sortedTxtParams.Add(mch_id, Options.MchId); sortedTxtParams.Add(sign_type, "MD5"); } else if (request is WeChatPayQueryBankRequest) { sortedTxtParams.Add(mch_id, Options.MchId); sortedTxtParams.Add(sign_type, "MD5"); } else if (request is WeChatPayGetTransferInfoRequest) { if (string.IsNullOrEmpty(sortedTxtParams.GetValue(appid))) { sortedTxtParams.Add(appid, Options.AppId); } sortedTxtParams.Add(mch_id, Options.MchId); sortedTxtParams.Add(sign_type, "MD5"); } else if (request is WeChatPayDownloadFundFlowRequest) { if (string.IsNullOrEmpty(sortedTxtParams.GetValue(appid))) { sortedTxtParams.Add(appid, Options.AppId); } sortedTxtParams.Add(mch_id, Options.MchId); signType = false; // HMAC-SHA256 } else if (request is WeChatPayRefundRequest) { if (string.IsNullOrEmpty(sortedTxtParams.GetValue(appid))) { sortedTxtParams.Add(appid, Options.AppId); } sortedTxtParams.Add(notify_url, Options.RefundNotifyUrl); sortedTxtParams.Add(mch_id, Options.MchId); } else if (request is WeChatPaySendRedPackRequest || request is WeChatPaySendGroupRedPackRequest) { if (string.IsNullOrEmpty(sortedTxtParams.GetValue(wxappid))) { sortedTxtParams.Add(wxappid, Options.AppId); } sortedTxtParams.Add(mch_id, Options.MchId); } else // 其他接口 { if (string.IsNullOrEmpty(sortedTxtParams.GetValue(appid))) { sortedTxtParams.Add(appid, Options.AppId); } sortedTxtParams.Add(mch_id, Options.MchId); } sortedTxtParams.Add(nonce_str, Guid.NewGuid().ToString("N")); sortedTxtParams.Add(sign, WeChatPaySignature.SignWithKey(sortedTxtParams, Options.Key, signType, excludeSignType)); var content = HttpClientEx.BuildContent(sortedTxtParams); logger.LogInformation($"{DateTime.Now} content:{content}"); logger.LogInformation($"{DateTime.Now} GetRequestUrl:{request.GetRequestUrl()}"); var body = await CertificateClient.DoPostAsync(request.GetRequestUrl(), content); logger.LogInformation($"{DateTime.Now} body:{body}"); var parser = new WeChatPayXmlParser <T>(); var rsp = parser.Parse(body); CheckResponseSign(rsp, signType, excludeSignType); return(rsp); } catch (Exception ex) { logger.LogInformation($"{DateTime.Now} ExecuteAsync6666:{ex.Message}", ex.Message); return(null); } }
public async Task <T> ExecuteAsync <T>(IWeChatPayCertificateRequest <T> request) where T : WeChatPayResponse { var useMD5 = true; var excludeSignType = true; if (CertificateClient == null) { throw new ArgumentNullException(nameof(Options.Certificate)); } // 字典排序 var sortedTxtParams = new WeChatPayDictionary(request.GetParameters()); if (request is WeChatPayTransfersRequest) { sortedTxtParams.Add(MCH_APPID, Options.AppId); sortedTxtParams.Add(MCHID, Options.MchId); } else if (request is WeChatPayGetPublicKeyRequest) { sortedTxtParams.Add(MCH_ID, Options.MchId); sortedTxtParams.Add(SIGN_TYPE, "MD5"); excludeSignType = false; } else if (request is WeChatPayPayBankRequest) { if (RsaPublicParameters == null) { throw new ArgumentNullException(nameof(Options.RsaPublicKey)); } var no = WeChatPaySignature.Encrypt(sortedTxtParams.GetValue(ENC_BANK_NO), RsaPublicParameters); sortedTxtParams.SetValue(ENC_BANK_NO, no); var name = WeChatPaySignature.Encrypt(sortedTxtParams.GetValue(ENC_TRUE_NAME), RsaPublicParameters); sortedTxtParams.SetValue(ENC_TRUE_NAME, name); sortedTxtParams.Add(MCH_ID, Options.MchId); sortedTxtParams.Add(SIGN_TYPE, "MD5"); } else if (request is WeChatPayQueryBankRequest) { sortedTxtParams.Add(MCH_ID, Options.MchId); sortedTxtParams.Add(SIGN_TYPE, "MD5"); } else if (request is WeChatPayGetTransferInfoRequest) { sortedTxtParams.Add(APPID, Options.AppId); sortedTxtParams.Add(MCH_ID, Options.MchId); sortedTxtParams.Add(SIGN_TYPE, "MD5"); } else if (request is WeChatPayDownloadFundFlowRequest) { sortedTxtParams.Add(APPID, Options.AppId); sortedTxtParams.Add(MCH_ID, Options.MchId); sortedTxtParams.Add(SIGN_TYPE, "HMAC-SHA256"); useMD5 = false; excludeSignType = false; } else if (request is WeChatPayRefundRequest) { sortedTxtParams.Add(APPID, Options.AppId); sortedTxtParams.Add(MCH_ID, Options.MchId); } else // 其他接口 { sortedTxtParams.Add(APPID, Options.AppId); sortedTxtParams.Add(MCH_ID, Options.MchId); } sortedTxtParams.Add(NONCE_STR, Guid.NewGuid().ToString("N")); sortedTxtParams.Add(SIGN, WeChatPaySignature.SignWithKey(sortedTxtParams, Options.Key, useMD5, excludeSignType)); var content = HttpClientEx.BuildContent(sortedTxtParams); Logger.LogInformation(0, "Request Content:{content}", content); var rspContent = await CertificateClient.DoPostAsync(request.GetRequestUrl(), content); Logger.LogInformation(1, "Response Content:{content}", rspContent); var parser = new WeChatPayXmlParser <T>(); var rsp = parser.Parse(rspContent); CheckResponseSign(rsp, useMD5, excludeSignType); return(rsp); }