第三方支付接口技术对接实现及样例Word文档下载推荐.docx
- 文档编号:20503715
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:15
- 大小:56.78KB
第三方支付接口技术对接实现及样例Word文档下载推荐.docx
《第三方支付接口技术对接实现及样例Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第三方支付接口技术对接实现及样例Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
展示地址,即在支付宝页面时商品名称旁边的“详情”的链接地址
out_trade_no:
会员订单编号,订单编号必须在本系统中保持唯一
subject:
商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一次支付当作一次下订单
body:
商品描述,即备注
total_fee:
商品价格,也可称为订单的总金额
源码分析(C#):
首先必须建立一个通知页面(Notify.aspx)和一个返回页面(Return.aspx)以接受并验证从支付宝返回的信息并对数据库中相应的订单信息做修改处理操作。
代码
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingusingusingusingusingusingSystem.Text;
usingusingSystem.IO;
usingGateway;
///<
summary>
///创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。
///该页面称作“通知页”,是异步被支付宝服务器所调用。
///当支付宝的订单状态改变时,支付宝服务器则会自动调用此页面,因此请做好自身网站订单信息与支付宝上的订单的同步工作
/summary>
publicpartialclassprotectedvoidPage_Load(objectsender,EventArgse)
{
stringalipayNotifyURL=;
//stringalipayNotifyURL="
"
;
//此路径是在上面链接地址无法起作用时替换使用。
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"
sign_type"
)
if(i==Sortedstr.Length-1)
prestr.Append(Sortedstr[i]+"
="
+Request.Form[Sortedstr[i]]);
}
else
+Request.Form[Sortedstr[i]]+"
);
prestr.Append(key);
stringmysign=AliPay.GetMD5(prestr.ToString(),_input_charset);
//*******加密签名程序结束*******
stringsign=Request.Form["
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"
//金额如果你申请了商家购物卷功能,在返回信息里面请不要做金额的判断,否则会校验通过不了。
elseif(Request.Form["
TRADE_FINISHED"
||Request.Form["
TRADE_SUCCESS"
)//判断支付状态_交易成功结束(文档中有枚举表可以参考)
//金额
else
Response.Write(
success"
//返回给支付宝消息,成功,请不要改写这个success
//success与fail及其他字符的区别在于,支付宝的服务器若遇到success时,则不再发送请求通知(即不再调用该页面,让该页面再次运行起来),
//若不是success,则支付宝默认没有收到成功的信息,则会反复不停地调用该页面直到失效,有效调用时间是24小时以内。
//最好写TXT文件,以记录下是否异步返回记录。
////写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
Response.Write("
fail"
//写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
stringTOEXCELLR="
MD5结果:
mysign="
+mysign+"
sign="
+sign+"
responseTxt="
+responseTxt;
StreamWriterfs=newStreamWriter(Server.MapPath("
Notify_DATA/"
:
"
))+"
.txt"
false
///创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在于支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。
///该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。
+Request.QueryString["
//*******加密签名程序开始//*******
coll=Request.QueryString;
+Request.QueryString[Sortedstr[i]]);
+Request.QueryString[Sortedstr[i]]+"
//生成Md5摘要;
stringmysign=AliPay.GetMD5(prestr.ToString(),_input_charset);
stringsign=Request.QueryString["
//Response.Write(prestr.ToString());
//调试用,支付宝服务器返回时的完整路径。
if(mysign==sign&
)//验证支付发过来的消息,签名是否正确
//更新自己数据库的订单语句,请自己填写一下
stringstrOrderNO=Request.QueryString["
stringstrPrice=Request.QueryString["
//金额
stringstrTradeStatus=Request.QueryString["
TRADE_STATUS"
//订单状态
订单号:
+strOrderNO+"
<
br>
金额:
+strPrice);
//成功,可美化该页面,提示信息
------------------------------------------"
Result:
responseTxt="
+responseTxt);
+mysign);
sign="
+sign);
支付失败"
//支付失败,提示信息
}
Alipay.cs
usingSystem.Text;
usingSystem.Net;
///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;
t.Length;
sb.Append(t[i].ToString("
x"
).PadLeft(2,'
0'
));
returnsb.ToString();
///冒泡排序法
///按照字母序列从a到z的顺序排列
publicstaticstring[]BubbleSort(string[]r)
inti,j;
//交换标志
stringtemp;
boolexchange;
r.Length;
i++)//最多做R.Length-1趟排序
exchange=false;
//本趟排序开始前,交换标志应为假
for(j=r.Length-2;
j>
=i;
j--)
{//交换条件
if1],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"
编码格式<
加密类型<
key"
安全校验码<
returns>
字符串URL或加密结果<
/returns>
publicstaticstringCreatUrl(
//stringgateway,//GET方式传递参数时请去掉注释
string[]para,
string_input_charset,
stringsign_type,
stringkey
)
//进行排序;
string[]Sortedstr=BubbleSort(para);
prestr.Append(Sortedstr[i]);
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_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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 支付 接口 技术 对接 实现