序:项目开发中,经常会需要用到支付宝支付这块,很多时候没头绪,所以发下下载好DEMO后哪些地方需要更改以及容易出错的地方。
注:1、没接第三方,例如ping++那些,直接用支付宝给的;
2、开发语言:JAVA,签名方式:RSA;
3、请勿喷,有说的不对的地方请留言我,我会一个一个的改。
支付宝DEMO下载地址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.vIfG5G&treeId=193&articleId=105333&docType=1
AlipayConfig.java (代码就不贴上了,就四个要更改,如果有大神来,麻烦留言告知一声为什么alipay_public_key也不用更改,在下在此先说声“感谢告知”)
注: 1、更改的有partner, private_key, notify_url, return_url,其他的不用更改;
(
进入网址:https://b.alipay.com/order/pidAndKey.htm;
partner : 合作者身份(PID) ;
公私钥设置 : 合作伙伴密钥管理<RSA加密 (先点“查看密钥”,如果不为空,就是有项目接入了,这时候,你该找你的老大询问一下。如果没有或者只有“添加密钥”
就生成的公钥<生成方式在下面的注2>,填进去然后保存,注意,是公钥)
)
2、JAVA版本的private_key需要PKCS8格式,在对应的字段注释上面网址进入后,下载个openssl生成,如果按说明书中的操作后没有生成,可以进入RSA<openssl<bin,打开openssl.exe,按以下命令就会在openssl文件夹中生成了;
生成RSA私钥
openssl>genrsa -out rsa_private_key.pem 1024
生成RSA公钥
openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
将RSA私钥转换成PKCS8格式
openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
3、notify_url写得是你业务处理的,在判断条件为trade_status.equals("TRADE_SUCCESS")中下;
4、return_url是支付成功后返回的页面,可以设成自己网址中的页面,比如我的订单。
5、最重要的:notify_url,return_url得在外网也可以访问到,项目中拥有登录过滤或者登录拦截的或者其他会拦截到正常访问页面的,全部设置页面放行。
notify_url.jsp
业务处理请写在这里(之前alipayapi.jsp发给支付宝的数据,这里会返回给你,可以取到,用request.getParameter取,如果取到的是乱码,撸上代码new String(request.getParameter("subject").getBytes("ISO-8859-1"),"UTF-8");进行编码转换 ):
else if (trade_status.equals("TRADE_SUCCESS")){
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//付款完成后,支付宝系统发送该交易状态通知
}
这块就这样,只要改改参数,然后在对应位置写好自己的业务处理就行了的。
对了。有可能会出错的地方:
1、不执行notify_url(一般是代码问题,不是技术问题);
(1)AlipayConfig.java 配置问题;
(2)你的业务处理出了问题;
(3)其他。
2、因为签名问题,总是支付不成功的,八成是公私钥问题,这时候最省时间的做法是找技术客服--https://support.open.alipay.com/alipay/support/index.htm
点客服,然后发三次技术,就可以转人工客服了,如果是售后的,叫对方转技术客服,然后根据对方的引导处理自己问题。
注意:即时到账的也跟这里的操作一样。
就此结束。