1. 程式人生 > >php編程之如何調用支付寶支付接口的實現

php編程之如何調用支付寶支付接口的實現

支付寶 支付接口

對於任何一款軟件來說,支付功能都是核心的,那麽目前的主流支付接口主要是支付寶、微信和銀聯卡,而大多數開發技術人員對於如何調用支付寶的支付接口還存在很大的困擾,今天就來跟大家分享一下如何正確調用支付寶支付接口的實現,代碼如下所示:
public function zfbpay1(){
require_once ‘./ThinkPHP/Extend/Vendor/alipay1/config.php‘;
require_once ‘./ThinkPHP/Extend/Vendor/alipay1/pagepay/service/AlipayTradeService.php‘;
require_once ‘./ThinkPHP/Extend/Vendor/alipay1/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php‘;
$model=M(‘zfbpay‘);
$add[‘oid‘]=I(‘nid‘);
$add[‘type‘]=1;
$add[‘WIDout_trade_no‘]=trim($_POST[‘WIDout_trade_no‘]);
$add[‘WIDtotal_amount‘]=trim($_POST[‘WIDtotal_amount‘]);
$add[‘WIDsubject‘]=trim($_POST[‘WIDsubject‘]);
// dump($_POST);die;
$re=$model->add($add);
if($re){
//商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
$out_trade_no = trim($_POST[‘WIDout_trade_no‘]);
//訂單名稱,必填
$subject = trim($_POST[‘WIDsubject‘]);
//付款金額,必填
// $total_amount = trim($_POST[‘WIDtotal_amount‘]);
$total_amount = 0.01;
//商品描述,可空
$body = trim($_POST[‘WIDbody‘]);
//構造參數
$payRequestBuilder = new AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);

        $aop = new AlipayTradeService($config);

      /**
       * pagePay 電腦網站支付請求
       * @param $builder 業務參數,使用buildmodel中的對象生成。
       * @param $return_url 同步跳轉地址,公網可以訪問
       * @param $notify_url 異步通知地址,公網可以訪問
       * @return $response 支付寶返回的信息
      */
      $response = $aop->pagePay($payRequestBuilder,$config[‘return_url‘],$config[‘notify_url‘]);
      $map[‘nid‘]=I(‘nid‘);
      $map[‘out_trade_no‘]=$out_trade_no;
        M(‘need‘)->save($map);

      //輸出表單
      var_dump($response);          
    }

}

