支付宝电脑支付流程为使用支付宝官方sdk通过获取的支付宝参数构造DefaultAopClient实例,操作实例设置SetBizModel,设置SetNotifyUrl最后执行SdkExecute方法得到AlipayTradeAppPayResponse实例的Body属性,前端只需要获取该Body值写入到document中(相当于写入一个自动提交的表单)即可跳转到支付宝支付。
1.asp.net core平台没有支付宝官方sdk,但在nuget中搜索Alipay.AopSdk.Core并安装,该sdk功能和官方 framework的功能一致可以直接使用
2.定义支付宝配置类,配置类可以填写默认参数使用默认值,也可以从数据库/配置中读取配置赋值到该类,定义如下
public class AlipayConfig ???{ ???????// 应用ID,您的APPID ???????public string app_id = ""; ???????// 支付宝网关 ???????public string gatewayUrl = "https://openapi.alipay.com/gateway.do"; ???????// 商户私钥,您的原始格式RSA私钥 ???????public string private_key = ""; ???????// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥,注意不是应用公钥,不是应用公钥,不是应用公钥。 ???????public string alipay_public_key = ""; ???????// 签名方式 ???????public string sign_type = "RSA2"; ???????// 编码格式 ???????public string charset = "UTF-8"; ???????// 同步回调地址 ???????public string return_url = "; ???????// 异步回调地址 ???????public string notify_url = ""; ???}
3.支付宝电脑2.0支付业务类,控制器中直接调用该业务方法,返回的一串表单字符串ajax传给前端直接追加写入到body中即可跳转支付宝支付
public class AlipayService ???{ ???????#region 字段 ???????AlipayConfig alipayConfig = new AlipayConfig(); ???????#endregion ???????#region 构造方法 ???????public AlipayService() ???????{ ???????} ???????public AlipayService(AlipayConfig alipayConfig) ???????{ ???????????this.alipayConfig = alipayConfig; ???????} ????????#endregion ???????/// <summary> ???????/// 支付宝电脑网站2.0支付,成功返回表单信息直接写入Response,失败返回空 ???????/// </summary> ???????/// <param name="out_trade_no">订单号</param> ???????/// <param name="subject">订单名称</param> ???????/// <param name="total_amout">付款金额</param> ???????/// <param name="body">商品描述</param> ???????/// <returns></returns> ???????public string GetAliPayTradePayRes(string out_trade_no, string subject, string total_amout, string body) ???????{ ???????????DefaultAopClient client = new DefaultAopClient(alipayConfig.gatewayUrl, alipayConfig.app_id, alipayConfig.private_key, "json", "1.0", alipayConfig.sign_type, alipayConfig.alipay_public_key, alipayConfig.charset, false); ???????????// 组装业务参数model ???????????AlipayTradePagePayModel model = new AlipayTradePagePayModel(); ???????????model.Body = body; ???????????model.Subject = subject; ???????????model.TotalAmount = total_amout; ???????????model.OutTradeNo = out_trade_no; ???????????model.ProductCode = "FAST_INSTANT_TRADE_PAY"; ???????????AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); ???????????// 设置同步回调地址 ???????????request.SetReturnUrl(alipayConfig.return_url); ???????????// 设置异步通知接收地址 ???????????request.SetNotifyUrl(alipayConfig.notify_url); ???????????// 将业务model载入到request ???????????request.SetBizModel(model); ???????????AlipayTradePagePayResponse response = null; ???????????try ???????????{ ???????????????response = client.pageExecute(request, null, "post"); ???????????????//返回正常生成的表单信息,自动提交到支付宝页面,原生成信息可见改为隐藏 ???????????????return response.Body.Replace("<form", "<form style=‘display:none‘"); ???????????} ???????????catch (Exception exp) ???????????{ ???????????????return ""; ???????????} ???????} ????}
asp.net core 支付宝 电脑2.0支付
原文地址:https://www.cnblogs.com/jomzhang/p/9210337.html