做支付宝或者其他第三方的都需要去申请接口,需要自己的去申请的。
即时交易需要企业支付宝和备案号的网站,而且网站是建设的完全。
注册的时候选择企业版的支付宝,然后按照他的流程注册,注册完成后就可以去 产品商店 去签约 即时交易 了

签约之后就是等待了,在这里就可以去整合支付宝了,等申请的 KEY 和 PID 下来就可以测试了。
支付宝签约后的即时交易下载包地址:(我自己留了一份)http://pan.baidu.com/s/1pJRcYvT
下载好之后解压-文件里面有详细的说明,这里目录我就不一一介绍了,自己看说明文档
第一步就是完成集成,所以需要做的是:

文件重命名
alipay_core.function.php -> Corefunction.php alipay_notify.class.php -> Notify.php alipay_submit.class.php -> Submit.php alipay_md5.function.php -> Md5function.php
这样的话就符合TP的命名方式了。
修改文件
其中 Notify.php 和 Md5function.php 需要删除前面引入的两行代码
require_once("alipay_core.function.php");
require_once("alipay_md5.function.php");然后把文件放入 \ThinkPHP\Library\Vendor\Alipay 目录下
增加配置文件
把 签名文件 cacert.pem 放在网站的跟目录
然后再对应需要支付的模块的conf/config.php中添加支付宝的参数:(没申请下来这里就先预留)
'alipay_config' => array( //支付宝配置参数
'partner' => '20880xxxxxxxxxx', //这里是你在成功申请支付宝接口后获取到的PID;
'key' => 'xxxxxxxxxxxxxxxxxxxxxxn', //这里是你在成功申请支付宝接口后获取到的Key
'sign_type' => strtoupper('MD5'),
'input_charset' => strtolower('utf-8'),
'cacert' => getcwd().'\\cacert.pem', //liunx这里需要注意 \\ 和 / 在liunx的区别
'transport' => 'http',
'seller_email' => 'xx@xx.com', // 这里是你的收款账号,
),
'alipay' => array(
'notify_url' => 'http://www.xxxx.wang/Home/Alipay/notifyurl',
'return_url' => 'http://www.xxxx
.wang/Home/Alipay/returnurl',
),添加逻辑方法
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2015 http://ming-yu.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: long <admin@loveteemo.com>
// +----------------------------------------------------------------------
namespace Home\Controller;
use Think\Controller;
class AlipayController extends Controller{
/**
* 函数说明:引入支付宝参数
*/
public function _initialize(){
vendor('Alipay.Corefunction');
vendor('Alipay.Md5function');
vendor('Alipay.Notify');
vendor('Alipay.Submit');
}
/**
* 函数说明:生成订单-支付
* 传递参数:
* $_POST['WIDout_trade_no']; 商户订单号
* $_POST['WIDsubject']; 订单名称 必填
* $_POST['WIDtotal_fee']; 付款金额 必填
* $_POST['WIDbody']; 订单描述
* $_POST['WIDshow_url']; 商品展示地址
*/
//生成订单
public function dowithpay(){
if(!IS_POST){
$this->error("非法请求");
}
$info = xxx;//根据传递的订单号,信息查询
if(!$info){
$this->error("参数非法");
}
$alipay_config = C('alipay_config');
$payment_type = "1"; //支付类型 必填,不能修改
$notify_url = C('alipay.notify_url'); //服务器异步通知页面路径
$return_url = C('alipay.return_url'); //页面跳转同步通知页面路径
$out_trade_no = $info['onumber']; //商户订单号 商户网站订单系统中唯一订单号,必填
$subject = $info['oname']; //订单名称 必填
$total_fee = $info['opay']; //付款金额 必填
$body = $info['oname']; //订单描述
$show_url = ''; //商品展示地址
$anti_phishing_key = ""; //防钓鱼时间戳
$exter_invoke_ip = ""; //非局域网的外网IP地址,如:221.0.0.1
/************************************************************/
$parameter = array(
"service" => "create_direct_pay_by_user",
"partner" => trim($alipay_config['partner']),
"seller_email" => trim($alipay_config['seller_email']),
"payment_type" => $payment_type,
"notify_url" => $notify_url,
"return_url" => $return_url,
"out_trade_no" => $out_trade_no,
"subject" => $subject,
"total_fee" => $total_fee,
"body" => $body,
"show_url" => $show_url,
"anti_phishing_key" => $anti_phishing_key,
"exter_invoke_ip" => $exter_invoke_ip,
"_input_charset" => trim(strtolower($alipay_config['input_charset']))
);
//建立请求
$alipaySubmit = new \AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
echo $html_text;
}
/**
* 函数说明:支付宝回调异步函数
* 附带操作数据库
*/
public function notifyurl(){
header("Content-Type:text/html;charset=utf-8");
$alipay_config = C('alipay_config');
$alipayNotify = new \AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify(); //计算得出通知验证结果
if($verify_result) { //验证成功
$out_trade_no = $_POST['out_trade_no']; //商户订单号
$trade_no = $_POST['trade_no']; //支付宝交易号
$trade_status = $_POST['trade_status']; //交易状态
if($_POST['trade_status'] == 'TRADE_FINISHED') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序
//用户登陆支付宝的时候把支付宝的订单存入数据库,而状态修改为 98
//M('order')->where(array("onumber"=>$out_trade_no,"ostatic"=>98))->save(array("ostatic"=>1,"etime"=>time()));
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
}
else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序
M('order')->where(array("onumber"=>$out_trade_no,"ostatic"=>0))->save(array("opaynumber"=>$trade_no,"ostatic"=>1));
//注意:
//付款完成后,支付宝系统发送该交易状态通知
//logResult("付款完成,订单号:".$out_trade_no .",支付宝交易号:".$trade_no.",交易状态:".$trade_status."");
}
echo "success"; //请不要修改或删除
}else {
echo "fail"; //验证失败
}
}
/**
* 函数说明:支付宝成功支付后的转跳页面
*
*/
public function returnurl(){
header("Content-Type:text/html;charset=utf-8");
$alipay_config = C('alipay_config');
$alipayNotify = new \AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyReturn();
if($verify_result) { //验证成功
$out_trade_no = $_GET['out_trade_no']; //商户订单号
$trade_no = $_GET['trade_no']; //支付宝交易号
$trade_status = $_GET['trade_status']; //交易状态
if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
redirect(U('Home/Member/orderpay',array("onumber"=>$out_trade_no)));
}
else {
echo "trade_status=".$_GET['trade_status'];
}
echo "验证成功<br />";
}
else {
echo "验证失败";
}
}
}到这里基本算完成了,需要等到申请的 KEY 和 PID 下来就可以测试了,需要注意的是:
notifyurl需要在服务器上才能用,本地测试这里写的任何逻辑是无效的。
文章写到这里基本完成了,自己做过的东西拿出来分享,有疑问请留言告诉我,谢谢~