.NET5快速接入支付宝扫码支付

最近一个朋友的老板让他支付宝支付,但是他没搞过这事啊,然后找到我,让我帮他搞一下,然后找他老板给点小费,反正闲着也是闲着,最近生活非常拮据啊,所以就应下来了。

在开始之前需要先去支付宝开发平台->开发者中心,创建应用、为应用添加功能包、设置接口加签方式等开发信息,具体操作可以去开发者中心查看相关文档,由于支付宝的所有参数和设置都是由朋友那边准备好的,所以我也就省去了这一步,等这些基本工作都准备好后,就开始开始编程之旅了。

其实我也没有接入过支付宝支付,先去Nuget或者Github搜素一番,看有没有官方SDK或者是开源库可以方便快捷的接入支付功能, 


结果非常好,找打了Alipay Easy SDK for .NET,那么 直接通过NuGet管理面板搜索AlipayEasySDK进行安装,或者通过.NET CLI 执行dotnet add package AlipayEasySDK来进行安装。当然,喜欢哪种方式自行选择。SDK安装好后,先就需要进行支付宝的参数配置,我在appsetting.json里面新增了一个Alipay的配置节点,用于配置支付宝支付的相关参数 

"Alipay": {

    "Protocol": "https",

    "GatewayHost": "openapi.alipay.com",

    "SignType": "RSA2",

    "AppId": "AppId",

    "NotifyUrl": "回调地址",

    "MerchantPrivateKey": "应用的私钥",

    "AlipayPublicKey": "支付宝公钥"

  }

我采用的加签模式为公钥模式的偷懒做法,官方推荐推荐加签模式为公钥证书模式, 

配置文件配置好后,我们就可以去Startup.cs初始化我们的支付宝配置了

Config alipayConfig = Configuration.GetSection("Alipay").Get<Config>();

Factory.SetOptions(alipayConfig);

是不是感觉有些so easy,现在就可以去调用SDK提供的API来发起支付了。我们先来做一个二维码扫码支付

AlipayTradePrecreateResponse response = Factory.Payment.FaceToFace().PreCreate("商品名称", "订单id", "金额");

if (ResponseChecker.Success(response))

{

  string qrCode=response.QrCode; //二维码支付地址

}

Factory.Payment.FaceToFace().PreCreate会给我们返回一个二维码支付的支付,我们需要自己来生成二维码**(可以前端生成,也可以后端生成)**,我这里就是用的后端生成,这里我通过Nuget安装了一个叫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"); }

                    }

                }

最后就可以实现这样的效果。


但是这样有个不好的地方,就是不知道实时的支付状态,所以,我就准备了另外一种方式,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", "金额","支付成功后的跳转地址")

我们把这段html嵌入到页面中,就可以看到自动跳转至支付宝页面 

此时,我们扫码后就会看到有实时的处理状态 

支付宝支持成功的结果有异步回调和主动查询两种方式,一般来说,会两种方式同时使用,因为,谁也说不准,异步回调的时候会不会出问题。这里我就只演示一下异步回调的方式,我先新建一个接口来接口我们的回调参数

[HttpPost("payNotify")] 

public string PayNotify()

{

      IFormCollection collection = HttpContext.Request.Form;

      ICollection<string> keys = HttpContext.Request.Form.Keys;

    Dictionary<string, string> alipayResult = new Dictionary<string, string>();

            foreach (string key in keys)

            {

                alipayResult.Add(key, collection[key]);

            }


        }

,既然是异步回调,那么肯定是让支付宝能够访问到我们的接口,所以,我们需要把我们的接口暴露到外网。这里我用的是natapp,因为它可以免费创建两个通道,代理方式也是非常简单的,直接新建通道,然后下载对应版本的程序,通过命令行的方式运行即可




好了,这里我们就可以把我们的回调地址配置到刚才的配置文件中了http://v6thj2.natappfree.cc/api/PayCallback/payNotify,现在,我们来支付一分钱看看我们的劳动成果 

可以看到,我们支付成功后,支付宝会通知我们支付结果,在我们接到通知结果后,要记得验签和支付金额,然后去处理自己的业务逻辑。好了,.NET5接入支付宝支付就简单的讲这么多了。希望能对大家有所帮助。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容