public async Task <PaymentOrderBaseResponse> GeneratePaymentOrder(PaymentOrderRequest request) { var apiHost = await _appSettingService.Get(ShopKeys.ApiHost); var wxRequest = new WeChatPayUnifiedOrderRequest { Body = request.Subject, OutTradeNo = request.OrderNo, TotalFee = Convert.ToInt32(request.TotalAmount * 100), OpenId = request.OpenId, TradeType = "JSAPI", SpbillCreateIp = "127.0.0.1", NotifyUrl = $"{apiHost.Trim('/')}/api/mp/pay/notify/{request.OrderNo}", }; var response = await _client.ExecuteAsync(wxRequest); if (response?.ReturnCode == "SUCCESS" && response?.ResultCode == "SUCCESS") { var req = new WeChatPayLiteAppCallPaymentRequest { Package = "prepay_id=" + response.PrepayId }; // https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 // 将参数(parameter)给 小程序前端 让他调起支付API var parameter = await _client.ExecuteAsync(req); var json = JsonConvert.SerializeObject(parameter); return(JsonConvert.DeserializeObject <PaymentOrderResponse>(json)); } throw new Exception(response?.ReturnMsg); }
public async Task ExecuteAsync(HttpContext context) { try { var body = (await context.Request.ReadFormAsync()).AsNameValueCollection(); if (body?.Count == 0) { throw new ArgumentNullException(nameof(body)); } var request = new AppPayRequest(); request.AddParameters(new AppPayModel() { Body = body.Get("Body"), OutTradeNo = body.Get("Out_Trade_No"), TotalFee = int.Parse(body.Get("Total_Amount")) }); await context.Response.WriteAsync((await _client.ExecuteAsync(request)).ToJson()); } catch (System.Exception ex) { context.Response.StatusCode = StatusCodes.Status500InternalServerError; await context.Response.WriteAsync(ex.Message); } context.Response.ContentType = "application/json; charset=UTF-8"; await context.Response.Body.FlushAsync(); }
public async Task <PaymentOrderBaseResponse> GeneratePaymentOrder(PaymentOrderRequest request) { var ip = Dns.GetHostEntry(Dns.GetHostName()) .AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString() ?? "127.0.0.1"; var apiHost = await _appSettingService.Get(ShopKeys.ApiHost); var wxRequest = new WeChatPayUnifiedOrderRequest { Body = request.Subject, OutTradeNo = request.OrderNo, TotalFee = Convert.ToInt32(request.TotalAmount * 100), OpenId = request.OpenId, TradeType = "JSAPI", //SpbillCreateIp = "127.0.0.1", SpBillCreateIp = ip, NotifyUrl = $"{apiHost.Trim('/')}/api/mp/pay/notify/{request.OrderNo}", }; var config = await _appSettingService.Get <MiniProgramOptions>(); var opt = new WeChatPayOptions() { AppId = config.AppId, MchId = config.MchId, Secret = config.AppSecret, Key = config.Key }; var response = await _client.ExecuteAsync(wxRequest, opt); if (response?.ReturnCode == WeChatPayCode.Success && response?.ResultCode == WeChatPayCode.Success) { var req = new WeChatPayLiteAppSdkRequest { Package = $"prepay_id={response.PrepayId}" }; // https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 // 将参数(parameter)给 小程序前端 让他调起支付API var parameter = await _client.ExecuteAsync(req, opt); var json = JsonConvert.SerializeObject(parameter); return(JsonConvert.DeserializeObject <PaymentOrderResponse>(json)); } throw new Exception(response?.ReturnMsg); }
public async Task <OkObjectResult> ScanPay(string Body, string Out_Trade_No, int Total_Amount) { var request = new ScanPayRequest(); request.AddParameters(new ScanPayModel() { Body = Body, OutTradeNo = Out_Trade_No, TotalFee = Total_Amount }); return(Ok(await _client.ExecuteAsync(request))); }
public async Task <WeChatPayPlatformCertificate> GetCertificateAsync(IWeChatPayClient client, WeChatPayOptions options) { // 如果证书序列号已缓存,则直接使用缓存的 var platformCert = _certDictionary.Values.Where(cert => cert.EffectiveTime <DateTime.Now && cert.ExpireTime> DateTime.Now).FirstOrDefault(); if (platformCert != null) { return(platformCert); } // 否则重新下载新的平台证书 var request = new WeChatPayCertificatesRequest(); var response = await client.ExecuteAsync(request, options); foreach (var certificate in response.Certificates) { // 若证书序列号未被缓存,解密证书并加入缓存 if (!_certDictionary.ContainsKey(certificate.SerialNo)) { switch (certificate.EncryptCertificate.Algorithm) { case nameof(AEAD_AES_256_GCM): { var certStr = AEAD_AES_256_GCM.Decrypt(certificate.EncryptCertificate.Nonce, certificate.EncryptCertificate.Ciphertext, certificate.EncryptCertificate.AssociatedData, options.V3Key); var cert = new WeChatPayPlatformCertificate { SerialNo = certificate.SerialNo, EffectiveTime = DateTime.Parse(certificate.EffectiveTime), ExpireTime = DateTime.Parse(certificate.ExpireTime), Certificate = new X509Certificate2(Encoding.ASCII.GetBytes(certStr)) }; _certDictionary.TryAdd(certificate.SerialNo, cert); } break; default: throw new WeChatPayException($"Unknown algorithm: {certificate.EncryptCertificate.Algorithm}"); } } } // 重新从缓存获取 platformCert = _certDictionary.Values.Where(cert => cert.EffectiveTime <DateTime.Now && cert.ExpireTime> DateTime.Now).FirstOrDefault(); if (platformCert != null) { return(platformCert); } else { throw new WeChatPayException("Download certificates failed!"); } }
/// <summary> /// 提现到银行卡 /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task <PayBankResponse> PayBank(PayBankRequest request) { // 获取Rsa值 // var wxRequest = new WeChatPayRiskGetPublicKeyRequest(); // var response = await _client.ExecuteAsync(wxRequest, _wechatPayOption); var result = new PayBankResponse(); var wxRequest = new WeChatPayPayBankRequest { PartnerTradeNo = request.PartnerTradeNo, BankNo = request.BankNo, TrueName = request.TrueName, BankCode = request.BankCode, Amount = request.Amount, Desc = request.Desc }; try { var response = await _client.ExecuteAsync(wxRequest, _wechatPayOption); if (response.ReturnCode == WeChatPayCode.Success) { if (response.ResultCode == WeChatPayCode.Success) { result.IsSuccess = true; } result.Message = response.ErrCodeDes; } else { result.Message = response.ReturnMsg; } } catch (Exception ex) { result.Message = ex.Message; } return(result); }
public async Task <Result> Agree(int id) { var apply = await _withdrawalHistoryRepository.FirstOrDefaultAsync(id); if (apply == null) { return(Result.Fail(ResultCodes.IdInvalid)); } if (apply.Status != WithdrawalStatus.Apply) { return(Result.Fail(ResultCodes.RequestParamError, "当前申请状态不允许确认")); } var openId = await _custoemrRepository.Query() .Where(e => e.Id == apply.CustomerId) .Select(e => e.OpenId) .FirstOrDefaultAsync(); apply.Status = WithdrawalStatus.Success; apply.Message = "提现成功"; var wxRequest = new WeChatPayPromotionTransfersRequest { PartnerTradeNo = apply.PartnerTradeNo, OpenId = openId, CheckName = "FORCE_CHECK",// "NO_CHECK" ReUserName = apply.Name, Amount = apply.Amount, Desc = "提现" }; var response = await _client.ExecuteAsync(wxRequest, _weChatPayOptions); if (response.ReturnCode != WeChatPayCode.Success || response.ResultCode != WeChatPayCode.Success) { apply.Status = WithdrawalStatus.Failed; apply.Message = "提现异常,请重新申请"; apply.Description = response.ErrCodeDes; await _customerManager.UpdateAssets(apply.CustomerId, 0, apply.Total, -apply.ReservedAmount, "提现失败返回金额"); } await _withdrawalHistoryRepository.UpdateAsync(apply); return(Result.Ok()); }
private async Task <X509Certificate2> LoadPlatformCertificateAsync(string serial, WeChatPayOptions options) { // 如果证书序列号已缓存,则直接使用缓存的 if (_platformCertificateManager.TryGetValue(serial, out var certificate2)) { return(certificate2); } // 否则重新下载新的平台证书 var request = new WeChatPayCertificatesRequest(); var response = await _client.ExecuteAsync(request, options); foreach (var certificate in response.Certificates) { // 若证书序列号未被缓存,解密证书并加入缓存 if (!_platformCertificateManager.ContainsKey(certificate.SerialNo)) { switch (certificate.EncryptCertificate.Algorithm) { case nameof(AEAD_AES_256_GCM): { var certStr = AEAD_AES_256_GCM.Decrypt(certificate.EncryptCertificate.Nonce, certificate.EncryptCertificate.Ciphertext, certificate.EncryptCertificate.AssociatedData, options.V3Key); var cert = new X509Certificate2(Encoding.UTF8.GetBytes(certStr)); _platformCertificateManager.TryAdd(certificate.SerialNo, cert); } break; default: throw new WeChatPayException($"Unknown algorithm: {certificate.EncryptCertificate.Algorithm}"); } } } // 重新从缓存获取 if (_platformCertificateManager.TryGetValue(serial, out certificate2)) { return(certificate2); } else { throw new WeChatPayException("Download certificates failed!"); } }
// 刷卡支付 public async Task <OrderResult> MicroPay(PayRequest request) { var order = OrderService.Get(request.Id); var req = new WeChatPayMicroPayRequest { OutTradeNo = order.Order_SN, Body = order.Name, TotalFee = (int)(order.Order_Money * 100), SpBillCreateIp = App.Context.GetClientIp(), AuthCode = request.AuthCode }; logger.LogDebug($"Wepay MicroPay begin with: {request.Id}"); var res = await client.ExecuteAsync(req, options.Value); if (res.ReturnCode == "SUCCESS" && res.ResultCode == "SUCCESS") { logger.LogDebug($"Wepay MicroPay end with: {request.Id} SUCCESS"); return(new OrderResult { Success = true, Order = OrderService.Paidup( order, res.TransactionId, (decimal)(res.TotalFee / 100.0), res.TimeEnd, PayType.Wechat ) }); } logger.LogDebug($"Wepay MicroPay end with: {request.Id} Fail: {res.ErrCode}:{res.ErrCodeDes}"); return(new OrderResult { Success = false, Error = $"{res.ErrCode}:{res.ErrCodeDes}" }); }
public async Task <IActionResult> MicroPay(WeChatPayMicroPayViewModel viewModel) { var request = new WeChatPayMicroPayRequest { Body = viewModel.Body, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, SpBillCreateIp = viewModel.SpBillCreateIp, AuthCode = viewModel.AuthCode }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); // ViewData["response"] = response.Body; return(Ok(response.Body)); }
public async Task <IActionResult> GetCertificates() { if (Request.Method == "POST") { var request = new WeChatPayCertificatesRequest(); var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.Body; return(View()); } return(View()); }
// 刷卡支付 public async Task <WeChatPayMicroPayResponse> MicroPay(PayRequest request) { var order = orderService.GetByRef(request.Id); var req = new WeChatPayMicroPayRequest { OutTradeNo = order.Order_SN, Body = order.Name, TotalFee = (int)(order.Pay_Money * 100), SpBillCreateIp = App.Context.GetClientIp(), AuthCode = request.AuthCode }; return(await client.ExecuteAsync(req, options.Value)); }
public async Task <IActionResult> MicroPay(string out_trade_no, int total_fee, string body, string spbill_create_ip, string auth_code) { var request = new WeChatPayMicroPayRequest { Body = body, OutTradeNo = out_trade_no, TotalFee = total_fee, SpbillCreateIp = spbill_create_ip, AuthCode = auth_code }; var response = await _client.ExecuteAsync(request); ResponseModel responseModel = new ResponseModel() { code = HTTPResponseCode.PartialContent, data = response.Body }; Dictionary <string, string> result = new Dictionary <string, string>(); result.Add("return_code", response.ReturnCode); result.Add("return_msg", response.ReturnMsg); if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS") { responseModel.code = HTTPResponseCode.Successful; } else { responseModel.code = HTTPResponseCode.BadRequest; result.Add("err_code", response.ErrCode); result.Add("err_code_des", response.ErrCodeDes); } responseModel.message = JsonConvert.SerializeObject(result); return(Json(responseModel)); }
public async Task <IActionResult> AppPay(WeChatPayAppPayV3ViewModel viewModel) { var model = new WeChatPayTransactionsAppBodyModel { AppId = _optionsAccessor.Value.AppId, MchId = _optionsAccessor.Value.MchId, Amount = new Amount { Total = viewModel.Total, Currency = "CNY" }, Description = viewModel.Description, NotifyUrl = viewModel.NotifyUrl, OutTradeNo = viewModel.OutTradeNo, }; var request = new WeChatPayTransactionsAppRequest(); request.SetBodyModel(model); var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); if (!response.IsError) { var req = new WeChatPayAppSdkRequest { PrepayId = response.PrepayId }; var parameter = await _client.ExecuteAsync(req, _optionsAccessor.Value); // 将参数(parameter)给 ios/android端 // https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_4.shtml ViewData["parameter"] = JsonSerializer.Serialize(parameter); ViewData["response"] = response.Body; return(View()); } ViewData["response"] = response.Body; return(View()); }