回調
public function updatezfb(){
require_once ‘./ThinkPHP/Extend/Vendor/alipay1/config.php‘;
require_once ‘./ThinkPHP/Extend/Vendor/alipay1/pagepay/service/AlipayTradeService.php‘;
$arr=$_POST;
$alipaySevice = new AlipayTradeService($config);

    $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) {//驗證成功
      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      //請在這裏加上商戶的業務邏輯程序代
      // $add[‘content‘]=$_POST[‘out_trade_no‘];
      // M(‘a‘)->add($add);
      // $add[‘content‘]=json_encode($_POST);
      // M(‘a‘)->add($add);

      //——請根據您的業務邏輯來編寫程序(以下代碼僅作參考)——

        //獲取支付寶的通知返回參數,可參考技術文檔中服務器異步通知參數列表

      //商戶訂單號

      $out_trade_no = $_POST[‘out_trade_no‘];

      //支付寶交易號

      $trade_no = $_POST[‘trade_no‘];

      //交易狀態
      $trade_status = $_POST[‘trade_status‘];

        if($_POST[‘trade_status‘] == ‘TRADE_FINISHED‘) {
            $zfbmodel=M(‘zfbpay‘);
            $arr=$zfbmodel->where("WIDout_trade_no=$out_trade_no")->find();
            if($arr){
                $type=$arr[‘type‘];//1購買商品 2充值余額 3做單支付
                if($type==1){
                    //購買商品
                    $nid=$arr[‘id‘];
                    $model=M(‘need‘);
                    $orderinfo=$model->where("nid=$nid")->find();
                   $tuoguan=$orderinfo[‘tuoguan‘];
                    $province=$orderinfo[‘province‘];
                    $finish_state=$orderinfo[‘finish_state‘];
                    $arr1[‘tuoguan‘]=1;
                    if($finish_state==1){
                       $arr1[‘finish_state‘]=2;
                    }
                    if ($orderinfo[‘money‘]!=0) {
                       $arr1[‘money‘]=$orderinfo[‘money‘];

                    }else{
                       $arr1[‘money‘]=intval($orderinfo[‘money‘])+intval($arr[‘WIDtotal_amount‘]);
                    }
                    $arr1[‘paytype‘]=1;
                    $res=$model->save($arr1);
                }elseif($type==2){
                    //余額充值
                    $rid=$arr[‘id‘];
                    //獲取充值信息
                    $model=M(‘recharge‘);
                    $usermodel=M(‘user‘);
                    $rechargeinfo=$model->where("rid=$rid")->find();
                    $paystate=$rechargeinfo[‘paystate‘];
                    if($paystate==0){
                        $uid=$rechargeinfo[‘uid‘]; 
                        $num=$rechargeinfo[‘amoney‘];      
                          //更新訂單狀態
                        $update[‘paystate‘]=1;
                        $res=$model->where("rid=$rid")->save($update);            
                        if($res){
                            //更新用戶余額
                            $re2=$usermodel->where("id=$uid")->setInc(‘yue‘,$num);
                        }
                    }                        
                }elseif($type==3){

                }
            }
        //判斷該筆訂單是否在商戶網站中已經做過處理
          //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
          //請務必判斷請求時的total_amount與通知時獲取的total_fee為一致的
          //如果有做過處理,不執行商戶的業務程序

        //註意:
        //退款日期超過可退款期限後(如三個月可退款),支付寶系統發送該交易狀態通知
        }
        else if ($_POST[‘trade_status‘] == ‘TRADE_SUCCESS‘) {
            $zfbmodel=M(‘zfbpay‘);
            $arr=$zfbmodel->where("WIDout_trade_no=$out_trade_no")->find();
            if($arr){
                $type=$arr[‘type‘];//1購買商品 2充值余額 3做單支付
                if($type==1){
                    //購買商品
                    $oid=$arr[‘id‘];
                    $model=M(‘order_goods‘);
                    $orderinfo=$model->where("oid=$oid")->find();
                    $paystate=$orderinfo[‘paystate‘];
                    if($paystate==0){
                        $update[‘paystate‘]=1;
                        $res=$model->where("oid=$oid")->save($update);

                        //更新惠點 
                    $umod=M(‘user‘);
                    $ordersone=$model->where("oid=$oid")->find();
                    $uid=$ordersone[‘uid‘];
                    $usertel=$umod->where("id=$uid")->find();
                    $sys=M(‘sys‘)->find();     
                    $mmp[‘id‘]=$usertel[‘id‘];      
                    $mmp[‘money‘]=$usertel[‘money‘]+$ordersone[‘oprice‘];
                    $mmp[‘huidian‘]=floor($mmp[‘money‘]/$sys[‘zshd‘]);
                    $userSave=$umod->save($mmp);
                    }
                }elseif($type==2){
                    //余額充值
                    $rid=$arr[‘id‘];
                    //獲取充值信息
                    $model=M(‘recharge‘);
                    $usermodel=M(‘user‘);
                    $rechargeinfo=$model->where("rid=$rid")->find();
                    $paystate=$rechargeinfo[‘paystate‘];
                    if($paystate==0){
                        $uid=$rechargeinfo[‘uid‘]; 
                        $num=$rechargeinfo[‘amoney‘];      
                          //更新訂單狀態
                        $update[‘paystate‘]=1;
                        $res=$model->where("rid=$rid")->save($update);            
                        if($res){
                            //更新用戶余額
                            $re2=$usermodel->where("id=$uid")->setInc(‘yue‘,$num);
                        }
                    } 

                }elseif($type==3){

                }
            }
        //判斷該筆訂單是否在商戶網站中已經做過處理
          //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
          //請務必判斷請求時的total_amount與通知時獲取的total_fee為一致的
          //如果有做過處理,不執行商戶的業務程序      
        //註意:
        //付款完成後,支付寶系統發送該交易狀態通知
        }
      //——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)——
      echo "success"; //請不要修改或刪除
    }else {
        //驗證失敗
        echo "fail";

    }
}

  好了,看到這裏相信各位技術開發人員已經知道自己的問題出現在哪些地方了,那麽大家可以趕緊去嘗試一下,如果還存在其他方面問題的話,可以留言咨詢我們哦。

  本文由專業的app開發報價燚軒科技編輯發布,如需轉載請註明原文作者及出處!

php編程之如何調用支付寶支付接口的實現