/// <summary> /// 使用 Native 支付 /// </summary> /// <param name="productId"></param> /// <param name="hc"></param> /// <returns></returns> public async Task <IActionResult> NativePayCode(int productId, int hc) { var products = ProductModel.GetFakeProductList(); var product = products.FirstOrDefault(z => z.Id == productId); if (product == null || product.GetHashCode() != hc) { return(Content("商品信息不存在,或非法进入!2004")); } //使用 Native 支付,输出二维码并展示 MemoryStream fileStream = null;//输出图片的URL var price = (int)(product.Price * 100); var name = product.Name + " - 微信支付 V3 - Native 支付"; var sp_billno = string.Format("{0}{1}{2}", TenPayV3Info.MchId /*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6)); var notifyUrl = TenPayV3Info.TenPayV3Notify.Replace("/TenpayV3/", "/TenpayRealV3/"); TransactionsRequestData requestData = new(TenPayV3Info.AppId, TenPayV3Info.MchId, name, sp_billno, new TenpayDateTime(DateTime.Now.AddHours(1)), null, notifyUrl, null, new() { currency = "CNY", total = price }, null, null, null, null); BasePayApis basePayApis = new BasePayApis(); var result = await basePayApis.NativeAsync(requestData); //进行安全签名验证 if (result.VerifySignSuccess == true) { fileStream = QrCodeHelper.GerQrCodeStream(result.code_url); } else { fileStream = QrCodeHelper.GetTextImageStream("Native Pay 未能通过签名验证,无法显示二维码"); } return(File(fileStream, "image/png")); }
public void GetPublicKeysAsyncTest() { BasePayApis basePayApis = new BasePayApis(); var publicKeys = basePayApis.GetPublicKeysAsync().GetAwaiter().GetResult(); Assert.IsNotNull(publicKeys); Console.WriteLine(publicKeys.ToJson(true)); }
/// <summary> /// 获取当前支付账号下所有公钥信息 /// </summary> public async Task <PublicKeyCollection> GetPublicKeysAsync(ISenparcWeixinSettingForTenpayV3 tenpayV3Setting) { //TODO:可以升级为从缓存读取 if (publicKeys == null) { //获取最新的 Key var basePayApis = new BasePayApis(tenpayV3Setting); publicKeys = await basePayApis.GetPublicKeysAsync(); } return(publicKeys); }
/// <summary> /// 申请资金账单接口 /// </summary> /// <param name="date">日期,格式如:2021-08-27</param> /// <returns></returns> public async Task <IActionResult> FundflowBill(string date) { if (!Request.IsLocal()) { return(Content("出于安全考虑,此操作限定在本机上操作(实际项目可以添加登录权限限制后远程操作)!")); } var filePath = $"{date}-FundflowBill.csv"; Console.WriteLine("FilePath:" + filePath); using (var fs = new FileStream(filePath, FileMode.OpenOrCreate)) { BasePayApis basePayApis = new BasePayApis(); var result = await _basePayApis.FundflowBillQueryAsync(date, fs); fs.Flush(); } return(Content("已经下载倒指定目录,文件名:" + filePath)); }
public void CertificatesTest() { BasePayApis basePayApis = new BasePayApis(); var certs = basePayApis.CertificatesAsync().GetAwaiter().GetResult(); Assert.IsNotNull(certs); Console.WriteLine(certs.ToJson(true)); Assert.IsTrue(certs.ResultCode.Success); Assert.IsNull(certs.VerifySignSuccess);//不参与验证 Console.WriteLine(); var tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; var cert = certs.data.First(); var pubKey = SecurityHelper.AesGcmDecryptCiphertext(tenpayV3Setting.TenPayV3_APIv3Key, cert.encrypt_certificate.nonce, cert.encrypt_certificate.associated_data, cert.encrypt_certificate.ciphertext); Console.WriteLine(pubKey); Assert.IsNotNull(pubKey); }
public void AppAsyncTest() { var key = TenPayHelper.GetRegisterKey(Config.SenparcWeixinSetting); var TenPayV3Info = TenPayV3InfoCollection.Data[key]; var price = 100; var name = "单元测试-" + DateTime.Now.ToString(); var sp_billno = string.Format("{0}{1}{2}", TenPayV3Info.MchId /*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"), TenPayV3Util.BuildRandomStr(6)); TransactionsRequestData requestData = new(TenPayV3Info.AppId, TenPayV3Info.MchId, name, sp_billno, new TenpayDateTime(DateTime.Now.AddHours(1)), null, TenPayV3Info.TenPayV3Notify, null, new() { currency = "CNY", total = price }, null, null, null, null); BasePayApis basePayApis = new BasePayApis(); var result = basePayApis.AppAsync(requestData).GetAwaiter().GetResult(); Console.WriteLine("微信支付 V3 预支付结果:" + result.ToJson(true)); Assert.IsNotNull(result); Assert.IsTrue(result.ResultCode.Success); Assert.IsTrue(result.VerifySignSuccess == true);//通过验证 }
public TenPayRealV3Controller() { _tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; _basePayApis = new BasePayApis(_tenpayV3Setting); }
public TenPayRealV3Controller(SenparcHttpClient httpClient) { _tenpayV3Setting = Senparc.Weixin.Config.SenparcWeixinSetting.TenpayV3Setting; _basePayApis = new BasePayApis(_tenpayV3Setting); this._httpClient = httpClient; }