PHP集成支付寶快速實現充值功能

http://blog.lixiphp.com/php-alipay-fast-chongzhi/#axzz2wy4huhBmphp


本文將介紹如何快速經過PHP類庫來集成、整合支付寶來實現充值功能。若是你的系統想要擴充積分、帳戶餘額等功能,那麼就要選擇一個第三方支付系統來充值。mysql

支付寶集成時,須要三大步:sql

一、經過表單提交信息,系統整合信息,提交信息到支付寶;數據庫

二、用戶進行支付後,支付寶後臺通知系統處理;安全

三、支付寶後臺通知完成後,支付寶前臺跳轉到系統返回地址;服務器

支付寶PHP類

  • PHP 類alipay_notify,主要功能是付款過程當中服務器通知處理。
  • PHP 類alipay_service,根據支付寶外部服務接口生成支付寶地址。

我把這2個類,集中到一個文件alipay.class.inc中,點擊這裏查看並下載PHP支付寶類源碼異步

下面主要主要講解經過支付寶的PHP類來實現整合。ide

PHP支付寶集成

第一步,創建提交充值的基本信息:post

zhifubao-chongzhi PHP支付寶集成 創建提交充值的基本信息

第二步,驗證用戶提交的金額正確,經過表單驗證後,經過支付寶alipay_service類生成支付寶連接,而後跳轉到支付寶連接。網站

function index() { 
  $total = intval($_POST['total']); 
  if (!$total) { 
    $total = 1; 
  } 
  $pay_bank = trim($_POST['pay_bank']); 
  $account = $_POST['_account']; 
  $base_path = ‘http://’.$_SERVER['HTTP_HOST'].base_path(); 
  $order_id = date(‘YmdHis’, time()); //時間值做爲惟一的訂單ID號 
  $subject = $body = ‘LixiPHP充值’.$total.’元’; 
  $out_trade_no = date(‘YmdHis’, time()).’-’.$account->student['sid']; 
  //合做身份者ID,以2088開頭的16位純數字 
  $partner = ’20887015**9*7**’; 
  //安全檢驗碼,以數字和字母組成的32位字符 
  $security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′; 
  //簽約支付寶帳號或賣家支付寶賬戶 
  $seller_email = ‘seller@alipay.com’; 
  $_input_charset = "UTF-8"; 
  $sign_type = "MD5"; //簽名方式 
  $transport = ‘https’;//字符編碼格式 
  $parameter = array( 
    "service"        => "create_direct_pay_by_user",  //交易類型 
    "partner"        => $partner,         //合做商戶號 
    "return_url"     => $base_path.’alipay/return’,      //同步返回 
    "notify_url"     => $base_path.’alipay/notify’,      //異步返回 
    "_input_charset" => ‘UTF-8′,  //字符集,默認爲GBK 
    "subject"        => $subject,       //商品名稱,必填 
    "body"           => $subject,       //商品描述,必填 
    "out_trade_no"   => $out_trade_no,     //商品外部交易號,必填(保證惟一性) 
    "price"          => $total,           //商品單價,必填(價格不能爲0) 
    "payment_type"   => "1",              //默認爲1,不須要修改 
    "quantity"       => "1",              //商品數量,必填 
    "paymethod"        => ‘directPay’, 
    "defaultbank"        => $pay_bank, 
    "logistics_fee"      =>’0.00′,        //物流配送費用 
    "logistics_payment"  =>’BUYER_PAY’,   //物流費用付款方式:SELLER_PAY(賣家支付)、BUYER_PAY(買家支付)、BUYER_PAY_AFTER_RECEIVE(貨到付款) 
    "logistics_type"     =>’EXPRESS’,     //物流配送方式:POST(平郵)、EMS(EMS)、EXPRESS(其餘快遞) 
    //"receive _mobile" => 」,         //收貨人手機 
    "show_url"       => $base_path,        //商品相關網站 
    "seller_email"   => $seller_email,     //賣家郵箱,必填 
  ); 
  require("../libraries/payment/alipay.class.inc"); 
  $alipay = new alipay_service($parameter, $security_code, $sign_type); 
  $link = $alipay->create_url(); 
  header("Location: ".$link); 
}

用戶跳轉到支付寶支付界面後,默認的支付銀行是在提交表單前選擇的網上銀行,選擇支付寶的話就是使用支付寶餘額支付。而後就是等待用戶支付了。用戶完成支付後,請會發生下面的幾個步驟,固然若是用戶放棄支付的話,就沒有後面的處理了。

第三步,用戶進行支付後,支付寶後臺通知系統處理。系統處理頁面主要是根據生成支付寶連接是使用的notify_url來決定的。它處理完成後,成功返回success,失敗返回fail,若是支付寶收到的是fail,那麼支付寶還會在隔1小時,1天,1周等週期再次通知服務器處理,這裏的週期需求向支付寶詢問。若是支付寶收到的是success,注意支付寶好像在一個月後要發送一次TRADE_FINISHED表示交易完成,這個必定不要再給用戶加一次充值了。

