| GasolineBlend/Controllers/PayController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| GasolineBlend/GasolineBlend.csproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| RiskControl.NewService/Pay/AliPayService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| RiskControl.NewService/Pay/Alipay/AlipayConfig.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| RiskControl.NewService/Pay/Alipay/AopSdk.dll | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| RiskControl.NewService/RiskControl.NewService.csproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
GasolineBlend/Controllers/PayController.cs
@@ -10,6 +10,7 @@ using RiskControl.NewService.Entity.RiskControlRR; using RiskControl.NewService.Extension; using RiskControl.NewService.Pay; using RiskControl.NewService.Pay.Alipay; using RiskControl.NewService.Service; using SKIT.FlurlHttpClient.Wechat.TenpayV3; using SKIT.FlurlHttpClient.Wechat.TenpayV3.Events; @@ -27,6 +28,7 @@ private PayOrderService _orderService = new PayOrderService(); private TenPayService _tenPay = new TenPayService(); private AliPayService _aliPay = new AliPayService(); #region 充值金额 @@ -129,9 +131,28 @@ var codeUrl = await _tenPay.GetPayQrCodeUrl(order.PayAmount, order.OrderNo); return SuccessNoShow(data: codeUrl); break; case EnumPayment.AliPay: var html = _aliPay.BuildAliPay(order.PayAmount,order.OrderNo); return SuccessNoShow(data: html); break; default: throw new NotSupportedException(); } } [HttpGet] public async Task TestAlipay() { var order = new PayOrder(); order.OrderType = "alipayTest"; order.PayAmount = 0.01; order.Payment = EnumPayment.AliPay; order.OrderNo = Guid.NewGuid().ToString("N"); //order.CreateUserId = OperatorProvider.Instance.Current.UserId; order.PaymentStatus = EnumPaymentStatus.Paying; order = await _orderService.AddAsync(order); var html = _aliPay.BuildAliPay(order.PayAmount,order.OrderNo); HttpContext.Response.Write(html); } /// <summary> @@ -179,6 +200,35 @@ var issuccess = await _orderService.UpdateAsync(order); } /// <summary> /// 支付宝支付消息回调 /// </summary> /// <returns></returns> [HttpPost] [LoginChecked(false)] public async Task AliPayNotify() { var data = HttpContext.Request.Form; var orderNo = data["out_trade_no"]; var order = await _orderService.GetModelAsync(a => a.OrderNo == orderNo); if (order == null) { LogHelper.Error($"没找到订单,OrderNO:[{orderNo}];" + $"回调消息:{data}"); return; } order.PaymentSysId = data["trade_no"]; // 支付成功 if (DateTime.TryParse(data["gmt_payment"],out DateTime pt)) order.PayTime = pt; order.PayTime = DateTime.Now; order.PaymentStatus = EnumPaymentStatus.Success; var issuccess = await _orderService.UpdateAsync(order); } } } GasolineBlend/GasolineBlend.csproj
@@ -49,6 +49,9 @@ <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> <ItemGroup> <Reference Include="AopSdk"> <HintPath>..\RiskControl.NewService\Pay\Alipay\AopSdk.dll</HintPath> </Reference> <Reference Include="BouncyCastle.Crypto, Version=1.8.6.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL"> <HintPath>..\packages\Portable.BouncyCastle.1.8.6\lib\net40\BouncyCastle.Crypto.dll</HintPath> </Reference> RiskControl.NewService/Pay/AliPayService.cs
New file @@ -0,0 +1,73 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Web; using Aop.Api; using Aop.Api.Request; using Aop.Api.Response; using Flurl.Http; using Newtonsoft.Json; using RiskControl.NewService.Pay.Alipay; namespace RiskControl.NewService.Pay { public class AliPayService { public string BuildAliPay( double payAmount, string orderNo) { var subject = "仁风控接口充值"; IAopClient client = new DefaultAopClient(AliPayConfig.Url , AliPayConfig.AppId , AliPayConfig.RsaPrivateKey , "json", "1.0", "RSA2" , AliPayConfig.RsaAliPublicKey, "UTF-8", false); AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); //异步接收地址,仅支持http/https,公网可访问 request.SetNotifyUrl(AliPayConfig.NotifyUrl); //同步跳转地址,仅支持http/https request.SetReturnUrl(AliPayConfig.ReturnUrl); /******必传参数******/ Dictionary<string, object> bizContent = new Dictionary<string, object>(); //商户订单号,商家自定义,保持唯一性 bizContent.Add("out_trade_no", orderNo); //支付金额,最小值0.01元 bizContent.Add("total_amount", payAmount); //订单标题,不可使用特殊符号 bizContent.Add("subject", subject); //电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY bizContent.Add("product_code", "FAST_INSTANT_TRADE_PAY"); /******可选参数******/ //bizContent.Add("time_expire", "2022-08-01 22:00:00"); ////商品明细信息,按需传入 //List<object> goodsDetails = new List<object>(); //Dictionary<string, object> goods1 = new Dictionary<string, object>(); //goods1.Add("goods_id", "goodsNo1"); //goods1.Add("goods_name", "子商品1"); //goods1.Add("quantity", 1); //goods1.Add("price", 0.01); //goodsDetails.Add(goods1); //bizContent.Add("goods_detail", goodsDetails); ////扩展信息,按需传入 //Dictionary<string, object> extendParams = new Dictionary<string, object>(); //extendParams.Add("sys_service_provider_id", "2088501624560335"); //bizContent.Add("extend_params", extendParams); string Contentjson = JsonConvert.SerializeObject(bizContent); request.BizContent = Contentjson; AlipayTradePagePayResponse response = client.pageExecute(request); return response.Body; } } } RiskControl.NewService/Pay/Alipay/AlipayConfig.cs
New file @@ -0,0 +1,61 @@ using System.Configuration; namespace RiskControl.NewService.Pay.Alipay { public static class AliPayConfig { #region Alipay config ///// <summary> ///// 服务地址 ///// </summary> //public static string Url = "https://openapi.alipay.com/gateway.do"; ///// <summary> ///// appid ///// </summary> //public static string AppId = "2021003191602070"; ///// <summary> ///// 异步接收地址,仅支持http/https,公网可访问 ///// </summary> //public static string NotifyUrl = "https://f84b17556.goho.co/pay/AliPayNotify"; ///// <summary> ///// 同步跳转地址,仅支持http/https ///// </summary> //public static string ReturnUrl = ""; ///// <summary> ///// 私钥 ///// </summary> //public static string RsaPrivateKey = @"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCG/uF/cg2Kvnqj+uW1e0KkONDDcLnwbNc6HrjISm3bPShF4OBcFRvOTa4fZTy8TKl1KIauPBS1qoss2Vk3/hYq3mw6eotL4giQNA3yxfZLXCwN5iumKeKYZVEoliXjt3FZJ5nw653LNjfJD5xR5czZBI2I0K1xUNhOWpqTJ4hcS5RvpoNcky9rsum/FCPQb7dnoNEakLh0o7CCt1rTcH1sKivVL+kc5t611hIRp/E7DF0hfzY5CYsANSB3ZYuIsW5iE2dxXmCVGEM9yhhpsNAnzm+4wJB7i36+uppZ/Uu1a2xQXZzvUW1vV2ZxMHgu21sZ0cseq1NaaU5VVlgYYjATAgMBAAECggEAAeDqImvj5FpiOoXzTGM6ui5QOWgILmBVXmmvCJqAjNx9AvvuI1nn2ScblTRDdBtdAFRgC2yqnRyScz1TEIRoqpAN0YKDDbtHgzo2N3qpwsK1mjvpv5Y1oQlH59ivDkwvN55ldgTRXVKT1ChzdHBOOXbmwVCmGT2WxQBdxk52h1JAwQ09DpYH87RccCn96khy9HZSXm889WFxyrP09CLxPckARmwvUS9EVEu+y8cqxx3bX2yPjvRIqU/k30GTxGX8VaByYVCfW0QwLXW6pxIYRnM7YPO5VpKjzlKCY1LapLjm4Qn9Ic8uG099aH9zqBojYolazfLjVTeuSBSqSohEgQKBgQDBHWT1e7kPhDXTgCyZE+xSAqiGvQCpvV87cbhHX6M2We058gltmD0amSKH4friYCWdUwPzqNyBdilMeE6JrE8b/MLjZc8wzgRfIOlRHgjCmrMNu9IT4hPO/+DT4TXnufsWvKD9sTSmwSQ8CmZfwWwT6qkJ7MgDiZecV0iXyvnlXQKBgQCy9ID2WT+Wb0KpL6A4sb6Orrd+7NS4FggO2XztQC6TN8i3qcIQd5ZA3c2eh9OjjCBvukokYi9kCePqsO280Kn5zYQpud/XG2qA19oClG3Zv8WJPA+HLs6ZBPAIM/Bh2wFJzeEQs+tla4GPdST/2dfX1j/1Ch1Whd4v0FB0LUAkLwKBgFAfWP78+Tg123tIB7jvajJQhgl5K2hBeNyZ/yIlzPrE7scG4+CDtH5voMMOAGCiEZknk1Ep82sHUnU2yScXxa7P/TAJ0p/mKiwp5IPSWUIcm0OMdMnpF9zfjzF5lDrzj/jMBGOdfUHeiqEak4URJD1TNBU5F3dYQ/4KvMS1417FAoGATFTCVVHIL7CRbHzmCIi4UT/xAPCf401ybnMSOFhyBVV8Besg3clEi7KQLBifi1kP1NhPG6nNsQwO7WI+ZZVTizvALdQcyDHngcGQOh15pbGI3nqB3RV4Bgj3IWiWFgdGS2bHo0o7E+2BO+GpwH/48xVt/mUsEmXTWe2vA37xpv0CgYEAvzvAFiPe1aWfiHqxnxuYX0hq3c3T4OmYCSwvxyYrZBqts7O17wGigltNiwqcAo4mQ28oY/OIug//rxlEk2awO3xtTOAPEMHlbqknuUHfy1ZA1FTJMfMaI5jUBrgWlM5wLRP257AF/JHppAzpeWPj+unshrqO1KRgYSsMMSWPI0M="; ///// <summary> ///// 支付宝公钥 ///// </summary> //public static string RsaAliPublicKey = @"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs31iMOQDsat5um5Cu++hoBjd2bkC+r6P8BiiEAC/LqLoMztORZfgQLonYuEIq6TruPk7BQHRqwXN+qsi/pEgO6StTHg6zBKG74zgiYx6nW9YV5/EW1vsRAV7ZvBAJrc4RNJlIVLO+PxcrcOJVLcU1N6xBEyJ1hgvndPVf2MlVnSnbYlHPorqrS6SdpBUwxjRekGekIAFLZEvD0HN2KBBxaIAGpsvM2R1l7mJP9Ign+StlMKRmoad256YmfaYzX4scY3NtGiZfIV3TzxzbESCm1m+CexSrG+443bw/St+m1fSSzBb0fpTpeJVCoQdUlBy3UHDbewc5ilZ+m9gXH7miQIDAQAB"; #endregion /// <summary> /// 服务地址 /// </summary> public static string Url = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; /// <summary> /// appid /// </summary> public static string AppId = "2021000122663405"; /// <summary> /// 异步接收地址,仅支持http/https,公网可访问 /// </summary> public static string NotifyUrl = "https://f84b17556.goho.co/pay/AliPayNotify"; /// <summary> /// 同步跳转地址,仅支持http/https /// </summary> public static string ReturnUrl = ""; /// <summary> /// 私钥 /// </summary> public static string RsaPrivateKey = @"MIIEpQIBAAKCAQEAv/+6YKOhqNv5AAejDruOfeDQ18irlpJQnBAhWpSL/xLMfX8x5tz1MtS8tCYRJxeluyP3y9jpMia7/waolIPmtJLMgSi8xYD2lB+rEE+9hb6vd37n6JgTXsniCweohHxZHNP2mSlUFEJ7C1LUIDdtQaCfFM4vsHXW6AXtmz7qqZyagvo0wW38brvt9iv5kxrc7I8v6qhpR1gWe0hEhANPOinqcgqnJ1P4btSM0tI23bvfAxcCkbEx8pTARe11s3CEip/iY3sJwub5168U4uoxHkZTwEEIzQnJimY6gaavPRC6aIJR/wRW3NNAmsTRsUhiSLv4SP9R9TAhuR1GrKJknwIDAQABAoIBADS8eCPtLg0khotEjbwRNj1LD/IFM2RDQhLrt02a+a0RK8vYsQs5a7wPhNlyj0mOjD4PzhNWvA7DZuXQnWNVq3uzyqo7V0ZketYKsMDlNihTTPzkhax0gPWLPCRNcTMauJtbeSNun6KE9CkTEiLbNo5NIQTk8WJlq6bFYhM/P9NgLrswV1YYLBF++QJ+Hai1FWvw+eK+s4PKEoDoKFPfbdBLUEt+m8TtzJwUJVAAJtuO6m/J/qxIVFNQdvyeGH3z6Cd7/As/PreintwuZ0xdy2XZIDSpsa4TnHYRF6huPsn+UKcQCuZSULyLgDVHgWLBn96/cQXU9ldHJDCB647OpIkCgYEA+l3mVa9W+Pamc5DM5OW4TjtBcq9/HRYlEIKB8WOvJnwLRw0cILFXd2msrM7xLojpAStkP42wkJP/7Z8w4klRCB7s0hCzaOQ4wBjPuZkXtBTtGNtjqh6JxV9zRjF7Qgv2khSPjNxCfU5yfLvYCnrII5cQQnrzDYWNdpKFpo/Vd3MCgYEAxFGh4Q4zQUe3Wn2d/oXWvqH3oYDWhnNOcCY3jWtkluCa1wGuhmkbnOG0iJ9TsBAjLNGBff69kVGLE69L+A8V/7F0IFyhkoWp8Bh6XQbS4DGEQ2pnyDyC2ljct0gUOm6fY5GsdbfWYn8O4bI+yKGd2/arL+9E9zl5LZD3j/JVGyUCgYEAkDmxa2DDcE3d2yrp7V4sCtz1udRBHIdaOKWFp4GuLzQ75uU1c9vVMBPvBel8ZDs4RpUxfa7orJClWMRgi6qChHQUJnq6b00xJ+/jEd6QGgwH/U68ng5TfSCcLi5o+8Yad1Ji01k68CZVq2cmb/sE+gOWuUVMaFisAkcruKSY6uMCgYEAg99uBRab2XMKOE//bHSNHvr/s84uzJvyCaWyVV3ZcPwpJtprWMCMGuMGeWvFNJRyfG2zNWaEAnSrHqr3Ngc0ONED96Uhp6H/2FcpAwpNZun8NajpU/lJ0NA2Wyug4utiR+kX1u+JpBpDbdplEDJ4LsTQk19/jS5fNvuVQG2BO70CgYEAvGHG4NFchIM2H84HK9RWYhkPMmkrd4l63bO8aAT4jeV5bH6Ta5FpMQT7RdiTWnGPPI9K0vfpdU1/ymew+Z01xFPae2Ldz9ZeQ7GwgI3U7kZ9DzhEAo6H7cjCSp+YXN2nJHMzrzamtaqyvQUFSUqCzspRUwp1vUjMnRc/ov0RsWc="; /// <summary> /// 支付宝公钥 /// </summary> public static string RsaAliPublicKey = @"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoAC3ITPVFHSd2VGonWkzz2yT1ugoCCf+mU6H0PYYa5VvwPkaBHJg3eVsxSNCp9WY2488tUBwF+UqUaKGkODYA0G1OnRgJVr4HATAo6IHQtesffjcIpG1rNQ1mABwL8gOxd41UziqUkJJ0olE1NsUhs3b7EYfj1lf8V57NlrKIMU7mt+ROBF0x7z/5EDWdtrPTese2Esh8jk5lKcH+eYEK2LMdGXfNRA49rc4YK/uFMzdYFoYMuEw/uY0AvLNntXtwXhLmAF011pzu4rvKNN6oV8+BvCpS8lUbsirKsRi5PCSPpUqkb54nerH3xTrOIVmbIGrPJnKHUhaNKQ+eqyJqwIDAQAB"; } } RiskControl.NewService/Pay/Alipay/AopSdk.dllBinary files differ
RiskControl.NewService/RiskControl.NewService.csproj
@@ -61,6 +61,10 @@ <Reference Include="Aliyun.Credentials, Version=1.3.1.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\packages\Aliyun.Credentials.1.3.1\lib\net45\Aliyun.Credentials.dll</HintPath> </Reference> <Reference Include="AopSdk, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>Pay\Alipay\AopSdk.dll</HintPath> </Reference> <Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL"> <HintPath>..\packages\BouncyCastle.Cryptography.2.1.1\lib\net461\BouncyCastle.Cryptography.dll</HintPath> </Reference> @@ -265,6 +269,8 @@ <Compile Include="Extension\PageExtension.cs" /> <Compile Include="Extension\Params\ReportSearchParam.cs" /> <Compile Include="Extension\QccMsgData.cs" /> <Compile Include="Pay\AliPayService.cs" /> <Compile Include="Pay\Alipay\AlipayConfig.cs" /> <Compile Include="Pay\TenPayService.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="QiChaCha\HttpMethod.cs" /> @@ -549,7 +555,9 @@ <Name>GasolineBlend.Entity</Name> </ProjectReference> </ItemGroup> <ItemGroup /> <ItemGroup> <Content Include="Pay\Alipay\AopSdk.dll" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" /> <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">