第三方支付接口技术对接实现及样例_第1页
第三方支付接口技术对接实现及样例_第2页
第三方支付接口技术对接实现及样例_第3页
第三方支付接口技术对接实现及样例_第4页
第三方支付接口技术对接实现及样例_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、B2B网站对接支付宝接口网站转接支付宝解决方案大型网上购物系统除了能让会员选择货到付款结账方式外,还应该提供一些更方便快捷的 网上支付方式。如果网上商店没有足够的实力提供会员直接在网站中 建立现金账户的功 能,就可以将订单信息转接到支付宝,让会员从支付宝付款。当然就算会员可以在网站上 建立自己的现金账户, 提供支付宝支付功能也不失为另一 种方便快捷的支付方式, 这可以 给客户提供更多可选的支付方式。首先,网上购物系统必须与支付宝公司签订合作协议,以确保从本购物网站上传到支付宝网站上的订单信息能被正确接收。当会员于购物网站上买下一系列商品并选择支付宝付款方式后,购物系统即将会员购物的 订单信息转

2、发到支付宝,网站页面也会转到支付宝的付款页面。此时,支付宝页面会发送 一个验证信息到本网站以确认支付宝正确收到订单信息。会员于支付宝网站付款完成后,网站页面会重新跳回本购物网站,同时支付宝会将已付款 的订单信息发回本网站以便对本购物网站的数据库进行必要的修改操 作。另外本网站还需 要向支付宝网站发送一个返回信息,告知支付宝本系统已正确收到付款完毕的订单信息并 且已经完成对数据的处理操作。向支付宝网站传送订单信息时主要参数的含义 :gateway :支付接口service :识别是何接口实现何功能的表示Seller_email :商家签约时的支付宝账号,即收款的支付宝账号key:安全校验码,与

3、Partner是一组Partner :商户ID ,合作伙伴IDSign_type :加密类型? ?n PUt_CharSet :编码类型show_url :展示地址,即在支付宝页面时商品名称旁边的“详情”的链接地址out_trade_no :会员订单编号,订单编号必须在本系统中保持唯一SUbjeCt :商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一次 支付当作一次下订单body :商品描述,即备注total_fee :商品价格,也可称为订单的总金额源码分析(C#):首先必须建立一个通知页面(NOtify.aspx )和一个返回页面(RetUrn.aspx )以接受并验证从

4、支付宝返回的信息并对数据库中相应的订单信息做修改处理操作。代码USing System;USing SyStem.Data;using System.Configuration;using System.Collections;using System.Web;usingusingusingusingusingusing System.Text;usingusing System.IO;using Gateway;?/ <summary>HTML弋码及空格/ 创建该页面文件时,请留心该页面文件中无任何/ 该页面称作“通知页”,是异步被支付宝服务器所调用/ 当支付宝的订单状态改变时,

5、支付宝服务器则会自动调用此页面,因此请做好自身网 站订单信息与支付宝上的订单的同步工作/ </summary>public partialclassprotectedvoid Page_Load( objectsender, EventArgs e)stringalipayNotifyURL = ;/string alipayNotifyURL = ""/此路径是在上面链接地址无法起作用时替换使用stringpartner =Illl/partner 合作伙伴 id (必须填写)stringkey = "" ; /partner的对应交易安全

6、校验码(必须填写)string_input_charset = "utf-8" ;/ 编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错否则极其容易造成 MD5加密错误。alipayNotifyURL= alipayNotifyURL + "&partner=" + partner + "&notify_id="+ Request.Form "notify_id"Il获取支付宝ATN返回结果,true是正确的订单信息,false是无效的120000);string responseTxt

