tp支付宝接口

1、下载支付宝接口包

下载地址:
https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1
具体如何下载,我就不在罗嗦了~~html

解压后放到框架的Vendor目录中便可~api

2、从新整理接口包文件,这一步应该算是比较关键的(我的认为)

下载下来的接口包文件有不少语言的源码,

咱们选择 create_direct_pay_by_user-PHP-UTF-8 这个名称的接口文件。里面包括以下文件:

images文件里是支付宝相关的一些标志的图片,咱们暂无论他,lib文件很重要,是整个接口的核心类文件;
alipay.config.php是相关参数的配置文件
alipayapi.php 是支付宝接口入口文件
notify_url.php 是服务器异步通知页面文件;
return_url.php 是页面跳转同步通知文件;数组

在ThinkPHP的框架文件下,找到Extend 进入,再进入Vendor,在Vendor文件夹下,新建文件夹Alipay,把支付宝做为第三方类库引入。而后,复制支付宝接口文件包中lib文件里的全部文件。一共4个文件,以下:

如今对以上文件进行重命名,
alipay_core.function.php重命名为:Corefunction.php;
alipay_md5.function.php重命名为:Md5function.php;
alipay_notify.class.php重命名为:Notify.php;
alipay_submit.class.php重命名为:Submit.php;服务器

而后,打开Submit.php文件,把如下代码去掉;框架

一样,打开Notify.php文件,把如下两段代码去掉异步

 

 

为何要去掉以上两个文件中的这两段代码,由于在项目中调用接口文件的时候,我把全部4个核心文件都经过vendor来进行引入。因此,这再也不须要导入。函数

到此,支付宝接口包相关核心类库的整理基本完成。如今开始在项目中调用;post

3、在项目中调用支付宝接口

调用分两步:
一、在配置文件中Conf/Config.php文件中对支付宝相关参数进行配置:ui

二、新建一个PayAction控制器代码以下:

三、这里有几个支付处理过程当中须要用到的函数,我把这些函数写到了项目的Common/common.php中,这样不用手动调用,便可直接使用这些函数,代码以下:

 

4、总结几点

一、接口包中lib文件中的文件复制到Vendor后,重命名为TP规范的命名规则,为的是调用方便,固然你要改为其余名称也能够;
二、把执行支付操做(doalipay),处理异步返回结果(notifyurl),处理跳转返回结果(returnurl)三个支付接口的核心页面写到一个PayAction控制器中。
三、提交支付的页面中,能够在提交以前先把一些参数要传递的内容先经过隐藏域的方法组合好,好比金额先计算好,订单名称,订单描述等先用字符串组合好。而后提交表单,这样,在doalipay方法中只要直接构造传递参数,直接进行提交就行过了。
四、支付返回后的处理由于要在异步和跳转两个方法中都要进行相应的判断和处理,因此,把这些判断和处理写到一个自定义函数中,这样只要调用函数便可,使得代码更加清晰明了。
五、notify_url和return_url两种模式的返回url必须使用http://xxxxxxx这样的绝对路径,由于里是从支付宝平台返回到你的项目页面。不能使用相对路径。

以上代码在ThinkPHP3.0中正常使用!!

————————修正补充!!2013.08.13——————————
在第三部分中Orderlist数据表结构中,我有一个字段是OrdCode,这个字段是我系统中用来发送短信给客户的消费密码,也就是客户凭手机短信来消费时就要验证这个字段。
其实,你们在作系统的时候,能够把这个字段忽略,能够不用他。代码最后部分中,有一个获取一个随机且惟一的订单号的函数 getordcode(),这里我其实写错了,不是获取订单号,是ordcode,也就是消费密码,这个函数也不须要。系统中的订单号(ordid字段),我用的是时间戳。
在此修正!

——————–解决签名错误问题 修正 13-08-16————————
有人说在在调试时,签名出现没法经过的问题,产生问题的缘由是在返回的URL地址中返回的参数中,可能存在__URL__这样的字符串。致使没法正确过滤参数。

解决办法:
方法1:
在向支付宝提交须要的参数时,不要使用__URL__,__PUBLIC__等TP中的模版替换变量,若是TP对这些变量解析不成功,会直接传递过去,因此,在这些地方直接使用原始的URL地址。

方法2:
在接口的Core文件中,加入改造后的过滤函数,以下:

相关文章
相关标签/搜索