范文一:第三方支付接口技术对接实现及样例
B2B网站对接支付宝接口
网站转接支付宝解决方案
大型网上购物系统除了能让会员选择货到付款结账方式外,还应该提供一些更方便快捷的网上支付方式。如果网上商店没有足够的实力提供会员直接在网站中
建立现金账户的功能,就可以将订单信息转接到支付宝,让会员从支付宝付款。当然就算会员可以在网站上建立自己的现金账户,提供支付宝支付功能也不失为另一 种方便快捷的支付方式,这可以给客户提供更多可选的支付方式。
首先,网上购物系统必须与支付宝公司签订合作协议,以确保从本购物网站上传到
支付宝网站上的订单信息能被正确接收。
当会员于购物网站上买下一系列商品并选择支付宝付款方式后,购物系统即将会员购物的订单信息转发到支付宝,网站页面也会转到支付宝的付款页面。此时,支付宝页面会发送一个验证信息到本网站以确认支付宝正确收到订单信息。
会员于支付宝网站付款完成后,网站页面会重新跳回本购物网站,同时支付宝会将已付款的订单信息发回本网站以便对本购物网站的数据库进行必要的修改操
作。另外本网站还需要向支付宝网站发送一个返回信息,告知支付宝本系统已正确收到付款完毕的订单信息并且已经完成对数据的处理操作。
向支付宝网站传送订单信息时主要参数的含义:
gateway :支付接口
service:识别是何接口实现何功能的表示
seller_email:商家签约时的支付宝账号,即收款的支付宝账号
key:安全校验码,与partner是一组
partner:商户ID,合作伙伴ID
sign_type:加密类型
_input_charset:编码类型
show_url:展示地址,即在支付宝页面时商品名称旁边的“详情”的链接地址
out_trade_no:会员订单编号,订单编号必须在本系统中保持唯一
subject:商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,
可把一次支付当作一次下订单
body:商品描述,即备注
total_fee:商品价格,也可称为订单的总金额
源码分析(C#):
首先必须建立一个通知页面(Notify.aspx)和一个返回页面(Return.aspx)以接
受并验证从支付宝返回的信息并对数据库中相应的订单信息做修改处理操作。
Notify.aspx.cs
代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Collections.Specialized;
using System.IO;
using Gateway;
/// /// 创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。 /// 该页面称作“通知页”,是异步被支付宝服务器所调用。 /// 当支付宝的订单状态改变时,支付宝服务器则会自动调用此页面,因此请做 好自身网站订单信息与支付宝上的订单的同步工作 ///
public partial class Alipay_Notify : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string alipayNotifyURL =
"https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
//string alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链
接地址无法起作用时替换使用。
string partner = ""; //partner合作伙伴id(必须填写)
string key = ""; //partner 的对应交易安全校验码(必须填写)
string _input_charset = "utf-8";//编码类型,完全根据客户自身的
项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。
alipayNotifyURL = alipayNotifyURL + "&partner=" + partner +
"¬ify_id=" + Request.Form["notify_id"];
//获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
string responseTxt = AliPay.Get_Http(alipayNotifyURL, 120000);
//*******加密签名程序开始*******
int i;
NameValueCollection coll;
//Load Form variables into NameValueCollection variable.
coll = Request.Form;
// Get names of all forms into a string array.
String[] requestarr = coll.AllKeys;
//进行排序;
string[] Sortedstr = AliPay.BubbleSort(requestarr);
//构造待md5摘要字符串 ;
StringBuilder prestr = new StringBuilder();
for (i = 0; i < sortedstr.length;="">
{
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);
string mysign = AliPay.GetMD5(prestr.ToString(), _input_charset);
//*******加密签名程序结束*******
string sign = Request.Form["sign"];
if (mysign == sign && responseTxt == "true") //验证支付发过来的消息,
签名是否正确,只要成功进如这个判断里,则表示该页面已被支付宝服务器成功
调用
//但判断内出现自身编写的程序相关错误导致通知给支付宝并不是发
送success的消息或没有更新客户自身的数据库的情况,请自身程序编写好应对
措施,否则查明原因时困难之极
{
if (Request.Form["trade_status"] == "WAIT_BUYER_PAY")//
判断支付状态_等待买家付款(文档中有枚举表可以参考)
{
//更新自己数据库的订单语句,请自己填写一下
string strOrderNO = Request.Form["out_trade_no"];//订
单号
string strPrice = Request.Form["total_fee"];//金额
如果你申请了商家购物卷功能,在返回信息里面请不要做金额的判断,否则会校
验通过不了。
}
else if (Request.Form["trade_status"] == "TRADE_FINISHED" ||
Request.Form["trade_status"] == "TRADE_SUCCESS")// 判断支付状态_交易
成功结束(文档中有枚举表可以参考)
{
//更新自己数据库的订单语句,请自己填写一下
string strOrderNO = Request.Form["out_trade_no"];//订
单号
string strPrice = Request.Form["total_fee"];//金额
}
else
{
//更新自己数据库的订单语句,请自己填写一下
}
Response.Write(
"success"); //返回给支付宝消息,成功,请不要改写这个success
//success与fail及其他字符的区别在于,支付宝的服务器若遇
到success时,则不再发送请求通知(即不再调用该页面,让该页面再次运行起
来),
//若不是success,则支付宝默认没有收到成功的信息,则会反复
不停地调用该页面直到失效,有效调用时间是24小时以内。
//最好写TXT文件,以记录下是否异步返回记录。
////写文本,纪录支付宝返回消息,比对md5计算结果(如网站不
支持写txt文件,可改成写数据库)
//string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign="
+ sign + ",responseTxt=" + responseTxt;
//StreamWriter fs = new
StreamWriter(Server.MapPath("Notify_DATA/" +
DateTime.Now.ToString().Replace(":", "")) + ".txt", false,
System.Text.Encoding.Default);
//fs.Write(TOEXCELLR);
//fs.Close();
}
else
{
Response.Write("fail");
//最好写TXT文件,以记录下是否异步返回记录。
//写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,
可改成写数据库)
string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign=" +
sign + ",responseTxt=" + responseTxt;
StreamWriter fs = new
StreamWriter(Server.MapPath("Notify_DATA/" +
DateTime.Now.ToString().Replace(":", "")) + ".txt", false,
System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
}
}
}
Return.aspx.cs
代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Collections.Specialized;
using System.IO;
using Gateway;
/// /// 创建该页面文件时,请留心该页面文件是可以对其进行美工处理的,原因在 于支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。 /// 该页面称作“返回页”,是同步被支付宝服务器所调用,可当作是支付完成 后的提示信息页,如“您的某某某订单,多少金额已支付成功”。 ///
public partial class Alipay_Return : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string alipayNotifyURL =
"https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
//string alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链
接地址无法起作用时替换使用。
string key = ""; //partner 的对应交易安全校验码(必须填写)
string partner = ""; //partner合作伙伴id(必须填写)
string _input_charset = "utf-8";//编码类型,完全根据客户自身的
项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。
alipayNotifyURL = alipayNotifyURL + "&partner=" + partner +
"¬ify_id=" + Request.QueryString["notify_id"];
//获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
string responseTxt = AliPay.Get_Http(alipayNotifyURL, 120000);
//*******加密签名程序开始//*******
int i;
NameValueCollection coll;
//Load Form variables into NameValueCollection variable.
coll = Request.QueryString;
// Get names of all forms into a string array.
String[] requestarr = coll.AllKeys;
//进行排序;
string[] Sortedstr = AliPay.BubbleSort(requestarr);
//构造待md5摘要字符串 ;
StringBuilder prestr = new StringBuilder();
for (i = 0; i < sortedstr.length;="">
{
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摘要;
string mysign = AliPay.GetMD5(prestr.ToString(),
_input_charset);
//*******加密签名程序结束*******
string sign = Request.QueryString["sign"];
// Response.Write(prestr.ToString()); //调试用,支付宝服务器返回时的
完整路径。
if (mysign == sign && responseTxt == "true") //验证支付发过
来的消息,签名是否正确
{
//更新自己数据库的订单语句,请自己填写一下
string strOrderNO = Request.QueryString["out_trade_no"];//
订单号
string strPrice = Request.QueryString["total_fee"];//金额
string strTradeStatus =
Request.QueryString["TRADE_STATUS"];//订单状态
Response.Write(
"订单号:" + strOrderNO + "
金额:" + strPrice); //成功,可美化
该页面,提示信息
}
else
{
Response.Write("------------------------------------------");
Response.Write("
Result:responseTxt=" + responseTxt);
Response.Write("
Result:mysign=" + mysign);
Response.Write("
Result:sign=" + sign);
Response.Write("支付失败"); //支付失败,提示信息
}
}
}
除此之外在Notify.aspx页面和Return.aspx页面公用的一些方法,可以提取出来放在一个公共的类里面(Alipay.cs)
Alipay.cs
代码
using System.Web;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Net;
using System;
/// /// New Interface for AliPay ///
namespace Gateway
{
public class AliPay
{
/// /// 与ASP兼容的MD5加密算法 ///
public static string GetMD5(string s, string _input_charset) {
MD5 md5 = new MD5CryptoServiceProvider();
byte[] t =
md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s)); StringBuilder sb = new StringBuilder(32);
for (int i = 0; i < t.length;="">
{
sb.Append(t[i].ToString("x").PadLeft(2, '0'));
}
return sb.ToString();
}
/// /// 冒泡排序法 /// 按照字母序列从a到z的顺序排列 ///
public static string[] BubbleSort(string[] r)
{
int i, j; //交换标志
string temp;
bool exchange;
for (i = 0; i < r.length;="" i++)="">
{
exchange = false; //本趟排序开始前,交换标志应为假
for (j = r.Length - 2; j >= i; j--)
{//交换条件
if (System.String.CompareOrdinal(r[j + 1], r[j]) <>
{
temp = r[j + 1];
r[j + 1] = r[j];
r[j] = temp;
exchange
= true; //发生了交换,故将交换标志置为真
}
}
if (!exchange) //本趟排序未发生交换,提前终止算法
{
break;
}
}
return r;
}
/// /// 生成URL链接或加密结果 ///
/// 参数加密数组
/// 编码格式
/// 加密类型
/// 安全校验码
///
public static string CreatUrl(
//string gateway,//GET方式传递参数时请去掉注释
string[] para,
string _input_charset,
string sign_type,
string key
)
{
int i;
//进行排序;
string[] Sortedstr = BubbleSort(para);
//构造待md5摘要字符串 ;
StringBuilder prestr = new StringBuilder();
for (i = 0; i < sortedstr.length;="">
{
if (i == Sortedstr.Length - 1)
{
prestr.Append(Sortedstr[i]);
}
else
{
prestr.Append(Sortedstr[i] + "&");
}
}
prestr.Append(key);
//生成Md5摘要;
string sign = GetMD5(prestr.ToString(), _input_charset);
//以下是POST方式传递参数
return sign;
//以下是GET方式传递参数
//构造支付Url;
// char[] delimiterChars = { '='};
// StringBuilder parameter = new StringBuilder();
// parameter.Append(gateway);
// for (i = 0; i < sortedstr.length;="">
// {//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;
// return parameter.ToString();
}
//获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求
public static string Get_Http(string a_strUrl, int timeout) {
string strResult;
try
{
HttpWebRequest myReq =
(HttpWebRequest)HttpWebRequest.Create(a_strUrl);
myReq.Timeout = timeout;
HttpWebResponse HttpWResp =
(HttpWebResponse)myReq.GetResponse();
Stream myStream = HttpWResp.GetResponseStream();
StreamReader sr = new StreamReader(myStream,
Encoding.Default);
StringBuilder strBuilder = new StringBuilder();
while (-1 != sr.Peek())
{
strBuilder.Append(sr.ReadLine());
}
strResult
= strBuilder.ToString();
}
catch (Exception exp)
{
strResult
= "错误:" + exp.Message;
}
return strResult;
}
}
}
以上三个文件建之后,就可以在需要的地方对支付宝接口进行调用以完成支付宝支付的功能了(Default.aspx.cs)
代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Gateway;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnAlipay_Click(object sender, EventArgs e)
{
//业务参数赋值;
string gateway =
"https://www.alipay.com/cooperate/gateway.do?"; //支付接口
string service = "create_direct_pay_by_user"; //服务名称,这个是识别是何接口实现何功能的标识,请勿修改
string seller_email = ""; //商家签约时的支付宝帐号,即收款的支付宝帐号
string sign_type = "MD5"; //加密类型,签名方式“不用改”
string key = ""; //安全校验码,与partner是一组,获取方式是:用签约时支付宝帐号登陆支付宝网站www.alipay.com,在商家服务我的商家里即可查到。
string partner = ""; //商户ID,合作身份者ID,合作伙伴ID
string _input_charset = "utf-8"; //编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。
string show_url = "http://www.alipay.com/"; //展示地址,即在支付页面时,商品名称旁边的“详情”的链接地址。
string out_trade_no = TxtOrderno.Text.Trim(); //客户自己的订单号,订单号必须在自身订单系统中保持唯一性
string subject = TxtSubject.Text.Trim(); //商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一
次支付当作一次下订单
string body = TxtBody.Text.Trim(); //商品描述,即备注
string total_fee = TxtTotal_fee.Text.Trim(); //商品价格,也可称为订单的总金额
//服务器通知url(Alipay_Notify.aspx文件所在路经),必须是完整的路径地址
string notify_url =
"http://localhost:8978/direct_vs2005_utf/Alipay_Notify.aspx";
//服务器返回url(Alipay_Return.aspx文件所在路经),必须是完整的路径地址
string return_url =
"http://localhost:8978/direct_vs2005_utf/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生成
string aliay_url = AliPay.CreatUrl(
//gateway,//GET方式传递参数时请去掉注释
para,
_input_charset,
sign_type,
key
);
//以下是GET方式传递参数
//Response.Redirect(aliay_url);
//以下是POST方式传递参数
Response.Write("");
Response.Write("");
}
}
转接到支付宝的付款功能在调试过程中,必须真实的从网站够买商品并跳转到支付宝网
付款。可以将所买商品的单价设为0.01元,从支付宝付款成功并重新跳回本网站后,检查订单信息是否正确,以及对传回的数据所做的处理操作是否正确。总之,用支付宝付款的功能在调试过程中必须进行实际的支付操作才能发现错误。
范文二:第三方支付接口有哪些
第三方支付接口有哪些?
第三方支付接口有哪些?目前中国国内的第三方支付产品主要有PayPal (易趣公司产品)、支付宝(阿里巴巴旗下)、财付通(腾讯公司,腾讯拍拍)、傲付宝等。其中最用户数量最大的是PayPal 和支付宝,前者主要在欧美国家流行,后者是马云阿里巴巴旗下产品,据称,截止2009年7月,支付宝用户超过2亿。
第三方支付接口申请提供资料:
1、提供企业5证资料(营业执照、法人身份证、组织机构代码证、税务登记证复印件、开户许可证各一份扫描件),个人签约提供身份证扫描件。2
、提供
域名并网站ICP 备案,备案信息必须跟提供来的资料信息一致3、法人或个人划款银行账户一个
关于个人申请第三方支付接口:第三方支付接口个人申请的话建议到正规平台上面你去申请,因为有些支付接口平台不提供个人支付接口的申请。
第三方支付接口如何对接流程:
第一步:签订合约通过第三方拿到接口(可以邮件形式发送、也可以在第三方系统下载),拿到接口后,要确认下接口类型,是否是自己需要的接口,比如B2C 接口、B2B 接口等类型。
第二步:支付接口分很多语言版本,比如ASP 、JSP 、PHP 、.NET 语言版本,所以要选择与自己网站语言匹配的接口进行安装。商城网站的技术一般比较清楚商城的开发语言。
第三步:拿到的支付接口一般包括接口文档和接口代码示例,选择合适的接口代码示例,进行联调,比如自己网站是PHP 开发的,就选择PHP 代码示例联调。
第四步:接口联调的时候,需要第三方支付提供联调测试账号,方可以联调。联调除了需要联调账号除外,还需要该账号的支付密钥,联调过程中,有什么问
题,可以直接找第三方支付技术支持给予协调处理。
第五步:接口联调通过后,可先换成生产环境账号,进行交易测试,测试没问题后,可以放到商城网站进行交易。
注册资本
1国有控股第三方支付机构:指国有资本占控制权的第三方支付机构。
2国有参股第三方支付机构:指在企业股权结构中有国有资本,但国有资本不占控制权。
3民营第三方支付机构:指全部资本由境内投资者投资的企业。
4外商独资第三方支付机构:在中国境内设立的全部资本由外国投资者投资的企业。
5中外合资第三方支付机构:指外国投资者和中国境内投资者共同出资的企业。
业务范围
1单一业务支付机构:只从事某一类别支付业务的支付机构,如只从事银行卡收单的杉德,只从事预付卡的资和信等;
2综合业务支付机构:指从事多样化支付业务的支付机构,如快钱、通联支付等。
云时代是杭州云韦科技有限公司 提供技术先进的互联网金融基础设施,致
力于协助有意参与互联网金融业务的企业客户确定战略方向和整体解决方案,并提供业界的架构和系统来确保其业务安全稳定地运行,同时符合监管要求。
云时代核心管理团队在互联网行业和金融行业均拥有丰富的经验。其对互联网金融的深刻理解和对互联网金融基础设施研发的专注,形成公司独特的竞争力。
公司的愿景是帮助每一个企业客户打造适合新经济的互联网金融业务,从而推动整个行业的快速发展,真正做到金融普惠。
范文三:第三方支付-文档-接口文档
首信易支付(v4.3)接口说明(内卡)
(首信易支付商户后台管理系统 http://pay.beijing.com.cn)
首信易支付流程及功能简要介绍
首信易支付网上支付主要流程大致分为商户交易订单提交过程和银行订单确认这两个部分。首先,当消费者在商户处完成购物过程,在商户端服务器形成最终订单(订单参数格式见文档第一部分“商户提交待付款订单接口”说明)且消费者选择首信易支付方式时,该接口程序将消费者订单中有关支付的信息引导到首信易支付平台,消费者在该平台选择银行进行网上支付交易。
当交易完成后,首信易支付平台可以通过两种方式通知商户银行对该笔订单的确认消息,商户根据实际业务需要选择这两种方式(其中任一种或者全部)编写相应的程序来接收银行返回的相关支付确认参数,通过对参数的判断来进行后续的业务操作。
1. 前台页面链接方式:这种方式接收的参数格式见文档第二部分“果页面返回接口”说明,是将此次支付订单的交易结果(参数)以页面连接的形式发送给商户。这里的前台指这个参数传递过程对持卡消费者是可见的。
这种方式的特点是:返回参数的实时性好。但有个别几种支付方式不支持这种方式,有诸如网络中断或者持卡消费者不按要求操作等情况出现时,这种方式会有漏单(银行支付确认消息商户收不到)的现象。一旦出现漏单的情况,商户只能通过后台接口程序方式接收银行订单支付确认消息,或者登录到首信易支付商户后台管理系统查询确认。 注意:这种方式接收程序的地址由商户在提交订单时参数v_url的值来指定,无需事先通知首信易支付平台,如有变更只需要在提交订单参数时修改v_url的值即可。
2. 后台接口程序方式:这种方式接收的参数格式见文档第三部分“首信易支付订单支付结
果后台返回接口”说明,是由首信易支付平台转发银行支付确认信息。这种方式是首信易支付平台服务器与商户服务器之间进行通信的,对于持卡消费者是不可见的。
这种方式的特点是:支持平台上所有的支付方式,而且在与商户的通信过程中如有网络故障,此方式支持自动重发功能(在首次发送的24小时内)。
注意:这种方式接收程序的地址需要由商户来确定,在商户号开通时所填写的初始单中,填写在“订单支付确认返回地址”一栏,并由首信易支付平台管理员按照初始单内容进行开通。开通后如有修改,需要事先通知管理员确认修改。
首信易支付转账成功,将立即通知商户转账结果,通知接口的参数格式为文档第四部分“首信易支付通知商户转帐结果接口”说明。此接口地址由商户确认,填写在初始单中“转账确认通知接口”一栏中。商户开通后,如果需要更改也要事先通知管理员确认后修改。
注意:通知商户转账过程与网上支付交易是两个相对独立的过程,转账工作是由首信易支付结算中心工作人员线下完成的,在通知银行进行转账工作后,会通过“首信易支付通知商户转帐结果接口”将本次转账的所有订单号发给商户。由于这个接口发送的信息只是起到通知作用,不会影响商户的实际转账工作。因此商户可以根据自己的实际需要选择是否使用这个接口。(本接口可选做)
各接口的具体格式如下:
一、商户提交待付款订单接口(商户==>>首信易支付;必做接口)
用途:用来接收商户发来的订单信息
1、 CGI程序接口
标准提交接口:
注:为了满足不同商户需要,首信易支付还提供以下几种快捷支付通道,相关支付通道CGI接口链接地址及说明:
直连银行快捷通道:
由于采用HTML表单方式传递参数,就出现了消费者可以任意篡改页面信息的问题,为防止此类现象发生,我们需要对页面部分敏感信息作签名以保证其真实性和完整性。
首信易支付平台向入驻商户提供了一个标准的签名程序源码,该程序提供签名功能,主功能函数为char* hmac (char* text, char* key),该函数有两个入口参数:char* text和char* key。其中text是将表单中部分敏感信息拼串的结果,具体做法如下:
当消费者在商户端生成最终订单的时候,将订单中的v_moneytype v_ymd v_amount v_rcvname v_oid v_mid v_url七个参数的value值拼成一个无间隔的字符串(char型,顺序不要改变)。而另一个入口参数key则是首信易支付与商户私下约定的密钥。该密钥由商户生成,建议为16个字符,字母数字的组合。并通知首信易支付相关人员。请以电子邮件方式按照:公司名、商户号、联系人、密钥的顺序发送到kf@payeasenet.com该密钥初始值为test,为确保商户交易数据安全,请商户正式上线前务必另行约定密钥。以下所用到的密钥均为此密钥。例如上例表单的拼串结果应为:
02010010113.4588820100101-888-000001234888http://domain/program
该函数返回值即为我们所需的数字指纹,将其写入v_md5info字段即可。
二、首信易支付订单支付结果页面返回接口(首信易支付==>>商户;必做接口)
支付完成后页面转到商户时,从首信易支付返回的消息格式(注意,与后台接口程序文档第三部分定时发送方式使用的消息格式有区别)为:
v_url?v_oid=20100101-商户号-000001234&v_pstatus=30&v_pstring=无效卡号
&v_pmode=支付方式(字符串)
&v_md5info=a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4&v_amount=0.01
&v_moneytype=0&v_md5money=56b2c3d345f6a1b2c3d4e766a1b2c323
&v_sign=7e85042c517d4e42f77b0ef967e7a6f20f2ede9ff6558c8309712ec7edddb69dc783a2019a48599cc81ada8397a03b3af0ae42789ac6bc2783a5084419d51b0f54749df0123d51b319cf5f8a3c4a4b886372463dd96f9922a8a1e88a0c663b0065b25f7c9ac29fc98478e665c079d57308c01780d3d8067bbb634c9dd3853c8e
该消息格式详细解释如下:
v_url是该笔订单提交时(接口文档第一部分)参数v_url 的值,即首信易支
付平台返回到商户的接口地址。
其中,
***** 为商户发送的v_url;
1.v_oid = 商户发送的v_oid定单编号;
2.v_pmode = 支付方式(字符串);
3.v_pstatus = 1(已提交,对使用非实时银行卡进行扣款的订单);
20(支付成功,对使用实时银行卡进行扣款的订单);
30(支付失败,对使用实时银行卡进行扣款的订单);
4.v_pstring 支付结果信息= 已提交(当v_pstatus=1时);
支付完成(当v_pstatus=20时);
失败原因(当v_pstatus=30时,字符串);
5.v_md5info =char* hmac_md5(char* text, char* key)
char* text 拼串结果
char* key 对称密钥
注:v_md5info校验四个参数,拼接字符串的顺序为:v_oid,v_pstatus,v_pstring和v_pmode
6.v_amount订单实际支付金额
7.v_moneytype 订单实际支付币种
8.v_md5money=char* hmac_md5(char* text, char* key)
char* text 拼串结果
char* key 对称密钥
v_md5money效验两个参数,拼接字符串的顺序为:v_amount,v_moneytype
9.v_sign:商城数据签名,参与签名的数据(v_oid+v_pstatus+v_amount+v_moneytype)
验证商城数据签名:(Public1024.key为商城公钥)
asp验证签名:
set com=server.CreateObject("RSACOM.RSAMD5.1")
source=v_oid & v_pstatus & v_amount & v_moneytype
verifyStatus=com.PublicVerifyMD5("D:\Public1024.key" ,v_sign ,source ,len(source))
(verifyStatus:0 验证成功)
jsp验证签名:
RSA_MD5 myRSA=new RSA_MD5();
String source=v_oid + v_pstatus + v_amount + v_moneytype;
int verifyStatus = myRSA.PublicVerifyMD5("D:\Public1024.key" ,v_sign ,source); (verifyStatus:0 验证成功)
关于验证参数的说明:
首信易支付订单页面返回接口共有9个参数,其中v_oid,v_pstatus,v_pstring,v_pmode,v_amount,v_moneytype 这6个参数是订单支付相关的消息。v_md5info,v_md5money,v_sign 这3个参数是附加的验证消息。其中,v_sign 参数是用于首信易支付平台最新推出的非对称安全验证方式的指纹结果。为了保持首信易支付平台的兼容性,所以
保留了原来用于对称验证方式的两个验证值参数:v_md5info和v_md5money,这样原有商户就不必做任何改动,v_md5money中参加验证的参数均不含中文,如果在验证时遇到中文编码问题,可以通过验证这个指纹解决。首信易支付平台建议新入驻商户采用非对称的安全验证方式。这种验证方式也适用于后面的首信易支付订单支付结果后台返回接口,只是注意参加验证的参数有所不同。特在此说明,后面不再赘述。由于非对称安全验证方式使用时需要有安装证书文件等操作,如果是虚拟主机用户鉴于条件所限无法实现,则还可以使用原来md5验证方式。
三、首信易支付订单支付结果后台返回接口(首信易支付==>>商户,建议使用此接口,可有效减少漏单)
用途:首信易支付向商户发送订单的支付结果,商户返回接收情况。
注:此接口以及后面的转账结果返回接口,需由商户入驻时提供,填写在初始单的“订单支付返回接口”一栏中,或者以公司名、商户号、联系人、两个接口的URL(请注明哪个接口)的形式发送到首信易支付客服邮箱(详见初始单)
1、 首信易支付提交的FORM表单参数说明
首信易支付一次将返回一个或多个订单的支付结果,返回为多个订单结果时,我们将以订单组的形式发送,具体说明如下:
对每一笔订单,首信易支付都实时地将支付结果发送给商户。如果某一笔订单未发送成功(如出现网络中断或该笔订单md5校验错)但已经成功支付,则此订单将随着下一次发送订单支付结果时发送,如发送还不成功,则在当日重复发送。对于支付失败的订单只发送一次。
在每次发送时,我们将以七个参数(v_count、v_oid、v_pmode、v_pstatus、v_pstring、v_amount、v_moneytype)表示订单相关内容,另外附加三个数字指纹字段(v_mac、v_md5money、v_sign)用于以上订单信息的校验。对于单笔订单,以上七个订单参数说明如下:
订单个数(v_count):本次发送的订单个数;(最少为1,最大为4)
订单编号组(v_oid):定义同商户提交待付款订单接口中的订单编号定义;
支付方式组(v_pmode):支付方式中文说明,如“中行长城信用卡”。
支付状态组(v_pstatus):支付结果,0→待处理(支付结果未确定);
1→支付完成;
3→支付被拒绝;
支付结果说明(v_pstring):对支付结果的说明,成功时(v_pstatus=1)为“支付成功”,支付被拒绝时(v_pstatus=3)为失败原因。
订单支付金额(v_amount):订单实际支付金额
订单支付币种(v_moneytype):订单实际支付币种
v_sign:商城数据签名,参与签名的数据
(v_oid+v_pstatus+v_amount+v_moneytype+v_count)
对于批量订单的发送,以v_oid字段为例,v_oid1表示本次发送的第一笔订单,v_oid2表示本次发送的第二笔订单,依此类推,组成v_oid字段,中间以“|_|”组合分割,举例如下:v_oid=v_oid1|_|v_oid2|_|v_oid3|_|v_oid4|_|…………。同理,v_pmode字段表示为:v_pmode=v_pmode1|_|v_pmode2|_|v_pmode3|_|v_pmode4|_|…………,v_pstatus字段表示为:
v_pstatus=v_pstatus1|_|v_pstatus2|_|v_pstatus3|_|v_pstatus4|_|…,v_pstring字段表示为:v_pstring=v_pstring1|_|v_pstring2|_|v_pstring3|_|……,
v_amount字段表示为:v_amount=v_amount1|_|v_amount2|_|v_amount3|_|……,
v_moneytype字段表示为:v_moneytype=v_moneytype1|_|v_moneytype2|_|……。
v_sign:商城数据签名,参与签名的数据(v_oid+v_pstatus+v_amount+v_moneytype+v_count)
数字指纹(v_mac):防篡改信息,v_mac=hmac_md5(text , key);其中text是表单中各项的value按如下顺序拼串的结果:v_oid+v_pmode+v_pstatus+v_pstring+v_count,key为双方约定的密钥。例如一次发送两笔订单:
20001124-888-test002|_|20001124-888-test003招商银行一网通|_|招商银行一网通3|_|1支付被拒绝|_|支付完成2
数字指纹(v_md5money):防篡改信息,v_md5money=hmac_md5(text , key);其中text是表单中各项的value按如下顺序拼串的结果:v_amount +v_moneytype,key为双方约定的密钥。
验证商城数据签名(v_sign):(Public1024.key为商城公钥)
asp验证签名:
set com=server.CreateObject("RSACOM.RSAMD5.1")
source=v_oid & v_pstatus & v_amount & v_moneytype & v_count
verifyStatus=com.PublicVerifyMD5("D:\Public1024.key" ,v_sign ,source ,len(source))
(verifyStatus:0 验证成功)
jsp验证签名:
RSA_MD5 myRSA=new RSA_MD5();
String source=v_oid + v_pstatus + v_amount + v_moneytype + v_count;
int verifyStatus = myRSA.PublicVerifyMD5("D:\Public1024.key" ,v_sign ,source); (verifyStatus:0 验证成功)
2、商户返回消息
当商户收到上述消息后,返回消息定义如下:
“sent”,表示成功收到支付结果信息。
“error”,表示接收消息发生错误,如md5校验错。
注:返回信息不要有任何HTML代码或其它符号。
3、例如,在ASP中的参考代码
<% ’ 获取参数
v_count=request("v_count")
v_oid=request("v_oid")
v_pmode=request("v_pmode")
v_pstatus=request("v_pstatus")
v_pstring=request("v_pstring")
v_mac=request("v_mac")
v_sign=request(“v_sign”)
’ 解析参数
a_oid=split(v_oid,"|_|") a_pmode=split(v_pmode,"|_|") a_pstatus=split(v_pstatus,"|_|") a_pstring=split(v_pstring,"|_|") ’ md5校验 dim md,fff set md=server.CreateObject ("md5_VB.md5class") fff=md.hmac(v_oid&v_pmode&v_pstatus&v_pstring&v_count,"test") ’ 按md5校验情况输出结果 if fff<>v_mac then response.write "error" else response.write "received" ’ 或response.write "sent",依据商品物流特征决定。 ’ 操作数据库 (略) ……
end if
%>
’ RSA校验过程请参考文档第四部分中关于RSA的使用。
四、关于安全验证算法的相关说明
MD5算法用于对原始信息进行数学摘要,以用于对数据完整性进行校验。(注:该算法由首信易支付提供asp、标准c、java三个版本)。
v_moneytype,v_ymd,v_amount,v_rcvname,v_oid,v_mid,v_url七个参数的value值拼成一个字符串(char型,顺序不要改变),与我们双方约定的密钥一同作为入口参数,具体调用函数如下
带密钥的md5算法库:
md5lib.h 其中md5lib.h是外部可调用的函数库。
外部可调用的函数如下(详见readme.txt文件):
char* MDString (char *); /*输入任意一个字符串,经过md5算法处理后,返回结果:一个定长(32个字符)字符串 */
char* MDFile (char *); /*输入任意一个文件名,文件内容经过md5算法处理后,返回结果:一个定长(16个字符)字符串 */
char* hmac (char* text, char* key); /*输入任意一个字符串text,和一个用做密钥的字符串key,经过hmac算法处理,返回处理结果:一个定长字符串(32个字符),您只需要调用hmac函数*/
编译时,把md5.c、md5lib.c 和调用函数一起编译;使用时,直接调用md5lib.c中的hmac函数即可。
Sample.c 是个带主函数的测试程序,可不用。
将算出来的结果加到 即可。
RSA算法也是用于对原始信息进行数学摘要,以用于对数据完整性进行校验。(注:该算法由首信易支付提供asp、php for linux/Sun Solaris、jsp等版本)。
调用方法:
'示例代码: source="abcde12345" v_sign="3e5671bc4f91c3d055b18c1e5e22dd9db157380c7ee8facf0b1117082fbf398d7113c2df7e3219f‘创建对象 set rsacom=server.CreateObject("RSACOM.RSAMD5.1") ‘调用方法 ‘参数:商城公钥,签名数据,原数据,原数据长度 ‘返回值:整型 0:验证成功,其它:验证失败 verifyStatus=rsacom.PublicVerifyMD5("D:\Public1024.key",v_sign,source,len(source)) c28dd88dd26cb096cabe607f3e397dfc2dcdb3349351a5f025ea0761da6e39e2d2fd311294a6076e777fe2ab8911f22113c435b89d63ae4f2aff2f333f7ebd40cc89601d58fb37b16596b5c94eb8b64cd52e12b9679248e6a"
set rsacom=server.CreateObject("RSACOM.RSAMD5.1") verifyStatus=rsacom.PublicVerifyMD5("D:\Public1024.key",v_sign,source,len(source)) '验证签名结果 if verifyStatus=0 then response.write "公钥验证成功." else response.write "公钥验证失败." end if
五、调试
1、 当模拟购物过程能出现首信易支付选择卡种类的页面( 见下图 )时,第一部分户提交待付款订单接口调试成功。
2、 对于第二、第三以及第四部分接口的调试,需到银行成功支付后进行,建议使用招行的账号,实时性比较好。
附录:
注:1、888为示例商户编号,商户不可用于测试
2、商户用于测试的商户编号及密钥请与首信易支付工作人员联系获取
3、商户在使用正式商户编号时,请提前与首信易支付工作人员联系约定密钥
4、商户测试时,请务必测试md5加密环节
常见调试错误问题说明
11
1拼串顺序错误(正确顺序请参看技术文档第一部分说明) 2所使用密钥不一致(请使用和首信支付平台约定的密钥)
3可能有些参数中含有空格,取值时并未取出(请确保参与拼串的参数值与表单中所赋的值一致)
12
范文四:网上支付第三方支付接口
第三方支付接口
1. 快钱支付
2. 支付宝
3. YeePay易宝
4. 邮局支付(网汇通)
5. 安付通
6. 网银(chinabank)
7. PayPal贝宝
8. ips环迅支付
9. 腾讯财付通
10. NPS网上支付系统
1.快钱支付(银行/邮政汇) (https://www.99bill.com/website/)
联系方式: http://www.99bill.com/seashell/html/corp/contactus.html
网关地址: https://www.99bill.com/webapp/receiveMerchantInfoAction.do/
程序参考文档: 见附件快钱接口.rar
特点:
1.支持19种国内银行在线支付,
2.支持2种线下支付方式: (在线生交易号码,客户至银行柜台或者邮局依此号码汇款,参考下
图)
a.通过邮局汇款
b.通过银行柜台汇款
提供邮件号码或者手机号码后会将信息发至相应联系工具中
银行前台结算方式图
2.支付宝支付(https://www.alipay.com/)
联系方式: https://www.alipay.com/static/aboutalipay/contact.htm
网关地址: https://www.alipay.com/cooperate/gateway.do
签约入口: https://www.alipay.com/cooperate/btools_shop.htm
程序参考文档: 见附件支付宝.rar
特点:
1.支持国内14种银行在线支付
2.支持支付宝帐户余额直接付款
3.支持”支付宝卡通”付款(映射至用户银行卡)
4.支持邮政”网汇e”
5.支付宝在国内拥有很大数量的用户,为”淘宝网”的支付工具;
6.提供” 合并支付”功能,即” 是在对交易进行付款的时候,可以选择“等待买家付款”类型的交易,只用一次支付过程就实现了多笔交易的支付,提高了支付操作的效率和易用性。”
(http://help.alipay.com/support/help_detail.htm?help_id=18756)
3.YeePay易宝支付 (http://www.yeepay.com/)
联系方式: http://www.yeepay.com/zizhu/help.html
网关地址: 官方提供编程接口,DLL等相关工具
程序参考文档:见附件易宝支付
特点:
1.支持多家银行;
2.支持易宝会员支付
3.支持电话支付 易宝支持工商银行95588,招商银行95555,建设银行95533,民生银行
95568
4.积分支付(通卡)
5.支持手机银行支付 参考: http://www.yeepay.com/help/html/help26.html
6.为会员提供收款链接服务
这是专为会员账户提供的免费收款服务。收款链接是直通会员账户的在线支付链接网址,如
果您把自己的账户收款链接告知付款人(可以通过邮件、QQ、论坛), 当付款人在浏览器
里打开这个链接时,就能通过在线支付方式从银行卡划款到您的会员账户里。目前,收款链
接支持国内19家银行的数十种银行卡的人民币账户支付。
参考: http://www.yeepay.com/help/html/help019.html
7.提供 商户与企业(B2B)支付方式
独家支持工商银行(全国),深圳发展银行(全国),B2B在线支付
8.提供快捷查单服务
9.自助接入服务,自助商户 参考: http://www.yeepay.com/zizhu/index.html
4.邮局支付(网汇通) http://www.udpay.com.cn/
联系方式: https://www.udpay.com.cn/jsp/businesslogin/merchantjoin.jsp
网关地址:无需额外开发 注册后在官方后台获取支付代码即可嵌入网站中
程序参考文档:
特点:
1. 采用充值卡方式
2. 网汇通卡是中国邮政储蓄银行发行的一种不定额现金支付卡,可直接进行各种消
费,如:充值财付通、充值手机、新浪邮箱续费、充值skype、购买Q币等。
用户可以直接到当地邮局购买网汇通卡,新版网汇通卡可以是1元到2000元之间的任意金额,精确到分,例如:你可以购买201.08元的网汇通卡
3. 必须要提供注册用户或者网汇通卡号;不支持直接网银支付;
4. 全国邮局均可购买网汇通充值卡
5. 无需额外开发支付接口等;
网汇通代码生成
5. 安付通(http://help.eachnet.com/help/escrow/ )
联系方式:
网关地址:
程序参考文档:
特点:
1. eBay易趣的支付工具;
2. 不提供对外接口,无法在网站中嵌入使用
6.网银(chinabank) http://www.chinabank.com.cn/
联系方式: http://www.chinabank.com.cn/gateway/about_us/contact/index.shtml
网关地址:
程序参考文档: 接口已经完成 附件网银.rar
特点:
1. 支持主流信用卡、借记卡 手续费为1% 其他全免
2.线下支付 报信用卡信息,随时随地支付货款支付过程
7. PayPal贝宝 http://www.paypal.com/
联系方式: https://www.paypal.com/us/cgi-bin/helpscr?cmd=_help&t=escalateTab
网关地址:
程序参考文档: 接口已经完成
8.ips环迅支付 http://www.ips.com.cn/
联系方式: http://www.ips.com.cn/contactus/xsrx.shtml
网关地址:
程序参考文档: 接口已经完成
9.财付通(https://www.tenpay.com/ )
联系方式: https://www.tenpay.com/zft/qa/qa_15.shtml
网关地址: https://www.tenpay.com/cgi-bin/med/show_opentrans.cgi
程序参考文档: 见附件财付通接口文档.doc
特点:
1. 支持国内18家银行
2. 提供手机话费直冲;即时到帐
3. 机票订购
4. 腾讯拍拍的购物支付方式;拥有大量使用人群;
5. 财付通账户余额支付
6. 自动扣款业务 参考: https://www.tenpay.com/zft/qa/qa_28.shtml
7. 免手续费自助集成
http://union.tenpay.com/mch/?posid=125&actid=84&opid=32&whoid=31
10. NPS网上支付系统 http://www.nps.cn/
联系方式: http://www.nps.cn/contact/contact.jsp
网关地址: https://payment.nps.cn/ReceiveMerchantAction.do
程序参考文档: 见附件NPS支付系统接口
特点:
1. 支持国内银行支付
2. 支持国外银行支付
3. 支持神州行充值卡支付 http://www.nps.cn/product/payment_easyown.jsp
4. 支持电话支付 http://www.nps.cn/product/payment_phone.jsp
5. 商户可通过以下3种方式接入NPS支付平台:在线加盟、业务联系、代理商加盟。
6. 接口类型: 1、购物车系统2、传款通系统3、直链行系统 4、神州行系统 5、外
卡系统
范文五:第三方支付接口的技术比较研究_李安渝
中国信息界 2011年第11期 总第195期
实践与应用
第三方支付接口的技术比较研究
李安渝 孙秋雯
(对外经济贸易大学 北京 100029)
摘 要:第三方支付市场的发展前景乐观,但同时市场竞争也越来越激烈。随着第三方支付业务许可牌照的发放,第三方支付将很可能打破大型银行垄断电子金融的局面。本文主要研究第三方支付的“网上支付接口”,比较分析各种不同的第三方支付接口的差异性。关键词:电子支付 第三方支付 支付接口
电子支付是电子商务中重要的一个环节,其中第三方支付是电子支付的一种重要方式。随着第三方支付在网络交易中得到越来越广泛的使用,中国的互联网支付市场也得到迅速发展。根据Enfodesk易观智库数据报告显示,2010年中国第三方支付市场全年交易额达到11,342亿元,环比增长95%。同时,第三方支付市场依然保持较高的市场集中率,支付宝以49%的份额占据半壁江山,支付宝、财付通、快钱、Chinapay、易宝支付五家企业占据整个市场的份额接近90%。根据《中华人民共和国中国人民银行法》等法律法规,中国人民银行制定并颁布了《非金融机构支付服务管理办法》,通过申请支付牌照的方式把第三方支付企业正式纳入国家的监管体系下。2011年5月26日,中国人民银行发布公告称,已向国内27家单位颁发了首批非金融机构支付业务许可证,这27家机构包括支付宝、银联、财付通、快钱盛付通、汇付天下等。
本文认为,第三方支付市场的发展前景乐观,但同时市场竞争也越来越激烈。随着第三方支付业务许可牌照的发放,第三方支付将很可能打破大型银行垄断电子金融的局面。本文将主要研究第三方支付的“网上支付接口”,比较分析各种不同的第三方支付接口的差异性。
图1 第三方支付接口示意图
具体来看,使用支付接口完成的支付流程如下:(1)持卡客户(买方)选购好商品后,网上商城(卖方)为持卡客户生成订单;
(2)持卡客户和第三方服务器建立连接,将账号信息与订单信息发给第三方;
(3)第三方服务器要求顾客进行订单确认,收到确认信息后与所支持的银行进行支付交易处理,得到银行的支付确认后授权给商家可以发货;
(4)网上商城通知持卡客户发货信息。1.2支付接口实现1.2.1实现条件
要实现接口,需要有一个网站、支付宝账户、支付宝的合作身份ID、安全校验码等。为了方便电子商务网站的集成,各支付网关在正式成为商家用户后,可下载ASP、
1.1支付接口定义
从技术角度讲,支付接口就是第三方支付平台提供的一段代码,商务需要将该代码配置到自己的服务器上去,并设置一些相关的接口参数。那么当客户选择使用第三方支付时,支付信息就会转到第三方支付平台的服务器上运行。
.NET、JAVA等针对不同服务器类型的商务网站的集成接口程序。本文将分别以各种有代表性的第三方支付平台为例,说明与JSP类型的电子商务网站的接口应用方法。
值得注意的是,参数简单的传过去是不行的,这些参数是经过了按一定排列顺序并区分大小写(参数为空也要传递)再加上一个MD5字符串。即使参数值为空字符串和
1 支付接口定义及实现
53
实践与应用
中国信息界 2011年第11期 总第195期
三方网关模式(支付宝)和第三方独立的网关模式(易宝)为比较对象,从开发环境、传递参数和安全性能等三个方面进行比较分析。
2.1开发环境
在软件方面,为了方便电子商务网站的集成,各支付网关在用户正式成为商家用户后,都可以下载.NET、ASP、JAVA(JSP)、PHP等针对不同服务器类型的商务网站的集成接口程序。在硬件方面,基于高可靠硬件设备打造高性能平台,基于JAVA等语言开发高效安全的应用程序,系统采用分层架构,关键设备全部采用热备冗余,确保业务的不间断服务。
2.2传递参数
如在1.2.2小节中描述的支付实现过程,商家和第三方支付平台之间要通过支付接口传递一系列的购物信息,包括商品信息、用户信息等。本节将主要比较商家发送支付请求和商户接收支付完成数据的参数信息。
2.2.1商家发送支付请求相关参数
支付宝提供给商家的“发送支付请求”的接口参数共23项,易宝提供给商家的“发送支付请求”的接口参数共20项。请求参数信息(包括名称、含义、长度、是否为
图2 第三方支付流程图
没有传值也是有区别。
1.2.2实现过程
比如现在有一个页面要向第三方支付平台传递一个价格和商品信息,则可以通过POST和GET两种方式传递进去。当第三方支付平台接收参数的同时,它还要判断身份,所以传递的时候身份信息也要一起传过去。当身份确认以后,第三方支付平台就开始处理商品信息和价格信息。无论消费者是否支付成功,它都会返回一个信息给消费者,这个返回页面就是第三方支付平台之前设置好了的,在这个返回页面里面写入相关的支付数据信息,这样就完成了一个简单支付接口。
易宝支付宝
交易信息订单信息商品信息买家信息卖家信息其他信息交易信息订单信息商品信息货运信息卖家信息
空、说明)不在本文做详细赘述,具体见表1。
表1 支付请求参数表
付完款后跳转的页面、交易过程中服务器通知的页面、防钓鱼时间戳、超时时间、字符编码格式、加密方式
订单号、订单名称、订单描述、订单详细、订单备注、订单总金额、支付方式、网银代号 展示网址
买家支付宝账号、买家本地电脑的IP地址
卖家支付宝账号、合作ID、提成类型、提成信息集、安全校验码自定义参数
交易签名串、请求命令、业务类型、是否需要应答机制、签名数据、交易请求地址、交易结果通知地址订单号、支付金额、交易币种、银行编号商品ID、名称、种类、描述是否需要填写送货信息
商户密钥、商户编号、商户扩展信息、退货地址
2.2.2商户接收支付完成数据的相关参数
2 支付接口对比
目前市场上的第三方支付平台的运营模式可以将分为两种类型:独立的和非独立的第三方支付模式。(1)具备担保功能的非独立第三方支付模式,也称为信用中介型模式。该种运营模式,基本是由大型的电子交易平**立开发或与其他投资人共同开发,凭借运营商的实力和信誉与各大银行合作,同时能够为买卖双方提供中间担保的第三方支付运营模式。这种模式的运营商主要是借助电子交易平台和中间担保支付平台与用户开展业务,在交易过中采用充当信用中介的模式,保证交易的正常进行。(2)独立的第三方网关模式,是指没有自己的电子商务交易网站,由第三方投资机构为网上签约商户提供围绕订单和支付等多种增值服务的共享平台。
根据第三方平台运营的两种模式,本文以非独立的第
支付宝提供给商家的“接收支付完成数据”的接口参数共10项,易宝提供给商家的“接收支付完成数据”的接口参数共18项。接收参数信息及各种类型的信息进行分类描述,具体见表2。
表2 支付返回参数表
支付宝
交易信息订单信息商品信息买家信息交易信息易宝
订单信息商品信息卖家信息
支付宝交易号、交易状态、验证状态、签名数据、通知任务ID订单号、订单金额商品标题、商品描述买家账号
签名数据、业务类型、支付结果、易宝支付交易流水号、交易结果返回类型、支付成功时间、交易结果通知时间
订单号、订单金额、支付金额、交易币种、银行编号、银行定单号名称、种类、描述商户编号、商户密钥
从以上的支付请求参数表和支付返回参数表可以看出,虽然各种支付接口在参数的具体设置方面存在一定的差异,但是将各个参数进行分门别类之后,基本上都包括交易信息、订单信息、商品信息、买家信息、卖家信息这
中国信息界 2011年第11期 总第195期
实践与应用
五类信息。
本文由此认为,各种支付接口在传递参数的设置上存在一定的“同质化”现象。
2.3安全性能
系统安全体现在三个方面:系统层、应用层、运营层。(1)系统层平台部署有安全数据中心、防火墙、入侵检测等等多种安全设备,有专业的信息安全团队负责每天对系统进行安全分析;(2)应用层通过加密以及电子签名等多种身份鉴别、认证、访问控制以及安全编程等手段,力求将自产品逻辑设计和程序代码漏洞的风险降到最低;(3)运营层则利用自主开发的安全监控系统,对每笔交易进行实时监控,同时提供全天24小时的运营服务。本节将主要从“应用层”来比较两种支付接口的安全性。
2.3.1参数加密算法
表1 支付参数加密信息表
mysign = AlipayBase.BuildMysign(AlipayBase.ParaFilter(sPara), key)
把参数存入Map,将其中空值和签名参数除去;再按照“参数=参数值”的模式用支
付“&”字符拼接成字符串,最后把拼接后的字符串再与安全校验码直接连接起来。宝// MD5加密方法,key为支付平台发放给商户的“密钥”
Hmac = PaymentForOnlineService. getReqMd5HmacForOnlinePayment
(String messageType, String merchantId, String orderId, String amount, String currency,String productId, String productCat, String productDesc, String merchantCallbackURL,易String addressFlag, String sMctProperties, String needResponse, String frpID, String 宝
keyValue)
// MD5-HMAC加密方法,keyValue为支付平台发放给商户的“密钥”
注意:参数简单的传递是不行的,参数是经过一定排列顺序并区分大小写再加上一个MD5字符串。
从以上的支付链接信息表可以看出,易宝的链接安全性较高,而支付宝在链接中明显透露了支付费用的部分信息。本文由此认为,两种支付接口在支付信息的安全性上都做的较为到位,支付技术较为安全,消费者可以比较放心使用。当然,本文并不排除这里没有发现的其他一些安全隐患。
3 未来展望
综上所述,第三方支付接口在技术实现上存在很多“同质化”现象。本文认为,技术上的“同质化”将降低竞争力。第三方支付应该在进一步完善支付接口的同时,进行一定的“商业模式”创新,提高行业竞争力。据本文调研发现,类似从综合搜索到垂直搜索、从综合网站到行业网站的发展趋势,目前,第三方支付也走上了“市场细分”的道路,互联网支付细分市场已经成为战略竞争的重点。以支付宝、财付通等为代表的第三方支付厂商继续拓展公共事业缴费业务、航空客票等领域。易宝支付等则在电信、教育交费等领域另辟蹊径。本文认为,走市场细分道路固然能够开拓新的市场,但不能在本质上提高行业竞争力,今天的“蓝海”很可能成为明天的“红海”。
从第三方支付市场上的具体行为来看,早在2007年淘宝网就率先推出的“卖家先行赔付”机制,不失为一种可贵的商业模式创新,在客观上起到了确保消费者利益的作用。2011年3月15日前夕,中国工商银行联合深圳本土购物网站走秀网设立专项赔付基金,推出先行赔付服务。随着银行开始介入网购售后领域,第三方支付市场将会面临更多的外部竞争压力。
本文没有对“先行赔付”机制的现实成效进行深入研究,但可以肯定,“先行赔付”(甚至“先行全额赔付”)将成为未来网络支付市场非常重要的一项竞争力指标。
作者简介:
李安渝,对外经济贸易大学信息学院教授,博士生导师,电子商务研究所主任,研究方向为电子商务信用、信用信息经济学;
孙秋雯,对外经济贸易大学信息学院,硕士研究生。
从以上的支付加密信息表可以看出,一方面,两种支付接口基本上都采用的是MD5加密算法,该算法有很高的安全性;另一方面,在加密参数的具体设置上都使用了由支付平台发放给商户的“密钥”。
本文由此认为,各种支付接口在加密算法的选择上也存在一定的“同质化”现象。
2.3.2链接安全性
本文通过一个具体支付实例,来具体分析链接的安全性。
表2 支付链接信息表
https://www.alipay.com/payto:merchanttool@alipay.com?cmd=0001&subject=%D9%AA%C2%DE%BC%CD%B9%AB%D4%B0
&body=I%2CII%2CIII+%BC%AF&order_no=zoo00001&price=100.00&ordinary_fee=5.00&express_fee=10.00&ac=4d5010376411f5042868f238e8613c9b
https://www.yeepay.com/app-merchant-proxy/trxData.action?paymentId=363526768&date=20101120210158&sign=7b3a57af221df17b33a4705c5b205b4f
支付宝
易宝
55
转载请注明出处范文大全网 » 第三方支付接口技术对接实现及