快捷搜索:

【w88官方网站手机版】ThinkPHP完成支付宝接口作用

作者: w88官方网站手机版  发布:2019-08-10

本文实例解析了php进行支付宝支出中return_url和notify_url的区分。分享给大家供大家参照他事他说加以考察。具体分析如下:

标题陈述:
本人在拍卖支付宝业务中冒出过如此的难题,付费成功后,在支付宝跳转到商家钦命页面时,订单状态已经更新,通过调节和测量检验开掘是开辟宝先公告notify_url,完结了订单状态。
支付宝return_url和notify_url通知顺序难题:
种种不必然的,请别以先后顺序来做剖断。具体什么决断,是基于你当前数据库里的景色和刚从开销宝里获取到的图景做比较来剖断是不是有做过管理了。
至于开拓宝return_url和notify_url的区别:

本文实例陈说了ThinkPHP完结支付宝接口作用的艺术。分享给我们供大家参谋。具体深入分析如下:

在支付宝处管事人业中return_url,notify_url是回到些什么动静吧,大家要依赖它来做一些甩卖就务须明白return_url,notify_url的界别,下边笔者就来给大家介绍介绍.

共同公告页面特性(return_url特性):

最近做系统,供给达成在线支付效用,不暇思索,采用的是支付宝的接口开荒作用,这里小编用的是即时到帐的接口,具体贯彻的步调如下:

标题叙述:

(1)   买家在付出成功后会看到二个支付宝提示交易得逞的页面,该页面会停留几秒,然后会自动跳转回商家钦命的一路文告页面(参数return_url);

一、下载支付宝接口包

自己在管理支付宝业务中冒出过这么的难点,付费成功后,在开采宝跳转到厂商钦命页面时,订单状态已经更新,通过调治开掘是付出宝先通告notify_url,实现了订单状态.

(2)   该页面中收获参数的措施,必要动用GET格局获得,如request.QueryString("out_trade_no")、$_GET['out_trade_no'];

下载地址:

支付宝return_url和notify_url通告顺序难题:

(3)   该情势唯有在买家付款达成现在举行自动跳转,由此只会进展一遍;

切实什么下载,作者就不在罗嗦了~~

次第不自然的,请别以先后顺序来做判别,具体什么推断,是依据你当前数据Curry的场馆和刚从开拓宝里获取到的动静做相比较来判断是不是有做过管理了.

(4)   该情势不是支付宝主动去调用商行页面,而是支付宝的先后行使页面自动跳转的函数,使用户的此时此刻页面自动跳转;

二、重新整理接口包文件,这一步应该算是十分重大的(个人感觉),下载下来的接口包文件有相当多言语的源码

关于开辟宝return_url和notify_url的差别,同步公告页面个性(return_url特性):

(5)   基于(4)的开始和结果,可在本机而不是不得不在服务器上实行调节和测量试验;

w88官方网站手机版 1

(1) 买家在付出成功后会看到二个支付宝提示交易成功的页面,该页面会停留几秒,然后会自动跳转回商行钦点的一道布告页面(参数return_url);

(6)   重临U福睿斯L唯有一分钟的保质期,超越一分钟该链接地址会失效,验证则会停业;

咱俩选用 create_direct_pay_by_user-PHP-UTF-8 这么些称呼的接口文件,里面包括如下文件:

(2) 该页面中获取参数的办法,供给使用GET格局赢得,如request.QueryString("out_trade_no")、$_GET['out_trade_no'];

(7)   设置页面跳转同步文告页面(return_url)的门道时,不要在页面文件的末尾再加上自定义参数。比如:

w88官方网站手机版 2

(3) 该方法唯有在买家付款成功之后进行活动跳转,因而只会开始展览一回;

荒唐的写法:<;

images文件里是支付宝相关的部分标记的图形,大家暂不管她,lib文件相当的重大,是全数接口的着力类公事;

(4) 该办法不是支付宝主动去调用厂商页面,而是支付宝的次序行使页面自动跳转的函数,使用户的眼下页面自动跳转;

