最近一个朋友的老板让他支付宝支付,但是他没搞过这事啊,然后找到我,让我帮他搞一下,然后找他老板给点小费,反正闲着也是闲着,最近生活非常拮据啊,所以就应下来了。
在开始之前需要先去->,创建应用、为应用添加功能包、设置接口加签方式等开发信息,具体操作可以去开发者中心查看相关文档,由于支付宝的所有参数和设置都是由朋友那边准备好的,所以我也就省去了这一步,等这些基本工作都准备好后,就开始开始编程之旅了。
支付宝开发平台
开发者中心
其实我也没有接入过支付宝支付,先去Nuget或者Github搜素一番,看有没有官方SDK或者是开源库可以方便快捷的接入支付功能,
![](http://dingyue.ws.126.net/2021/0523/e15ab2d2p00qtjws1002pc0013b00hwm.png)
![](http://dingyue.ws.126.net/2021/0523/b7713105p00qtjws1001uc000wr00ilm.png)
结果非常好,找打了,那么 直接通过NuGet管理面板搜索进行安装,或者通过.NET CLI 执行来进行安装。当然,喜欢哪种方式自行选择。安装好后,先就需要进行,我在里面新增了一个的配置节点,用于配置支付宝支付的相关参数
Alipay Easy SDK for .NET
AlipayEasySDK
dotnet add package AlipayEasySDK
SDK
支付宝的参数配置
appsetting.json
Alipay
![](http://dingyue.ws.126.net/2021/0523/0599c9e4p00qtjws1000ec000s50050m.png)
"Alipay": { "Protocol": "https", "GatewayHost": "openapi.alipay.com", "SignType": "RSA2", "AppId": "AppId", "NotifyUrl": "回调地址", "MerchantPrivateKey": "应用的私钥", "AlipayPublicKey": "支付宝公钥" }
我采用的的偷懒做法,官方推荐推荐,
加签模式为公钥模式
加签模式为公钥证书模式
![](http://dingyue.ws.126.net/2021/0523/5c98bec5p00qtjws10008c000i0004mm.png)
配置文件配置好后,我们就可以去初始化我们的支付宝配置了Startup.cs
Config alipayConfig = Configuration.GetSection("Alipay").Get
(); Factory.SetOptions(alipayConfig);
是不是感觉有些,现在就可以去调用提供的API来发起支付了。我们先来做一个二维码扫码支付
so easy
SDK
AlipayTradePrecreateResponse response = Factory.Payment.FaceToFace().PreCreate("商品名称", "订单id", "金额");if (ResponseChecker.Success(response)){ string qrCode=response.QrCode; //二维码支付地址}
会给我们返回一个二维码支付的支付,我们需要自己来生成二维码**(可以前端生成,也可以后端生成)**,我这里就是用的后端生成,这里我通过Nuget安装了一个叫的类库,使用起来也是非常方便的。
Factory.Payment.FaceToFace().PreCreate
SkiaSharp.QrCode
using (var generator = new QRCodeGenerator()) { var qr = generator.CreateQrCode("支付宝二维码地址", ECCLevel.L); var info = new SKImageInfo(120, 120); using (var surface = SKSurface.Create(info)) { var canvas = surface.Canvas; canvas.Render(qr, info.Width, info.Height); using (var image = surface.Snapshot()) using (var data = image.Encode(SKEncodedImageFormat.Png, 100)) { return File(data.ToArray(), "image/jpeg"); } } }
最后就可以实现这样的效果。
![](http://dingyue.ws.126.net/2021/0523/f74fda13p00qtjws1001lc000wp00pem.png)
![](http://dingyue.ws.126.net/2021/0523/1f185e98p00qtjws1002vc000b300lbm.png)
但是这样有个不好的地方,就是不知道实时的支付状态,所以,我就准备了另外一种方式,PC端跳转到支付宝页面支付,
AlipayTradePagePayResponse response= Factory.Payment.Page().Pay("火锅", "00000009929929", "0.01", "http://www.baidu.com");if (ResponseChecker.Success(response)){ string html=response.Body; //html代码,嵌入前端会自动跳转至支付宝页面}
Factory.Payment.FaceToFace().PreCreate("商品名称", "订单id", "金额","支付成功后的跳转地址")
![](http://dingyue.ws.126.net/2021/0523/b0faa2fcp00qtjws10015c000u9008ym.png)
我们把这段html嵌入到页面中,就可以看到自动跳转至支付宝页面
![](http://dingyue.ws.126.net/2021/0523/3b21cf6fp00qtjws10027c000xh00msm.png)
此时,我们扫码后就会看到有实时的处理状态
支付宝支持成功的结果有异步回调和主动查询两种方式,一般来说,会两种方式同时使用,因为,谁也说不准,异步回调的时候会不会出问题。这里我就只演示一下异步回调的方式,我先新建一个接口来接口我们的回调参数
[HttpPost("payNotify")] public string PayNotify(){ IFormCollection collection = HttpContext.Request.Form; ICollection
keys = HttpContext.Request.Form.Keys; Dictionary
alipayResult = new Dictionary
(); foreach (string key in keys) { alipayResult.Add(key, collection[key]); } }
,既然是异步回调,那么肯定是让支付宝能够访问到我们的接口,所以,我们需要把我们的接口暴露到外网。这里我用的是,因为它可以免费创建两个通道,代理方式也是非常简单的,直接新建通道,然后下载对应版本的程序,通过命令行的方式运行即可
natapp
![](http://dingyue.ws.126.net/2021/0523/12abe923p00qtjws1002ec0018r00jym.png)
![](http://dingyue.ws.126.net/2021/0523/dcc2ce06p00qtjws10078c001gc00a8m.png)
![](http://dingyue.ws.126.net/2021/0523/f7b20fa8p00qtjws10003c000du002hm.png)
![](http://dingyue.ws.126.net/2021/0523/852bbf61p00qtjws1000sc000xu00hzm.png)
好了,这里我们就可以把我们的回调地址配置到刚才的配置文件中了,现在,我们来支付一分钱看看我们的劳动成果
http://v6thj2.natappfree.cc/api/PayCallback/payNotify
![](http://dingyue.ws.126.net/2021/0523/ae1ae6a6p00qtjws10035c000qj00afm.png)
可以看到,我们支付成功后,支付宝会通知我们支付结果,在我们接到通知结果后,要记得验签和支付金额,然后去处理自己的业务逻辑。好了,.NET5接入支付宝支付就简单的讲这么多了。希望能对大家有所帮助。
热门跟贴