1、创建应用
- 在【功能信息】中点击【添加功能】,选择【电脑网站支付】
- 提交审核,等待审核通过
2、 配置秘钥(密钥生成工具下载链接:https://docs.open.alipay.com/291/105971)
- 生成应用公钥和应用私钥,然后在 开放平台管理中心 进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。
3、 进入相应的应用详情中,点击应用信息,修改开发设置中的应用网关和授权回调地址
应用网关:用于接收支付宝异步通知
授权回调地址:第三方授权或用户信息授权后回调地址
如果是普通支付类接口调用不需要配置这两个参数的
单纯的支付接口是不需要配置这两个信息的,简单来说就是:应用网关是用于接收口碑或是生活号的信息的,授权回调地址是第三方授权或是用户信息授权使用的,如果用不到是可以不配置的! ( PS: 这是网上查看的,不确定哈,反正我是配置了,有大佬知道的话下面回复一下可以吗 >_< )
4、 下载开放平台服务端SDK( 下载链接:https://docs.open.alipay.com/270/106291/)
5、 下载之后将文件夹更名为 alipay ( 看你心情做这一步 )
6、 丢到extend文件夹下面(不知道路径的 看下图)
7、填写config.php文件里面的参数(上图中的config文件)
- "notify_url" =>(支付宝异步通知,这个页面是支付宝服务器端自动调用这个页面的链接地址,这个页面根据支付宝反馈过来的信息修改网站的订单状态,更新完成后需要返回一个success给支付宝,不能含有任何其它的字符包括html语言)
- “return_url” => (买家付款成功后,会跳到 return_url所在的页面,这个页面可以展示给客户看,这个页面只有付款成功才会跳转,并且只跳转一次)
- 这两个地址要能直接访问到
8、 调用支付宝支付接口的时候需要至少3个参数(商户订单号要确保唯一性;订单名称;付款金额)
示例代码如下:
//创建支付订单
public function create_order(){
//业务逻辑自己写
//支付宝支付
$alipay = $this->alipay($order_number,$title,$money,$description);
$res['url'] = $alipay;
echo json_encode($res);exit;
//前端获取到这个URL跳转一下这个链接 window.location.href = ret.url
}
//支付宝支付
public function alipay($order_number,$title,$money,$description){
//需要引入这三个文件
require_once EXTEND_PATH.'alipay/config.php';
require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';
require_once EXTEND_PATH.'alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = trim($order_number);
//订单名称,必填
$subject = trim($title);
//付款金额,必填
$total_amount = trim($money);
//商品描述,可空
$body = trim($description);
//构造参数
$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($config);
/**
* pagePay 电脑网站支付请求
* @param $builder //业务参数,使用buildmodel中的对象生成。
* @param $return_url //同步跳转地址,公网可以访问
* @param $notify_url //异步通知地址,公网可以访问
* @return $response 支付宝返回的信息
*/
$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
return $response;
}
//config.php里配置的异步通知地址
function notifyurl(){
//引入这两个文件
require_once EXTEND_PATH.'alipay/config.php';
require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';
$arr=$_POST;
$alipaySevice = new \AlipayTradeService($config);
$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);
/* 实际验证过程建议商户添加以下校验。
1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
4、验证app_id是否为该商户本身。
*/
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') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
}
else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//付款完成后,支付宝系统发送该交易状态通知
}
//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
echo "success"; //请不要修改或删除
}else {
//验证失败
echo "fail";
}
}
//页面跳转处理方法
function returnurl(){
//引入这两个文件
require_once EXTEND_PATH.'alipay/config.php';
require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';
$arr=$_GET;
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($arr);
/* 实际验证过程建议商户添加以下校验。
1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
4、验证app_id是否为该商户本身。
*/
if($result) {//验证成功
//请根据您的业务逻辑来编写程序(已下代码仅为参考)
//商户订单号
$out_trade_no = htmlspecialchars($_GET['out_trade_no']);
//支付宝交易号
$trade_no = htmlspecialchars($_GET['trade_no']);
echo "验证成功<br />支付宝交易号:".$trade_no;
}else {
//验证失败
echo "验证失败";
}
}
(PS:第一次接电脑网站支付宝支付, 这个接口($response = $aop->pagePay() )就是生成请求字符串或是form表单来提交到页面发起支付的 如果是form表单就是提交到页面会唤起支付 如果生成请求链接 就需要提交到页面访问链接唤起支付。本来 var_dump($response); 应该可以直接唤起支付的, 但是不知道是什么原因,网页不跳转,所以就用这样的方式让前台跳转URL 。 希望有大佬可以指点一下!万分感谢!)