laravel 對接支付寶

使用的庫

omnipay-alipayphp

申請支付寶支付

這個就不說了, 不明白如何下手的夥伴讓運營去和支付寶客服聯繫吧git

composer 安裝git庫

將如下代碼添加到 composer.jsongithub

{ "require": { "lokielse/omnipay-alipay": "dev-master" }}

執行composer命令更新依賴json

$ curl -s http://getcomposer.org/installer | php
$ php composer.phar update

用法

該庫提供了 6 種不一樣的接口,各類接口有不一樣的配置和用法,我用過Alipay_Express 和 Alipay_WapExpress,下面會有這兩種支付的步驟。瀏覽器

  • Alipay_Express (Alipay Express Checkout) 支付寶即時到帳接口
  • Alipay_Secured (Alipay Secured Checkout) 支付寶擔保交易接口
  • Alipay_Dual (Alipay Dual Function Checkout) 支付寶雙功能交易接口
  • Alipay_WapExpress (Alipay Wap Express Checkout) 支付寶WAP客戶端接口
  • Alipay_MobileExpress (Alipay Mobile Express Checkout) 支付寶無線支付接口
  • Alipay_Bank (Alipay Bank Checkout) 支付寶網銀快捷接口

Alipay_EXpress

支付 控制器中:

use Omnipay\Omnipay;

//調用支付網關, 這一步其實就是配置參數,能夠寫成通用函數
$gateway = Omnipay::create('Alipay_Express');  //建立網關類
$gateway->setPartner('8888666622221111');  //合做者id
$gateway->setKey('your**key**here');   //支付key
$gateway->setSellerEmail('merchant@example.com');  收款帳戶email
$gateway->setReturnUrl('http://www.example.com/return');  //返回url, 用戶支付後會跳轉到這個地址, 能夠定義支付成功或者支付失敗等頁面返回增長用戶體驗
$gateway->setNotifyUrl('http://www.example.com/notify');   //通知url,每次支付完成後, 支付寶服務器會向這個地址發請求,返回支付狀態
  
//設置訂單
$options = [ 
    'out_trade_no' => date('YmdHis') . mt_rand(1000,9999),  //你本身網站的惟一訂單號
    'subject' => 'test', //訂單標題
    'total_fee' => '0.01', //訂單價格  
    //這裏也能夠帶上其餘參數,支付完以後支付寶會返回該參數和對應的值,不過設置了以後後面處理支付狀態須要多一步操做。我通常會設置'paytype' => 'alipay',
];    

//跳轉支付
$response = $gateway->purchase($options)->send();  
$response->redirect();

處理支付狀態

這個能夠寫在支付是指定的returnurl或者notifyurl對應到控制器裏面php框架

use Omnipay\Omnipay;

$gateway = Omnipay::create('Alipay_Express');
$gateway->setPartner('8888666622221111');
$gateway->setKey('your**key**here');
$gateway->setSellerEmail('merchant@example.com');

$options = [ 'request_params' => $_REQUEST, ];    //這條語句前提是你在前面支付的時候沒有帶其餘到參數,若是帶了, 須要將其餘參數unset, 好比我通常會帶上一個&paytype=alipay用來標識是支付寶支付, 因此我就須要在這條語句前先執行unset($_REQUEST['paytype']);  

if ( $response->isSuccessful() && $response->isTradeStatusOk() ) {
    echo "支付成功"; 
    //寫本身的邏輯, 好比把支付狀態寫入訂單表裏面
} else { 
    echo "支付失敗"; 
}

測試

若是你都配置好了的話那就測試吧
應該是手機瀏覽器訪問支付連接會先訪問pc版支付寶頁面後跳轉到支付寶app裏面,
pc訪問的話就是訪問pc頁面掃碼支付服務器

Alipay_WapExpress

支付 控制器中:

//和上面基本沒什麼差異 , 差異就是須要帶上你的服務器使用openssl生成的rsa私鑰和支付寶的公鑰, 
//另外在此以前須要先上傳你的rsa公鑰到支付寶,[上傳RSA公鑰](https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7n6Wbd&treeId=58&articleId=103578&docType=1)   

use Omnipay\Omnipay;

//調用支付網關, 這一步其實就是配置參數,能夠寫成通用函數
$gateway = Omnipay::create('Alipay_Express');
$gateway->setPartner('8888666622221111');  //合做者id
$gateway->setKey('your**key**here');   //支付key
$gateway->setSellerEmail('merchant@example.com');  收款帳戶email

//  private key : [RSA私鑰及公鑰生成](https://doc.open.alipay.com/doc2/detail?treeId=58&articleId=103242&docType=1)  

//alipay public key : 支付寶公鑰,
//查看地址爲:b.alipay.com->個人商家服務->[查看PID、Key](https://b.alipay.com/order/serviceIndex.htm),
//找到合做夥伴密鑰管理->查看支付寶公鑰。
//**注:PHP和.NET使用DEMO中已有的alipay_public_key.pem密鑰文件。**  
//demo下載地址[https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1](https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1)

$gateway->setPrivateKey('這裏是一大串rsa鑰匙');
$gateway->setAlipayPublicKey('這裏是一大串支付寶的公鑰');

$gateway->setReturnUrl('http://www.example.com/return');  //返回url, 用戶支付後會跳轉到這個地址, 能夠定義支付成功或者支付失敗等頁面返回增長用戶體驗
$gateway->setNotifyUrl('http://www.example.com/notify');   //通知url,每次支付完成後, 支付寶服務器會向這個地址發請求,返回支付狀態
  
//設置訂單
$options = [ 
    'out_trade_no' => date('YmdHis') . mt_rand(1000,9999),  //你本身網站的惟一訂單號
    'subject' => 'test', //訂單標題
    'total_fee' => '0.01', //訂單價格  
];    

//跳轉支付
$response = $gateway->purchase($options)->send();  
$response->redirect();

處理支付狀態

和Alipay_Express的沒有區別app

測試

只用手機測試過, 跳轉到支付寶手機網頁支付的頁面。composer

文章結束

支付寶文檔可能會更新,文檔地址連接可能不能用,本文連接更新時間爲20160527框架

其餘php框架或者原生php的處理是相似的,但願此篇文章對你之後的開發有幫助。

原文地址:https://www.jianshu.com/p/e0d4f0d0d3f1

相關文章
相關標籤/搜索