现在的位置: 首页 > 综合 > 正文

支付宝接口程序、文档及解读(ASP.NET)

2014年03月06日 ⁄ 综合 ⁄ 共 6205字 ⁄ 字号 评论关闭

开发步骤:

1. 确定签约类型

支付宝的接口有多种类型,所以首先你要确定签约的合同类型,确定使用的是哪个接口,不至于走错了道道。

此步骤中,可以参考文档:支付宝接口操作教程

2. 下载开发文档

如果是即时到账的开发,请先下载并仔细阅读:标准快速付款接口文档

文档中比较详细的介绍了逻辑流程,时序图以及枚举定义等,最好在看示例代码之前通读之

3. 获取签约账号的支付宝安全校验码(key)和合作id:partner

支付宝示例程序的调试需要商户号和相应的密钥,否则无法进行程序的调试,具体获取方法请查看官方帮助,不再赘述

4. 下载支付宝示例程序

asp
即时到账接口代码实例:点此下载 
(31.62
KB) 

php_GBK 即时到账接口代码实例:点此下载 (22.02
KB) 

php_UTF-8 即时到账接口代码实例:点此下载 (22.02
KB) 

net_05_GBK(post方式) 即时到账接口代码实例:点此下载 (12.03
KB) 

net_05_UTF-8(post方式) 即时到账接口代码实例: 点此下载 (10.72
KB) 

java_GBK(get方式) 即时到账接口代码实例:点此下载 (136.54
KB) 

java_UTF-8 (get方式)即时到账接口代码实例:点此下载 (112.67
KB) 

 5. 支付宝示例程序的解读

 下面内容转自http://dev.alipay.com/devclub/mvnforum/viewthread_thread,161_offset,0

大家想必都有这种困惑——拿到支付宝的接口代码后,尽管里面的程序有注释,接口代码包中也附有开发说明,但还是不知道该如何入手。这不难想象是什么原因,因为自己并不了解这个接口的工作原理是什么?

那么这篇文章就是要向大家全面展示关于支付宝接口的所有东西,以便大家能快速上手把接口接入自己的项目中,也能帮助那些已经对支付宝接口有所了解的程序开发者们更了解支付宝的一些通用规则、特殊用途等。


正题开始——

一、 结构 
a) 一般由两部分组成,接入部分与通知返回部分。接入部分即为传递参数等信息组合成超级链接,并用该链接来进行跳转。通知返回部分则是支付宝服务器对该笔订单处理完毕后,通知与返回该笔订单的详细信息到商户服务器,商
户服务器接收到后,并对其进行数据处理。 

b) 以实物标准双接口ASP代码中的程序为例。 
i. 接入部分的页面文件包含:配置页alipay_Config.asp、方法详细页alipay/Alipay_Payto.asp、程序入口页index.asp以及MD5加密方法类页alipayto/Alipay_md5.asp。
ii. 通知返回部分的页面文件包含:方法详细页alipay/Alipay_Payto.asp、MD5加密方法类页alipayto/Alipay_md5.asp、支付完成后(支付宝处理完毕后)自动跳转回的自定义页面return_Alipay_Notify.asp、两方服务器间相互交互(肉眼无法见到的)通知页Alipay_Notif
y.asp。

这里大家可以一目了然,MD5加密方法类与方法详细页不论是哪部分都有被调用,因此这两个文件可视为核心代码部分,若想理解接口的工作原理则要从该部分入手。 

c) 以实物标准双接口的ASP.NET C#语言代码程序为例:

i. 接入部分的页面文件包含:无需更改的ALIPAY的类文件App_Code/AliPay.cs及入口页面文件Default.aspx

ii. 通知返回部分的页面文件包含:两方服务器间相互交互(肉眼无法见到的)通知页Alipay_Notify.aspx、支付完成后(支付宝处理完毕后)自动跳转回的自定义页面Alipay_Return.aspx、

