//{//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