1. 程式人生 > >PHP整合支付寶快速實現充值功能

PHP整合支付寶快速實現充值功能

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

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

支付寶整合時,需要三大步:

1、通過表單提交資訊,系統整合資訊,提交資訊到支付寶;

2、使用者進行支付後,支付寶後臺通知系統處理;

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

支付寶PHP類

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

我把這2個類,集中到一個檔案alipay.class.inc中,點選這裡檢視並下載PHP支付寶類原始碼

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

PHP支付寶整合

第一步,建立提交充值的基本資訊:

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 = ‘

[email protected]’; 
  $_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 = ‘[email protected]’; 
  $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 = ‘[email protected]’; 
  $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 如果使用者正常通過支付寶自動跳轉回來的

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


相關推薦

PHP整合支付快速實現功能

http://blog.lixiphp.com/php-alipay-fast-chongzhi/#axzz2wy4huhBm 本文將介紹如何快速通過PHP類庫來整合、整合支付寶來實現充值功能。如果你的系統想要擴充積分、賬戶餘額等功能,那麼就要選擇一個第三方支付系統來充

Android 整合支付SDK實現快捷支付--填坑

    剛給app集成了支付寶的android客戶端快捷支付SDK,整合很簡單,但是由於是涉及錢的問題,大家都會持謹慎態度,所以有很多小坑,粗心的話整合之路會很坎坷,對於整合步驟,我不想寫了,沒有必要,就看官方的SDK整合文件就好,內容也不多,對於整合步驟這個不推薦看部落格

PHP服務端整合支付APP支付以及回撥

說到支付寶APP支付,相對於微信APP支付要簡單一點,下篇會具體說微信APP支付的具體接入; 流程:客戶端提供資料 ->  服務端處理生成支付引數返回給客戶端調起支付  ->  支付成功  ->  支付寶回撥結果  ->  接受回撥修改訂單狀態 首先

【網站支付PHP篇】thinkPHP整合支付支付(擔保交易)

目錄 系列說明開發環境部署支付寶支付請求支付寶返回處理系列說明 最近在幫朋友的系統安裝支付模組(兌換網站積分),現在總結一些開發心得,希望對大家有用。這個系列會講以下第三方支付平臺的整合: 以後有更新其他平臺也會寫出來。 這次的支付系統是用來網站的積分充值。為了簡化,這裡採

個人網站如何使用支付收款實現

php 支付寶想給個人網站增加一個支付,找到https://neue.v2ex.com/t/350564,按照裏面大家討論的,還真的可以了。1.開通功能https://neue.v2ex.com/t/326701 有個商家二維碼圖中二維碼是服務商的員工碼,作為推廣的服務商肯定是會有返利但是不通員工碼,個人是

微信支付開發:10分鐘幫你開通微信支付微信免代金券和微信免立減與折扣,申請微信免代金券,社交立減金

www. 查詢 5.5 輸入 bubuko nbsp blog 等待 ota 功能介紹: 商戶不需要預先充值營銷經費,即可創建和激活免充值代金券活動。活動生效後,用戶到店使用微信支付,當訂單符合優惠規則時,會直接扣減核銷優惠商戶的訂單實收金額。 免充值,營銷資金“0”占用

Yii2整合支付

背景知識: 本文主要以電腦網站支付為主講解支付寶的應用,官方文件 事先準備好官方的PHP例子,下載地址:傳送門 1.首先在vendor下新建一個alipay目錄,將下載好的sdk拖入該目錄中: 2.在配置檔案中配置支付相關資訊: <?php return

cocos creator整合支付支付功能--安卓篇

App支付Android整合流程:(開啟cocos creator打包後的android studio 工程) 1:匯入開發資源 將alipaySdk-xxxxxxxx.jar包放入商戶應用工程的libs目錄下,如下圖。 2:將此jar包匯入到依賴jar包中去:右鍵jar包選擇 Add

Java Web整合支付沙箱支付

前言 支付寶推出一個沙箱環境,能夠很好的模擬支付寶支付,並且還提供了demo,但demo是一個普通web專案,怎麼整合到Java Web專案呢,其實很簡單 簡單配置請參照支付寶沙箱支付開發文件 一、支付部分 AlipayConfig配置:博主使用的是頁面跳轉同步通知,返回路徑return

淺析微信支付:開通免產品功能及如何進行介面升級指引

