tkinkphp3.2.3实现支付宝手机支付接口

最近做系统,需要做支付宝支付接口,自从支付宝接口升级后,以前的老版本接口无法签约,具体实现的步骤如下:

下载支付宝手机支付实例

https://docs.open.alipay.com/203/105910/

AlipayTradeService.php 原位置在alipay.trade.wap.pay-PHP-UTF-8\wappay\service

删除AlipayTradeService.php文件中的

require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'./../../AopSdk.php';
require dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'./../../config.php';

然后在该文件中添加

date_default_timezone_set('PRC');

修改完毕后移动其他文件与文件夹按照截图排列

并且吧该文件夹命名为Alipay,移动至ThinkPHP\Library\Vendor文件夹

修改配置参数:

添加完毕配置信息

写支付接口类控制器

<?php
namespace Home\Controller;
use Think\Controller;
class PayController extends Controller {
       //在类初始化方法中,引入相关类库    
 public function index(){
该方法用于显示支付页面,并且提交支付请求
		 	  $uid = session('uid');
	  
	  if(!I('POST.'))
	  {
	  $this->assign('uid',$uid);
	    $this->display();
	  }
	  
	  header("Content-type: text/html; charset=utf-8");
	  if (!empty($_POST['WIDout_trade_no'])&& trim($_POST['WIDout_trade_no'])!=""){
    //商户订单号,商户网站订单系统中唯一订单号,必填
    $out_trade_no = $_POST['WIDout_trade_no'];

    //订单名称,必填
    $subject = $_POST['WIDsubject'];

    //付款金额,必填
    $total_amount = $_POST['WIDtotal_amount'];

    //商品描述,可空
    $body = $_POST['WIDbody'];

    //超时时间
    $timeout_express="1m";
	
	if($uid=="")
	{
		  $this->error('登陆失效请重新登陆');
	}
	
	$Czjl = M('Czjl');
	$data['ddh'] = $out_trade_no;
	$data['uid'] = $uid;
	$data['money'] = $total_amount;
	$data['time'] = time();
	$Czjl->data($data)->add();
	
	
	
	    vendor('Alipay.AlipayTradeService');
		vendor('Alipay.AopSdk');
		vendor('Alipay.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
    $payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
    $payRequestBuilder->setBody($body);
    $payRequestBuilder->setSubject($subject);
    $payRequestBuilder->setOutTradeNo($out_trade_no);
    $payRequestBuilder->setTotalAmount($total_amount);
    $payRequestBuilder->setTimeExpress($timeout_express);

    $alipaySevice = new \AlipayTradeService(C('alipayconfig')); 
	$config=C('alipayconfig');
    $result=$alipaySevice->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);

    return ;
}

 }

  
    