是的的写法:<;

alipay.config.php是唇齿相依参数的安顿文件

(5) 基于(4)的从头到尾的经过,可在本机实际不是只好在服务器上进行调节和测验;

 

alipayapi.php 是支付宝接口入口文件

(6) 再次回到U驭胜L唯有一分钟的保质期,超越一分钟该链接地址会失灵,验证则会倒闭;

服务器异步通告页面天性(notify_url特性):

notify_url.php 是服务器异步公告页面文件;

(7) 设置页面跳转同步文告页面(return_url)的路线时,不要在页面文件的前面再加上自定义参数。譬如:

(1)   必须确认保证服务器异步布告页面(notify_url)上无其余字符,如空格、HTML标签、开拓种类自带抛出的特别提醒新闻等;

return_url.php 是页面跳转同步布告文件;

荒谬的写法:

(2)   支付宝是用POST形式发送文告新闻,由此该页面中赢得参数的秘技,如:

在ThinkPHP的框架文件下,找到Extend 步向,再进来Vendor,在Vendor文件夹下,新建文件夹Alipay,把支付宝作为第三方类库引进,然后,复制支付宝接口文件包中lib文件里的装有文件,一共4个文本,如下:

复制代码 代码如下:

request.Form("out_trade_no")、$_POST['out_trade_no']。

w88官方网站手机版 3

<;

(3)   支付宝主动发起文告,该方法才会被启用;

将来对上述文件举行重命名.

没有疑问的写法:

(4)   独有在支付宝的交易处理中设有该笔交易,且发出了贸易景况的退换,支付宝才会因而该形式倡导服务器公告(即时到账中贸易处境为“等待买家付款”的场地默许是不会发送通告的);

alipay_core.function.php重命名字为:Corefunction.php;

复制代码 代码如下:

(5)   服务器间的相互,不像页面跳转同步布告能够在页面上出示出来,这种交互格局是不可见的;

alipay_md5.function.php重命名叫:Md5function.php;

<;

(6)   第二次交易意况退换(即时到账中此时贸易情形是交易产生)时,不唯有页面跳转同步公告页面会启用,何况服务器异步布告页面也会抽取支付宝发来的管理结果通告;

alipay_notify.class.php重命名叫:Notify.php;

服务器异步公告页面天性(notify_url特性):

(7)   程序实践完后必须打字与印刷输出“success”(不含有引号)。假设商家反映给支付宝的字符不是success这7个字符,支付宝服务器会不断重发布告,直到超过24钟头22分钟。

alipay_submit.class.php重命名叫:Submit.php;

(1) 必须保险服务器异步布告页面(notify_url)上无别的字符,如空格、HTML标签、开辟种类自带抛出的老大提醒音讯等;

一般景色下,25小时以内完毕8次通报(文告的区间频率一般是:2m,10m,10m,1h,2h,6h,15h);

接下来,展开Submit.php文件,把以下代码去掉;

(2) 支付宝是用POST格局发送通知新闻,因而该页面中获得参数的方式,如:

(8)   程序施行完结后,该页面无法进行页面跳转。要是实践页面跳转,支付宝会收不到success字符,会被支付宝服务器判别为该页面程序运营出现分外,而重发管理结果文告;

require_once("alipay_core.function.php");

request.Form("out_trade_no")、$_POST['out_trade_no']。

(9)   cookies、session等在此页面会失效,即无法赢得这一个数据;

require_once("alipay_md5.function.php");一样,展开Notify.php文件,把以下两段代码去掉require_once("alipay_core.function.php");

(3) 支付宝主动发起布告,该办法才会被启用;

(10)   该方法的调和与运作必须在服务器上,即互连网络能访谈;

require_once("alipay_md5.function.php");为何要去掉以上五个文件中的这两段代码,因为在档案的次序中调用接口文件的时候,作者把全部4个着力文件都由此vendor来开始展览引进。所以,那不再必要导入。

