Skip to content

Commit 462738b

Browse files
committed
新增支付宝电脑网站支付和手机网站支付服务
1 parent a58e822 commit 462738b

30 files changed

+793
-92
lines changed

build/version.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<VersionMajor>1</VersionMajor>
44
<VersionMinor>0</VersionMinor>
55
<VersionPatch>11</VersionPatch>
6-
<VersionQuality>20180520-1</VersionQuality>
6+
<VersionQuality>20180522-1</VersionQuality>
77
<VersionPrefix>$(VersionMajor).$(VersionMinor).$(VersionPatch)</VersionPrefix>
88
<VersionSuffix>preview-$(VersionQuality)</VersionSuffix>
99
</PropertyGroup>

readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,8 @@ https://github.com/dotnetcore/util/
450450
- 地址 [已发布]
451451
- 支付操作
452452
- 支付宝条码支付 [已发布]
453+
- 支付宝电脑网站支付 [已发布]
454+
- 支付宝手机网站支付 [已发布]
453455

454456
## 更新列表
455457

@@ -507,3 +509,4 @@ https://github.com/dotnetcore/util/
507509
- 2018年4月16日,更新了树型表格组件(Util.Ui.Angular/Prime/TreeTables),树型控制器,树型服务。
508510
- 2018年4月20日,更新了颜色选择器组件(Util.Ui.Angular/Prime/ColorPickers)。
509511
- 2018年4月23日,更新了富文本框编辑器组件(Util.Ui.Angular/CkEditor)。
512+
- 2018年5月22日,更新了支付宝电脑网站支付和手机网站支付操作。

sample/Util.Samples.Webs/Startup.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Extensions.Configuration;
77
using Microsoft.Extensions.DependencyInjection;
88
using Swashbuckle.AspNetCore.Swagger;
9+
using Util.Biz.Payments.Extensions;
910
using Util.Datas.Ef;
1011
using Util.Events.Default;
1112
using Util.Logs.Extensions;

sample/Util.Samples.Webs/Util.Samples.Webs.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
<ItemGroup>
3535
<ProjectReference Include="..\..\src\Util.Applications\06-Util.Applications.csproj" />
36+
<ProjectReference Include="..\..\src\Util.Biz.Payments\02-Util.Biz.Payments.csproj" />
3637
<ProjectReference Include="..\..\src\Util.Biz\01-Util.Biz.csproj" />
3738
<ProjectReference Include="..\..\src\Util.Datas\05-Util.Datas.csproj" />
3839
<ProjectReference Include="..\..\src\Util.Events\04-Util.Events.csproj" />

src/Util.Biz.Payments/02-Util.Biz.Payments.csproj

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@ Util是一个.net core平台下的应用框架,旨在提升小型团队的开
3131
</PropertyGroup>
3232

3333
<ItemGroup>
34-
<Compile Remove="Extensions\**" />
3534
<Compile Remove="WeChatPay\**" />
36-
<EmbeddedResource Remove="Extensions\**" />
3735
<EmbeddedResource Remove="WeChatPay\**" />
38-
<None Remove="Extensions\**" />
3936
<None Remove="WeChatPay\**" />
4037
</ItemGroup>
4138