function alipay_notify() { 
  $out_trade_no = date(‘YmdHis’, time()).’-’.$account->student['sid']; 
  //合做身份者ID,以2088開頭的16位純數字 
  $partner = ’20887015**9*7**’; 
  //安全檢驗碼,以數字和字母組成的32位字符 
  $security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′; 
  //簽約支付寶帳號或賣家支付寶賬戶 
  $seller_email = ‘seller@alipay.com’; 
  $sign_type = "MD5"; 
  $_input_charset = ‘UTF-8′; 
  $transport = ‘https’; 
  require("../libraries/payment/alipay.class.inc"); 
  $alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport); 
  $verify_result = $alipay->notify_verify(); 
  //支付寶 Notice verify 
  if($verify_result) { 
    //認證合格 
    //獲取支付寶的反饋參數 
    //獲取支付寶傳遞過來的訂單號 
    $order_id      = $_POST['out_trade_no']; 
    //獲取支付寶傳遞過來的總價格 
    $total_fee     = $_POST['total_fee']; 
    //拆分訂單號爲訂單和學員ID 
    $txn_id = explode(‘-’, $order_id); 
    $real_orderid = $txn_id[0]; //get the real order 
    $sid = $txn_id[1]; 
    if($_POST['trade_status'] == ‘TRADE_SUCCESS’) { 
      //這裏放入你自定義代碼,好比根據不一樣的trade_status進行不一樣操做 
      mysql_query("UPDATE {student} set balance = balance+%d where sid = %d", (int) $total_fee, $sid); 
      mysql_query("INSERT INTO {payment_receipts} (sid, order_id, amount, received) VALUES (%d, ‘%s’, %f, %d)", $sid, $real_orderid, (int) $total_fee, time()); 
      echo "success"; 
    } 
    else { 
      echo "fail"; 
    } 
  } 
  else { 
    echo "fail"; 
  } 
}

第四步,用戶完成支付後,支付寶前臺跳轉到系統返回地址。這個頁面其實能夠只作一個很是簡單頁面,不用作任何驗證。可是爲了安全建議也作一下返回驗證。可是最後不要在返回頁面作數據庫操做。

function alipay_return() { 
  $out_trade_no = date(‘YmdHis’, time()).’-’.$account->student['sid']; 
  //合做身份者ID,以2088開頭的16位純數字 
  $partner = ’20887015**9*7**’; 
  //安全檢驗碼,以數字和字母組成的32位字符 
  $security_code = ‘gc2qxh4**ab***3jp8*****2ptxewks4′; 
  //簽約支付寶帳號或賣家支付寶賬戶 
  $seller_email = ‘seller@alipay.com’; 
  $sign_type = "MD5"; 
  $_input_charset = ‘UTF-8′; 
  $transport = ‘https’; 
  require("../libraries/payment/alipay.class.inc"); 
  $alipay = new alipay_notify($partner,$security_code,$sign_type,$_input_charset,$transport); 
  $verify_result = $alipay->return_verify(); 
  $order_id    = $_GET['out_trade_no'];   //獲取訂單號 
  $total_fee  = (int) $_GET['total_fee'];      //獲取總價格 
  $txn_id = explode(‘-’, $order_id); 
  $real_orderid = $txn_id[0]; //get the real order 
  $sid = $txn_id[1]; 
  //認證合格 
  if($verify_result) { 
    $output = ‘<h2>恭喜您,學員ID’.$sid.’充值’.$total_fee.’元成功!</h2>’; 
    $student = mysql_query("SELECT uid, balance FROM {student} WHERE sid = %d", $sid); 
    $output .= ‘<p>您目前的餘額’.$student->balance.’元。</p>’; 
    $output .= l(‘查看記錄’, ‘user/’.$student->uid.’/depositlogs’); 
    return $output; 
  } 
  else { 
    $output = ‘<h2>你的訂單支付過程出現故障!</h2>’; 
    $output .= ‘<p>您的交易信息是無效的,若是你使用的是已有的返回信息的話,那麼交易已經成立,你能夠查看個人訂單歷史。<br>若是你是黑客的話,俺是守法的好公民,但願你能饒了我這個小店。’; 
    $output .= ‘</p><p><a href="/">返回首頁</a></p>’; 
    return $output; 
  } 
}

若是用戶是惡意修改網址參數,將會看到:

callback return failed  若是用戶是惡意修改網址參數

若是用戶正常經過支付寶自動跳轉回來的,將會看到:

callback return success 若是用戶正常經過支付寶自動跳轉回來的

好的,趕快將以上方法和代碼應用到你的積分、帳戶餘額系統把!

除非註明,文章均爲 LixiPHP原創,轉載請註明本文地址: http://blog.lixiphp.com/php-alipay-fast-chongzhi/


查看更多: PHP集成支付寶快速實現充值功能 | LixiPHP - 專一於建設高品質網站! http://blog.lixiphp.com/php-alipay-fast-chongzhi/#ixzz2wy56UqHs
相關文章
相關標籤/搜索