AliPay
钻研了几天的Webpack, 这几天回归了我的本行.Net, 跟随大佬的脚步, 开始做上了支付宝的支付, 该Demo先分析传统的PC端网页支付, 面对面的支付将会在下一篇博客更新.
创建项目
首先创建一基于.Net Core3.0的MVC项目, 然后引用一下大佬写的支付类库Alipay.AopSdk.AspnetCore. 这一步很关键, 方法大佬都给你分装好了, 配置完了之后直接调用就行.
注册框架
.Net Core天生自带依赖注入, 要想在代码中直接使用注册的服务, 就需要在项目启动时注册该服务. 在Startup的ConfigureServices中添加如下代码:
var alipayOptions = Configuration.GetSection("Alipay").Get<AlipayOptions>(); services.AddAlipay(options => options.SetOption(alipayOptions));
上述代码实际上是注册了AlipayOptions, 而这些配置参数来源于配置文件, 格式如下:
{ "Alipay": { "AlipayPublicKey": "", "AppId": "", "CharSet": "UTF-8", "Gatewayurl": "https://openapi.alipaydev.com/gateway.do", "PrivateKey": "", "SignType": "RSA2", "Uid": "" } }
最简单的方法是你直接把它扔进appsettings.json, 而我采用了稍微复杂一点的方法, 注册自定义的配置文件alipay.json, 自定义配置文件不会自动加载, 需要在Program.cs中添加如下注册代码:
Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureAppConfiguration(config => { config.AddJsonFile("alipay.json"); }); webBuilder.UseStartup<Startup>(); });
书写代码
上述都还只是准备工作, 这部分是代码, 新建一个PayController, 里面包含发起支付、订单查询、退款、退款查询、订单关闭五大功能, 每个功能包含一个Post的Action来接收前端传过来的参数, 和一个Get的Action+View来渲染界面, 具体代码请参照我的Gitee:
https://gitee.com/jerryqi/netcore-practice/tree/master/AliPay
实际上原理很简单, 其实就是给出一个简单的前端界面, 允许使用者自定义参数来调用API, 要写的简单的话, 就写一个Console把API调用一遍就行了, 但是这样不太直观. 总结来说, 就是前端传参数到后端, 后端封装成请求请求支付宝, 支付宝返回结果.
开通账号
做支付测试, 首先需要有一个测试账号啊, 我没有土豪到拿白花花的银子去做测试啊, 支付宝就有这一样一个沙箱测试环境, 相当于一个阉割版的支付宝, 里面拥有完整的支付功能, 在这个里面你可以随意给自己充钱, 并且随意花钱, 做一会真正的土豪. 地址:
https://openhome.alipay.com/platform/appDaily.htm?tab=info
打开之后, 你直接用自己的个人支付宝扫码登陆进去就算注册成功了, 登陆上去之后一次打开: 开发者中心->研发服务, 结下来就是各个参数的配置:
沙箱应用
在该选项卡需要配置RSA或者RSA2密钥, 生成工具可以使用AliPay推荐的-支付宝开放平台开发助手, 下载地址:
https://docs.open.alipay.com/291/105971
生成的应用公钥填入: RSA(SHA1)密钥, 填入完之后, 支付宝会相应的生成支付宝公钥. 在该选项卡需要记住以下几个参数:
- 开发者助手生成的私钥
- 支付宝生成的公钥
APPID
此处还要下载一个沙箱测试专用的支付宝, 下载链接在该选项卡下方可以找到.沙箱账号
打开沙箱账号选项卡, 里面提供了两个账号, 一个商家信息, 一个买家信息, 分别的作用是:
商家信息
这里面有个要用到的重要参数:商户UID
买家信息
这个信息是你上述步骤下载的沙箱版支付宝的登陆账号以及密码, 也是这里, 你可以随意给自己的账号充钱, 土豪一把.
配置打通
在开通账号的步骤中, 我提到了四个重要的参数, 对配置文件一次对好入座:
- 需要注意的是我们使用支付宝开放平台开发助手生成的是RSA(SHA1)密钥, 因此SignType是RSA
{ "Alipay": { "AlipayPublicKey": "支付宝生成的公钥", "AppId": "APPID", "CharSet": "UTF-8", "Gatewayurl": "https://openapi.alipaydev.com/gateway.do", "PrivateKey": "开发者助手生成的私钥", "SignType": "RSA", "Uid": "商户UID" } }
完成之后, 启动应用, 你就可以放肆消费了.