Example #1
0
        /// <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"));
        }
Example #2
0
        public void GetPublicKeysAsyncTest()
        {
            BasePayApis basePayApis = new BasePayApis();
            var         publicKeys  = basePayApis.GetPublicKeysAsync().GetAwaiter().GetResult();

            Assert.IsNotNull(publicKeys);
            Console.WriteLine(publicKeys.ToJson(true));
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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));
        }
Example #5
0
        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);
        }
Example #6
0
        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);//通过验证
        }
Example #7
0
 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;
 }