ASP.NET Core采用SDK方式使用支付宝沙箱环境对接支付
前言:本来想要研究各大运行商的支付接口怎么对接来着。第一个想到的是微信,但是微信这个坑货居然还要入驻才能进入到测试环境,真的屑啊(对开发者来说不怎么友好)。没办法,退而其次研究了一下支付宝是怎么对接的。当然这里说的是支付宝的沙箱环境。
正文开始:
支付宝提供的沙箱环境:
1、所谓的沙箱环境就是支付宝开放平台为开发者提供的与生产环境完全隔离的联调测试环境,开发者在沙箱环境中完成的调用不会对生产环境中的数据造成任何影响。
2、沙箱环境只有个人进行实名认证之后才能看到。(支付宝扫一扫登录实名认证:https://openhome.alipay.com/platform/appDaily.htm?tab=info)
>>>沙箱环境进入后可以看到已经自动生成了应用信息的一些基本信息还有支付宝网管地址,这些都很重要后续对接接口都会用到。
>>>在沙箱环境中打开沙箱账号页签可以看到系统已经自动生成了商家信息与买家信息,这里信息也很重要。
3、在沙箱环境中已自动开通产品的使用权限,从沙箱环境切换到线上环境使用时,需要完成产品的开通等操作。
4、需要扫码下载一个沙箱环境的客户端APP进行测试操作(目前仅支持Android手机扫码下载支付宝客户端沙箱版)
>>>下载安装好后输入买家信息中的用户名和密码登录
支付宝的交易流程
1、流程图介绍
- 商家系统调用 alipay.trade.page.pay(统一收单下单并支付页面接口)向支付宝发起支付请求,支付宝对商家请求参数进行校验,而后重新定向至用户登录页面。
- 用户确认支付后,支付宝通过 get 请求 returnUrl(商户入参传入),返回同步返回参数。
- 交易成功后,支付宝通过 post 请求 notifyUrl(商户入参传入),返回异步通知参数。
- 若由于网络等原因,导致商家系统没有收到异步通知,商家可自行调用 alipay.trade.query(统一收单线下交易查询接口)查询交易以及支付信息(商家也可以直接调用该查询接口,不需要依赖异步通知)。
支付宝的对接文档
2、因为本次是通过SDK的方式进行对接,所以在文档中可以直接进入在线调试模拟器,里面已经给写好了相关的代码逻辑。
3、因为这里是使用的支付宝官方提供的SDK(.NET 通用版),所以可以直接NuGet中直接进行下载,当然也有GitHub源码。(https://opendocs.alipay.com/open/54/103419#s1)
对接.NET适配的SDK(AlipaySDKNet.Standard)所碰到的问题
public static void SendAilPay() { string privateKey = ""; // 应用私钥 string alipayPublicKey = "";// 支付宝公钥 AlipayConfig alipayConfig = new AlipayConfig(); alipayConfig.ServerUrl = "https://openapi.alipaydev.com/gateway.do"; // 支付宝网管 alipayConfig.AppId = ""; // 沙箱环境中的AppId alipayConfig.PrivateKey = privateKey; alipayConfig.Format = "json"; alipayConfig.AlipayPublicKey = alipayPublicKey; alipayConfig.Charset = "UTF-8";// 这里是一个坑(在线调试工具上是UTF8,在调试工具上可以调试通过,但是在VS里面却走不通,必须为UTF-8) alipayConfig.SignType = "RSA2"; IAopClient alipayClient = new DefaultAopClient(alipayConfig); AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); AlipayTradePagePayModel model = new AlipayTradePagePayModel(); model.OutTradeNo = "20150320010101003"; // 订单流水号 model.TotalAmount = "8888"; // 具体金额 model.Subject = "iPhone 14 Pro";// 所交易的内容或者说是交易的物品 model.ProductCode = "FAST_INSTANT_TRADE_PAY"; request.SetBizModel(model); var data = request.GetBizModel(); AlipayTradePagePayResponse response = alipayClient.pageExecute(request); if (!response.IsError) { Console.WriteLine(response.Body); Console.WriteLine("调用成功"); } else { Console.WriteLine("调用失败"); } }
这里用到了公钥、私钥,接下来说说怎么搞
支付宝公钥私钥配置生成(只说公钥模式)
1、系统默认秘钥
>>>想要进入在线调试工具里面进行测试,就必须才用系统默认秘钥,要不然就进不去,博主也很不理解。
>>>当采用的是系统默认的秘钥且已启用公钥模式,点击查看可以看到里面生成的公钥与私钥。私钥分为JAVA语言版本与非JAVA语言版本。之所以是两个版本是因为Java版本的私钥版本为PKCS8,然而其他语言的是PKCS1,这里是一个巨坑。
2、自定义秘钥
这里说到自定义秘钥,就得用到支付宝自带的秘钥生成工具了。(https://opendocs.alipay.com/common/02kipk)点击进去根据操作系统进行下载即可,里面也有相关的注意事项。
>>下载安装成功后,点击立即使用,选择生成秘钥页签,点击生成秘钥
>>>点击生成秘钥后
>>>需注意,此时生成的应用公钥与私钥均为PKCS8格式,只能适配Java语言、并不适用于其他语言,这里需要进行格式转换。
>>>将生成的应用私钥复制到格式转换里面进行转换为PKCS1,(点击生成公钥并打开文件位置按钮)因为转换私钥的同时,也根据私钥生成了适配PKCS1格式公钥。
>>>将生成PKCS1版本的公钥,复制到支付宝开发平台上,进行生成支付宝支付公钥
>>>记录此时生成的支付宝公钥,将用于代码中使用,格式转换生成的PKCS1版本的私钥也要进行记录。
支付宝接口返回值处理
接口请求成功后,将会返回一堆数据,只需要取出属性body中的form代码块
>>>取出form代码块后,把它丢到HTML架构中
>>>代开这个HTML界面就可以了
>>>用沙箱环境中的买家账号进行登录,在跳转的界面中进行输入密码支付即可了。