关闭框架的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方法实现支付宝支付
支付宝异步处理: