ASP支付宝接口实现Word下载.docx
- 文档编号:21812632
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:191.22KB
ASP支付宝接口实现Word下载.docx
《ASP支付宝接口实现Word下载.docx》由会员分享,可在线阅读,更多相关《ASP支付宝接口实现Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
///按照字母序列从a到z的顺序排列
publicstaticstring[]BubbleSort(string[]r)
inti,j;
//交换标志
stringtemp;
boolexchange;
for(i=0;
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;
///生成URL链接或加密结果
paramname="
para"
>
参数加密数组<
/param>
_input_charset"
编码格式<
sign_type"
加密类型<
key"
安全校验码<
returns>
字符串URL或加密结果<
/returns>
publicstaticstringCreatUrl(
//stringgateway,//GET方式传递参数时请去掉注释
string[]para,
string_input_charset,
stringsign_type,
stringkey
)
inti;
//进行排序;
string[]Sortedstr=BubbleSort(para);
//构造待md5摘要字符串;
StringBuilderprestr=newStringBuilder();
Sortedstr.Length;
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;
//{//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.Data;
usingSystem.Configuration;
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
//Response.Redirect(aliay_url);
Response.Write("
<
formname='
alipaysubmit'
method='
post'
action='
inputtype='
hidden'
name='
service'
value="
+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+"
return_url'
+return_url+"
notify_url'
+notify_url+"
payment_type'
value=1>
sign'
+aliay_url+"
sign_type'
+sign_type+"
/form>
script>
document.alipaysubmit.submit()"
/script>
下面的操作就是在支付平台的完成了,跟咱的程序没有关系了
现在我们应该想,那付完钱之后呢?
我们有两个界面来处理这个问题一个是
Alipay_Return.aspx
usingSystem.Collections;
usingSystem.Collections.Specialized;
///创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在于支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。
///该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。
publicpartialclassAlipay_Return:
stringalipayNotifyURL="
//stringalipayNotifyURL="
//partner的对应交易安全校验码(必须填写)
//partner合作伙伴id(必须填写)
//编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。
alipayNotifyURL=alipayNotifyURL+"
¬
ify_id="
+Request.QueryString["
notify_id"
];
//获取支付宝ATN返回结果,true是正确的订单信息,false是无效的
stringresponseTxt=AliPay.Get_Http(alipayNotifyURL,120000);
//*******加密签名程序开始//*******
NameValueCollectioncoll;
//LoadFormvariablesintoNameValueCollectionvariable.
coll=Request.QueryString;
//Getnamesofallformsintoastringarray.
String[]requestarr=coll.AllKeys;
string[]Sortedstr=AliPay.BubbleSort(requestarr);
if(Request.Form[Sortedstr[i]]!
="
&
Sortedstr[i]!
sign"
+Request.QueryString[Sortedstr[i]]);
+Request.QueryString[Sortedstr[i]]+"
stringmysign=AliPay.GetMD5(prestr.ToString(),_input_charset);
//*******加密签名程序结束*******
stringsign=Request.QueryString["
//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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ASP 支付 接口 实现