支付宝有很多种支付产品,比如当面付、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>
商户订单号也在开放平台中可以看到,在 选看部分
填好信息,点击提交
看到这样的页面就成功了