首页 程序笔记 支付宝第三方支付平台对接原理和实现

支付宝第三方支付平台对接原理和实现

如果把商户网站使用第三方支付平台(比如支付宝)的原理搞清楚,那编程就变得简单多了。

整个过程大致这样:

1、商户与支付宝签约。

2、在商户网站购买商品,填写数量,确定购买后跳转到结账页面。结账页面可能包括订单号、定单状态(已支付/未支付)、收货人信息、配送方式、定单金额、配送费用、总金额、支付方式、结账按钮,等等。

3、当点击"结账"按钮,会重定向到支付宝付款页面。而在后台,实际上是把数据提交到支付宝一个接收支付信息的网关,比如是http://www.zhifubao.com:6060/AliPay/PayGate.ashx,然后再重定向到支付宝付款页面。

4、付款成功后,重定向到商户用来显示支付成功的一个页面,该页面可以显示定单编号、总金额等信息。

其中有几个关键之处:

1、明确支付宝支付网关所需要的url格式

比如类似"http://www.zhifubao.com:6060/AliPay/PayGate.ashx?partner=18&return_url=http%....%"这样的格式,那么,编程的时候应该严格按照这种格式来拼接字符串。

2、明确在支付宝支付成功后重定向到商户支付成功页的url中,支付宝给我们反馈的url参数

支付宝反馈的格式类似"http://localhost:1746/Shop/PayCallBack.aspx?out_trade_no=222&returncode=ok&total_fee=400&sign=ddddddd+md5值"这样,我们可以使用Request[key],取出对应的部分,比如定单编号,定单金额,等等。

3、在向支付宝网关提交数据的时候,支付宝要求其中一个参数sign必须是MD5值

这个MD5值是把商户编号、支付成功显示页面、商户密匙等信息按照固定的顺序进行MD5加密获得。商户密匙一般都可以在支付宝后台设置。

4、在支付宝支付成功后重定向到商户支付成功页的url中,有一个sign参数也包含了MD5值

这个MD5值是把定单编号、返回地址、总金额、商户密匙等信息按照固定的顺序进行MD5加密获得,编码的时候,我们需要重新根据定单编号、返回地址、总金额、商户密匙等信息按照固定的顺序进行MD5加密获得一个值,两个值比较,如果相等,就说明没有篡改,支付成功。

5、明确支付宝支付网关地址

这个地址用来接收来自商户的信息,类似这样:http://www.zhifubao.com:6060/AliPay/PayGate.ashx?partner=18&return_url=http%....%

支付宝接口提供的信息大致如下:

支付网关地址:

http://www.zhifubao.com:6060/AliPay/PayGate.ashx

支付网关参数:

Partner:商户编号

return_url:支付成功地址

subject:商品名称

body:商品描述

out_trade_no:订单号,由商户网站生成

total_fee:总金额

seller_email:卖家邮箱

sign:数字签名,总金额、商户编号、订单号、商品名称、商户密匙顺序连接获得的MD5值

回调商户地址:

out_trade_no:订单号

returncode:返回码,ok或error

total_fee:支付金额

sign:数字签名,订单号、返回码、支付金额、商户密匙顺序连接获得的MD5值

搞清了原理,编码变得简单。

当点击支付:

string md5Str = SomeCommonHelper.GetMD5("总金额","商户编号","订单号","商品名称","商户密匙");

string url = "http://www.zhifubao.com:6060/AliPay/PayGate.ashx?partner=商户编号&return_url=" + Server.UrlEncode("http://...商户支付成功显示页面") + "&subject=" + Server.UrlEncode(商品名称) + "&body=" + 商品描述 + "&out_rade_no=" + 商品编号 + "&total_fee=" + 总金额 + "&seller_email=" + 商户邮箱 + "&sign=" + md5Str;

Response.Redirect(url);

 

支付成功显示页面:

string out_trade_no = Request["out_trade_no"];

string returncode = Request["returncode"];

string total_fee = Request["total_fee"];

string sign = Request["sign"];

//自己算MD5值

string myMD5 = SomeCommonHelper.GetMD5(out_trade_no + returncode + total_fee + "商户密匙");

if(sign != myMD5){

    Response.Write("支付失败");

} else{

    Response.Write("支付成功");

}

 

 

3

站心网

如果把商户网站使用第三方支付平台(比如支付宝)的原理搞清楚,那编程就变得简单多了。 整个过程大致这样..

为您推荐

DiscuzX3.5多合一聚合支付接口插件发布

Discuz论坛多合一聚合支付接口插件,该插件直接替换了自带的支付接口功能,增强了支付的扩展性,自带支持支付宝、微信、QQ钱包官方支付,以及彩虹易支付、我爱支付、虎皮椒等支付通道,并且可以自由扩展其他的支付通..

使用 html2canvas 实现截图功能

html2canvas 是一个开源的 JavaScript 库,用于将网页上的 HTML 元素渲染成图像。它通过遍历页面的 DOM 树和计算样式,然后将其绘制到 <canvas> 元素上,最终生成图片。该库不依赖服务器端,而是通过浏览器端的 Java..

网站统计中的访问信息收集的前端实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascri..

使用SuperWebSocket实现Web消息推送