7、= AliPay.Get_Http(alipayNotifyURL,II* 加密签名程序开始 *int i;NameValueCollection coll;IILoad Form variables into NameValueCollection variable.coll = Request.Form;II Get names of all forms into a string array.String requestarr = coll.AllKeys;II 进行排序;string Sortedstr = AliPay.BubbleSort(requestarr);/构造待md5W要

8、字符串;StringBuilder prestr =newStringBuilder();for (i =0; i < Sortedstr.Length; i+)if(Request.FormSortedstri !="" && Sortedstri !="sign" &&Sortedstri !="sign_type" )if (i = Sortedstr.Length -1)prestr.Append(Sortedstri +"=" +Request.FormSorteds

9、tri);elseprestr.Append(Sortedstri+ "=" + Request.FormSortedstri+ "&");prestr.Append(key);string mysign = AliPay.GetMD5(prestr.ToString(), _input_charset);加密签名程序结束 *string sign = Request.Form "sign" ;if (mysign = sign && responseTxt = "true" ) / 验证支

10、付发过来的消息,签名是否 正确,只要成功进如这个判断里,则表示该页面已被支付宝服务器成功调用/ 但判断内出现自身编写的程序相关错误导致通知给支付宝并不是发送 success 的消息或没有更新客户自身的数据库的情况,请自身程序编写好应对措施,否则查明原因 时困难之极if (Request.Form "trade_status" = "WAIT_BUYER_PA)Y/" 判断支付 状态 _等待买家付款(文档中有枚举表可以参考)/ 更新自己数据库的订单语句,请自己填写一下string strOrderNO = Request.Form "out_tr

11、ade_no" ; / 订单号string strPrice = Request.Form "total_fee" ; / 金额 如果你申 请了商家购物卷功能,在返回信息里面请不要做金额的判断,否则会校验通过不了。?else if (Request.Form "trade_status" = "TRADE_FINISHED|"|Request.Form "trade_status" = "TRADE_SUCCES)S/" 判断支付状态 _交易成功结束 (文档中有枚举表可以参考)/ 更新

12、自己数据库的订单语句,请自己填写一下string strOrderNO = Request.Form "out_trade_no" ; / 订单号string strPrice = Request.Form "total_fee" ; / 金额 else/ 更新自己数据库的订单语句,请自己填写一下?Response.Write("success" ); / 返回给支付宝消息,成功,请不要改写这个 success/success 与 fail 及其他字符的区别在于,支付宝的服务器若遇到 success 时,则不再发送请求通知(即不再调用

13、该页面,让该页面再次运行起来),/ 若不是 success ,则支付宝默认没有收到成功的信息,则会反复不停地调 用该页面直到失效,有效调用时间是 24 小时以内。Zz最好写TXT文件,以记录下是否异步返回记录Ill /写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)llstring TOEXCELLR ="MD5 结果:mysign=" + mysign + ",sign=" + Sign +",responseTxt=" + responseTxt;llfs.Write(TOEXCELLR)

