天天看点

25-javaweb接入支付宝支付接口

想熟悉支付宝接口支付,后面可能会用,不如在课设中试试手。好吧听说支付宝不微信支付要简单些,就拿支付宝的先练下手吧。

基本学习流程,百度一下,找篇博客看下。

推荐下面这个篇博客,讲的挺好的,复制过来。

当然在最后我会把我遇到的问题写出来,避免后人在走弯路,并将支付宝的demo整合到我的ssm项目中,同时,会详细讲下如何将demo中的jsp跟据需求改为contral层。

比较可以的操作流程:别人写的很好了,我就不想写了:https://github.com/ouyangsihai/sihai-maven-ssm-alipay

下载地址:https://docs.open.alipay.com/270/106291/

25-javaweb接入支付宝支付接口
25-javaweb接入支付宝支付接口

readme.txt请好好看一下。

只有一个java配置类,其余都是jsp。

(1).注册蚂蚁金服开发者账号(免费,不像苹果会收取费用)

注册地址:https://open.alipay.com ,用你的支付宝账号扫码登录,完善个人信息,选择服务类型(我选的是自研)。

25-javaweb接入支付宝支付接口

(2).设置app_id和gatewayurl

25-javaweb接入支付宝支付接口
25-javaweb接入支付宝支付接口

其中密钥需要自己生成,appid和支付宝网关是已经给好的,网关有dev字样,表明是用于开发测试。

(3).设置密钥

25-javaweb接入支付宝支付接口

点击“生成方法”,打开界面如下:

25-javaweb接入支付宝支付接口

下周密钥生成工具,解压打开后,选择2048位生成密钥:

25-javaweb接入支付宝支付接口

如果没有设置过,此时显示文本是“设置应用公钥”,我这里是已经设置过得。

25-javaweb接入支付宝支付接口

设置方法,“打开密钥文件路径”:

25-javaweb接入支付宝支付接口
25-javaweb接入支付宝支付接口

复制应用公钥2048.txt中的内容到点击“设置应用公钥”的弹出框中,保存:

25-javaweb接入支付宝支付接口

商户私钥(merchant_private_key)

复制 应用私钥2048.txt 中的内容到merchant_private_key中。

支付宝公钥(alipay_public_key)

25-javaweb接入支付宝支付接口

点击如上图链接,复制弹出框里面的内容到alipay_public_key。

如果这个设置不对,结果是:支付成功,但是验签失败。

如果是正式环境,需要上传到对应的应用中:

25-javaweb接入支付宝支付接口

(4).服务器异步通知页面路径(notify_url)

如果没有改名,修改ip和端口号就可以了,我自己的如下:

(5).页面跳转同步通知页面路径(return_url)

25-javaweb接入支付宝支付接口
25-javaweb接入支付宝支付接口

测试用的支付宝买家账户可以在“沙箱账号”这个页面可以找到:

25-javaweb接入支付宝支付接口

支付成功后,验签结果:

25-javaweb接入支付宝支付接口

好吧,要是你成功跑起来的那么你很幸运,没有到什么坑,我遇到了如下坑点。记录一下,以供参考:

1.代码中:

25-javaweb接入支付宝支付接口

要填写公钥,注意这个不是生成器中的公钥,所以不能从那个里面或者从txt中粘贴,而要重网站上那个查看公钥处粘贴:

25-javaweb接入支付宝支付接口

2. 支付宝网关要改,注意测试环境中是alipaydev:

25-javaweb接入支付宝支付接口

3. 从官网下载的沙箱版支付宝怎么登入:

登入的账号去沙箱账号中看,注意不是你的支付宝账号,也不需要重新注册!!!!

25-javaweb接入支付宝支付接口

注意打支付宝很人性话的给了我们许多钱,可以肆意的花费了,最后会从你的买家余额到买家余额中。

好的,基本注意这些,demo是可以跑起来的了。

下面讲下如何加入到ssm框架中,随意控制呢:

你得先对支付宝的流程有一个大致的了解,整体上了有把握,能使你思路清晰,请看图:

25-javaweb接入支付宝支付接口

这是支付宝提供的图片,大致过程都表达出来了。

其实到这里不禁要问,那个同步和异步是干嘛的呀,我也不知道,百度啊!!!

我找到了,比较新的解释:

      支付宝同步回调和异步回调

当一个支付请求被发送到支付渠道方,支付渠道会很快返回一个结果。但是这个结果,只是告诉你调用成功了,不是扣款成功,这叫同步调用。

很多新手会拿这个结果 当作支付成功了,那就会被坑死,结果就是支付成功率特别高,伴随着一堆无法解释的坏账率,测试人员尤其要注意测试数据的篡改:金额,同步返回结果,订单号等。

同步请求参数里面会有一个回调地址,这个地址是支付渠道在扣款成功后调用的,这叫异步调用。

一般同步接口仅检查参数是否正确,签名是否无误等。异步接口才告诉你扣款结果。

一般异步接口有5秒以内的延迟。调用不成功会重试。有时候是这边成功了,但支付渠道侧没收到返回,于是会继续调。

当天的支付到第二天还在 被异步调用也都是正常的。这也是开发人员需要特别注意的地方,不要当做重复支付。

测试人员也要对重复回调进行测试,应只有一次有效。这还不是最坑的,一般 支付渠道侧,只有支付成功了才通知你。

要是支付失败了,压根儿都不告诉你。

另一方面,如何老收不到异步结果呢?那就得查查了。同步结果不可靠,异步调用不可靠,那怎么确定支付结果?最终的杀招就是查单了,

反查,一般支付渠道侧都 会提供反查接口,定时获取db中待支付的订单调用支付渠道侧的反查接口,最终把支付渠道侧扣款成功的订单完成掉。

当然,这个没有将过多细节,更多内容可以参考其他的文档,大致就是说,同步通知可以作为支付成功参考,但是准确得出结论还得靠异步的回复

好吧,由于异步必须在服务器上才能测试,所以这里我暂时是以同步的作为判断依据:

开始整合:

思路大致是这样子:

在一个支付页面   --》》》  点击支付  ----》》》 跳转到处理函数   -----》  在这个函数里面设置你真正要想支付宝请求的一些参数,以及同步异步回调地址!!! ----》  然后他在封装好信息后发送给支付宝

------》》》 页面会弹出一个支付宝二维码,你扫码付钱完  -------》》》 支付宝会向你给的同步异步回调地址发送请求(也就是你要写个接收请求的函数咯,在里面可以写一些你要的逻辑了) ------》》》 

根据回调结果,挑战页面给出回调结果  ------ 》》》 finish ! ! !!!!

具体的:

1. 支付请求给个post的地址:也就是你处理支付的函数:

25-javaweb接入支付宝支付接口

2.在contral里面写对应 的处理函数里咯:

函数里面其实就是把支付宝demo的jsp处理粘过来了:

  

2.处理回调地址:

25-javaweb接入支付宝支付接口

就是一个请求的处理函数,不清楚他们为什么要在请求后面加一个.action, 反正我没加。。。

3.写处理函数咯:也是把支付宝的jsp中对应的一个粘过来,

4.

5.可以了给测试的jsp,和从成功的jsp吧:

alipay.jsp:

 alipaysuccess.jsp

 

当然你可以你要写一个跳转,到达支付页面:

25-javaweb接入支付宝支付接口

好了可以吧:看下框图吧:

25-javaweb接入支付宝支付接口
25-javaweb接入支付宝支付接口

好,感觉已经将清楚了,注意复制jsp页面时看清楚导入的包,不出意外,可以成功的。