Net Core 3 Mvc AliPay Demo
AliPay - PC
钻研了几天的Webpack, 这几天回归了我的本行.Net, 跟随大佬的脚步, 开始做上了支付宝的支付.
创建项目
首先创建一基于.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"
}
}
AliPay - Scan
接续上一篇博客, 在PC的支付过程中, 是通过在PC端把相关支付参数携带并跳转到支付宝, 在支付宝的网页中形成付款二维码, 付款成功之后再跳转回来, 而在本文的扫码支付则是通过支付参数从支付宝获取一个支付唯一的Link, 之后将此Link在本地生成二维码, 从而实现扫码付.
环境准备
本Demo的环境沿用上一篇PC Pay的环境, Link:
https://www.cnblogs.com/jerryqi/p/11771584.html
在上一节的基础上, 首先使用nuget安装QRCoder, 该类库用于将文本信息转换为二维码.
书写代码
首先新建一个F2FPayController, 里面主要包含两个Action, Scan和ScanCodeGen, 前者用来显示View来提供一个表单供填写参数并显示支付二维码, 后者则用来接收前端传过来的参数, 通过调用相关API返回二维码, 具体代码请参照我的Gitee:
https://gitee.com/jerryqi/netcore-practice/tree/master/AliPay
完成之后, 启动应用, 你就可以放肆消费了.
Net Core 3 Mvc AliPay Demo的更多相关文章
- Core开发-MVC 使用dotnet 命令创建Controller和View
NET Core开发-MVC 使用dotnet 命令创建Controller和View 使用dotnet 命令在ASP.NET Core MVC 中创建Controller和View,之前讲解过使 ...
- [.Net Core] 在 Mvc 中简单使用日志组件
在 Mvc 中简单使用日志组件 基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出. 目录 使用内置的日志组件 简单过渡到第三方组件 - NLog 使用内置的日志 下面使用控制器 Hom ...
- ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 MVC 前面几章节中,我们都是基于 ASP.NET 空项目 ...
- 一、Core基于MVC的全局过滤器验证
一.Core基于MVC的过滤器验证 1.添加一个过滤器.在Startup 中ConfigureServices方法里添加一个Filters 即我们自己授权代码类. public void Config ...
- 基于ASP.NET core的MVC站点开发笔记 0x01
基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...
- 【ASP.NET Core】MVC中自定义视图的查找位置
.NET Core 的内容处处可见,刷爆全球各大社区,所以,老周相信各位大伙伴已经看得不少了,故而,老周不考虑一个个知识点地去写,那样会成为年度最大的屁话,何况官方文档也很详尽.老周主要扯一下大伙伴们 ...
- Spring MVC入门Demo
1 参考http://blog.csdn.net/haishu_zheng/article/details/51490299,用第二种方法创建一个名为springmvcdemo的Maven工程. 2 ...
- .NET core Quartz 定时任务框架 demo
开始先建个空的web项目. 创建一个新类 QuartzFactory 狠狠的复制就完事了. public class QuartzFactory : IJobFactory { private rea ...
- 【ASP.NET Core】MVC模型绑定——实现同一个API方法兼容JSON和Form-data输入
在上一篇文章中,老周给大伙伴们大致说了下 MVC 下的模型绑定,今天咱们进行一下细化,先聊聊模型绑定中涉及到的一些组件对象. ------------------------------------- ...
随机推荐
- golang-切片copy
package main import ( "fmt" ) func main() { fmt.Println("-------------") data := ...
- hive 属性随笔记录
set hive.mapred.mode=strict; //设置hive执行模式,默认为nonstrict(非严格模式),这里设置为严格模式 set hiveconf:hive.cli.print. ...
- 加入购物车的功能wepy
1.先有一个加入购物车的按钮 <view wx:if="{{(detaildata.boughtNum < detaildata.buy_limit) && de ...
- appium+python 微信小程序的自动化
sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q -p 8889 -s addons.py http: ...
- P1310 表达式的值
P1310 表达式的值 题解 1.假设有两个布尔变量 x , y x0表示使得x=0的方案数 x1表示使得x=1的方案数 y0表示使得y=0的方案数 y1表示使得y=1的方案数 | 按位或 & ...
- 都2019年了,Java为什么还在坚持多线程不选择协程?
都2019年了,Java为什么还在坚持多线程不选择协程? - 知乎 https://www.zhihu.com/question/332042250/answer/734051666
- 对pdf中的图片进行自动识别
对pdf中的图片进行自动识别 商务合作,科技咨询,版权转让:向日葵,135—4855__4328,xiexiaokui#qq.com 原理:增强扫描 效果:自动识别所有图片中的文字,可以选择.复制,进 ...
- 积神经网络(CNN)的参数优化方法
http://www.cnblogs.com/bonelee/p/8528863.html 积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少. 积神经网络(C ...
- mysql 日期总结
select to_days(now()) #737733 select date_format(now(),'%Y-%m-%d') #2019-11-05 select CURRENT_DATE() ...
- markdown2的key
分享一个MarkDown2的授权key 邮箱地址: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGIm ...