ThinkCMF5 支付寶 電腦網站支付

      一、建立應用php

  • 在【功能信息】中點擊【添加功能】,選擇【電腦網站支付】
  • 提交審覈,等待審覈經過

      二、 配置祕鑰(密鑰生成工具下載連接:https://docs.open.alipay.com/291/105971)html

  • 生成應用公鑰和應用私鑰,而後在  開放平臺管理中心  進行密鑰配置,配置完成後能夠獲取支付寶公鑰(ALIPAY_PUBLIC_KEY)。

      三、 進入相應的應用詳情中,點擊應用信息,修改開發設置中的應用網關和受權回調地址前端

          應用網關:用於接收支付寶異步通知 json

          受權回調地址:第三方受權或用戶信息受權後回調地址服務器

      若是是普通支付類接口調用不須要配置這兩個參數的 app

      單純的支付接口是不須要配置這兩個信息的,簡單來講就是:應用網關是用於接收口碑或是生活號的信息的,受權回調地址是第三方受權或是用戶信息受權使用的,若是用不到是能夠不配置的!  (  PS: 這是網上查看的,不肯定哈,反正我是配置了,有大佬知道的話下面回覆一下能夠嗎  >_<    )異步

 

      四、 下載開放平臺服務端SDK( 下載連接:https://docs.open.alipay.com/270/106291/)工具

      五、 下載以後將文件夾改名爲 alipay ( 看你心情作這一步 )網站

      六、 丟到extend文件夾下面(不知道路徑的  看下圖)ui

            

      七、填寫config.php文件裏面的參數(上圖中的config文件)

  • "notify_url" =>(支付寶異步通知,這個頁面是支付寶服務器端自動調用這個頁面的連接地址,這個頁面根據支付寶反饋過來的信息修改網站的訂單狀態,更新完成後須要返回一個success給支付寶,不能含有任何其它的字符包括html語言)
  • 「return_url」 => (買家付款成功後,會跳到 return_url所在的頁面,這個頁面能夠展現給客戶看,這個頁面只有付款成功纔會跳轉,而且只跳轉一次)
  •  這兩個地址要能直接訪問到

      八、 調用支付寶支付接口的時候須要至少3個參數(商戶訂單號要確保惟一性;訂單名稱;付款金額)

示例代碼以下:

//建立支付訂單
public function create_order(){
    //業務邏輯本身寫

    //支付寶支付
    $alipay = $this->alipay($order_number,$title,$money,$description);
    $res['url'] = $alipay;
    echo json_encode($res);exit;

    //前端獲取到這個URL跳轉一下這個連接 window.location.href = ret.url
}


//支付寶支付
public function alipay($order_number,$title,$money,$description){
    //須要引入這三個文件
    require_once EXTEND_PATH.'alipay/config.php';
    require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';
    require_once EXTEND_PATH.'alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';

    //商戶訂單號,商戶網站訂單系統中惟一訂單號,必填
    $out_trade_no = trim($order_number);

    //訂單名稱,必填
    $subject = trim($title);

    //付款金額,必填
    $total_amount = trim($money);

    //商品描述,可空
    $body = trim($description);

    //構造參數
    $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']);
    return $response;
}

//config.php裏配置的異步通知地址
function notifyurl(){
    //引入這兩個文件
    require_once EXTEND_PATH.'alipay/config.php';
    require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';

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

    /* 實際驗證過程建議商戶添加如下校驗。
    一、商戶須要驗證該通知數據中的out_trade_no是否爲商戶系統中建立的訂單號,
    二、判斷total_amount是否確實爲該訂單的實際金額(即商戶訂單建立時的金額),
    三、校驗通知中的seller_id(或者seller_email) 是否爲out_trade_no這筆單據的對應的操做方(有的時候,一個商戶可能有多個seller_id/seller_email)
    四、驗證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爲一致的
            //若是有作過處理,不執行商戶的業務程序
            //注意:
            //付款完成後,支付寶系統發送該交易狀態通知
        }
            //——請根據您的業務邏輯來編寫程序(以上代碼僅做參考)——
            echo "success";	//請不要修改或刪除
    }else {
        //驗證失敗
        echo "fail";
    }

}

//頁面跳轉處理方法
function returnurl(){
    //引入這兩個文件
    require_once EXTEND_PATH.'alipay/config.php';
    require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';

    $arr=$_GET;
    $alipaySevice = new \AlipayTradeService($config);
    $result = $alipaySevice->check($arr);

    /* 實際驗證過程建議商戶添加如下校驗。
    一、商戶須要驗證該通知數據中的out_trade_no是否爲商戶系統中建立的訂單號,
    二、判斷total_amount是否確實爲該訂單的實際金額(即商戶訂單建立時的金額),
    三、校驗通知中的seller_id(或者seller_email) 是否爲out_trade_no這筆單據的對應的操做方(有的時候,一個商戶可能有多個seller_id/seller_email)
    四、驗證app_id是否爲該商戶自己。
    */

    if($result) {//驗證成功

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


        //商戶訂單號
	    $out_trade_no = htmlspecialchars($_GET['out_trade_no']);

	    //支付寶交易號
	    $trade_no = htmlspecialchars($_GET['trade_no']);
		
	    echo "驗證成功<br />支付寶交易號:".$trade_no;

    }else {
        //驗證失敗
        echo "驗證失敗";
    }
}

(PS:第一次接電腦網站支付寶支付, 這個接口($response = $aop->pagePay() )就是生成請求字符串或是form表單來提交到頁面發起支付的 若是是form表單就是提交到頁面會喚起支付 若是生成請求連接 就須要提交到頁面訪問連接喚起支付。原本 var_dump($response);  應該能夠直接喚起支付的, 可是不知道是什麼緣由,網頁不跳轉,因此就用這樣的方式讓前臺跳轉URL 。 但願有大佬能夠指點一下!萬分感謝!)

相關文章
相關標籤/搜索