ASP支付宝接口实现.docx

上传人:b****5 文档编号:8676435 上传时间:2023-02-01 格式:DOCX 页数:21 大小:191.22KB
下载 相关 举报
ASP支付宝接口实现.docx_第1页
第1页 / 共21页
ASP支付宝接口实现.docx_第2页
第2页 / 共21页
ASP支付宝接口实现.docx_第3页
第3页 / 共21页
ASP支付宝接口实现.docx_第4页
第4页 / 共21页
ASP支付宝接口实现.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

ASP支付宝接口实现.docx

《ASP支付宝接口实现.docx》由会员分享,可在线阅读,更多相关《ASP支付宝接口实现.docx(21页珍藏版)》请在冰豆网上搜索。

ASP支付宝接口实现.docx

ASP支付宝接口实现

支付宝有一个类文件叫AliPay是一些加密算法之类的东西,包括构造URL

要吧看一下这个类的全部内容

usingSystem.Web;

usingSystem.Text;

usingSystem.Security.Cryptography;

usingSystem.IO;

usingSystem.Net;

usingSystem;

///

///NewInterfaceforAliPay

///

namespaceGateway

{

publicclassAliPay

{

///

///与ASP兼容的MD5加密算法

///

publicstaticstringGetMD5(strings,string_input_charset)

{

MD5md5=newMD5CryptoServiceProvider();

byte[]t=md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));

StringBuildersb=newStringBuilder(32);

for(inti=0;i

{

sb.Append(t[i].ToString("x").PadLeft(2,'0'));

}

returnsb.ToString();

}

///

///冒泡排序法

///按照字母序列从a到z的顺序排列

///

publicstaticstring[]BubbleSort(string[]r)

{

inti,j;//交换标志

stringtemp;

boolexchange;

for(i=0;i

{

exchange=false;//本趟排序开始前,交换标志应为假

for(j=r.Length-2;j>=i;j--)

{//交换条件

if(System.String.CompareOrdinal(r[j+1],r[j])<0)

{

temp=r[j+1];

r[j+1]=r[j];

r[j]=temp;

exchange=true;//发生了交换,故将交换标志置为真

}

}

if(!

exchange)//本趟排序未发生交换,提前终止算法

{

break;

}

}

returnr;

}

///

///生成URL链接或加密结果

///

///参数加密数组

///编码格式

///加密类型

///安全校验码

///字符串URL或加密结果

publicstaticstringCreatUrl(

//stringgateway,//GET方式传递参数时请去掉注释

string[]para,

string_input_charset,

stringsign_type,

stringkey

{

inti;

//进行排序;

string[]Sortedstr=BubbleSort(para);

//构造待md5摘要字符串;

StringBuilderprestr=newStringBuilder();

for(i=0;i

{

if(i==Sortedstr.Length-1)

{

prestr.Append(Sortedstr[i]);

}

else

{

prestr.Append(Sortedstr[i]+"&");

}

}

prestr.Append(key);

//生成Md5摘要;

stringsign=GetMD5(prestr.ToString(),_input_charset);

//以下是POST方式传递参数

returnsign;

//以下是GET方式传递参数

//构造支付Url;

//char[]delimiterChars={'='};

//StringBuilderparameter=newStringBuilder();

//parameter.Append(gateway);

//for(i=0;i

//{//UTF-8格式的编码转换

//parameter.Append(Sortedstr[i].Split(delimiterChars)[0]+"="+HttpUtility.UrlEncode(Sortedstr[i].Split(delimiterChars)[1])+"&");

//}

//

//parameter.Append("sign="+sign+"&sign_type="+sign_type);

//

////返回支付Url;

//returnparameter.ToString();

}

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

publicstaticstringGet_Http(stringa_strUrl,inttimeout)

{

stringstrResult;

try

{

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

myReq.Timeout=timeout;

HttpWebResponseHttpWResp=(HttpWebResponse)myReq.GetResponse();

StreammyStream=HttpWResp.GetResponseStream();

StreamReadersr=newStreamReader(myStream,Encoding.Default);

StringBuilderstrBuilder=newStringBuilder();

while(-1!

=sr.Peek())

{

strBuilder.Append(sr.ReadLine());

}

strResult=strBuilder.ToString();

}

catch(Exceptionexp)

{

strResult="错误:

"+exp.Message;

}

returnstrResult;

}

}

}

而我们一般不用管这个类,只要保证能调用的到就行了,不用管他

我们要做的很少,他是怎么工作的呢,

这是开发文档里的工作图

其实我们要处理的只有三个Aspx的文件,

先看第一个吧Default.aspx

这是一个请求的界面

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

usingGateway;

publicpartialclass_Default:

System.Web.UI.Page

{

protectedvoidPage_Load(objectsender,EventArgse)

{

}

protectedvoidBtnAlipay_Click(objectsender,EventArgse)

{

//业务参数赋值;

stringgateway="//支付接口

stringservice="create_direct_pay_by_user";//服务名称,这个是识别是何接口实现何功能的标识,请勿修改

stringseller_email="写自己的";//商家签约时的支付宝帐号,即收款的支付宝帐号

stringsign_type="MD5";//加密类型,签名方式“不用改”

stringkey="写自己的";//安全校验码,与partner是一组,获取方式是:

用签约时支付宝帐号登陆支付宝网站,在商家服务我的商家里即可查到。

stringpartner="写自己的";//商户ID,合作身份者ID,合作伙伴ID

string_input_charset="utf-8";//编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。

否则极其容易造成MD5加密错误。

stringshow_url="//展示地址,即在支付页面时,商品名称旁边的“详情”的链接地址。

stringout_trade_no=TxtOrderno.Text.Trim();//客户自己的订单号,订单号必须在自身订单系统中保持唯一性

stringsubject="4.0系统支付宝充值";//商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一次支付当作一次下订单

stringbody="商户:

"+TxtOrderno.Text.Trim()+"通过支付宝给自己充值:

"+TxtTotal_fee.Text.Trim()+"元";//商品描述,即备注

stringtotal_fee=TxtTotal_fee.Text.Trim();//商品价格,也可称为订单的总金额

//服务器通知url(Alipay_Notify.aspx文件所在路经),必须是完整的路径地址

stringnotify_url=http:

//0.0.6.108/Alipay/Alipay_Notify.aspx;

//服务器返回url(Alipay_Return.aspx文件所在路经),必须是完整的路径地址

stringreturn_url=http:

//0.0.6.108/Alipay/Alipay_Return.aspx;

//构造数组;

//以下数组即是参与加密的参数,若参数的值不允许为空,若该参数为空,则不要成为该数组的元素

string[]para={

"service="+service,

"partner="+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,

"return_url="+return_url,

"_input_charset="+_input_charset

};

//支付URL生成

stringaliay_url=AliPay.CreatUrl(

//gateway,//GET方式传递参数时请去掉注释

para,

_input_charset,

sign_type,

key

);

//以下是GET方式传递参数

//Response.Redirect(aliay_url);

//以下是POST方式传递参数

Response.Write("

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("");

Response.Write("

");

Response.Write("");

}

}

下面的操作就是在支付平台的完成了,跟咱的程序没有关系了

现在我们应该想,那付完钱之后呢?

我们有两个界面来处理这个问题一个是

Alipay_Return.aspx

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Collections;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

usingSystem.Text;

usingSystem.Collections.Specialized;

usingSystem.IO;

usingGateway;

///

///创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在于支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。

///该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。

///

publicpartialclassAlipay_Return:

System.Web.UI.Page

{

protectedvoidPage_Load(objectsender,EventArgse)

{

stringalipayNotifyURL="

//stringalipayNotifyURL="

stringkey="写自己的";//partner的对应交易安全校验码(必须填写)

stringpartner="写自己的";//partner合作伙伴id(必须填写)

string_input_charset="utf-8";//编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。

否则极其容易造成MD5加密错误。

alipayNotifyURL=alipayNotifyURL+"&partner="+partner+"¬ify_id="+Request.QueryString["notify_id"];

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

stringresponseTxt=AliPay.Get_Http(alipayNotifyURL,120000);

//*******加密签名程序开始//*******

inti;

NameValueCollectioncoll;

//LoadFormvariablesintoNameValueCollectionvariable.

coll=Request.QueryString;

//Getnamesofallformsintoastringarray.

String[]requestarr=coll.AllKeys;

//进行排序;

string[]Sortedstr=AliPay.BubbleSort(requestarr);

//构造待md5摘要字符串;

StringBuilderprestr=newStringBuilder();

for(i=0;i

{

if(Request.Form[Sortedstr[i]]!

=""&&Sortedstr[i]!

="sign"&&Sortedstr[i]!

="sign_type")

{

if(i==Sortedstr.Length-1)

{

prestr.Append(Sortedstr[i]+"="+Request.QueryString[Sortedstr[i]]);

}

else

{

prestr.Append(Sortedstr[i]+"="+Request.QueryString[Sortedstr[i]]+"&");

}

}

}

prestr.Append(key);

//生成Md5摘要;

stringmysign=AliPay.GetMD5(prestr.ToString(),_input_charset);

//*******加密签名程序结束*******

stringsign=Request.QueryString["sign"];

//Response.Write(prestr.ToString());//调试用,支付宝服务器返回时的完整路径。

if(mysign==sign&&responseTxt=="true")//验证支付发过来的消息,签名是否正确

{

//更新自己数据库的订单语句,请自己填写一下

stringstrOrderNO=Request.QueryString["out_trade_no"];//订单号

stringstrPrice=Request.QueryString["total_fee"];//金额

stringstrTradeStatus=Request.QueryString["TRADE_STATUS"];//订单状态

//生成对象

//OfficeFinanceServicesobjOfficeFinanceServices=newOfficeFinanceServices();

//订单信息

string[]login=strOrderNO.Split(newstring[]{"_"},StringSplitOptions.RemoveEmptyEntries);

////查询当前的余额

//decimalobjdm=objOfficeFinanceServices.OfficeFinanceSelect(Convert.ToInt32(login[0].ToString().Trim()),true);

//OfficeFinanceobjofficeFinance=newOfficeFinance();

//objofficeFinance.ofId=Convert.ToInt32(login[0].ToSt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1