.Net 支付宝电脑网站支付

news/2024/5/19 12:58:45/文章来源:https://blog.csdn.net/qq_35601066/article/details/120072610

一、沙箱环境

沙箱环境是一个能让开发者快速开发以及联调的辅助环境,开发者只需要登录支付宝开放平台=>进入开发服务=>设置秘钥,获取APPID、支付宝网关、支付宝公钥、应用私钥就可以进行业务平台支付功能的开发,无需等待正式环境支付应用上线、签约的审核。

注意:
1.支付时,需要使用沙箱买家账号支付。否则扫描二维码付款时,会提示二维码失效。
2.如果下单过程出现“支付存在钓鱼风险!”,可能是登录了该沙箱环境的支付宝账号导致的,退出账号重启浏览器。
3.开发者业务平台支付功能正式上线时,务必确保相关支付配置为正式环境。

二、支付流程

电脑网站支付.png

  1. 商户系统调用 alipay.trade.page.pay(统一收单下单并支付页面接口)向支付宝发起支付请求,支付宝对商户请求参数进行校验,而后重新定向至用户登录页面。

  2. 用户确认支付后,支付宝通过 get 请求 returnUrl(商户入参传入),返回同步返回参数。

  3. 交易成功后,支付宝通过 post 请求 notifyUrl(商户入参传入),返回异步通知参数。

  4. 若由于网络等原因,导致商户系统没有收到异步通知,商户可自行调用 alipay.trade.query(统一收单线下交易查询)接口查询交易以及支付信息(商户也可以直接调用该查询接口,不需要依赖异步通知)。

注意:

  • 由于同步返回的不可靠性,支付结果必须以异步通知或查询接口返回为准,不能依赖同步跳转。

  • 商户系统接收到异步通知以后,必须通过验签(验证通知中的 sign 参数)来确保支付通知是由支付宝发送的。

  • 接收到异步通知并验签通过后,请务必核对通知中的 app_id、out_trade_no、total_amount 等参数值是否与请求中的一致,并根据 trade_status 进行后续业务处理。

  • 在支付宝端,partnerId 与 out_trade_no 唯一对应一笔单据,商户端保证不同次支付 out_trade_no 不可重复;若重复,支付宝会关联到原单据,基本信息一致的情况下会以原单据为准进行支付。

三、签名

支付宝开放平台支持使用 普通公钥、公钥证书 两种签名方式。

  • 普通公钥:
    即生成一对 RSA 密钥(应用公钥、应用私钥),使用公钥(public key)为系统进行加密,并将密文发送给解密者,解密者使用私钥(private key)解密将密文解码为明文。

  • 公钥证书:
    即在普通公钥的基础上增加证书签名,证书签名的优势在于引入了 CA 机构对公钥持有者进行身份识别,保证该证书所属实体的真实性,以实现报文的抗抵赖,具备更高的安全性。

四、异步通知说明

对于 PC 网站支付的交易,在用户支付完成之后,支付宝会根据 API 中商户传入的 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商户系统。

  • 支付宝是用 POST 方式发送通知信息,因此该页面中获取参数的方式,如:request.Form(“out_trade_no”)、$_POST[‘out_trade_no’]。
  • 程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是 success 这7个字符,支付宝服务器会不断重发通知,直到超过 24 小时 22 分钟。一般情况下,25 小时以内完成 8 次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h)。
  • 当商户收到服务器异步通知并打印出 success 时,服务器异步通知参数 notify_id 才会失效。也就是说在支付宝发送同一条异步通知时(包含商户并未成功打印出 success 导致支付宝重发数次通知),服务器异步通知参数 notify_id 是不变的。

五、集成使用SDK

支付宝开放平台提供了 服务端SDK ,包含 JAVA、PHP、NodeJS、Python 和 .NET 五种语言,封装了签名 & 验签、HTTP 接口请求等基础功能。
1.安装Nuget包:

Install-Package AlipaySDKNet -Version 4.6.0

2.业务平台支付示例:

