ThinkPHP集成支付宝demo_采用自定义类形式

针对近期小伙伴询问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

也可以扫码本人微信:

若该文章对您有一定帮助,欢迎打赏

(点击图片可放大)

本人原创,转载请注明出处

http://www.itinfor.cn/archives/1319

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容