ThinkPHP实现支付宝接口功能的方法,实例讲述了支付宝接口的下载及二次开发方法,以及对应的ThinkPHP开发技巧,需要的朋友可以参考下.
最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能,这里我用的是即时到帐的接口,具体实现的步骤如下:
一、下载支付宝接口包
下载地址:
具体如何下载,我就不在罗嗦了~~
二、重新整理接口包文件,这一步应该算是比较关键的(个人认为),下载下来的接口包文件有很多语言的源码
我们选择 create_direct_pay_by_user-PHP-UTF-8 这个名称的接口文件,里面包括如下文件:
images文件里是支付宝相关的一些标志的图片,我们暂不管他,lib文件很重要,是整个接口的核心类文件;
是相关参数的配置文件
是支付宝接口入口文件
notify_ 是服务器异步通知页面文件;
return_ 是页面跳转同步通知文件;
在ThinkPHP的框架文件下,找到Extend 进入,再进入Vendor,在Vendor文件夹下,新建文件夹Alipay,把支付宝作为第三方类库引入,然后,复制支付宝接口文件包中lib文件里的所有文件,一共4个文件,如下:
现在对以上文件进行重命名.
alipay_重命名为:;
alipay_重命名为:;
alipay_重命名为:;
alipay_重命名为:;
然后,打开文件,把以下代码去掉;
require_once("alipay_");
require_once("alipay_");同样,打开文件,把以下两段代码去掉require_once("alipay_");
require_once("alipay_");为什么要去掉以上两个文件中的这两段代码,因为在项目中调用接口文件的时候,我把所有4个核心文件都通过vendor来进行引入。所以,这不再需要导入。
到此,支付宝接口包相关核心类库的整理基本完成。现在开始在项目中调用;
三、在项目中调用支付宝接口
调用分两步:
1、在配置文件中Conf/文件中对支付宝相关参数进行配置
复制代码 代码如下:
//支付宝配置参数
'alipay_config'=>array(
'partner' =>'20********50', //这里是你在成功申请支付宝接口后获取到的PID;
'key'=>'9t***********ie',//这里是你在成功申请支付宝接口后获取到的Key
'sign_type'=>strtoupper('MD5'),
'input_charset'=> strtolower('utf-8'),
'cacert'=> getcwd().'',
'transport'=> 'http',
),
//以上配置项,是从接口包中 文件中复制过来,进行配置;
'alipay' =>array(
//这里是卖家的支付宝账号,也就是你申请接口时注册的支付宝账号
'seller_email'=>',
//这里是异步通知页面url,提交到项目的Pay控制器的notifyurl方法;
'notify_url'=>'',
//这里是页面跳转通知url,提交到项目的Pay控制器的returnurl方法;
'return_url'=>'',
//支付成功跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参payed(已支付列表)
'successpage'=>'User/myorder?ordtype=payed',
//支付失败跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参unpay(未支付列表)
'errorpage'=>'User/myorder?ordtype=unpay',
),
2、新建一个PayAction控制器代码如下
复制代码 代码如下:
<?php
class PayAction extends Action{
//在类初始化方法中,引入相关类库
public function _initialize() {
vendor('function');
vendor('5function');
vendor('fy');
vendor('it');
}
//doalipay方法
public function doalipay(){
// require_once("");
// require_once("lib/alipay_");
//这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config;
$alipay_config=C('alipay_config');
$payment_type = "1"; //支付类型 //必填,不能修改
$notify_url = C('fy_url'); //服务器异步通知页面路径
$return_url = C('rn_url'); //页面跳转同步通知页面路径
$seller_email = C('er_email');//卖家支付宝帐户必填
$out_trade_no = $_POST['trade_no'];//商户订单号 通过支付页面的表单进行传递,注意要唯一!
$subject = $_POST['ordsubject']; //订单名称 //必填 通过支付页面的表单进行传递
$total_fee = $_POST['ordtotal_fee']; //付款金额 //必填 通过支付页面的表单进行传递
$body = $_POST['ordbody']; //订单描述 通过支付页面的表单进行传递
$show_url = $_POST['ordshow_url']; //商品展示地址 通过支付页面的表单进行传递
$anti_phishing_key = "";//防钓鱼时间戳 //若要使用请调用类文件submit中的query_timestamp函数
$exter_invoke_ip = get_client_ip(); //客户端的IP地址
//构造要请求的参数数组,无需改动
$parameter = array(
"service" => "create_direct_pay_by_user",
"partner" => trim($alipay_config['partner']),
"payment_type" => $payment_type,