14、;llfs.Close();elseResponse.Write("fail" );?Il最好写TXT文件,以记录下是否异步返回记录。?Il写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)String ToEXCELLR ="MD5 结果:mysig n=" + mysig n + ",sig n=" + Sign +",resp On SeTXt="+ resp On seTxt;StreamWriterfs = n ew StreamWriter(SerVer.MapP

15、ath( "Notify_DATA/"":""")+ ".txt" , falsefs.Write(TOEXCELLR);fs.Close();?代码USing System;USing SyStem.Data;USing SyStem.Configuration;USing SyStem.Collections;USing SyStem.Web;USingusing usingusingusingusing System.Text;usingusing System.IO;using Gateway;?/ <

16、;summary>/ 创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在于支付完 成以后,当前窗口会从支付宝的页面跳转回这个页面。/ 该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成后的提示 信息页,如“您的某某某订单,多少金额已支付成功”。/ </summary> public partial classprotected void Page_Load( object sender, EventArgs e)string alipayNotifyURL = ;/string alipayNotifyURL = ""/ 此

17、路径是在上面链接地址无法起作用时替换 使用。string key = "" ; /partner 的对应交易安全校验码(必须填写)string partner = "" ; /partner 合作伙伴 id (必须填写)string _input_charset = "utf-8" ;/ 编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成 MD5加密错误。alipayNotifyURL= alipayNotifyURL + "&partner=" + partner + &quo

18、t;&notify_id="+ Request.QueryString"notify_id" ;Il获取支付宝ATN返回结果,true是正确的订单信息,false是无效的120000);string responseTxt = AliPay.Get_Http(alipayNotifyURL,/* 加密签名程序开始 /*int i;NameValueCollection coll;/Load Form variables into NameValueCollection variable.coll = Request.QueryString;/ Get na

19、mes of all forms into a string array.String requestarr = coll.AllKeys;/ 进行排序;string Sortedstr = AliPay.BubbleSort(requestarr);/构造待md5W要字符串;for (i = 0; i < Sortedstr.Length; i+)if(Request.FormSortedstri !="" && Sortedstri !="sign" &&Sortedstri !="sign_type&

20、quot; )if (i = Sortedstr.Length -1)prestr.Append(Sortedstri +"=" +Request.QueryStringSortedstri);elseprestr.Append(Sortedstri +"=" +Request.QueryStringSortedstri + "&");prestr.Append(key);Zz生成Md5摘要;string mysign = AliPay.GetMD5(prestr.ToString(), _input_charset);加密签

21、名程序结束 *string sign = Request.QueryString "sign" ;ZZ Response.Write(prestr.ToString(); ZZ调试用,支付宝服务器返回时的完整路径if (mysign = sign && responseTxt ="true" ) ZZ 验证支付发过来的消息,签名是否正确/ 更新自己数据库的订单语句,请自己填写一下string strOrderNO = Request.QueryString "out_trade_no" ; / 订单号"tot

22、al_fee" ; / 金额"TRADE_STATUS; "/ 订单string strPrice = Request.QueryString string strTradeStatus = Request.QueryString状态Response.Write(" 订单号: " + strOrderNO +"<br> 金额: " + strPrice);/ 成功,可美化该页面,提示信息elseResponse.Write(IlIl);Response.Write("<br>Result:m

23、ysign=" + mysign);Response.Write("<br>Result:responseTxt=" + responseTxt);ReSP On se.Write("<br>Result:Sig n="+ Sig n);Response.Write("支付失败");/支付失败,提示信息?除此之外在NOtify.aspx 页面和RetUrn.aspx页面公用的一些方法,可以提取出来放在一个公共的类里面(AIiPay.cs )AIiPay.cs?代码USing SyStem.Web;US

24、ing SyStem.Text;USingUSing SyStem0;USing SyStem.Net;using System;/ <summary>/ New Interface for AliPay/ </summary>namespaceGatewaypublic class AliPay/ <summary>Ill与ASP兼容的MD5加密算法/ </summary>public static string GetMD5(string s, string _input_charset)byte t =md5.ComputeHash(Enc

25、oding.GetEncoding(_input_charset).GetBytes(s);StringBuilder sb = newStringBuilder( 32);for ( int i = 0; i < t.Length; i+)sb.Append(ti.ToString( "x" ).PadLeft( 2, '0' );return sb.ToString();?/ <summary>/ 冒泡排序法Ill按照字母序列从a到Z的顺序排列/ </summary>public static string BubbleSo

26、rt( string r)int i, j; / 交换标志string temp;bool exchange;for (i = 0; i < r.Length; i+)/ 最多做 R.Length-1 趟排序exchange = false ; / 本趟排序开始前,交换标志应为假for (j = r.Length -2; j >= i; j-) / 交换条件if 1, rj) < 0)temp = rj + 1;rj +1 = rj;rj = temp;exchange= true ; / 发生了交换,故将交换标志置为真?if (!exchange) / 本趟排序未发生交换,

27、提前终止算法break ;return r;/ <summary>Ill生成URL链接或加密结果/ </summary>lll <param name="para"> 参数加密数组 <lparam>lll <param name="_input_charset"> 编码格式 <lparam>lll <param name="sign_type"> 加密类型 <lparam>Ill VParam name="key">

28、;安全校验码 <lparam>Ill Vretums> 字符串 URL或加密结果 VIretUrns>Public static string CreatUrl(llstring gateway,llGET 方式传递参数时请去掉注释string Para,string _inPut_charset,string sign_tyPe,string key)int i;/ 进行排序;string Sortedstr = BubbleSort(para);/构造待md5W要字符串;StringBuilder prestr =newStringBuilder();?for (i

29、 =0; i < Sortedstr.Length; i+)if (i = Sortedstr.Length -1)prestr.Append(Sortedstri);?elseprestr.Append(Sortedstri + "&");?prestr.Append(key);?Zz生成Md5摘要;string sign = GetMD5(prestr.ToString(), _input_charset);?ZZ以下是PoSI方式传递参数return sign;?ZZ以下是GET方式传递参数ZZZZ构造支付 Url ;char delimiterChar

30、s = '='/StringBuilder parameter = new StringBuilder();/parameter.Append(gateway);/for (i = 0; i < Sortedstr.Length; i+)/UTF-8 格式的编码转换/ parameter.Append(Sortedstri.Split(delimiterChars)0 + "="+ HttpUtility.UrlEncode(Sortedstri.Split(delimiterChars)1) + "&");/paramet

31、er.Append("sign=" + sign + "&sign_type=" + sign_type);/ / 返回支付 Url ;/ return parameter.ToString();?Zz获取远程服务器ATN吉果,验证是否是支付宝服务器发来的请求public static string Get_Http( string a_strUrl, int timeout)string strResult;tryHttpWebRequest myReq =(HttpWebRequest)HttpWebRequest.Create(a_strU

32、rl);myReq.Timeout = timeout;HttpWebResponse HttpWResp =(HttpWebResponse)myReq.GetResponse();Stream myStream = HttpWResp.GetResponseStream();StreamReader sr =newStreamReader(myStream, Encoding.Default);StringBuilder strBuilder = newStringBuilder();while (- 1 != sr.Peek()strBuilder.Append(sr.ReadLine(

33、);strResult= strBuilder.ToString();catch (Exception exp)strResult= " 错误: " + exp.Message;return strResult;三代码USing System;USing SyStem.Data;USing SyStem.Configuration;USing SyStem.Web;USingUSingUSingUSingUSingUSing Gateway;?PUbliC PartiaI ClaSSSen der, EVe ntArgs e)PrOteCted void Page_Load

34、( object/商家签约时的支付宝帐号,/商户ID ,合作身份protected void BtnAlipay_Click( object sender, EventArgs e)/ 业务参数赋值;string gateway = ; / 支付接口string service = "create_direct_pay_by_user" ;服务名称,这个是识别是何接口实现何功能的标识,请勿修改string seller_email = "" ; / 即收款的支付宝帐号string sign_type = "MD5" 加密类型 , 签名

35、方式“不用改”string key = "" ;string partner = "" ;者 ID ,合作伙伴 IDstring _input_charset ="utf-8"/编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。string show_url = ; / 展示地址,即在支付页面时, 商品名称旁边的“详情”的链接地址。string / 客户自己的订单号,订单号必须在自身订单系统中保持唯一性string / 商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西, 可把一次

36、支付当作一次下订单string / 商品描述,即备注string / 商品价格,也可称为订单的总金额?/ 服务器通知 url ( Alipay_Notify.aspx 文件所在路经),必须是完整的路径地址string notify_url = ;/ 服务器返回 url (Alipay_Return.aspx 文件所在路经),必须是完整的路径地string return_url = ;/ 构造数组;/ 以下数组即是参与加密的参数,若参数的值不允许为空,若该参数为空,则不 要成为该数组的元素string para ="service=" +service,"partn

37、er=" + partner,"seller_email=" + seller_email,"out_trade_no=" + out_trade_no,"subject=" + subject,"body=" + body,"total_fee=" + total_fee,"show_url=" + show_url,"payment_type=1" ,"notify_url="+ notify_url,"retu

38、rn_url="+ return_url,"_input_charset=" +_input_charset;?/支付URL生成string aliay_url = AliPay.CreatUrl(/gateway,/GET 方式传递参数时请去掉注释para,_input_charset,sign_type,key);?/以下是GET方式传递参数/Response.Redirect(aliay_url);/以下是PoSI方式传递参数Response.Write();Response.Write(Il<input type='hidden' n

39、ame='service' value="+ service +">" );Response.Write(Il<input type='hidden' name='partner' value="+ partner +">" );Response.Write(Il<input type='hidden' name='seller_email' value="seller_email + ">" );Response.Write(Il<input type='hidden' name='out_trade_no' value=Ilout_tra

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论