隨著移動(dòng)互聯(lián)的發(fā)展,無現(xiàn)金時(shí)代成為發(fā)展趨勢(shì),據(jù)有關(guān)報(bào)道,在無現(xiàn)金支付的普及度上,韓國(guó)已達(dá)90%,中國(guó)為60%,美國(guó)和英國(guó)為50%,在大部分發(fā)達(dá)國(guó)家,信用卡和交通電子錢包支付為主,而在中國(guó)由于信用卡發(fā)展先對(duì)較晚,信用體系不健全,地區(qū)發(fā)展不平衡,大部分中西部人民承擔(dān)風(fēng)險(xiǎn)的能力不足,而且信用卡比較高,所以信用卡的發(fā)展在中國(guó)舉步維艱。當(dāng)時(shí)隨著4G網(wǎng)絡(luò)的普及,人民生活的提高,中國(guó)手機(jī)普及率達(dá)到了95%,智能手機(jī)普及率達(dá)到了75%,這為手機(jī)支付的發(fā)展提供了先決條件。
以下是關(guān)于Thinkphp的支付寶接口實(shí)例:
???ph
namespaceHome\Service;
classAlipayService{
/**
*支付寶配置信息
*本使用包為最新SDK。ph
5.5+才支持
*采用的RSA2加密方式(支付寶推薦),到https://docs.open.alipay.com/291/105971/去下載windows工具,生成公鑰和私鑰,將公鑰在控制臺(tái)上傳設(shè)置,再查看其公鑰填入以下公鑰信息
*/
function__construct(){
$payConfig=array(
'app_id'=D('Config')-get('alipay_partner'),//應(yīng)用ID,您的APPID。2023071907816658
'merchant_private_key'='',//應(yīng)用私鑰,您的原始格式RSA私鑰
'notify_url'=C('PROTOCOL').$_SERVER['SERVER_NAME'].U('Pay/alipay_notify_url'),//異步通知地址
'return_url'=C('PROTOCOL').$_SERVER['SERVER_NAME'].U('Pay/alipay_notify_url'),//同步跳轉(zhuǎn)
'charset'='UTF-8',//編碼格式
'sign_type'='RSA2',//簽名方式
'gatewayUrl'='https://openapi.alipay.com/gateway.do',//支付寶網(wǎng)關(guān)
'alipay_public_key'='',//支付寶公鑰,查看地址:對(duì)應(yīng)APPID下的支付寶公鑰。設(shè)置和支付是兩套內(nèi)容。設(shè)置后學(xué)要到管理平臺(tái)去查看應(yīng)用公鑰
'pay_log_txt'=.'/Public/alipay_log_bef74b0ac451f8e6e5301453f94749989
9.txt',//支付日志(需要先建立此文件)
);
$this-payConfig=$payConfig;
}
/**
*獲取支付寶配置參數(shù)
*@returnarray
*/
publicfunctiongetConfig(){
return$this-payConfig;
}
/**
*設(shè)置支付配置參數(shù)
*@param$data
*/
publicfunctionsetConfig($data){
$payConfig=$this-payConfig;
foreach($dataas$k=$v){
$payConfig[$k]=$v;
}
$this-payConfig=$payConfig;
}
/**
*支付寶支付
*@param$data
*/
publicfunctionpay($data){
Vendor('Alipay.wappay.service.AlipayTradeService');
Vendor('Alipay.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
$config=$this-payConfig;
$out_trade_no=$data['out_trade_no'];//商戶訂單號(hào),商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號(hào),必填
$subject=$data['subject'];//訂單名稱,必填
$total_amount=$data['total_amount'];//付款金額,必填
$body=$data['body'];//商品描述,可空
$timeout_express=1m;//超時(shí)時(shí)間
$payRequestBuilder=new\AlipayTradeWapPayContentBuilder();
$payRequestBuilder-setBody($body);
$payRequestBuilder-setSubject($subject);
$payRequestBuilder-setOutTradeNo($out_trade_no);
$payRequestBuilder-setTotalAmount($total_amount);
$payRequestBuilder-setTimeExpress($timeout_express);
$payResponse=new\AlipayTradeService($config);
$result=$payResponse-wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);
}
/**
*記錄支付異步記錄
*@param$data
*/
publicfunctionsetPaylog($data){
$config=$this-payConfig;
$str=serialize($data).\r\n==================================================================================\r\n;;
import(Org.Util.File);
$file=new\File($config['pay_log_txt']);
$realfiel=$file-getRealFile();
file_put_contents($realfiel,$str,F(xiàn)ILE_APPEND);
}
}支付處理控制器
?。縫h
namespaceHome\Controller;
useThink\Controller;
useCommon\Controller\HomeController;
classPayControllerextendsHomeController{
/**
*支付寶支付
*@param$order_number訂單號(hào)
*/
publicfunctionalipay($order_number){
$order=D('Order')-where(array('order_number'=$order_number))-find();
$orderDetail=D('OrderDetail')-where(array('oid'=$order['id']))-field('pid')-select();
$firstProduct=D('Products')-where(array('id'=$orderDetail[0]['pid']))-field('title')-find();
//支付數(shù)據(jù)
$payData=array(
'out_trade_no'=$order['order_number'],
'subject'=D('Config')-get('alipay_subject').$order_number,//支付主題
'total_amount'=0.01,//測(cè)試訂單號(hào)0.01元支付$order['real_all_money']
'body'=$firstProduct['title'].'等',
);
D('Alipay','Service')-pay($payData);
}
/**
*支付寶回調(diào)地址
*/
publicfunctionalipay_notify_url(){
//記錄日志,這里最好放在開頭以防下面代碼邏輯有誤不能正常發(fā)現(xiàn)是否被調(diào)用
D('Alipay','Service')-setPaylog($logArr);
Vendor('Alipay.wappay.service.AlipayTradeService');
$payConfig=D('Alipay','Service')-getConfig();
$arr=$_POST;
$logArr=$arr;
$alipaySevice=new\AlipayTradeService($payConfig);
$alipaySevice-writeLog(var_export($_POST,true));
$result=$alipaySevice-check($arr);
if($result){
//驗(yàn)證成功
$out_trade_no=$_POST['out_trade_no'];//商戶訂單號(hào)
$trade_no=$_POST['trade_no'];//支付寶交易號(hào)
$trade_status=$_POST['trade_status'];//交易狀態(tài)
if($_POST['trade_status']=='TRADE_FINISHED'){
//交易結(jié)束,不可退款
}elseif($_POST['trade_status']=='TRADE_SUCCESS'){
//交易支付成功
$re=D('Order')-setPay($out_trade_no,1);
}
echosuccess;//請(qǐng)不要修改或刪除
$logArr['result']=success;
}else{
//驗(yàn)證失敗
echofail;//請(qǐng)不要修改或刪除
$logArr['result']=fail;
}
}
/**
*支付成功跳轉(zhuǎn)地址
*/
publicfunctionresultinfo(){
$ModelObj=D('Order');
$order_number=I('out_trade_no');
$order=$ModelObj-where(array('order_number'=$order_number))-find();
$this-order=$order;
$this-display('pay_ok');
}
}
支付寶的接口相對(duì)于微信要簡(jiǎn)單的多,而且移動(dòng)端會(huì)自動(dòng)調(diào)出支付寶支付,而微信就麻煩的很,第三方要申請(qǐng)H5支付,微信中打開調(diào)用的不是H5支付,又要單獨(dú)處理。
所以微信支付比支付寶的麻煩。