使用的庫
申請支付寶支付
這個就不說了, 不明白如何下手的伙伴讓運營去和支付寶客服聯(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ā)有幫助。