随着移动互联的发展,无现金时代成为发展趋势,据有关报道,在无现金支付的普及度上,韩国已达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支付,又要单独处理。
所以微信支付比支付宝的麻烦。