source:http://www.cnblogs.com/zhangyi85/archive/2008/11/12/1332326.html
[原]关于支付宝API开发的一点心得
支付宝(www.alipay.com)的产生的确对于促进网络支付的确起到了很大的推动作用,笔者就在目前自己使用支付宝API接口开发中,遇到的一些问题,解决办法,做了简短的记录,由此与大家共分享,由于作者水平有限,难免出现错误,请大家指出,谢谢。
目前,申请支付宝接口主要有两种方式,1.免费接口,淘宝抽取手续费2%;2.付费接口,比如600元允许48000元交易金额的配额等,笔者使用的是前者,免费接口。在免费接口中,又分为两种,标准双接口交易类型和即时到账交易,这两种支付方式中,前者为淘宝担保交易+即时到账交易,而后者仅仅为即时到账交易,可根据自己的需要进行申请。
具体申请的过程在这里就不赘述了,如有需要,可以通过留言的方式,我会告知您。
支付接口申请成功后,会的到两个重要的参数支付宝安全校验码(key)和合作伙伴id(partner),这两个参数起到了支付是否成功的重要作用,申请成功后,都可以在支付宝后台商家工具中获得。
支付宝的原理其实就是通过浏览器传参数到支付网关(https://www.alipay.com/cooperate/gateway.do),支付网关是由Struts构建的,笔者感觉是通过ActionForm获得浏览器参数,进行内部解析的,浏览器传的参数都进过了MD5加密处理。
笔者遇到的第一个问题:
HAS_NO_PRIVILEGE,在官方给出的API介绍中是这样解释的:“该错误提示的是,您没有使用该接口的权限,那么登陆自己的支付宝账户,商家工具,查看实物交易服务或者虚拟物品交易服务,如果没有申请,请立刻申请并且当时开通。”我很肯定的是我已经开通了服务,那么问题就不是出在这儿,仔细查阅了API发现,在service的参数中,设置错误了,所以,在以后的开发中请注意,如果您选择的是:
标准双接口交易->service=trade_create_by_buyer
即时到帐交易->service=create_direct_pay_by_user
这里一定要填写正确,否则就会出现没有权限这样的问题,这里请注意一下。
笔者遇到的第二个问题:
支付成功了,但是总是返回的错误页面,首先请看下面的代码:
Code
……
//生成Md5摘要;
string mysign = GetMD5(prestr.ToString(), _input_charset);
string sign = Request.QueryString["sign"];
if (mysign == sign && responseTxt == "true") //验证支付发过来的消息,签名是否正确
{
Response.Write("success"); //返回给支付宝消息,成功
}
else
{
Response.Write("fail");
}
……
这里如果mysign和responseTxt为flase,则会显示错误信息,这是由于在Return页面中,没有设置支付宝安全校验码(key)和合作伙伴id(partner),解决方法,在page_lode中加入常量:
String key = "xxxxxxxxxxxxxxxxx";//你的安全效验码
String partner = "xxxxxxxxxxxxxx";//你的合作伙伴id;
这样,加入后,当付款成功时,就会返回到正确的Success了!
笔者使用的是.net版的支付方式,Java版也许会有所不同,不过原理应该和这个是一样的,我已经下载了官方给出的Java实例,待看后与大家分享经验心得。
欢迎拍砖:)
而且,早就不能用了。
支付宝后台商家工具中获得
??
怎么没有这项的
2343为: 楼主就一傻X,明明是转的,写自己原创。
而且,早就不能用了。
--------------------------------------------------------
你凭什么说不是我自己写的?
谁说早不能用了?我现在就正在用它做支付!
你自己搞清楚在说!拜托!
郄坚锐: 我说这种东西 看他提供的文档比你的清楚多了
--------------------------------------------------------
确实,官方提供的文档确实很清晰,我在这儿只是写出了我自己在开发中遇到的问题,只是希望遇到同样的问题能尽快的解决,并没有指导开发的任何意思。
zcr11: 支付宝安全校验码(key)和合作伙伴id(partner)
支付宝后台商家工具中获得
??
怎么没有这项的
--------------------------------------------------------
需要先申请支付接口,申请成功后,就可以查看到Key合合作伙伴ID。
ziyouyong: 是啊,好像没有免费的接口了啊
--------------------------------------------------------
有的,我正在使用中。
个别的接口建立的时候 几乎就是给丫做免费的接口测试 还要和对方的测试一起修改例子和文档
双方有一个默认的密钥,用此密钥来验证信息是否正确,从而操作数据库。
支持.net/asp/php/java,哈哈,谁要找我,现在我们的系统与客户的系统做接口都是用这个,非常方便。
string str_key="1111111111111111";//密钥
string str_data="gongxingtao2@sohu.comwlotx http://www.wlotx.com";//需要加密的数据
md5_VB.md5classClass md5=new md5classClass();
string str_info==md5.hmac(str_data,str_key);
if(str_info=="3a64addc05447650c168a056ed141cdc")
{...}
else
{
...
}
HMAC 是一种经加密的散列消息验证码,是一种使用加密散列函数和密钥计算出来的一种消息验证码(MAC)。就像任何 MAC 一样,它也可以对信息数据的完整性和真实性进行同步检查。任意的迭代加密散列函数都可以用于 HMAC 的计算
aspx@hotmail.com