`
java-mans
  • 浏览: 11711296 次
文章分类
社区版块
存档分类
最新评论

支付宝及时到帐接口使用详解

 
阅读更多

其实支付宝公司已经给我们做的很好了, 只要少量的改动就OK了,只是有的程序员不太明天他们的动作流程而以,我就以及时到帐为例子来说了,呵呵

在这之前就大家先下载一下c#版的及时到帐代码 这里是下载地址

http://dev.alipay.com/devclub/mvnforum/viewthread_thread,4;jsessionid=595DB7442AAA5CD2FC849E7C2FBE51D7

先看一下程序的结构吧

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

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

代码
usingSystem.Web;
usingSystem.Text;
usingSystem.Security.Cryptography;
usingSystem.IO;
usingSystem.Net;
usingSystem;

///<summary>
///NewInterfaceforAliPay
///</summary>
namespaceGateway
{
publicclassAliPay
{
///<summary>
///与ASP兼容的MD5加密算法
///</summary>
publicstaticstringGetMD5(strings,string_input_charset)
{
MD5md5
=newMD5CryptoServiceProvider();
byte[]t=md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));
StringBuildersb
=newStringBuilder(32);
for(inti=0;i<t.Length;i++)
{
sb.Append(t[i].ToString(
"x").PadLeft(2,'0'));
}
returnsb.ToString();
}

///<summary>
///冒泡排序法
///按照字母序列从a到z的顺序排列
///</summary>
publicstaticstring[]BubbleSort(string[]r)
{
inti,j;//交换标志
stringtemp;

boolexchange;

for(i=0;i<r.Length;i++)//最多做R.Length-1趟排序
{
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;
}

///<summary>
///生成URL链接或加密结果
///</summary>
///<paramname="para">参数加密数组</param>
///<paramname="_input_charset">编码格式</param>
///<paramname="sign_type">加密类型</param>
///<paramname="key">安全校验码</param>
///<returns>字符串URL或加密结果</returns>
publicstaticstringCreatUrl(
//stringgateway,//GET方式传递参数时请去掉注释
string[]para,
string_input_charset,
stringsign_type,
stringkey
)
{
inti;

//进行排序;
string[]Sortedstr=BubbleSort(para);


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

StringBuilderprestr
=newStringBuilder();

for(i=0;i<Sortedstr.Length;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<Sortedstr.Length;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="https://www.alipay.com/cooperate/gateway.do?";//支付接口
stringservice="create_direct_pay_by_user";//服务名称,这个是识别是何接口实现何功能的标识,请勿修改

stringseller_email="写自己的";//商家签约时的支付宝帐号,即收款的支付宝帐号
stringsign_type="MD5";//加密类型,签名方式“不用改”
stringkey="写自己的";//安全校验码,与partner是一组,获取方式是:用签约时支付宝帐号登陆支付宝网站www.alipay.com,在商家服务我的商家里即可查到。
stringpartner="写自己的";//商户ID,合作身份者ID,合作伙伴ID
string_input_charset="utf-8";//编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。

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

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("<formname='alipaysubmit'method='post'action='https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8'>");
Response.Write(
"<inputtype='hidden'name='service'value="+service+">");
Response.Write(
"<inputtype='hidden'name='partner'value="+partner+">");
Response.Write(
"<inputtype='hidden'name='seller_email'value="+seller_email+">");
Response.Write(
"<inputtype='hidden'name='out_trade_no'value="+out_trade_no+">");
Response.Write(
"<inputtype='hidden'name='subject'value="+subject+">");
Response.Write(
"<inputtype='hidden'name='body'value="+body+">");
Response.Write(
"<inputtype='hidden'name='total_fee'value="+total_fee+">");
Response.Write(
"<inputtype='hidden'name='show_url'value="+show_url+">");
Response.Write(
"<inputtype='hidden'name='return_url'value="+return_url+">");
Response.Write(
"<inputtype='hidden'name='notify_url'value="+notify_url+">");
Response.Write(
"<inputtype='hidden'name='payment_type'value=1>");
Response.Write(
"<inputtype='hidden'name='sign'value="+aliay_url+">");
Response.Write(
"<inputtype='hidden'name='sign_type'value="+sign_type+">");
Response.Write(
"</form>");
Response.Write(
"<script>");
Response.Write(
"document.alipaysubmit.submit()");
Response.Write(
"</script>");
}
}

代码里的key和 partner的获取方法

现在我们只要按代码里的信息填写一样就可以了,

然后远行网页

点提交

就会进入

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

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

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

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;

///<summary>
///创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在于支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。
///该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。
///</summary>
publicpartialclassAlipay_Return:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
stringalipayNotifyURL="https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
//stringalipayNotifyURL="http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。
stringkey="写自己的";//partner的对应交易安全校验码(必须填写)
stringpartner="写自己的";//partner合作伙伴id(必须填写)
string_input_charset="utf-8";//编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。

alipayNotifyURL
=alipayNotifyURL+"&partner="+partner+"&notify_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<Sortedstr.Length;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].ToString().Trim());
//objofficeFinance.ofOrid="cz";
//objofficeFinance.ofTime=DateTime.Now;
//objofficeFinance.ofType=1;
//objofficeFinance.ofAmount=Convert.ToDecimal(strPrice.ToString().Trim());
//objofficeFinance.ofRemainAmount=Convert.ToDecimal(strPrice.ToString().Trim())+objdm;
//objofficeFinance.ofIsCurrentValue=1;
//objofficeFinance.ofUserId=-10;
//objofficeFinance.ofNote1="支付宝上帐:"+strPrice.ToString().Trim()+"元";
//objofficeFinance.ofNote2="商户:"+login[1].ToString().Trim()+"通过支付宝上帐金额:"+strPrice+"元";
//objOfficeFinanceServices.addOfficeFinanceOne(objofficeFinance);

Response.Write(
"商户:"+login[1].ToString().Trim()+"<br>金额:"+strPrice+"交易成功");//成功,可美化该页面,提示信息



////写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
stringTOEXCELLR="MD5结果:mysign="+mysign+",sign="+sign+",responseTxt="+responseTxt+"交易信息"+"商户:"+login[1].ToString().Trim()+"<br>金额:"+strPrice+"交易成功";
StreamWriterfs
=newStreamWriter(Server.MapPath("Return_DATA/"+DateTime.Now.ToString().Replace(":",""))+".txt",false,System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
}
else
{
Response.Write(
"------------------------------------------");
Response.Write(
"<br>Result:responseTxt="+responseTxt);
Response.Write(
"<br>Result:mysign="+mysign);
Response.Write(
"<br>Result:sign="+sign);
Response.Write(
"支付失败");

////写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
stringTOEXCELLR="MD5结果:mysign="+mysign+",sign="+sign+",responseTxt="+responseTxt;
StreamWriterfs
=newStreamWriter(Server.MapPath("Return_DATA/"+DateTime.Now.ToString().Replace(":",""))+".txt",false,System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();

//支付失败,提示信息
}
}
}

这个是当交易成功后要调用 的界面 在这里只要改动一下就行了, 其实我们要做的只是改一下这里,只要在这里更新一下你的数据库就行了,

代码
//生成对象
//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].ToString().Trim());
//objofficeFinance.ofOrid="cz";
//objofficeFinance.ofTime=DateTime.Now;
//objofficeFinance.ofType=1;
//objofficeFinance.ofAmount=Convert.ToDecimal(strPrice.ToString().Trim());
//objofficeFinance.ofRemainAmount=Convert.ToDecimal(strPrice.ToString().Trim())+objdm;
//objofficeFinance.ofIsCurrentValue=1;
//objofficeFinance.ofUserId=-10;
//objofficeFinance.ofNote1="支付宝上帐:"+strPrice.ToString().Trim()+"元";
//objofficeFinance.ofNote2="商户:"+login[1].ToString().Trim()+"通过支付宝上帐金额:"+strPrice+"元";
//objOfficeFinanceServices.addOfficeFinanceOne(objofficeFinance);

大家现在会问我为什么会把他们注释了呢?

我测试过,,这个界面呢是只到成功的时候 调用 一次以后就再不会调用 了,

所以这样有一个不好的地方 ,就是有些客户他们对转帐操作的很老手,当交易成功之后不等调用这个界面就关闭了浏览器,这个时候会出现什么问题呢?

那支付宝就再也不会调用这个界面 了,只能等下次交易,钱是打上了,我们也收到了,但是就是没有给客户充上钱,这个时候客户就会打电话到公司,怎么回事啊, 钱打过去了, 可是我这边还没有上帐,我们上支付宝一看有啊,但就是没有上帐 ,怎么办,最后只能手动给客户上了,但又怕他程序再自动上一把,呵呵

所以在这里不我建议使用这个页面,如果你只是修改自己的订单状态的话当然是可以的

修改余额就不要在这里写了,而是写在这个Alipay_Notify.aspx页面里,这个界面是当交易状态 发生变化时就会调用 ,在没有收到成功的消息前就会一直调用,

时效是24小时,这样的话我们就不用管他是不是转到了成功页面了,只要把这个页面挂在网上等通知就行了,

当交易成功的时候上帐 就OK了

代码
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;
usingSystemModel;

///<summary>
///创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。
///该页面称作“通知页”,是异步被支付宝服务器所调用。
///当支付宝的订单状态改变时,支付宝服务器则会自动调用此页面,因此请做好自身网站订单信息与支付宝上的订单的同步工作
///</summary>
publicpartialclassAlipay_Notify:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
stringalipayNotifyURL="https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
//stringalipayNotifyURL="http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。
stringpartner="写自己的";//partner合作伙伴id(必须填写)
stringkey="写自己的";//partner的对应交易安全校验码(必须填写)
string_input_charset="utf-8";//编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。

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

//获取支付宝ATN返回结果,true是正确的订单信息,false是无效的
stringresponseTxt=AliPay.Get_Http(alipayNotifyURL,120000);

//*******加密签名程序开始*******
inti;
NameValueCollectioncoll;
//LoadFormvariablesintoNameValueCollectionvariable.
coll=Request.Form;

//Getnamesofallformsintoastringarray.
String[]requestarr=coll.AllKeys;

//进行排序;
string[]Sortedstr=AliPay.BubbleSort(requestarr);


//构造待md5摘要字符串;
StringBuilderprestr=newStringBuilder();

for(i=0;i<Sortedstr.Length;i++)
{
if(Request.Form[Sortedstr[i]]!=""&&Sortedstr[i]!="sign"&&Sortedstr[i]!="sign_type")
{
if(i==Sortedstr.Length-1)
{
prestr.Append(Sortedstr[i]
+"="+Request.Form[Sortedstr[i]]);
}
else
{
prestr.Append(Sortedstr[i]
+"="+Request.Form[Sortedstr[i]]+"&");

}
}
}

prestr.Append(key);

stringmysign=AliPay.GetMD5(prestr.ToString(),_input_charset);
//*******加密签名程序结束*******

stringsign=Request.Form["sign"];

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


//更新自己数据库的订单语句,请自己填写一下
stringstrOrderNO=Request.Form["out_trade_no"];//订单号

stringstrPrice=Request.Form["total_fee"];//金额如果你申请了商家购物卷功能,在返回信息里面请不要做金额的判断,否则会校验通过不了。


stringTOEXCELL="MD5结果:mysign="+mysign+",sign="+sign+",responseTxt="+responseTxt;
StreamWriterf
=newStreamWriter(Server.MapPath("Notify_DATA/"+DateTime.Now.ToString().Replace(":",""))+".txt",false,System.Text.Encoding.Default);
f.Write(TOEXCELL
+"订单号:"+strOrderNO.ToString().Trim()+"金额:"+strPrice.ToString().Trim());
f.Close();



Alipaymobjalipay
=newAlipaym();
objalipay.APID
=strOrderNO;
objalipay.addTime
=DateTime.Now;
objalipay.total_fee
=Convert.ToDecimal(strPrice);
objalipay.trade_status
="等待买家付款";
objalipay.Text1
=DateTime.Now.ToString();
objalipay.Text2
="";
objalipay.Text3
="";
objalipay.Text4
="";
objalipay.Text5
="";
OfficeFinanceServices.Update(objalipay);




}
elseif(Request.Form["trade_status"]=="TRADE_FINISHED"||Request.Form["trade_status"]=="TRADE_SUCCESS")//判断支付状态_交易成功结束(文档中有枚举表可以参考)
{
//更新自己数据库的订单语句,请自己填写一下
stringstrOrderNO=Request.Form["out_trade_no"];//订单号
stringstrPrice=Request.Form["total_fee"];//金额

//生成对象
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].ToString().Trim());
objofficeFinance.ofOrid
="cz";
objofficeFinance.ofTime
=DateTime.Now;
objofficeFinance.ofType
=1;
objofficeFinance.ofAmount
=Convert.ToDecimal(strPrice.ToString().Trim());
objofficeFinance.ofRemainAmount
=Convert.ToDecimal(strPrice.ToString().Trim())+objdm;
objofficeFinance.ofIsCurrentValue
=1;
objofficeFinance.ofUserId
=-10;
objofficeFinance.ofNote1
="支付宝上帐:"+strPrice.ToString().Trim()+"";
objofficeFinance.ofNote2
="商户:"+login[1].ToString().Trim()+"通过支付宝上帐金额:"+strPrice+"";
if(objOfficeFinanceServices.addOfficeFinanceOne(objofficeFinance))
{
Response.Write(
"success");

Alipaymobjalipay
=newAlipaym();
objalipay.APID
=strOrderNO;
objalipay.addTime
=DateTime.Now;
objalipay.total_fee
=Convert.ToDecimal(strPrice);
objalipay.trade_status
="交易成功";
objalipay.Text1
=DateTime.Now.ToString();
objalipay.Text2
="";
objalipay.Text3
="";
objalipay.Text4
="";
objalipay.Text5
="";
OfficeFinanceServices.Update(objalipay);
}
else
{
Response.Write(
"fail");
}
}
else
{
//更新自己数据库的订单语句,请自己填写一下

}

//Response.Write("success");//返回给支付宝消息,成功,请不要改写这个success
//success与fail及其他字符的区别在于,支付宝的服务器若遇到success时,则不再发送请求通知(即不再调用该页面,让该页面再次运行起来),
//若不是success,则支付宝默认没有收到成功的信息,则会反复不停地调用该页面直到失效,有效调用时间是24小时以内。


////写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
stringTOEXCELLR="MD5结果:mysign="+mysign+",sign="+sign+",responseTxt="+responseTxt;
StreamWriterfs
=newStreamWriter(Server.MapPath("Notify_DATA/"+DateTime.Now.ToString().Replace(":",""))+".txt",false,System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
}
else
{
Response.Write(
"fail");


//写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
stringTOEXCELLR="MD5结果:mysign="+mysign+",sign="+sign+",responseTxt="+responseTxt;
StreamWriterfs
=newStreamWriter(Server.MapPath("Notify_DATA/"+DateTime.Now.ToString().Replace(":",""))+".txt",false,System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
}
}
}

最好是记录一下日志文件,这样一但出了问题还可以有个参考的地方

我的代码写的有点乱大家可以适当的改一下,呵呵

===================================

转载来源:http://blog.csdn.net/sufei1013/archive/2010/02/08/5299547.aspx

分享到:
评论

相关推荐

    asp支付宝即时到帐接口

    **ASP支付宝即时到帐接口详解** 在电子商务领域,支付接口是连接商家系统与支付平台的关键环节,它确保了用户能够安全、便捷地完成在线支付。本文将深入探讨使用ASP(Active Server Pages)语言开发的支付宝即时...

    Thinkphp3.2即时到帐接口+APP服务端支付宝接口

    《Thinkphp3.2整合支付宝即时到帐及APP服务端接口详解》 在现代电子商务系统中,支付接口的实现是至关重要的环节。本教程将详细讲解如何在Thinkphp3.2框架下集成支付宝的即时到帐接口以及针对手机APP的服务端异步...

    asp.net(c#)支付宝即时到帐接口

    **ASP.NET(C#)支付宝即时到账接口详解** 在互联网支付领域,支付宝作为一款广泛应用的第三方支付平台,提供了多种与商家系统对接的接口。本篇主要介绍如何使用ASP.NET(C#)语言来实现支付宝的即时到账接口,以帮助...

    asp.net 支付宝及时到帐接口使用详解

    ***与支付宝即时到账接口结合使用是一个非常普遍的在线支付解决方案,它允许网站或应用程序快速接入支付宝支付功能,以便进行在线交易。以下是对所给文档内容的详细知识点解析。 ### 支付宝即时到账接口 支付宝...

    支付宝即时到帐插件 For Nopcommerce V2.65 - V3.3

    "支付宝即时到帐插件 For Nopcommerce V2.65 - V3.3"是专门为Nopcommerce平台设计的支付插件,旨在为用户提供安全、便捷的支付体验。接下来,我们将详细探讨这个插件的安装、配置以及其在实际运营中的应用。 首先,...

    最新支付宝微信免签即时到帐源码 v0.2.8.zip

    该压缩包文件“最新支付宝微信免签即时到帐源码 v0.2.8.zip”包含了一套用于实现支付宝和微信支付的免签约即时到账功能的源代码。这个系统允许商家在没有正式签约支付宝和微信支付的情况下,也能接收来自这两个平台...

    java支付宝即时到帐提交订单功能

    【Java支付宝即时到帐提交订单功能详解】 在Java开发中,实现支付宝即时到帐功能是一项常见的支付集成工作。支付宝即时到帐接口允许商家快速、安全地处理用户的在线支付请求,通常用于电商平台、在线服务等场景。...

    即时到账分账接口参数和实例文档

    ### 即时到账分账接口参数与实例解析 #### 接口概述 ...以上就是即时到账分账接口的主要参数和使用指南,开发者可以根据具体的业务需求选择合适的参数组合方式,以实现高效、安全的资金分配功能。

    支付宝接口说明

    支付宝接口分为多种类型,包括但不限于即时到账、担保交易、手机支付、分账、退款等。这些接口都基于开放平台API,通过HTTP/HTTPS协议进行通信,采用JSON或XML数据格式交换信息。商家需要在支付宝开放平台上注册并...

    alipay支付宝手机网站支付

    首先,我们需要理解的是,支付宝手机网站支付(又称即时到帐接口)是为商家提供的一种快速收款方式。它允许用户在商家网站上选择支付宝作为支付方式,然后跳转到支付宝的支付页面完成交易,最后返回商家网站确认支付...

    ECSHOP支付宝免签约插件

    这个过程对于一些小型或者个人商城来说可能较为繁琐,而且并非所有个人用户都能申请到企业支付宝账号来实现即时到帐。 该免签约插件的独特之处在于,它规避了这个限制,使得个人商城也能实现类似企业支付宝的即时...

    wp支付宝插件

    1. **在线支付集成**:通过这个插件,WordPress网站可以接受支付宝的即时到帐、担保交易等不同类型的支付方式,满足不同客户的需求。 2. **多种支付场景支持**:不仅适用于商品购买,还可以用于会员订阅、捐赠、...

    taobo开发指南用于支付宝开发

    1. 支付接口:主要包括即时到账、担保交易、分账等支付方式,开发者需按照支付宝提供的API文档,设置请求参数,发起支付请求,并处理返回的支付结果。 2. 订单查询接口:用于查询支付状态,包括订单创建、支付成功...

    php支付宝当面付打赏源码

    【PHP支付宝当面付打赏源码详解】 在IT行业中,PHP是一种广泛使用的服务器端脚本语言,尤其在Web开发领域。"PHP支付宝当面付打赏源码"是利用PHP编程实现的一种功能,它允许用户通过支付宝的当面付(Alipay QR Code ...

    alipay-sdk-java20170324180803.rar_Alipay_alipay-sdk_alipay-sdk-j

    1. 支付功能:SDK提供了各种支付方式的接口,如即时到帐、担保交易等,开发者可以根据业务需求选择合适的支付方式。 2. 订单管理:包括创建订单、查询订单状态、关闭订单、退款等操作,帮助开发者实现完整的交易流程...

    alipay-sdk-java20170829142630

    在这个特定的案例中,"alipay-sdk-java20170829142630"是支付宝为Java开发者提供的一个工具包,帮助他们轻松地在Java应用中实现支付功能,包括但不限于即时到帐、扫码支付、订单退款等。 1. **集成步骤**:集成...

    alipay-sdk-java20170307171631.jar

    - **支付接口**:包括即时到帐、担保交易、扫码支付等多种支付方式,支持同步和异步两种回调模式,确保交易安全。 - **订单管理**:创建、查询、关闭、撤销订单,满足各种业务场景的需求。 - **退款服务**:提供...

    php 在线支付源代码

    例如,`通用即时到帐接口集成教程_PHP版本.pdf`可能详述了如何通过PHP调用这些接口,完成用户支付请求的处理。 - 这个过程包括注册商户账号,获取API密钥,然后在PHP代码中构建请求参数,发送POST请求到支付平台的...

    ASP.NET团购网源码

    12. **支付宝担保交易/即时到帐**:支持支付宝支付方式,提供担保交易和即时到账两种模式,增强交易的安全性和便捷性。 13. **财付通支付**:接入财付通支付接口,丰富支付选项,提升用户体验。 14. **易宝支付**...

Global site tag (gtag.js) - Google Analytics