(4) 独有在支付宝的交易管理中设有该笔交易,且产生了贸易意况的改造,支付宝才会经过该办法倡导服务器通告(即时到账中贸易意况为“等待买家付款”的意况暗许是不会发送文告的);

(11)   该形式的遵从重要堤防订单错失,即页面跳转同步布告未有管理订单立异,它则去管理;

到此,支付宝接口包相关大旨类库的整治基本到位。以后开班在品种中调用;

(5) 服务器间的竞相,不像页面跳转同步布告能够在页面上出示出来,这种交互方式是不可知的;

(12)   通知ID(参数notify_id)唯有一秒钟保质期,超过一秒钟该次布告会表明战败。一旦申明成功后一次再作证就能够失效。

三、在等级次序中调用支付宝接口

(6) 第贰回交易情状退换(即时到账中此时贸易意况是贸易产生)时,不止页面跳转同步布告页面会启用,况且服务器异步通告页面也会收到支付宝发来的管理结果通告;

调用分两步:

(7) 程序推行完后必须打字与印刷输出“success”(不分包引号)。假使商行反映给支付宝的字符不是success那7个字符,支付宝服务器会不断重发公告,直到超越24钟头22分钟。

1、在配备文件中Conf/Config.php文件中对支付宝相关参数实行布署

貌似情形下,25钟头之内完毕8次通报(布告的间距频率一般是:2m,10m,10m,1h,2h,6h,15h);

复制代码 代码如下:

(8) 程序施行到位后,该页面无法施行页面跳转。要是举办页面跳转,支付宝会收不到success字符,会被支付宝服务器剖断为该页面程序运转出现卓殊,而重发管理结果文告;

//支付宝配置参数 
 
'alipay_config'=>array( 
       'partner' =>'20********50',   //这里是您在功成名就申请支付宝接口后获得到的PID; 
    'key'=>'9t***********ie',//这里是您在中标申请支付宝接口后拿走到的Key 
    'sign_type'=>strtoupper('MD5'), 
    'input_charset'=> strtolower('utf-8'), 
    'cacert'=> getcwd().'\cacert.pem', 
    'transport'=> 'http', 
      ), 
     //以上配置项,是从接口包中alipay.config.php 文件中复制过来,举办配置; 
     
'alipay'   =>array( 
 //这里是商户的支付宝账号,约等于您报名接口时登记的支出宝账号 
'seller_email'=>'pay@xxx.com', 
 
//这里是异步通告页面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',  
),

(9) cookies、session等在此页面会失效,即不可能获得那些数据;

2、新建二个PayAction调整器代码如下

(10) 该方法的调治与运行必须在服务器上,即互联互连网能访问;

复制代码 代码如下:

(11) 该措施的功力至关心器重要抗御订单遗失,即页面跳转同步公告未有拍卖订单创新,它则去管理;

<?php 
class PayAction extends Action{ 
       //在类开首化方法中,引进相关类库     
       public function _initialize() { 
        vendor('Alipay.Corefunction'); 
        vendor('Alipay.Md5function'); 
        vendor('Alipay.Notify'); 
        vendor('Alipay.Submit');     
    } 
     
    //doalipay方法 
         
    public function doalipay(){ 
             
       // require_once("alipay.config.php"); 
       // require_once("lib/alipay_submit.class.php"); 
        
       //这里大家因而TP的C函数把安排项参数读出,赋给$alipay_config; 
       $alipay_config=C('alipay_config');   
 
         
 
        $payment_type = "1"; //支付类型 //必填,不能够改改 
        $notify_url = C('alipay.notify_url'); //服务器异步布告页面路线 
        $return_url = C('alipay.return_url'); //页面跳转同步布告页面路线 
        $seller_email = C('alipay.seller_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, 
        "notify_url"    => $notify_url, 
        "return_url"    => $return_url, 
        "seller_email"    => $seller_email, 
        "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,"post", "确认"); 
        echo $html_text; 
    } 
         
    function notifyurl(){ 
                  
                //require_once("alipay.config.php"); 
                //require_once("lib/alipay_notify.class.php"); 
                 
                //这里依然经过C函数来读取配置项,赋值给$alipay_config 
        $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'];      //交易意况 
           $total_fee      = $_POST['total_fee'];         //交易金额 
           $notify_id      = $_POST['notify_id'];         //布告校验ID。 
           $notify_time    = $_POST['notify_time'];       //文告的出殡和埋葬时间。格式为yyyy-MM-dd HH:mm:ss。 
           $buyer_email    = $_POST['buyer_email'];       //买家支付宝帐号; 
                   $parameter = array( 
             "out_trade_no"     => $out_trade_no, //商家订单号码; 
             "trade_no"     => $trade_no,     //支付宝交易号; 
             "total_fee"     => $total_fee,    //交易金额; 
             "trade_status"     => $trade_status, //交易意况 
             "notify_id"     => $notify_id,    //布告校验ID。 
             "notify_time"   => $notify_time,  //公告的出殡和埋葬时间。 
             "buyer_email"   => $buyer_email,  //买家支付宝帐号; 
           ); 
           if($_POST['trade_status'] == 'TRADE_FINISHED') { 
                       // 
           }else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {                           if(!checkorderstatus($out_trade_no)){ 
               orderhandle($parameter);  
                           //进行订单处理,并传递从支付宝再次回到的参数; 
               } 
            } 
                echo "success";        //请不要涂改或删除 
         }else { 
                //验证败北 
                echo "fail"; 
        }     
    } 
     
    function returnurl(){ 
                //底部的拍卖跟下边七个艺术一样,这里不罗嗦了! 
        $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'];      //交易景况 
        $total_fee      = $_GET['total_fee'];         //交易金额 
        $notify_id      = $_GET['notify_id'];         //通告校验ID。 
        $notify_time    = $_GET['notify_time'];       //公告的出殡时间。 
        $buyer_email    = $_GET['buyer_email'];       //买家支付宝帐号;
             
        $parameter = array( 
            "out_trade_no"     => $out_trade_no,      //厂商订单号码; 
            "trade_no"     => $trade_no,          //支付宝交易号; 
            "total_fee"      => $total_fee,         //交易金额; 
            "trade_status"     => $trade_status,      //交易情状 
            "notify_id"      => $notify_id,         //布告校验ID。 
            "notify_time"    => $notify_time,       //公告的出殡时间。 
            "buyer_email"    => $buyer_email,       //买家支付宝帐号 
        ); 
         
if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { 
        if(!checkorderstatus($out_trade_no)){ 
             orderhandle($parameter);  //进行订单管理,并传递从支付宝再次来到的参数; 
    } 
        $this->redirect(C('alipay.successpage'));//跳转到配置项中配备的开销成功页面; 
    }else { 
        echo "trade_status=".$_GET['trade_status']; 
        $this->redirect(C('alipay.errorpage'));//跳转到配置项中配置的开支失利页面; 
    } 
}else { 
    //验证退步 
    //如要调治,请看alipay_notify.php页面的verifyReturn函数 
    echo "支付战败!"; 
    } 


?>

(12) 通知ID(参数notify_id)唯有一秒钟有效期,超过一分钟该次布告会注脚失利。一旦注解成功下一次再作证就能够失灵。

3、这里有多少个开辟处理进度中须求利用的函数,小编把那一个函数写到了项指标Common/common.php中,这样不用手动调用,就可以间接行使这个函数,代码如下:

指望本文所述对大家的php程序设计有着匡助。

复制代码 代码如下:

你恐怕感兴趣的作品:

