一、从支付宝官方下载php版本的支付宝接口,后复制官方文件并修改。
将官方的源码解压到根目录下的extend里 更改名称,将 alipay.trade.page.pay-PHP-UTF-8 更改为 AlipayTradePagePay。
二、修改文件【可忽略】
注:windows下需要修改一个文件,但Linux系统是不需要修改的!
在 window
系统下需要修改
把C:\tp5_alipay2017\extend\AlipayTradePagePay\lotusphp_runtime\Lotus.php
第 61行注释掉;
//trigger_error("invalid [default store dir]: " . $this->defaultStoreDir);
否则会报错 《错误一:[1024]invalid [default store dir]: /tmp/
》 !
注释完了再改回来就没事儿了!!
就这么简单?是的:就这么简单!!!!!
三、新建alipay.php
,并将下边代码复制进去,放到 application/extra
目录下,
// 支付宝配置文件
return [
//应用ID,您的APPID。
'app_id' => "2017091408724714",
//商户私钥
'merchant_private_key' => "MIIEowIBAAKCAQEAzuqhx1DejGM6iPyDpAPS09f7E8SlQLMHpH0LxkMeiLfXf471M1N163tUjwAamimE+BDhGRic6T9J05ddY8liQstKEDkUP5ttFlW7yPZSW0PGeb+0fsoAVoUQKDySRM1jkrwPaf4h5AxfsxXCZ+AZ1J3IlLL2a9Z1REmCCfeh2kFCGiCbzowbFIP00XFXzm/hyVa5XFFdg2LHtkMiQhcQd41920LAg16CyainOTA3/DhQjeYTVjWm3mqJS+l7EpCuq+1kIb1AR4CyZHvgYL8OERG9P+s7D60abTHwoGKnsAlh6mOsQnVy5j1TfebsImI20lYElN3LmcRIQ9tV9qwUowIDAQABAoIBAH6bCkoOrV1xCcvv1gxxWnrM2JAL7qFb6f03lhDF2NUGyBEAw/+XvbtMRz0Ibz6M0ROIIHNeoAQH+YBCSZ5ZBoqgIL00b7NLwr+7zZ71OQcmvTaZmjNKHlLSMESua0E1+ws5jqToHoyPFa9aTQ2KDcQOl0CFEEqDelVCNRMsNhh4Y/X5bhR6hnQl75c0sbUlcLTqnHfVTjHc3h2CGXMfiBVE2chbjVDOWmcinO50UVDjScs00iKwPE7MaEieRsqnbrMWtBdR7M2/JGR8zKQaXUd6oitpMERuu44DwdqmkwnnEvoZIWvN6NVvsUPCfdv182yLoDoxUJO+axqGep1dnmECgYEA53HPBGekQZSy9BOP11y/g6wnlNYnFfxcrRnlt++9y3oQLyvGPAG6OIk/f69aDP87Oye2foOEc/wMXpYKtM24w8Bmn1YRQlMXnoo22LUHc8p5s7KbgNXi6UK5yaAAGbdDicrXBw3TJulSSy8Pff14AiKshahUJyapbZeBbdxHe2UCgYEA5N6gEE2ylobCgAGz/Y89XdFsN2Ez+F7jEYfBf4jPonkUGry7LDM46mEduF9pvivEWcTh/nGWrFCaVfzYKhV1q+F0y+hCbLuRO3YpCP4uB9BpwVklKST79kze9jZKAOgvticU9d5M7OU+IqovmKVwh6mqyw+qYzk4iNlwHadGQ2cCgYEAkICYNjHXdjK3QHjuOBJqaHWWCPFkWe/ElTc0HBGNOHuvmyQDkvepIx9eDASZfr/kZVy4LmlCy3+04WFgsd4329BGwnjkMbrbZlr5P3hXfM4QCkgbmubv05+bi+1f4q5vdpq0gmz5RrQqc1Kgo5Mb2Il5mcGtOPyEkC4l20fLQZkCgYAAmcT5xfpuArSH+XkrdTDICkCqdIraYAVgimarmwRQfNjcqRokp43Cr7aQQU/Zu+usAKRHMq0ejqeZCizXD29boB/aWSWze1qKOWkqKOCeDKH6a+15CivPHayIIORY1EMryzZ23rp89K0REjlFwUlmUb+tAMGFuSS41zlAGqxIiQKBgEXu4NyecfEQ2LVZTCeTU2uGHVdLRnXms5hfQh8FFLl2hjJMlsP2Db3P+oRmh49SfUWSoKRI0s0fu1qwJ8JOolvaAP0JTGl8o63vyGzNI/i0qZflwO8BJNLBgsYMHtoKf5xkAazhfytwDSSTp3qWtXcp6Kw9XiEYjOi8jJAXX07L",
//异步通知地址
'notify_url' => "http://www.sxqibo.com/demo/alipay.trade.page.pay-PHP-UTF-8/notify_url.php",
//同步跳转
'return_url' => "http://www.sxqibo.com/demo/alipay.trade.page.pay-PHP-UTF-8/return_url.php",
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type'=>"RSA2",
//支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhLaUQEpBDnaDfwxpVT3PyM+nkNVozOZvIrK+tGyH0y27EBFsDi/Lqb/Dp7iYJkywFRvITVl/CTF+G8Twz9MjGh/I4LjhaexZMHKXcRr3TfJJNE+ND2uWYN0zRwcUdMeVKd59aBDNBX3ubyDgXxTZeCIAGbfDzpqTwBfYnhmI10NJYgQKay1dCgheBZM9xY5CBaYeDhPAlnWk77DGLRlTXjlaYDKVNqwx8gnMK1Xezfl2g6wAF2cNIotq+kPnwJkEflMCGMvJAe8+Fgi2hNC0tzALgBpB3j6WGVh9H2lfHlI2AxKA8lIAh+bNJWsdOcPvEsC/+xoCn3jMyGi3BuSMgwIDAQAB",
];
在对应的控制器中,创建方法如下:
class Alipay{
public function index()
{
dump(config());exit;
}
}
确保我们根据url能访问到当前方法,若在输出的内容中,能够搜索到alipay,则说明我们创建的alipay配置文件无误。
调用支付宝配置 config('alipay');
四、关键函数文件
位置:application/index/common.php
关键性函数文件:
<?php
// +----------------------------------------------------------------------
// | NewThink [ Think More,Think Better! ]
// +----------------------------------------------------------------------
//生成唯一订单号
function build_order_no(){
return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
}
/**
* 支付宝 电脑网站支付
* @auhor hongweizhiyuan
* @param $out_trade_no 商户订单号
* @param $subject 订单名称
* @param $total_amount 订单金额
* @param $body 商品描述
* @example alipayPagepay('201791711599526','商品标题','0.01','商品描述');
*/
function alipayPagepay($out_trade_no,$subject,$total_amount,$body)
{
//step1:获取配置
import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
$config=config('alipay');
$aop=new AlipayTradeService($config);
//step2:加载表单,构造参数
import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradePagePayContentBuilder',EXTEND_PATH,'.php'); // 支付宝电脑网站支付
$payRequestBuilder = new AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
//step3:创建支付
$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
//输出表单
var_dump($response);
}
/**
* 支付宝 电脑网站 交易查询
* @param $WIDTQout_trade_no 商户订单号,商户网站订单系统中唯一订单号(请二选一设置)
* @param $WIDTQtrade_no 支付宝交易号(请二选一设置)
*/
function alipayQuery($WIDTQout_trade_no,$WIDTQtrade_no)
{
//step1:获取配置
import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
$config=config('alipay');
$aop = new AlipayTradeService($config);
//step2:加载表单,构造参数
import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradeQueryContentBuilder',EXTEND_PATH,'.php'); // 支付宝电脑网站支付查询接口
$RequestBuilder = new AlipayTradeQueryContentBuilder();
$RequestBuilder->setOutTradeNo($WIDTQout_trade_no);
$RequestBuilder->setTradeNo($WIDTQtrade_no);
/**
* alipay.trade.query (统一收单线下交易查询)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
$response = $aop->Query($RequestBuilder);
var_dump($response);
}
/**
* 支付宝 电脑网站 退款
* @param $out_trade_no 商户订单号,商户网站订单系统中唯一订单号(请二选一设置)
* @param $trade_no 支付宝交易号(请二选一设置)
* @param $refund_amount 需要退款的金额,该金额不能大于订单金额,必填
* @param $refund_reason 退款的原因说明
* @param $out_request_no 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
*/
function alipayRefund($out_trade_no,$trade_no,$refund_amount,$refund_reason,$out_request_no)
{
//step1:获取配置
import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
$config=config('alipay');
$aop = new AlipayTradeService($config);
//step2:加载表单,构造参数
import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradeRefundContentBuilder',EXTEND_PATH,'.php'); // 支付宝电脑网站支付退款接口
$RequestBuilder=new AlipayTradeRefundContentBuilder();
$RequestBuilder->setOutTradeNo($out_trade_no);
$RequestBuilder->setTradeNo($trade_no);
$RequestBuilder->setRefundAmount($refund_amount);
$RequestBuilder->setOutRequestNo($out_request_no);
$RequestBuilder->setRefundReason($refund_reason);
/**
* alipay.trade.refund (统一收单交易退款接口)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
$response = $aop->Refund($RequestBuilder);
var_dump($response);;
}
/**
* 支付宝 电脑网站 退款查询
* @param $out_trade_no 商户订单号,商户网站订单系统中唯一订单号(请二选一设置)
* @param $trade_no 支付宝交易号(请二选一设置)
* @param $out_request_no 请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号,必填
*/
function alipayRefundQuery($out_trade_no,$trade_no,$out_request_no)
{
//step1:获取配置
import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
$config=config('alipay');
$aop = new AlipayTradeService($config);
//step2:加载表单,构造参数
import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradeFastpayRefundQueryContentBuilder',EXTEND_PATH,'.php'); // 支付宝电脑网站 统一收单交易退款查询
$RequestBuilder=new AlipayTradeFastpayRefundQueryContentBuilder();
$RequestBuilder->setOutTradeNo($out_trade_no);
$RequestBuilder->setTradeNo($trade_no);
$RequestBuilder->setOutRequestNo($out_request_no);
/**
* 退款查询 alipay.trade.fastpay.refund.query (统一收单交易退款查询)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
$response = $aop->refundQuery($RequestBuilder);
var_dump($response);
}
/**
* 支付宝 电脑网站 交易关闭
* @param $out_trade_no 商户订单号,商户网站订单系统中唯一订单号(请二选一设置)
* @param $trade_no 支付宝交易号(请二选一设置)
*/
function alipayClose($out_trade_no,$trade_no)
{
//step1:获取配置
import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
$config=C('ALIPAY_CONFIG');
$aop = new AlipayTradeService($config);
//step2:加载表单,构造参数
import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradeCloseContentBuilder',EXTEND_PATH,'.php'); // 支付宝电脑网站 统一收单交易关闭接口
$RequestBuilder=new AlipayTradeCloseContentBuilder();
$RequestBuilder->setOutTradeNo($out_trade_no);
$RequestBuilder->setTradeNo($trade_no);
/**
* alipay.trade.close (统一收单交易关闭接口)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
$response = $aop->Close($RequestBuilder);
var_dump($response);
}
https://www.kancloud.cn/hongweizhiyuan/thinkphp5-alipay/405842