    public function return_url(){
//同步跳转类
        $uid = session('uid');
        $arr=I('GET.');
        vendor('Alipay.AlipayTradeService');
		vendor('Alipay.AopSdk');
        
$alipaySevice = new \AlipayTradeService(C('alipayconfig')); 


$result = $alipaySevice->check($arr);

/* 实际验证过程建议商户添加以下校验。
1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
4、验证app_id是否为该商户本身。
*/
if($result) {//验证成功
	/
	//请在这里加上商户的业务逻辑程序代码
	
	//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
    //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

	//商户订单号

	$out_trade_no = htmlspecialchars($_GET['out_trade_no']);

	//支付宝交易号

	$trade_no = htmlspecialchars($_GET['trade_no']);
		
	//echo "验证成功<br />外部订单号:".$out_trade_no;
$Czjl = M("Czjl"); // 实例化User对象// 查找status值为1name值为think的用户数据 

	$data['status'] = 1;//表示充值成功
	$data['zfbddh'] = $trade_no;
	$data['shddh'] = $out_trade_no;
	$re1=$Czjl->where('ddh="'.$out_trade_no.'"')->save($data); // 根据条件更新记录
	$jieguo=$Czjl->where('ddh="'.$out_trade_no.'" AND status=1')->find(); // 根据条件更新记录
	if(!$re1)
	{
		if($jieguo)
		{
			$this->success('充值成功', U('home/index/user'));
			exit;
		}ELSE
		{
			 $this->error('亲您的充值出现特殊情况了,如果发现已被扣费请联系客服处理');
		}
	}else
	{
			$User = M("User");
    	$zhangmu = M("zhangmu");	
		$User->startTrans();
    	$zhangmu->startTrans();
		$re[]=$User->where('id='.$jieguo['uid'])->setInc('money',$jieguo['money']); // 班长分红
		$zmdata['uid'] = $jieguo['uid'];
    	$zmdata['bzlx'] = 5;
    	$zmdata['bzsl'] = $jieguo['money'];
    	    	$zmdata['beizhu'] = "充值订单编号:".$out_trade_no.":用户".$jieguo['uid']."充值:".$jieguo['money'];
    	$zmdata['time'] = time();
    	$re[]=$zhangmu->add($zmdata);
		if(chkArr($re))
		{
			$User->commit();
			$zhangmu->commit();
			$this->success('充值成功', U('home/index/user'));
			exit;
		}ELSE
		{
			$User->rollback(); 
			$zhangmu->rollback();
			 $this->error('亲您的充值出现特殊情况了,如果发现已被扣费请联系客服处理');
		}
	}
	//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
	
	/
}
else {
    //验证失败
    echo "验证失败";
}
       

    }
    
    
	
	
	
     public function notify_url(){
//异步跳转
		 
        vendor('Alipay.AlipayTradeService');
		vendor('Alipay.AopSdk');
        



$arr=$_POST;
$alipaySevice = new \AlipayTradeService(C('alipayconfig'));  
$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);

/* 实际验证过程建议商户添加以下校验。
1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
4、验证app_id是否为该商户本身。
*/
if($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_amount与通知时获取的total_fee为一致的
			//如果有做过处理,不执行商户的业务程序
				
		//注意:
		//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
    }
    else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
		//判断该笔订单是否在商户网站中已经做过处理
			//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
			//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
			//如果有做过处理,不执行商户的业务程序			
		//注意:
		//付款完成后,支付宝系统发送该交易状态通知
    }
	//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
    $Czjl = M("Czjl"); // 实例化User对象// 查找status值为1name值为think的用户数据 
	$User = M("User");
	$zhangmu = M("zhangmu");
	$User->startTrans();
    $zhangmu->startTrans();
	$Czjl->startTrans();
 
	$data['status'] = 1;//表示充值成功
	$data['zfbddh'] = $trade_no;
	$data['shddh'] = $out_trade_no;
	$re[]=$Czjl->where('ddh="'.$out_trade_no.'"')->save($data); // 根据条件更新记录 
	$jieguo=$Czjl->where('ddh="'.$out_trade_no.'" AND status=1')->find(); // 根据条件更新记录
if($jieguo)
{
		$re[]=$User->where('id='.$jieguo['uid'])->setInc('money',$jieguo['money']); // 班长分红
		$zmdata['uid'] = $jieguo['uid'];
    	$zmdata['bzlx'] = 5;
    	$zmdata['bzsl'] = $jieguo['money'];
    	$zmdata['beizhu'] = "充值订单编号:".$out_trade_no.":用户".$jieguo['uid']."充值:".$jieguo['money'];
    	$zmdata['time'] = time();
    	$re[]=$zhangmu->add($zmdata);
		if(chkArr($re))
		{
			$User->commit();
			$zhangmu->commit();
			$Czjl->commit();
				echo "success";		//请不要修改或删除
			exit;
		}ELSE
		{
			$User->rollback(); 
			$zhangmu->rollback();
			$Czjl->rollback();
			   echo "fail";	//请不要修改或删除
		}	

		
}else {
    //验证失败
    echo "fail";	//请不要修改或删除

}
 
	 }
	 }
    

}
具体文件以打包,下载后稍微修改一下就可以用了
http://pan.baidu.com/s/1hsDtTlE


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值