  • thinkPHP框架连接支付宝即时到账接口回调操作示例
  • php支付宝在线支付接口开垦教程
  • php支付宝接口用法深入分析
  • 支出宝 接口开荒援救(asp,php,asp.net,jsp)
  • ThinkPHP达成支付宝接口作用实例
  • php支付宝手提式有线电话机网页支付类实例
  • PHP 接入支付宝即时到账功效
  • PHP后台微信支付和支付宝支出开辟
  • 纯PHP代码达成支付宝批量付款
  • php app支付宝回调(异步通告)详解

//Orderlist数据表,用于保存用户的买入订单记录; 
 
//在线交易订单支付管理函数 
//函数作用:依照支付接口传回的多少剖断该订单是还是不是已经开辟成功; 
//重回值:假若订单已经打响开拓,重回true,不然再次来到false; 
function checkorderstatus($ordid){ 
    $Ord=M('Orderlist'); 
    $ordstatus=$Ord->where('ordid='.$ordid)->getField('ordstatus'); 
    if($ordstatus==1){ 
        return true; 
    }else{ 
        return false;     
    } 

 
//管理订单函数 
//更新订单状态,写入订单支付后回到的数据 
function orderhandle($parameter){ 
    $ordid=$parameter['out_trade_no']; 
    $data['payment_trade_no']      =$parameter['trade_no']; 
    $data['payment_trade_status']  =$parameter['trade_status']; 
    $data['payment_notify_id']     =$parameter['notify_id']; 
    $data['payment_notify_time']   =$parameter['notify_time']; 
    $data['payment_buyer_email']   =$parameter['buyer_email']; 
    $data['ordstatus']             =1; 
    $Ord=M('Orderlist'); 
    $Ord->where('ordid='.$ordid)->save($data); 
}  
 
//获取两个随意且唯一的订单号; 
function getordcode(){ 
    $Ord=M('Orderlist'); 
    $numbers = range (10,99); 
    shuffle ($numbers);  
    $code=array_slice($numbers,0,4);  
    $ordcode=$code[0].$code[1].$code[2].$code[3]; 
    $oldcode=$Ord->where("ordcode='".$ordcode."'")->getField('ordcode'); 
    if($oldcode){ 
        getordcode(); 
    }else{ 
        return $ordcode; 
    } 
}

四、总结几点

1、接口包中lib文件中的文件复制到Vendor后,重命名字为TP典型的命名法则,为的是调用方便,当然你要改成别的名目也能够;

2、把施行支付操作(doalipay),管理异步再次来到结果(notifyurl),管理跳转再次来到结果(returnurl)四个开荒接口的焦点页面写到叁个PayAction调节器中。

3、提交支付的页面中,能够在提交此前先把部分参数要传递的开始和结果先经过隐敝域的主意结合好,举个例子金额先总结好,订单名称,订单描述等先用字符串组合好。然后交由表单,这样,在doalipay方法中一旦间接组织传递参数,间接开始展览付出就行过了。

4、支付重临后的拍卖因为要在异步和跳转八个方法中都要举行对应的判断和拍卖,所以,把这么些判别和管理写到贰个自定义函数中,那样只要调用函数就能够,使得代码尤其清晰明了。

5、notify_url和return_url三种情势的归来url必须使用

上述代码在ThinkPHP3.0中符合规律使用!!

越来越多关于thinkPHP相关内容感兴趣的读者可查看本站专项论题:《ThinkPHP入门教程》及《ThinkPHP常用艺术总结》

但愿本文所述对大家的ThinkPHP框架程序设计有着扶助。

您恐怕感兴趣的篇章:

  • thinkPHP框架连接支付宝即时到账接口回调操作示例
  • php支付宝在线支付接口开垦教程
  • php支付宝接口用法剖析
  • php实行支付宝支付中return_url和notify_url的区分深入分析
  • 付出宝 接口开荒援救(asp,php,asp.net,jsp)
  • php支付宝手机网页支付类实例
  • PHP 接入支付宝即时到账作用
  • PHP后台微信支付和支付宝支出开垦
  • 纯PHP代码达成支付宝批量付款
  • php app支付宝回调(异步布告)详解

本文由www.w88985.com发布于w88官方网站手机版,转载请注明出处:【w88官方网站手机版】ThinkPHP完成支付宝接口作用

关键词: www.w88985.c