支付宝APP支付申请配置过程详解:https://blog.csdn.net/Zhihua_W/article/details/80029494
关闭框架的csrf防护!!!!!
1、将demo放到extensions目录下;
2、在extensions下创建alipay.php 文件内容如下:
<?php
/**
* Created by PhpStorm.
* User: tanjianwei
* Date: 18/3/27
* Time: 下午3:07
* 支付宝即时到账
*/
namespace app\extensions;
/**
* 引用支付宝核心类
*/
require_once dirname(__dir__) . DIRECTORY_SEPARATOR.'extensions/alipay.trade.page.pay-PHP-UTF-8/pagepay/service/AlipayTradeService.php';
require_once dirname(__dir__) . DIRECTORY_SEPARATOR.'extensions/alipay.trade.page.pay-PHP-UTF-8/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
// 退款类
require_once dirname(__dir__) . DIRECTORY_SEPARATOR.'extensions/alipay.trade.page.pay-PHP-UTF-8/pagepay/buildermodel/AlipayTradeRefundContentBuilder.php';
class Alipay {
private $app_id;
private $merchant_private_key;
private $notify_url;
private $return_url;
private $charset;
private $sign_type;
private $gatewayUrl;
private $alipay_public_key;
function __construct()
{
//应用ID,您的APPID。
$this->app_id = "",
//商户私钥
$this->merchant_private_key = "",
//异步通知地址
$this->notify_url = "http://外网可访问网关地址/alipay.trade.page.pay-PHP-UTF-8/notify_url.php",
//同步跳转
$this->return_url = "http://外网可访问网关地址/alipay.trade.page.pay-PHP-UTF-8/return_url.php",
//编码格式
$this->charset = "UTF-8",
//签名方式
$this->sign_type = "RSA2",
//支付宝网关
$this->gatewayUrl = "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
$this->alipay_public_key = "",
}
function alipay_config()
{
$config = array (
//应用ID,您的APPID。
'app_id' => $this->app_id,
//商户私钥
'merchant_private_key' => $this->merchant_private_key,
//异步通知地址
'notify_url' => $this->notify_url,
//同步跳转
'return_url' => $this->return_url,
//编码格式
'charset' => $this->charset,
//签名方式
'sign_type'=>$this->sign_type,
//支付宝网关
'gatewayUrl' => $this->gatewayUrl,
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => $this->alipay_public_key
);
return $config;
}
/*
* 支付宝支付方法
* @param $out_trade_no 网站订单号
* @param $subjuect 订单名称
* @param $total_amount 支付金额,
* @param $body 商品描述
*
* @return 跳转到支付宝支付页面
*
*/
function trade($out_trade_no,$subjuect,$total_amount,$body='')
{
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = trim($out_trade_no);
//订单名称,必填
$subject = trim($subjuect);
//付款金额,必填
$total_amount = trim($total_amount);
// $total_amount = trim(0.01);
//商品描述,可空
$body = trim($body);
$config = $this->alipay_config();
//构造参数
$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']);
}
/*
* 支付宝退款方法
* @param $trade_no 支付宝交易号
* @param $refund_amount 需要退款的金额
* @param $refund_reason 退款原因
* @param $out_request_no 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
* @return 跳转到支付宝支付页面
*
*/
function refund($trade_no,$refund_amount,$refund_reason='',$out_request_no)
{
//支付宝交易号
$trade_no = trim($trade_no);
//需要退款的金额,该金额不能大于订单金额,必填
$refund_amount = trim($refund_amount);
//退款的原因说明
$refund_reason = trim($refund_reason);
//标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
$out_request_no = trim($out_request_no);
$config = $this->alipay_config();
//构造参数
$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);
$aop = new \AlipayTradeService($config);
/**
* alipay.trade.refund (统一收单交易退款接口)
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @return $response 支付宝返回的信息
*/
$response = $aop->Refund($RequestBuilder);
}
}
在控制器调用附件中trade方法实现支付宝支付
支付宝异步处理: