针对近期小伙伴询问ThinkPHP集成支付宝的人数较多,特此编写一篇较详细且易理解的教程
对应dmeo源码本人已搁到github上了,欢迎大家下载使用。
对应的github下载地址为:https://github.com/paopao7/ThinkPHP_Alipay_Demo
以下所有图片可点击放大后进行查看
相关版本说明:
ThinkPHP版本为3.2.3完整版
支付宝demo为截止到该文章发表前官方最新版
应官方版本要求,特将本地PHP版本修改为5以上
官方要求:
因本人使用的mac下的php开发的集成换成Mamp,所以截图为Mamp下的php版本
Mamp版本号:
Mamp下php版本号:
若您使用的为其他开发环境,也请务必将php的版本修改为5及以上
1、首先需下载ThinkPHP,具体要去哪里下载,就不需要我多说明了吧。我选择的版本是3.2.3完整版
下载链接在此:http://www.thinkphp.cn/down/610.html
2、下载支付宝demo
此处我们以电脑网站支付为例,其他demo也类似,此处就不再赘述了
下载链接在此:https://docs.open.alipay.com/270/106291/
3、将下载下来的ThinkPHP完整版搁到我们的网站根目录下
我的网站根目录是wwwroot,我将此次的项目命名为AlipayClass,该名称的意思是以自定义类的形式去执行支付宝支付,当然你想命名为什么名称都可以。
4、将下载来的支付宝demo搁到ThinkPHP的三方框架下,关于ThinkPHP的三方类库说明见此地址:
http://document.thinkphp.cn/manual_3_2.html#lib_extend
搁进去的具体操作如下图所示:
5、此处先补充下电脑网站支付的配置及流程,若你已了解,可直接跳转至下一节。
1)、首先我们可以通过执行支付宝官方demo来了解其支付的流程
2)、我们还是跟之前将官方demo搁到我们网站的根目录下:
3)、在进行本地调试之前,安装官方的说法,请先阅读下该demo目录下的readme.txt,此处就不展开了
4)、阅读完成后,先别急着在本地运行,先对需要的数据进行配置
需要配置的数据如下图所示:
针对以上信息的获取,请参考本人的另一篇文章,文章地址:
5)、请注意以上参数中的 notify_url、return_url,需为外网地址,不然支付宝无法调用到,也就无法进行跳转及验签了。
6)、以上信息配置完成后,我们就可以愉快的在本地跑起来了
7)、接下来是对整个支付过程的讲解,若您已了解,请跳过。
首先我们打开项目所在的index.php文件,会发现付款功能是将填写的相关参数提交到 pagepay下面的pagepay.php文件,如下图红色框中的内容所示。
以下为提交页面的参数和后端接受的参数对应说明
以下就针对上述文件进行分析,首先该文件引入了我们在一开始填写appid等参数的配置文件,然后将前台页面填写的订单号、支付金额等参数获取到。再将这些参数通过对应的set方法写入$payRequestBuilder,以供AlipayTradeService文件下的pagePay方法使用。
下图为AlipayTradeService文件的pagePay方法所在页面。然后该方法又去调用了aopclientRequestExecute方法,也就是第94行的方法。我们会发现在调用aopclientRequestExecute方法的时候,第二个参数为true,因此它会调用$aop下的pageExecute方法,也就是第109行代码。
继续往下走。若下图所示,我们已经找到了pageExecute方法所在的定义。该方法先判断文件编码,然后获取到需要加密的一些参数,然后调用该文件下的generateSign方法进行加密,也就是第385行代码。
继续往下走,最终代码来到第119行,该方法为调用我们之前配置好的公钥和私钥,然后使用openssl_sign方法进行加密,将加密后的参数(sign)进行返回。
请注意openssl_sign方式为php自带方法,需进去到php.ini文件下进行配置,具体配置过程此处就不再赘述了。可参考该文章:
http://www.jb51.net/article/50173.htm
好的,我们了解了支付宝是如何进行加密操作了,那就继续往下走。
因为传入的$httpmethod的值是POST,因此代码会走到397行,也就是上图中红色框的部分。顺着往下走,就找到了该方法的定义,根据上方注释,很容易就了解到该方法是将支付需要的参数循环填入form表单中,然后将整个表单进行返回。为了获取其中上传的参数,我特定将返回的数据进行了写文件操作。
该文件会生成在项目目录下的pagepay目录下
生成的内容如下图所示:
实际提交的参数,就是支付宝电脑网站支付api下的aplipy.trade.page.pay方法所需要提交的参数。具体链接为:https://docs.open.alipay.com/common/105901
至此整个demo的支付流程已讲解完毕。
8)到了激动人心的时刻了,若相关配置正确无误,则会出现以下界面。
是不是感到非常的熟悉和亲切呢。若未出现,请根据错误提示自行进行百度。
9)针对有小伙伴反馈在出现该页面之前会出现一个错误界面,然后一闪而过,如下图所示:
出现这个问题的原因是因为本地环境缺少时区导致的。具体解决方法请参考该链接:http://jingyan.baidu.com/article/2a138328a95186074b134f4f.html
6、官方demo的说明至此结束了,接下来是对官方demo进行封装。此处已将支付宝demo搁到三方框架下。因为下载的代码中未包含控制器等文件夹,所以需先进行在浏览器下执行下。在进行接下来操作的时候,请先将demo文件夹下的config.php文件配置完成,否则无法进行支付。如下图所示:
7、执行完成后,会发现对应的Application已经有了控制器等文件夹。
8、接下来是搭建支付页面以及支付记录页面,这两项操作就不在此进行赘述了。页面搭建的时候,记得预留下支付金融的input,该参数需要传递到服务器端进行处理。
9、服务器端在接收到用户输入的支付金额的时候,会先对用户输入的值进判断。验证无误后,会执行生成订单号以及写入订单表等操作,具体见下图:其中具体的操作的请点击下图方大进行查看或去到文章的顶部将源码下载下来进行研究。
10、以上操作均无误的情况下,将会出现我们所熟悉的界面,此处就不在赘述了。
11、若在支付的过程中,遇到和Tp框架的C方法冲突的时候,可直接将支付宝demo的C方法修改为任何方法名即可。
12、支付过程到此结束,接下来是支付宝回调以及验签的说明。在进行验签操作之前,请先填写好支付宝demo文件夹下config。php文件中的notify_url地址且要是外网能够访问的。
13、接下来是对验签功能的讲解。支付宝在你支付成功后,会异步访问你在配置文件里面填写的地址,也就是下图中的方法。
你可以通过$_POST获取所有的返回数据,也可以通过$_POST[‘参数名’]获取某个特定的数据。
在获取到支付宝全部的数据之后,第一步要做的就是对支付宝返回的数据进行验签,也就是下图中第66行处的代码。
验签完成后,就是你自己的业务逻辑什么的,例如修改订单状态以及修改对应用户余额什么的,具体要做哪些操作了,就看个人需要了。
此处需要注意的是,成功或失败返回的结果为 echo “success”;或echo “fail”; 该行代码切记不要别做任何修改。
14、好了Tp框架集成支付宝电脑网站支付并以自定义类的形式的功能说明到此结束。
如果还有什么不明白的地方,欢迎加我QQ进行咨询,请注明技术咨询
本人QQ:980569038
也可以扫码本人微信:
若该文章对您有一定帮助,欢迎打赏
(点击图片可放大)
本人原创,转载请注明出处
网友评论