无需更改的ALIPAY的类文件App_Code/AliPay.cs

这个架构是否更容易理解了?没错,核心部分的运算过程就在AliPay.cs这个文件中。

 

二、
工作原理


大家对结构部分已经有所了解,那么我们就开始分析具体的这个接口是如何运作的。
a) 接入部分原理
i. 第一步——选定参数信息: 

结合技术文档以及接口代码DEMO,选定传递给支付宝服务器的参数,以实物标准双接口为例。如必传项service、partner、seller_email、sign、sign_type、out_trade

_no、price、subject、quantity、payment_type以及最少一组的物流信息参数三个logistics_type、logistics_fee、logistics_payment

等,选填项body、discount、show_url等。

以ASP.NET C#语言代码程序为例:

string service = "trade_create_by_buyer";

        
string seller_email = "aaaa@126.com"; 

        
string sign_type = "MD5";

        
string key = "********************************";

        
string partner = "2088************";

        
string _input_charset = "utf-8";

        
string show_url = "http://www.alipay.com/";

        
string out_trade_no = TxtOrderno.Text.Trim();

        
string subject = TxtSubject.Text.Trim();

        
string body = TxtBody.Text.Trim();

        
string price = TxtPrice.Text.Trim();

        
string quantity = TxtQua.Text.Trim();

        
string logistics_type = "POST";

        
string logistics_fee = TxtPost.Text.Trim();

        
string logistics_payment = "BUYER_PAY";

        
string notify_url = "http://www.xxx.com/swnet05utf8/Alipay_Notify.aspx"; 

        
string return_url = "http://www.xxx.com/swnet05utf8/Alipay_Return.aspx";


ii. 第二步——排序: 

把这些参数的变量名(即技术文档里给出的变量名,以这种方式组合:service=”trade_create_by_buyer”作为一串字符串)按从a到z的顺序依次排序。以ASP.NET C#语言代码程序为例,该功能在ALIPAY.CS类中;以ASP代码中的程序为例,该功能在alipayto/Alipay_Payto.asp文件中。
iii. 第三步——加密: 

目前一般的加密方式是MD5,不论是哪种加密方式,要加密的信息是要传给支付宝的信息,且存在于技术文档中,而非自定义的变量名。对以上排序好的所有参数(不包括网关参数即:string gateway = "https://www.alipay.com/cooperate/gateway.do?" ;)以循环的方式,用‘&’字符拼接成一长串字符串(这里需要注意,所有的参数都是&字符来拼接的,拼接后直接再拼接安全校验码Key,在程序中大家可看到,这个key是直接加到该字符串后面而没有用&字符 ),之后进行加密。得出的加密字符串集存储于sign这个参数中。
iv. 第四步——拼接字符串成URL链接 

我们已经拿到了各个参数、参数所属的值以及加密得出的加密字符串,那么手上现在的所有参数信息的格式,应当都是一组一组的service=”trade_create_by_buyer”这种格式的字符串,拼接的话,则依靠循环的方式遍历所有的这种字符串,因为这次的拼接是要成URL链接,所以之前排除在外的网关gaetway和加密类型参数sig

n_type也都会被拼接进来,那么,连接的字符则用大家所熟知的字符’&’,就这样得出一个完整的URL链接地址,如:



该链接来自支付宝官方的技术文档“标准实物双接口技术文档”
v. 第五步——自动跳转 

第四步中已经运算得出的URL链接字符串,我们则要让其活起来,那么活起来的方式就是——用程序调用它,也就是所谓的页面自动跳转。这样就能跳到支付宝的官方收银台页面。
可以说,现在已经成功的把支付宝接口融合进了大家自己的网站中,且能够使用支付宝来进行付款了。 
b) 通知返回部分原理
i. 专业术语 

通知返回是两个页面,即传递给支付宝时的notify_url参数所对应的页面文件(asp.net的是Alipay_Notify.aspx、asp的是Alipay_Notify.asp)称之为通知页,传递

给支付宝时的return_url参数所对应的页面文件(asp.net的是Alipay_Return.aspx、asp的是return_Alipay_Notify.asp)称之为返回页。
ii. 通知返回原理 
1. 第一步——验证是否是支付宝服务器发来的请求: 

a) 以asp程序代码为例:

alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?"

alipayNotifyURL 
= alipayNotifyURL &"partner=" & partner & "&notify_id=" & request("notify_id")

        
Set Retrieval = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")

    
Retrieval.setOption 2, 13056 

    
Retrieval.open "GET", alipayNotifyURL, False, "", "" 

    
Retrieval.send()

    
ResponseTxt = Retrieval.ResponseText

        
Set Retrieval = Nothing



得到的便是ResponseTxt的值,这是下面的步骤要用到的。

b) 以asp.net C#程序代码为例:

   //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求

    
public String Get_Http(String a_strUrl, int timeout)

    
{

        
string strResult;

        
try

        
{

            
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl);

            myReq
.Timeout = timeout;

            
HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();

            
Stream myStream = HttpWResp.GetResponseStream();

            
StreamReader sr = new StreamReader(myStream, Encoding.Default);

            
StringBuilder strBuilder = new StringBuilder();

            
while (-1 != sr.Peek())

            
{

                strBuilder
.Append(sr.ReadLine());

            
}


            strResult 
= strBuilder.ToString();

        
}

        
catch (Exception exp)

        
{


            strResult 
= "错误:" + exp.Message;

        
}


        
return strResult;
}



调用部分:

       string alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";

        
string partner = "2088************";


        alipayNotifyURL 
= alipayNotifyURL + "&partner=" + partner + "&notify_id=" + Request.Form["notify_id"];


        
//获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的

        
string responseTxt = Get_Http(alipayNotifyURL, 120000);



得到的便是ResponseTxt的值,这是下面的步骤要用到的。
2. 第二步——排序: 

该部分的排序的原理与“接入部分”的原理“排序步骤”一样,值得注意的是 ,这里的参数是支付宝通知返回时,传回来的订单信息的各种参数以及值。
3. 第三步——加密: 

该部分的加密原理与“接入部分”的原理“加密步骤”一样,依然值得注意的部分是加密的参数信息,这些参数信息是来源于上面一步骤排序好后的参数拼接起来的字符串来加密的。
4. 第四步——判断: 

上面我们有得到加密的结果(命名为mysign吧)、检验是否是支付宝发来的消息的正确性ResponseTxt、以及通过POST或GET的方式得到的sign参数的值,那么这个判断的含义便是通知返回里最重要

的部分了,因为它是来检验下面的程序是否执行我们的数据处理的。如何判断呢?各语言程序代码中,都是把加密得出的结果mysign与从支付宝那或得到的sign的值进行比较,并且还要让reponseTxt这个的

值要等于true,这样才达到验证成功。值得注意的是 ,大家都有遇到过这种事,支付部分即接入部分的确是做好了,但为什么无法与支付宝的交易信息同步,出现的问题就在这个判断上没有成功,下面的第五部分则会详细说明。
5. 第五步——自身网站的数据处理 

终于判断成功了,程序已经执行到了这里。各语言程序代码的这块地方的注释都写着“更新自己数据库的订单语句”或是“这里可以指定你需要显示的内容”。如字面上的意思,这块地方就是要我们大家来对这笔交易信息进行数

据处理,即编写程序。这个说法大概专业了点,简单易懂的讲法便是,支付宝的交易成功的信息和其他的一切交易状态,自己的网站也能够对这笔订单同步起来,即支付宝里这笔订单的交易状态是“买家已付款等待卖家发货”,

那么自己网站里显示的这笔状态也因如此,那么就应当在这里面写下诸如:

           if (Request

抱歉!评论已关闭.