在大部分Web系统中,我们可能遇到需要向客户端推送消息的需求。SuperWebSocket第三方库能让我们轻松的完成任务。SuperWebSocket第三方库可以从网上下载,不过通过Visual Studio Nuget安装更快。引用SuperWebSocket相..

.NET C# 使用Hook钩子实现全局监听键盘和鼠标

C# 是一种面向对象的编程语言,具有丰富的类库和工具支持,适用于各种类型的应用程序开发。Windows 提供了一种称为"钩子"(Hook)的机制,允许拦截并处理系统级别的事件,如键盘按键和鼠标移动。通过结合 C# 和 Hook..

.NET C#连接FTP实现文件上传下载

在 .NET 中可以使用 System.Net.FtpWebRequest 类来连接 FTP 服务器,实现文件上传和下载。以下是实现文件上传和下载的完整代码示例。1. 上传文件到 FTP 服务器using System;using System.IO;using System.Net;class..

C#使用 Attribute 实现 AOP 功能

在 C# 中,通过自定义 Attribute 并结合一些技术(如动态代理、反射等)可以实现 AOP(面向切面编程)。AOP 通常用于日志记录、性能监控、权限验证等横切关注点。以下是一个使用 C# Attribute 实现 AOP 功能的示例。..

使用CSS columns-visibility实现砌体布局

CSS的 columns 属性(如 columns、column-count 和 column-width)通常用于多列文本布局,而不是直接用于砌体布局。然而,结合 columns 和 visibility 属性,可以在某些情况下实现类似砌体布局的效果,虽然它并不完..

js使用IntersectionObserver实现锚点在当前页面视口时导读高亮

在 JavaScript 中可以通过监听页面滚动事件,检查每个锚点的位置,并根据当前滚动位置高亮相应的导航项,从而实现页面内锚点链接的导读高亮效果。交叉观察器 API(Intersection Observer API)提供了一种异步检测目..

js使用scroll事件实现锚点滚动到页面顶部时导航高亮

在 JavaScript 中,可以通过监听页面滚动事件,并判断页面顶部与各个锚点的距离来实现导航高亮效果。当某个锚点的内容块滚动到页面顶部时,自动高亮相应的导航项。以下是实现方式:1. HTML 结构假设我们有多个内容区..

Blazor的N种渲染模式原理和常见问题说明

我们从下面这幅图开始,下图显示了三种渲染模式,分别称之为静态SSR、交互式SSR(即之前的BlazorServer)、交互式CSR(即之前的BlazorWasm)。还有一种渲染模式BlazorHybrid,稍后说。一、先浅层理解一个图例静态SSR:经..

ASP.NET Core实现多语言本地化Web应用程序

构建全球可访问的网站和应用程序需要对内容进行适当的本地化,以吸引来自不同文化和地区的用户。ASP.NET Core 提供强大的本地化支持,以用户首选的语言和格式呈现内容。在本综合指南中,我们将探索 ASP.NET Core 中..

你被入侵了DDOS,吓唬吓唬你

mvc async await异步编程

在mvc中如果要用纯异步请不要使用async和await,可以直接使用Task.Run。在mvc中使用async和await可以让系统开新线程处理Task的代码,同时不必等Task执行结束,就可以同时运行Task之后的代码,加快效率。要注意的是:..

类似php iconv的函数功能,C#实现方法

在与一个第三方接口对接时,发现对方无法用GZip解压我发过去的数据,看了对方PHP的示例代码,发现对方使用的是PHP的$file = iconv("IOS-8859-1","UTF-8",gzencode($data_json));大致意思是要先压缩,在把压缩的数组..

c#实现与Java无差异的GZip压缩和GZip解压缩

c#实现与Java无差异的GZip压缩和GZip解压缩,其中有个坑就是GZip压缩的时候,只有在GZipStream在Dispose后调应对应MemoryStream.ToArray()所得到的结果才是正确的压缩数据。如果在zipStream.Write(bytes, 0, bytes.L..

.NET Core 管道模型中间件及管道模拟实现

管道,PipelineASP.NET Core 路由,认证,绘画,缓存,都是由管道来处理的中间件。MVC WEB API,都是建立在某个特殊的中间件之上。MVC,路由的中间件,请求地址和控制器之间的映射,在此基础上实现了实例化控制器,..

Linq to Object的Where和Select实现原理

Linq的Where是一个基于委托的代码封装,把数据筛选的通用逻辑完成,把判断逻辑交给委托传递。Select是基于委托的代码封装,把数据转换的通用逻辑完成,把转换逻辑交给委托传递。Linq还有很多方法,这些方法大多都是..

.NET Core 日志配置,NLog配置示例

.NET Core内置的日志组件附带了以堆日志提供程序,输出到控制台,输出,系统事件。在Program.cs组件配置里可以配置,如下。Console和Debug是默认配置。publicstaticIHostBuilderCreateHostBuilder(string[]args)=>Ho..

.Net各版本多线程使用原理和实践

多线程基本概念进程:程序在服务器上运行时,占据的计算资源合集,称之为进程。进程之间不会互相干扰,进程间的通信比较困难(分布式)。线程:程序执行的最小单位。线程也包含自己的计算资源,线程是属于进程的,一..

发表回复

返回顶部