laravel 對接支付寶

使用的庫

omnipay-alipay

申請支付寶支付

這個就不說了, 不明白如何下手的伙伴讓運營去和支付寶客服聯(lián)系吧

composer 安裝git庫

將以下代碼添加到 composer.json

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

執(zhí)行composer命令更新依賴

$ 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) 支付寶網(wǎng)銀快捷接口

Alipay_EXpress

支付 控制器中:


use Omnipay\Omnipay;

//調(diào)用支付網(wǎng)關(guān), 這一步其實就是配置參數(shù),可以寫成通用函數(shù)
$gateway = Omnipay::create('Alipay_Express');  //創(chuàng)建網(wǎng)關(guān)類
$gateway->setPartner('8888666622221111');  //合作者id
$gateway->setKey('your**key**here');   //支付key
$gateway->setSellerEmail('merchant@example.com');  收款賬戶email
$gateway->setReturnUrl('http://www.example.com/return');  //返回url, 用戶支付后會跳轉(zhuǎn)到這個地址, 可以定義支付成功或者支付失敗等頁面返回增加用戶體驗
$gateway->setNotifyUrl('http://www.example.com/notify');   //通知url,每次支付完成后, 支付寶服務器會向這個地址發(fā)請求,返回支付狀態(tài)
  
//設(shè)置訂單
$options = [ 
    'out_trade_no' => date('YmdHis') . mt_rand(1000,9999),  //你自己網(wǎng)站的唯一訂單號
    'subject' => 'test', //訂單標題
    'total_fee' => '0.01', //訂單價格  
    //這里也可以帶上其他參數(shù),支付完之后支付寶會返回該參數(shù)和對應的值,不過設(shè)置了之后后面處理支付狀態(tài)需要多一步操作。我一般會設(shè)置'paytype' => 'alipay',
];    

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

處理支付狀態(tài)

這個可以寫在支付是指定的returnurl或者notifyurl對應到控制器里面

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, ];    //這條語句前提是你在前面支付的時候沒有帶其他到參數(shù),如果帶了, 需要將其他參數(shù)unset, 比如我一般會帶上一個&paytype=alipay用來標識是支付寶支付, 所以我就需要在這條語句前先執(zhí)行unset($_REQUEST['paytype']);  

if ( $response->isSuccessful() && $response->isTradeStatusOk() ) {
    echo "支付成功"; 
    //寫自己的邏輯, 比如把支付狀態(tài)寫入訂單表里面
} else { 
    echo "支付失敗"; 
}
  

測試

如果你都配置好了的話那就測試吧
應該是手機瀏覽器訪問支付鏈接會先訪問pc版支付寶頁面后跳轉(zhuǎn)到支付寶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;

//調(diào)用支付網(wǎng)關(guān), 這一步其實就是配置參數(shù),可以寫成通用函數(shù)
$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, 用戶支付后會跳轉(zhuǎn)到這個地址, 可以定義支付成功或者支付失敗等頁面返回增加用戶體驗
$gateway->setNotifyUrl('http://www.example.com/notify');   //通知url,每次支付完成后, 支付寶服務器會向這個地址發(fā)請求,返回支付狀態(tài)
  
//設(shè)置訂單
$options = [ 
    'out_trade_no' => date('YmdHis') . mt_rand(1000,9999),  //你自己網(wǎng)站的唯一訂單號
    'subject' => 'test', //訂單標題
    'total_fee' => '0.01', //訂單價格  
];    

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

處理支付狀態(tài)

和Alipay_Express的沒有區(qū)別

測試

只用手機測試過, 跳轉(zhuǎn)到支付寶手機網(wǎng)頁支付的頁面。

文章結(jié)束

支付寶文檔可能會更新,文檔地址鏈接可能不能用,本文鏈接更新時間為20160527

其他php框架或者原生php的處理是類似的,希望此篇文章對你以后的開發(fā)有幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容