本文是【淺析微信支付】系列文章的第十五篇,主要講解如何開通免充值產品功能流程和其中的注意事項,對於介面升級會重要講解,避免爬坑。 淺析微信支付系列已經更新十五篇了喲~,沒有看過的朋友們可以看一下哦。 淺析微信支付:商戶平臺代金券或立減優惠開通、指定使用者代金券發放、查詢等 淺析微信支付:商

ThinkPHP5.0整合支付掃碼支付(PC端)

相關文章:ThinkPHP5.0整合微信掃碼支付(PC端)   搞完了微信搞支付寶~~~ 還是先下載支付寶電腦網站支付demo,目錄結構如下: 把demo資料夾放到tp5的 vendor 資料夾下面,重新命名為alipay: 配置 config.p

PHP接入支付支付

建立應用 使用支付寶賬號登入開放平臺建立應用,應用建立成功之後可以得到APPID等相關資訊 接著需要設定RSA金鑰,可以使用螞蟻金服開放平臺提供的生成工具,生成完金鑰需在開放平臺中填寫。 程式碼接入 引用服務端SDK 為了方便開發者的接入,支付寶提供了幾種常用開發語言的服務端SDK。 本人專案中使用

一分鐘整合支付(安卓)

背景:      專案中需要整合支付寶支付。支付寶官方有整合指導,網上也有一些指導文件,但是總是感覺有些囉嗦,所以整理一片極簡對接指導文件,目的在於立刻完成支付寶整合。(至於高階玩法,請參考官方文件) 整合步驟(直接上程式碼): 關鍵程式碼MainActivity.ja

PHP開發支付微信個人免籤支付介面例項

這是一個PHP開發支付寶微信個人免籤支付介面例項,支付寶微信即時到帳介面,使用原生支付寶即時到帳介面修改而來,即可實現多介面收款功能,開發只需要按照支付寶即時到帳介面開發即可,減少開發難度   需要修改的檔案: notify_url.php return_url.php 同步和非同

PHP呼叫支付支付介面操作步驟

1.首先掃碼登入支付寶個人主頁點選開發平臺 2.點選開發接入,找到開發服務點選沙箱 3.進入沙箱環境 4.應用中選擇電腦網站支付,然後選擇demo下載 5.下載完畢解壓後將檔案複製到WWW目錄下,新建站點,進行訪問 6.回到沙箱應用,開始配置檔案

SpringMVC整合支付(沙箱環境)掃碼支付

第零步、支付流程 這是支付寶給出的掃碼支付的流程,我將上述過程片面的概括為以下幾步 1、商戶系統根據訂單資訊向支付寶的伺服器請求生成支付用的二維碼 2、支付寶的伺服器收到請求後,按照使用者的請求,生成相關資訊(包含二維碼連線)返回給商戶 3、商戶接收到二維碼資訊後,生成支付用的二維碼提

php獲取支付使用者資訊

php獲取支付寶使用者資訊 一:建立應用 要在您的應用中使用支付寶開放產品的介面能力:  您需要先去螞蟻金服開放平臺(open.alipay.com),在開發者中心建立登記您的應用,此時您將獲得應用唯一標識(APPID); 請在【功能資訊】中點選【新增功能】,選擇【獲取會員資訊】;

Android 整合支付支付後開啟混淆報錯問題解決

Android整合阿里的支付寶支付以後開啟混淆開關打包時會發現有一個警告資訊中斷打包 警告資訊: Warning: com.alipay.android.phone.mrpc.core.AndroidHttpClient: can't find referenced method '

Python中使用PIL快速實現

二值圖 二值影象是指:每個畫素不是黑就是白,其灰度值沒有中間過渡的影象。二值影象一般用來描述文字或者圖形,其優點是佔用空間少,缺點是,當表示人物,風景的影象時,二值影象只能描述其輪廓,不能描述細節。這時候要用更高的灰度級。 效果 原圖 二值圖 實現 新建資料夾Tw

整合支付SDK時錯誤的解決辦法

1.開啟Demo中的錯誤 這是路徑錯誤導致 解決辦法:在Build Settings 中找到 Library Search Paths ,去掉其中的 ///  2.自己整合支付寶SDK時的錯誤 這個也是路徑錯誤, 解決辦法:在自己工程資料夾裡建一個資料夾,隨便起什麼