懒人——支付宝app支付

294 阅读2分钟

在这里插入图片描述

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';

其他的importureinclude
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();
        }