39+
<ItemGroup>
40+
<PackageReference Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.1.0-rc1-final" />
41+
<PackageReference Include="Microsoft.AspNetCore.Razor" Version="2.1.0-rc1-final" />
42+
</ItemGroup>
43+
4244
<ItemGroup>
4345
<ProjectReference Include="..\Util.Logs\03-Util.Logs.csproj" />
4446
<ProjectReference Include="..\Util\01-Util.csproj" />
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System.Threading.Tasks;
2+
using Util.Biz.Payments.Alipay.Parameters.Requests;
3+
4+
namespace Util.Biz.Payments.Alipay.Abstractions {
5+
/// <summary>
6+
/// 支付宝电脑网站支付服务
7+
/// </summary>
8+
public interface IAlipayPagePayService {
9+
/// <summary>
10+
/// 支付,返回表单html
11+
/// </summary>
12+
/// <param name="request">电脑网站支付参数</param>
13+
Task<string> PayAsync( AlipayPagePayRequest request );
14+
/// <summary>
15+
/// 跳转到支付宝收银台
16+
/// </summary>
17+
/// <param name="request">电脑网站支付参数</param>
18+
Task RedirectAsync( AlipayPagePayRequest request );
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System.Threading.Tasks;
2+
using Util.Biz.Payments.Alipay.Parameters.Requests;
3+
4+
namespace Util.Biz.Payments.Alipay.Abstractions {
5+
/// <summary>
6+
/// 支付宝手机网站支付服务
7+
/// </summary>
8+
public interface IAlipayWapPayService {
9+
/// <summary>
10+
/// 支付,返回表单html
11+
/// </summary>
12+
/// <param name="request">手机网站支付参数</param>
13+
Task<string> PayAsync( AlipayWapPayRequest request );
14+
/// <summary>
15+
/// 跳转到支付宝收银台
16+
/// </summary>
17+
/// <param name="request">手机网站支付参数</param>
18+
Task RedirectAsync( AlipayWapPayRequest request );
19+
}
20+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System.Threading.Tasks;
2+
3+
namespace Util.Biz.Payments.Alipay.Configs {
4+
/// <summary>
5+
/// 支付宝配置提供器
6+
/// </summary>
7+
public class AlipayConfigProvider : IAlipayConfigProvider {
8+
/// <summary>
9+
/// 配置
10+
/// </summary>
11+
private readonly AlipayConfig _config;
12+
13+
/// <summary>
14+
/// 初始化支付宝配置提供器
15+
/// </summary>
16+
/// <param name="config">支付宝配置</param>
17+
public AlipayConfigProvider( AlipayConfig config ) {
18+
_config = config;
19+
}
20+
21+
/// <summary>
22+
/// 获取配置
23+
/// </summary>
24+
public Task<AlipayConfig> GetConfigAsync() {
25+
return Task.FromResult( _config );
26+
}
27+
}
28+
}

src/Util.Biz.Payments/Alipay/Parameters/AlipayParameterBuilder.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,18 @@ public AlipayParameterBuilder( AlipayConfig config ) {
2626
config.CheckNull( nameof( config ) );
2727
_config = config;
2828
_builder = new UrlParameterBuilder();
29-
Config();
29+
InitConfig();
3030
}
3131

3232
/// <summary>
33-
/// 设置配置
33+
/// 配置
34+
/// </summary>
35+
public AlipayConfig Config => _config;
36+
37+
/// <summary>
38+
/// 初始化配置
3439
/// </summary>
35-
private void Config() {
40+
private void InitConfig() {
3641
Format( "json" ).Charset( "utf-8" ).SignType( "RSA2" ).Timestamp().Version( "1.0" ).AppId( _config.AppId );
3742
}
3843

@@ -111,8 +116,9 @@ public AlipayParameterBuilder Content( string content ) {
111116
/// 设置内容
112117
/// </summary>
113118
/// <param name="builder">内容参数生成器</param>
114-
public AlipayParameterBuilder Content( AlipayContentBuilder builder ) {
115-
return Content( builder.ToJson() );
119+
/// <param name="isConvertToSingleQuotes">是否将双引号转成单引号</param>
120+
public AlipayParameterBuilder Content( AlipayContentBuilder builder, bool isConvertToSingleQuotes = false ) {
121+
return Content( builder.ToJson( isConvertToSingleQuotes ) );
116122
}
117123

118124
/// <summary>
@@ -139,6 +145,14 @@ private string GetSign() {
139145
return signManager.Sign();
140146
}
141147

148+
/// <summary>
149+
/// 获取值
150+
/// </summary>
151+
/// <param name="name">参数名</param>
152+
public string GetValue( string name ) {
153+
return _builder.GetValue( name );
154+
}
155+
142156
/// <summary>
143157
/// 输出结果
144158
/// </summary>
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
using System.IO;
2+
using Microsoft.AspNetCore.Mvc.Rendering;
3+
using Microsoft.AspNetCore.Razor.TagHelpers;
4+
using Util.Biz.Payments.Alipay.Configs;
5+
6+
namespace Util.Biz.Payments.Alipay.Parameters {
7+
/// <summary>
8+
/// 支付宝表单生成器
9+
/// </summary>
10+
public class FormBuilder {
11+
/// <summary>
12+
/// 表单生成器
13+
/// </summary>
14+
private readonly TagBuilder _builder;
15+
16+
/// <summary>
17+
/// 初始化支付宝表单生成器
18+
/// </summary>
19+
public FormBuilder() {
20+
_builder = new TagBuilder( "form" );
21+
}
22+
23+
/// <summary>
24+
/// 表单标识
25+
/// </summary>
26+
public string FormId { get; set; } = "formAlipay";
27+
28+
/// <summary>
29+
/// 是否自动提交
30+
/// </summary>
31+
public bool IsAutoSubmit { get; set; } = true;
32+
33+
/// <summary>
34+
/// 添加属性,当属性名已存在则忽略,也可进行替换
35+
/// </summary>
36+
/// <param name="name">属性名</param>
37+
/// <param name="value">属性值</param>
38+
/// <param name="replaceExisting">是否替换已存在的属性</param>
39+
public FormBuilder Attribute( string name, string value, bool replaceExisting = false ) {
40+
_builder.MergeAttribute( name, value, replaceExisting );
41+
return this;
42+
}
43+
44+
/// <summary>
45+
/// 添加属性,当属性名已存在则忽略
46+
/// </summary>
47+
/// <param name="name">属性名</param>
48+
/// <param name="value">属性值</param>
49+
public FormBuilder AddAttribute( string name, string value ) {
50+
if( string.IsNullOrWhiteSpace( value ) )
51+
return this;
52+
Attribute( name, value );
53+
return this;
54+
}
55+
56+
/// <summary>
57+
/// 添加input标签
58+
/// </summary>
59+
/// <param name="name">属性名</param>
60+
/// <param name="value">属性值</param>
61+
public FormBuilder AddInput( string name, string value ) {
62+
if( string.IsNullOrWhiteSpace( value ) )
63+
return this;
64+
var inputBuilder = new TagBuilder( "input" );
65+
inputBuilder.MergeAttribute( "name", name );
66+
inputBuilder.MergeAttribute( "value", value );
67+
_builder.InnerHtml.AppendHtml( inputBuilder );
68+
return this;
69+
}
70+
71+
/// <summary>
72+
/// 添加参数生成器
73+
/// </summary>
74+
/// <param name="builder">参数生成器</param>
75+
public FormBuilder AddParam( AlipayParameterBuilder builder ) {
76+
builder.CheckNull( nameof( builder ) );
77+
AddProperties( builder );
78+
AddInputs( builder );
79+
AddSubmitButton();
80+
return this;
81+
}
82+
83+
/// <summary>
84+
/// 添加属性列表
85+
/// </summary>
86+
private void AddProperties( AlipayParameterBuilder builder ) {
87+
AddAttribute( "id", FormId );
88+
AddAttribute( "name", FormId );
89+
AddAttribute( "action", builder.Config.GatewayUrl );
90+
AddAttribute( "charset", builder.GetValue( AlipayConst.Charset ) );
91+
AddAttribute( "method", "POST" );
92+
}
93+
94+
/// <summary>
95+
/// 添加input列表
96+
/// </summary>
97+
private void AddInputs( AlipayParameterBuilder builder ) {
98+
foreach( var item in builder.GetDictionary() )
99+
AddInput( item.Key, item.Value );
100+
}
101+
102+
/// <summary>
103+
/// 添加交按钮
104+
/// </summary>
105+
private void AddSubmitButton() {
106+
_builder.InnerHtml.AppendHtml( CreateSubmitButton() );
107+
}
108+
109+
/// <summary>
110+
/// 创建提交按钮
111+
/// </summary>
112+
private TagBuilder CreateSubmitButton() {
113+
var builder = new TagBuilder( "input" );
114+
builder.MergeAttribute( "type", "submit" );
115+
builder.MergeAttribute( "value", "提交" );
116+
builder.MergeAttribute( "style", "display:none;" );
117+
return builder;
118+
}
119+
120+
/// <summary>
121+
/// 获取结果
122+
/// </summary>
123+
public string Result() {
124+
using( var writer = new StringWriter() ) {
125+
_builder.WriteTo( writer, NullHtmlEncoder.Default );
126+
if ( IsAutoSubmit ) {
127+
var scriptBuilder = CreateScript();
128+
scriptBuilder.WriteTo( writer, NullHtmlEncoder.Default );
129+
}
130+
return writer.ToString();
131+
}
132+
}
133+
134+
/// <summary>
135+
/// 创建提交脚本
136+
/// </summary>
137+
private TagBuilder CreateScript() {
138+
var builder = new TagBuilder( "script" );
139+
builder.InnerHtml.AppendHtml( $"document.forms['{FormId}'].submit();" );
140+
return builder;
141+
}
142+
143+
/// <summary>
144+
/// 获取Html结果
145+
/// </summary>
146+
public override string ToString() {
147+
return Result();
148+
}
149+
}
150+
}
Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Util.Biz.Payments.Core;
2-
using Util.Maps;
32

43
namespace Util.Biz.Payments.Alipay.Parameters.Requests {
54
/// <summary>
@@ -10,12 +9,5 @@ public class AlipayBarcodePayRequest : PayParamBase {
109
/// 用户付款授权码
1110
/// </summary>
1211
public string AuthCode { get; set; }
13-
14-
/// <summary>
15-
/// 转换为支付参数
16-
/// </summary>
17-
public PayParam ToParam() {
18-
return this.MapTo<PayParam>();
19-
}
2012
}
2113
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Util.Biz.Payments.Core;
2+
3+
namespace Util.Biz.Payments.Alipay.Parameters.Requests {
4+
/// <summary>
5+
/// 电脑网站支付参数
6+
/// </summary>
7+
public class AlipayPagePayRequest : PayParamBase {
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Util.Biz.Payments.Core;
2+
3+
namespace Util.Biz.Payments.Alipay.Parameters.Requests {
4+
/// <summary>
5+
/// 手机网站支付参数
6+
/// </summary>
7+
public class AlipayWapPayRequest : PayParamBase {
8+
}
9+
}

0 commit comments

Comments
 (0)