using Alipay.Demo.App_Start;
using Aop.Api;
using Aop.Api.Request;
using Aop.Api.Response;
using Aop.Api.Util;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace Alipay.Demo.Controllers
{public class AliPayController : Controller{public ActionResult Order(){IAopClient client = new DefaultAopClient("https://openapi.alipaydev.com/gateway.do", config.app_id, config.private_key, "json", "1.0", config.sign_type, config.alipay_public_key, config.charset, false);AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();request.SetNotifyUrl("http://www.xxx.com/AliPay/NotifyUrl");request.SetReturnUrl("http://www.xxx.com/AliPay/ReturnUrl");Dictionary<string, object> bizContent = new Dictionary<string, object>();bizContent.Add("out_trade_no", "202108170101010047");bizContent.Add("total_amount", 0.01);bizContent.Add("subject", "测试商品");bizContent.Add("product_code", "FAST_INSTANT_TRADE_PAY");//bizContent.Add("time_expire", "2022-08-01 22:00:00");商品明细信息,按需传入//List<object> goodsDetails = new List<object>();//Dictionary<string, object> goods1 = new Dictionary<string, object>();//goods1.Add("goods_id", "goodsNo1");//goods1.Add("goods_name", "子商品1");//goods1.Add("quantity", 1);//goods1.Add("price", 0.01);//goodsDetails.Add(goods1);//bizContent.Add("goods_detail", goodsDetails);扩展信息,按需传入//Dictionary<string, object> extendParams = new Dictionary<string, object>();//extendParams.Add("sys_service_provider_id", "2088501624560335");//bizContent.Add("extend_params", extendParams);string Contentjson = JsonConvert.SerializeObject(bizContent);request.BizContent = Contentjson;AlipayTradePagePayResponse response = client.pageExecute(request);return Content(response.Body, "text/html");}public ActionResult NotifyUrl(){/* 实际验证过程建议商户在验签通过后,添加以下校验。1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)4、验证app_id是否为该商户本身。*/Dictionary<string, string> sArray = GetRequestPost();if (!sArray.Any()){return Json("fail");}bool flag = AlipaySignature.RSACheckV1(sArray, config.alipay_public_key, config.charset, config.sign_type, false);if (flag){//交易状态//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//请务必判断请求时的total_amount与通知时获取的total_fee为一致的//如果有做过处理,不执行商户的业务程序//注意://退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知string trade_status = Request.Form["trade_status"];if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS"){//.....}return Json("success");}else{return Json("fail");}}public ActionResult ReturnUrl(){/* 实际验证过程建议商户在验签通过后,添加以下校验。1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)4、验证app_id是否为该商户本身。*/Dictionary<string, string> sArray = GetRequestGet();if (!sArray.Any()){return Json("参数无效",JsonRequestBehavior.AllowGet);}bool flag = AlipaySignature.RSACheckV1(sArray, config.alipay_public_key, config.charset, config.sign_type, false);if (flag){return Json("同步验证通过", JsonRequestBehavior.AllowGet);}else{return Json("同步验证失败", JsonRequestBehavior.AllowGet);}}public Dictionary<string, string> GetRequestGet(){int i = 0;Dictionary<string, string> sArray = new Dictionary<string, string>();NameValueCollection coll;//coll = Request.Form;coll = Request.QueryString;String[] requestItem = coll.AllKeys;for (i = 0; i < requestItem.Length; i++){sArray.Add(requestItem[i], Request.QueryString[requestItem[i]]);}return sArray;}public Dictionary<string, string> GetRequestPost(){int i = 0;Dictionary<string, string> sArray = new Dictionary<string, string>();NameValueCollection coll;//coll = Request.Form;coll = Request.Form;String[] requestItem = coll.AllKeys;for (i = 0; i < requestItem.Length; i++){sArray.Add(requestItem[i], Request.Form[requestItem[i]]);}return sArray;}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;namespace Alipay.Demo.App_Start
{public class config{//APPID 即创建应用后生成。public static string app_id => "";// 支付宝网关//public static string gatewayUrl => "https://openapi.alipay.com/gateway.do";public static string gatewayUrl => "https://openapi.alipaydev.com/gateway.do";//沙箱// 商户私钥(开发者私钥,由开发者自己生成),您的原始格式RSA私钥public static string private_key => "";// 支付宝公钥,由支付宝生成。查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。public static string alipay_public_key => "";// 签名方式:商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2。public static string sign_type => "RSA2";// 编码格式public static string charset => "UTF-8";// 参数返回格式,只支持 JSON 格式。public static string formate => "json";}
}




参考:
https://opendocs.alipay.com/open/270/01didh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_804667.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net微信电脑网站支付(api v2)

商户或企业前往微信开放平台申请开通微信支付&#xff0c;需要注意的是微信支付功能不对个人用户开放。开通支付功能后&#xff0c;会获取到以下微信支付相关的配置信息&#xff1a; appid&#xff1a;是微信公众账号或开放平台APP的唯一标识&#xff0c;在公众平台申请公众账…

如何让你的网站排名靠前

网站做好了&#xff0c;怎样才能让你的网站在各大搜索引擎中排名靠前呢&#xff1f;网上的帖子很多&#xff0c;通过搜索和总结&#xff0c;整理出了一套自己行之有效的方法&#xff0c;写出来供大家参考 成功案例推荐&#xff1a;http://sooboo.com.cn/ 还在继续整理中&#…

谈谈网站静态化 【转载】

本文转载自&#xff1a; http://blog.csdn.net/yizhu2000/archive/2008/09/01/2863324.aspx 我个人觉得是很好的一个总结 写在前头 静态化是解决减轻网站压力,提高网站访问速度的常用方案,但在强调交互的We2.0 时代,对静态化提出了更高的要求,静态不仅要能静,还要能动,下面我通…

IIS网站服务器性能优化指南

Windows Server自带的互联网信息服务器&#xff08;Internet Information Server&#xff0c;IIS&#xff09;是架设网站服务器的常用工具&#xff0c;它是一个既简单而又麻烦的东西&#xff0c;新手都可以使用IIS架设一个像模像样的Web站点来&#xff0c;但配置、优化IIS的性能…

简单网站新闻发布系统

写这篇文章的时候首先要向bben_h 和jdxx表示感谢&#xff0c;是bben_h提出了C#中字符替换这个问题&#xff0c;jdxx很好的解决了这个问题&#xff0c;同时也使我想起以前做的一些程序&#xff08;简单网站新闻发布系统&#xff09;&#xff0c;现在就把它奉献给大家&#xff0c…

使用SharePoint Workspace 2010同步SharePoint网站

你用什么保存你的文档&#xff1f;U盘、网盘&#xff0c;还是FTP、邮箱&#xff08;网络存储&#xff09;&#xff1f;想没有想过&#xff0c;将你的文档“随手”保存在你的网站并且与你的计算机&#xff08;即使你有多台计算机&#xff09;随时同步&#xff1f;如果你像我一样…

【web标准设计】学习、提高、欣赏网站推荐

警告文章包含的一些粗俗、庸俗、恶心的言语可能造成您阅读后的不适感&#xff0c;请谨慎选择是否阅读。如你自愿阅读本文&#xff0c;因粗俗、庸俗、恶心的言语给您所造成的任何后果&#xff0c;本文作者不负任何责任。 华丽的中指基础知识的学习 XHTML、CSS、JavaScript的基础…

最新70佳单页网站设计案例欣赏(中篇)

单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…

创建自定义主机头网站集

当我们在一个SharePoint Web应用程序中创建新网站集时&#xff0c;虽然我们可以指定网站集的路径&#xff0c;但是网站集的主机头&#xff0c;似乎必须使用Web应用程序所定义的主机头。比如&#xff0c;当在“http://sp2010”这个Web应用程序中创建一个新网站集时&#xff0c;网…

查看痕迹_孩子是否浏览过“不良网站”,看手机留下的3种痕迹,过于明显

孩子是否浏览过“不良网站”&#xff0c;看手机留下的3种痕迹&#xff0c;过于明显&#xff01;必须要说&#xff0c;智能手机前所未有地改变了现代人的生活方式。伴随着科技创新的持续发展&#xff0c;手机屏幕再也不只是一个承当通信作用的设备&#xff0c;而是变为了集通信、…

html站点初始化设置怎么写,.NET Core Web网站设置默认页index.html

.NET Core Web网站设置默认页index.html。原来IIS可以设置默认静态页面index.html,index.htm等&#xff0c;项目切换到.NET Core后&#xff0c;发现原来一些地址无法打开了&#xff0c;因为这些地址都是到某个文件夹&#xff0c;没有打全index.html。解决办法是在Startup.cs中增…

对某高校网站的一次友好检测

表妹今年考上了某知名高校&#xff0c;出入好奇昨天对该高校网站进行了一次友情检测。。检测结果一个字烂。。。两个字很烂。。文章没什么技术含量。。请大牛直接飘过。打开其主业后随便点点了发现其地址为 xxx.cn/news_more.asp?lm293 觉得可能存在漏洞。。而且是一个很老的漏…

我记录网站综合系统 -- 技术原理解析[7:CSS类]

CSS是前台工程师的必修课&#xff0c;一般我们使用CSS只是统一写在.css里面。不过&#xff0c;wojilu提供了一些操作CSS的类&#xff0c;你可以将CSS当作一个个类来操作。 源代码位置&#xff1a;\wojilu\Web\UI 我们可以将一个CSS看作一个字典 Dictionary<String, Dictiona…

微软放缓.NET动态语言开发计划,徐汇区网站设计

微软曾经作出承诺&#xff0c;开发能运行在.NET环境的动态语言实现&#xff0c;例如Ruby语言实现IronRuby和Python语言实现IronPython。 当前IronRuby项目有点不妙&#xff0c;核心开发者&#xff0c;项目经理Jimmy Schementi宣布离职&#xff0c; 在他的博客中描述到&#xff…

网站DIV+css弹性+固宽布局案例

当今用户的显示器越来越大的今天&#xff0c;之前的1024*768固宽布局有点越来越不合时宜&#xff0c;对大屏幕的用户而言&#xff0c;两侧空空的留白给人第一眼的印象是严重的屏幕浪费&#xff0c;作为网页设计师的你有责任给这一批用户一个良好的用户界面。 当然为了减少这种屏…

Win7下IIS7.5新建网站错误信息集锦

1、Win7 IIS配置解决ASP的500错误 参考网址http://hi.baidu.com/wenyiguang/blog/item/5d354389b793dcbf0e2444a3.html 2、HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容 参考网址&#xff1a;http://apps.hi.baidu.com/share/detail/33209628 3、处理程…

JAVA开发者应该去的20个英文网站

为什么80%的码农都做不了架构师&#xff1f;>>> JAVA开发者应该去的20个英文网站 2005-09-12 14:28 shiqiang124 CSDN 我要评论(0) 字号&#xff1a;T | T 为JAVA开发者推荐应该去的20个英文网站&#xff01; AD&#xff1a; WOT2014课程推荐&#xff1a;实战MSA&a…

利用火狐浏览器查看网站加载速度

利用火狐浏览器查看网站加载速度2012-12-25 14:01[小大]来源: 自由屋博客评论: 1条评论分享至:百度权重查询站长交易友情链接交换网站监控服务器监控SEO监控首先下载火狐浏览器&#xff0c;如果你有的话就不用下载了&#xff0c;下载之后我们需要Firefox的一个组件—firebug。&…

python批量下载pdf文件大小,Python从一个网站上抓取PDF文件为什么它们都损坏了而且大小相同?...

希望这次会是一个简单的。我正在尝试做一些网络垃圾&#xff0c;我从一个页面下载所有的pdf文件。目前我正在从一个体育网页抓取文件进行练习。我使用automatheboringstuffa来自另一个用户的帖子(retrieve links from web page using python and BeautifulSoup)来编写这段代码。…

推荐一个Magento做的中文网站 迪卡侬

推荐一个Magento做的中文网站&#xff0c;迪卡侬中国官方商城 迪卡侬是是全球最大的体育用品零售商&#xff0c;在国内也很受欢迎。网址&#xff1a;http://www.decathlon.com.cn/