隨著移動互聯的發展,無現金時代成為發展趨勢,據有關報道,在無現金支付的普及度上,韓國已達90%,中國為60%,美國和英國為50%,在大部分發達國家,信用卡和交通電子錢包支付為主,而在中國由于信用卡發展先對較晚,信用體系不健全,地區發展不平衡,大部分中西部人民承擔風險的能力不足,而且信用卡比較高,所以信用卡的發展在中國舉步維艱。當時隨著4G網絡的普及,人民生活的提高,中國手機普及率達到了95%,智能手機普及率達到了75%,這為手機支付的發展提供了先決條件。
以下是關于Thinkphp的支付寶接口實例:
?ph
namespaceHome\Service;
classAlipayService{
/**
*支付寶配置信息
*本使用包為最新SDK。ph
5.5+才支持
*采用的RSA2加密方式(支付寶推薦),到https://docs.open.alipay.com/291/105971/去下載windows工具,生成公鑰和私鑰,將公鑰在控制臺上傳設置,再查看其公鑰填入以下公鑰信息
*/
function__construct(){
$payConfig=array(
'app_id'=D('Config')-get('alipay_partner'),//應用ID,您的APPID。2023071907816658
'merchant_private_key'='',//應用私鑰,您的原始格式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'),//同步跳轉
'charset'='UTF-8',//編碼格式
'sign_type'='RSA2',//簽名方式
'gatewayUrl'='https://openapi.alipay.com/gateway.do',//支付寶網關
'alipay_public_key'='',//支付寶公鑰,查看地址:對應APPID下的支付寶公鑰。設置和支付是兩套內容。設置后學要到管理平臺去查看應用公鑰
'pay_log_txt'=.'/Public/alipay_log_bef74b0ac451f8e6e5301453f94749989
9.txt',//支付日志(需要先建立此文件)
);
$this-payConfig=$payConfig;
}
/**
*獲取支付寶配置參數
*@returnarray
*/
publicfunctiongetConfig(){
return$this-payConfig;
}
/**
*設置支付配置參數
*@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'];//商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
$subject=$data['subject'];//訂單名稱,必填
$total_amount=$data['total_amount'];//付款金額,必填
$body=$data['body'];//商品描述,可空
$timeout_express=1m;//超時時間
$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,FILE_APPEND);
}
}支付處理控制器
?ph
namespaceHome\Controller;
useThink\Controller;
useCommon\Controller\HomeController;
classPayControllerextendsHomeController{
/**
*支付寶支付
*@param$order_number訂單號
*/
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();
//支付數據
$payData=array(
'out_trade_no'=$order['order_number'],
'subject'=D('Config')-get('alipay_subject').$order_number,//支付主題
'total_amount'=0.01,//測試訂單號0.01元支付$order['real_all_money']
'body'=$firstProduct['title'].'等',
);
D('Alipay','Service')-pay($payData);
}
/**
*支付寶回調地址
*/
publicfunctionalipay_notify_url(){
//記錄日志,這里最好放在開頭以防下面代碼邏輯有誤不能正常發現是否被調用
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){
//驗證成功
$out_trade_no=$_POST['out_trade_no'];//商戶訂單號
$trade_no=$_POST['trade_no'];//支付寶交易號
$trade_status=$_POST['trade_status'];//交易狀態
if($_POST['trade_status']=='TRADE_FINISHED'){
//交易結束,不可退款
}elseif($_POST['trade_status']=='TRADE_SUCCESS'){
//交易支付成功
$re=D('Order')-setPay($out_trade_no,1);
}
echosuccess;//請不要修改或刪除
$logArr['result']=success;
}else{
//驗證失敗
echofail;//請不要修改或刪除
$logArr['result']=fail;
}
}
/**
*支付成功跳轉地址
*/
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');
}
}
支付寶的接口相對于微信要簡單的多,而且移動端會自動調出支付寶支付,而微信就麻煩的很,第三方要申請H5支付,微信中打開調用的不是H5支付,又要單獨處理。
所以微信支付比支付寶的麻煩。