1、下载、放置的第三方类库目录下、thinkphp放在vendor下
github.com/alipay/alip…
2、引用AopClient和AlipayTradeAppPayRequest,引用方式有很多,下面用了其中一种
require_once 'vendor/ali/aop/AopClient.php';
require_once 'vendor/ali/aop/request/AlipayTradeAppPayRequest.php';
其他的import、ure、include等
3、下面懒人支付代码
header("Content-type:text/html;charset=utf-8");
require_once 'vendor/ali/aop/AopClient.php';
require_once 'vendor/ali/aop/request/AlipayTradeAppPayRequest.php';
$aop = new \AopClient;
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = "2021002134693554";
$aop->rsaPrivateKey = '密钥';
$aop->alipayrsaPublicKey = '支付宝公钥';
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new \AlipayTradeAppPayRequest();
$arr = [
"body"=>$params['body'],
"subject"=>$params['body'],
"out_trade_no"=>$params['out_trade_no'],
"timeout_express"=>"30m",
"total_amount"=> $params['total_fee'] ,
"product_code"=>"QUICK_MSECURITY_PAY"
];
$bizcontent = json_encode($arr);
$request->setNotifyUrl($this->notify_url);
$request->setBizContent($bizcontent);
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有
return htmlspecialchars($response);die;
4、懒人回调
require_once 'vendor/ali/aop/AopClient.php';
$aop = new \AopClient();
$aop->alipayrsaPublicKey = '支付宝公钥';
//验证签名
$result = $aop->rsaCheckV1($_POST,NULL,"RSA2"); // $_POST['sign_type']
if($result=='true'){
//1、签名验证通过后需做以下操作,所有操作全部判定成功后才视为支付成功。
//1-1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
//1-2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
//1-3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);
//1-4、验证app_id是否为该商户本身。
//2、判断返回状态,并根据返回状态做相应处理,
//2-1、状态TRADE_SUCCESS的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功;
//2-2、状态TRADE_FINISHED的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功;或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限。
if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') {
//处理更新订单状态等相关逻辑
$transaction_id = $_POST['trade_no']; //支付宝的订单编号
$out_trade_no = $_POST['out_trade_no']; //我系统中的编号
$total_fee = $_POST['total_amount']; // 支付价格
//业务处理
}
}else{
//验签失败
echo 'fail';
exit();
}