支付宝有很多种支付产品,比如当面付、APP支付、手机网站支付、电脑网站支付等,本篇文章讲的是电脑网站支付
1.创建项目
新建一个ASP.NET Core2.0的MVC项目
2.沙箱环境
支付宝的支付接口需要商家账户才能使用,那么问题来了,我们开发者练习、测试时怎么办呢
支付宝为我们提供了蚂蚁沙箱环境,可以协助开发者进行接口功能及主要功能的测试
沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info
3.生成密钥
进到开放平台-沙箱环境,会首先看到一个必看部分
分别是APPID、支付宝网关、密钥,这些都是之后开发时要用到的信息
(你们的密钥部分和我应该不太一样,因为我的已经设置过了)
这时你会发现密钥没有啊,那么密钥去哪获得呢
去下载支付宝官方提供的密钥生成工具
https://docs.open.alipay.com/291/105971
下载完成后打开 RSA签名验签工具.bat
点击 生成密钥 就会获得一个私钥和一个公钥
这时要注意几点
1.不是java开发的话,一定不要点Java适用,不然会出问题
2.私钥和公钥是对应的,如果私钥或公钥其中一个忘了,要重新生成一个,那么记得两个都换
3.这个公钥并不会在开发时用到,这个公钥是提供给支付宝的,给支付宝后,支付宝会再给你一个公钥,那个才是开发要使用的
生成公钥私钥后,记下来,然后回到开放平台,在密钥部分,把刚刚生成的公钥填上,然后就会得到一个支付宝公钥
接下来我们就可以开始开发了
配置SDK
新建一个Config类,在里面存储我们的配置
public class Config
{
//应用ID,您的APPID
public static string AppId = "";
//支付宝网关
public static string Gatewayurl = "";
//商户秘钥,您的原始格式RSA秘钥
public static string PrivateKey = "";
//支付宝公钥
public static string AlipayPublicKey = "";
//签名方式
public static string SignType = "RSA2";
//编码格式
public static string CharSet = "UTF-8";
}
这些数据的值,从开放平台都能看到,按照自己的填上
秘钥是你之前生成的私钥,支付宝公钥是后来在开放平台把商户公钥设置之后,获得的支付宝公钥,别用错了
添加SDK
支付宝的SDK其实就是一个类库,直接引用就行了
Install-Package Alipay.AopSdk.Core
如果你要看SDK的源码
源码地址:https://github.com/dotnetcore/Alipay.AopSdk.Core
支付
添加一个控制器PayController
在控制器里写一个 发出支付请求 的方法
/// <summary>
/// 发起支付请求
/// </summary>
/// <param name="tradeno">外部订单号,商户网站订单系统唯一的订单号</param>
/// <param name="subject">订单名称</param>
/// <param name="totalAmout">实付金额</param>
/// <param name="itemBody">商品描述</param>
[HttpPost]
public void PayRequest(OrderModel ordermodel)
{
DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",
Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);
// 组装业务参数model
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.Body = ordermodel.itemBody;
model.Subject = ordermodel.subject;
model.TotalAmount = ordermodel.totalAmout;
model.OutTradeNo = ordermodel.tradeno;
model.ProductCode = "FAST_INSTANT_TRADE_PAY";
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
// 设置同步回调地址
request.SetReturnUrl("http://localhost:5000/Pay/Callback");
// 设置异步通知接收地址
request.SetNotifyUrl("");
// 将业务model载入到request
request.SetBizModel(model);
var response = client.SdkExecute(request);
Console.WriteLine($"订单支付发起成功,订单号:{ordermodel.tradeno}");
//跳转支付宝支付
Response.Redirect(Config.Gatewayurl + "?" + response.Body);
}
这个方法需要几个参数(外部订单号、订单名称、付款金额、商品描述)
我们写一个页面,用来填写这些信息,并传给上面的方法
/// <summary>
/// 填写支付信息的页面
/// </summary>
/// <returns></returns>
public IActionResult PayInfo()
{
return View();
}
<h2>PC网站支付</h2>
<form action="/Pay/PayRequest" method="post" role="form">
<div>
<p>商户订单号:</p>
<input name="tradeno" value="" />
</div>
<div>
<p>订单名称:</p>
<input name="subject" value="一毛钱的py交易" />
</div>
<div>
<p>付款金额:</p>
<input name="totalAmout" value="0.1" />
</div>
<div>
<p>商品描述:</p>
<input name="itemBody" value="py交易" />
</div>
<input type="submit" value="提交"/>
</form>
商户订单号也在开放平台中可以看到,在 选看部分
填好信息,点击提交
看到这样的页面就成功了